This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "IPFire 2.x development tree".
The branch, thirteen has been updated via 11a2fa057198466db44225308633c2a732fd4258 (commit) via 20010a5aab03e649f7dc3de1245cae2514a88e15 (commit) via 5854114015c146c37031f9ec23ae32237275d6f7 (commit) via c68e8b99df1839f664012ebc373118928a1fc727 (commit) via c4e286993816469c9e936d2b8ac4e7cbe95df92a (commit) via 9258abb7869443931b29685e68e78dabe301653d (commit) via d39c3435b01da51d3d5e58d6d8d2cbd7cb2cdc51 (commit) via c611233b40ed3a712eda671b412226af35b461fa (commit) via b66eb296d182324c7b0f8fb7d3fa952cc42af16b (commit) from 1d3d1bbc2b7ce6da767069ec90fd5d382fa6fd4f (commit)
Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below.
- Log ----------------------------------------------------------------- commit 11a2fa057198466db44225308633c2a732fd4258 Author: Michael Tremer michael.tremer@ipfire.org Date: Sun Nov 11 19:12:29 2012 +0100
ppp: Package ignored CFLAGS.
commit 20010a5aab03e649f7dc3de1245cae2514a88e15 Author: Michael Tremer michael.tremer@ipfire.org Date: Thu Nov 8 17:59:08 2012 +0100
ppp: Fix building PPPoE stuff with new headers.
commit 5854114015c146c37031f9ec23ae32237275d6f7 Author: Michael Tremer michael.tremer@ipfire.org Date: Thu Nov 8 23:56:34 2012 +0100
Fix building e1000, e1000e and igb.
commit c68e8b99df1839f664012ebc373118928a1fc727 Author: Michael Tremer michael.tremer@ipfire.org Date: Tue Nov 6 22:43:45 2012 +0100
collected: Update to 4.10.7.
commit c4e286993816469c9e936d2b8ac4e7cbe95df92a Author: Michael Tremer michael.tremer@ipfire.org Date: Tue Nov 6 22:39:54 2012 +0100
sysvinit: Update to 2.88.
Did not build with too old kernel headers.
commit 9258abb7869443931b29685e68e78dabe301653d Author: Michael Tremer michael.tremer@ipfire.org Date: Tue Nov 6 22:41:09 2012 +0100
ebtables: Update to 2.0.10-4.
commit d39c3435b01da51d3d5e58d6d8d2cbd7cb2cdc51 Author: Michael Tremer michael.tremer@ipfire.org Date: Tue Nov 6 22:42:53 2012 +0100
iptables: Install pkg-config files to right directory.
commit c611233b40ed3a712eda671b412226af35b461fa Author: Michael Tremer michael.tremer@ipfire.org Date: Sun Nov 11 18:52:07 2012 +0100
Remove mc alias (which disabled UTF-8).
commit b66eb296d182324c7b0f8fb7d3fa952cc42af16b Author: Michael Tremer michael.tremer@ipfire.org Date: Sun Nov 11 18:51:17 2012 +0100
grub: Replace patches to have grub-set-default again.
-----------------------------------------------------------------------
Summary of changes: config/etc/bashrc | 5 - config/rootfiles/common/i586/grub | 33 +- config/rootfiles/common/iptables | 27 +- config/rootfiles/common/sysvinit | 3 + config/rootfiles/packages/ebtables | 2 + lfs/collectd | 6 +- lfs/e1000 | 3 +- lfs/e1000e | 3 +- lfs/ebtables | 7 +- lfs/grub | 7 +- lfs/igb | 3 +- lfs/iptables | 3 +- lfs/ppp | 6 +- lfs/sysvinit | 11 +- src/patches/grub-fedora-18.patch |48870 ------------------------------------ src/patches/grub-gentoo-14.patch |16087 ++++++++++++ 16 files changed, 16136 insertions(+), 48940 deletions(-) delete mode 100644 src/patches/grub-fedora-18.patch create mode 100644 src/patches/grub-gentoo-14.patch
Difference in files: diff --git a/config/etc/bashrc b/config/etc/bashrc index e35209f..fb0c31e 100644 --- a/config/etc/bashrc +++ b/config/etc/bashrc @@ -29,11 +29,6 @@ alias mv='mv -i' alias rm='rm -i' alias cp='cp -i'
-# Midnight Commander isn't compatible to UTF8. -# So we use it in ACSII-Mode. - -alias mc='mc -a' - # Provides prompt for non-login shells, specifically shells started # in the X environment. [Review the LFS archive thread titled # PS1 Environment Variable for a great case study behind this script diff --git a/config/rootfiles/common/i586/grub b/config/rootfiles/common/i586/grub index 341d773..43084f7 100644 --- a/config/rootfiles/common/i586/grub +++ b/config/rootfiles/common/i586/grub @@ -4,30 +4,29 @@ boot/grub/ipfire.xpm.gz boot/grub/stage1 boot/grub/stage2 #usr/bin/mbchk +usr/lib/grub +#usr/lib/grub/i386-pc +#usr/lib/grub/i386-pc/e2fs_stage1_5 +#usr/lib/grub/i386-pc/fat_stage1_5 +#usr/lib/grub/i386-pc/ffs_stage1_5 +#usr/lib/grub/i386-pc/iso9660_stage1_5 +#usr/lib/grub/i386-pc/jfs_stage1_5 +#usr/lib/grub/i386-pc/minix_stage1_5 +#usr/lib/grub/i386-pc/reiserfs_stage1_5 +#usr/lib/grub/i386-pc/stage1 +#usr/lib/grub/i386-pc/stage2 +#usr/lib/grub/i386-pc/stage2_eltorito +#usr/lib/grub/i386-pc/ufs2_stage1_5 +#usr/lib/grub/i386-pc/vstafs_stage1_5 +#usr/lib/grub/i386-pc/xfs_stage1_5 usr/sbin/grub -usr/sbin/grub-crypt usr/sbin/grub-install usr/sbin/grub-md5-crypt +usr/sbin/grub-set-default usr/sbin/grub-terminfo -usr/share/grub -#usr/share/grub/i386-pc -#usr/share/grub/i386-pc/e2fs_stage1_5 -#usr/share/grub/i386-pc/fat_stage1_5 -#usr/share/grub/i386-pc/ffs_stage1_5 -#usr/share/grub/i386-pc/iso9660_stage1_5 -#usr/share/grub/i386-pc/jfs_stage1_5 -#usr/share/grub/i386-pc/minix_stage1_5 -#usr/share/grub/i386-pc/reiserfs_stage1_5 -#usr/share/grub/i386-pc/stage1 -#usr/share/grub/i386-pc/stage2 -#usr/share/grub/i386-pc/stage2_eltorito -#usr/share/grub/i386-pc/ufs2_stage1_5 -#usr/share/grub/i386-pc/vstafs_stage1_5 -#usr/share/grub/i386-pc/xfs_stage1_5 #usr/share/info/grub.info #usr/share/info/multiboot.info #usr/share/man/man1/mbchk.1 -#usr/share/man/man8/grub-crypt.8 #usr/share/man/man8/grub-install.8 #usr/share/man/man8/grub-md5-crypt.8 #usr/share/man/man8/grub-terminfo.8 diff --git a/config/rootfiles/common/iptables b/config/rootfiles/common/iptables index 27c67df..af034e8e 100644 --- a/config/rootfiles/common/iptables +++ b/config/rootfiles/common/iptables @@ -18,12 +18,6 @@ lib/libiptc.so.0.0.0 lib/libxtables.so lib/libxtables.so.7 lib/libxtables.so.7.0.0 -#lib/pkgconfig -#lib/pkgconfig/libip4tc.pc -#lib/pkgconfig/libip6tc.pc -#lib/pkgconfig/libipq.pc -#lib/pkgconfig/libiptc.pc -#lib/pkgconfig/xtables.pc lib/xtables #lib/xtables/libip6t_HL.so #lib/xtables/libip6t_LOG.so @@ -155,14 +149,9 @@ sbin/xtables-multi #usr/include/libnfnetlink/linux_nfnetlink.h #usr/include/libnfnetlink/linux_nfnetlink_compat.h #usr/include/linux/netfilter/Kbuild -#usr/include/linux/netfilter/ipset #usr/include/linux/netfilter/ipset/Kbuild -#usr/include/linux/netfilter/ipset/ip_set.h #usr/include/linux/netfilter/ipset/ip_set_ahash.h -#usr/include/linux/netfilter/ipset/ip_set_bitmap.h #usr/include/linux/netfilter/ipset/ip_set_getport.h -#usr/include/linux/netfilter/ipset/ip_set_hash.h -#usr/include/linux/netfilter/ipset/ip_set_list.h #usr/include/linux/netfilter/ipset/ip_set_timeout.h #usr/include/linux/netfilter/ipset/pfxlen.h #usr/include/linux/netfilter/nf_conntrack_amanda.h @@ -177,19 +166,8 @@ sbin/xtables-multi #usr/include/linux/netfilter/nf_conntrack_sip.h #usr/include/linux/netfilter/nf_conntrack_snmp.h #usr/include/linux/netfilter/nf_conntrack_tftp.h -#usr/include/linux/netfilter/xt_AUDIT.h -#usr/include/linux/netfilter/xt_CHECKSUM.h -#usr/include/linux/netfilter/xt_CT.h -#usr/include/linux/netfilter/xt_IDLETIMER.h #usr/include/linux/netfilter/xt_IMQ.h -#usr/include/linux/netfilter/xt_TEE.h -#usr/include/linux/netfilter/xt_addrtype.h -#usr/include/linux/netfilter/xt_cpu.h -#usr/include/linux/netfilter/xt_devgroup.h -#usr/include/linux/netfilter/xt_ipvs.h #usr/include/linux/netfilter/xt_layer7.h -#usr/include/linux/netfilter/xt_set.h -#usr/include/linux/netfilter/xt_socket.h #usr/include/net/netfilter #usr/include/net/netfilter/nf_conntrack_tuple.h #usr/include/net/netfilter/nf_nat.h @@ -209,8 +187,13 @@ usr/lib/libnetfilter_queue_libipq.so.1.0.0 usr/lib/libnfnetlink.so usr/lib/libnfnetlink.so.0 usr/lib/libnfnetlink.so.0.2.0 +#usr/lib/pkgconfig/libip4tc.pc +#usr/lib/pkgconfig/libip6tc.pc +#usr/lib/pkgconfig/libipq.pc +#usr/lib/pkgconfig/libiptc.pc #usr/lib/pkgconfig/libnetfilter_queue.pc #usr/lib/pkgconfig/libnfnetlink.pc +#usr/lib/pkgconfig/xtables.pc #usr/share/man/man1/iptables-xml.1 #usr/share/man/man3/ipq_create_handle.3 #usr/share/man/man3/ipq_destroy_handle.3 diff --git a/config/rootfiles/common/sysvinit b/config/rootfiles/common/sysvinit index 8bd60ef..ede5aa5 100644 --- a/config/rootfiles/common/sysvinit +++ b/config/rootfiles/common/sysvinit @@ -1,6 +1,7 @@ bin/mountpoint bin/pidof #sbin/bootlogd +#sbin/fstab-decode sbin/halt sbin/init sbin/killall5 @@ -20,10 +21,12 @@ usr/bin/wall #usr/share/man/man1/lastb.1 #usr/share/man/man1/mesg.1 #usr/share/man/man1/mountpoint.1 +#usr/share/man/man1/utmpdump.1 #usr/share/man/man1/wall.1 #usr/share/man/man5/initscript.5 #usr/share/man/man5/inittab.5 #usr/share/man/man8/bootlogd.8 +#usr/share/man/man8/fstab-decode.8 #usr/share/man/man8/halt.8 #usr/share/man/man8/init.8 #usr/share/man/man8/killall5.8 diff --git a/config/rootfiles/packages/ebtables b/config/rootfiles/packages/ebtables index 65c346b..7e10eee 100644 --- a/config/rootfiles/packages/ebtables +++ b/config/rootfiles/packages/ebtables @@ -6,11 +6,13 @@ usr/lib/libebt_among.so usr/lib/libebt_arp.so usr/lib/libebt_arpreply.so usr/lib/libebt_ip.so +usr/lib/libebt_ip6.so usr/lib/libebt_limit.so usr/lib/libebt_log.so usr/lib/libebt_mark.so usr/lib/libebt_mark_m.so usr/lib/libebt_nat.so +usr/lib/libebt_nflog.so usr/lib/libebt_pkttype.so usr/lib/libebt_redirect.so usr/lib/libebt_standard.so diff --git a/lfs/collectd b/lfs/collectd index f17879c..3d28841 100644 --- a/lfs/collectd +++ b/lfs/collectd @@ -25,7 +25,7 @@ include Config
PKG_NAME = collectd -VER = 4.10.3 +VER = 4.10.7
THISAPP = collectd-$(VER) DL_FILE = $(THISAPP).tar.bz2 @@ -44,7 +44,7 @@ objects = $(DL_FILE)
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 5f17bfd7342af4f97f78c608f1d1eb1d +$(DL_FILE)_MD5 = f4193fdb5002ddac8159c88032a726bc
install : $(TARGET)
@@ -77,8 +77,6 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar jxf $(DIR_DL)/$(DL_FILE) - #cd $(DIR_APP) && sed -i 's|with_libiptc="no (Linux iptables header.*|with_libiptc="yes"|g' \ - # ./configure cd $(DIR_APP) && ./configure --prefix=/usr --localstatedir=/var \ --disable-{apple_sensors,csv,ipvs,mbmon,memcached,mysql} \ --disable-{netlink,nginx,nut,perl,serial,snmp,tape,vserver,xmms} \ diff --git a/lfs/e1000 b/lfs/e1000 index 25abe45..50e21fb 100644 --- a/lfs/e1000 +++ b/lfs/e1000 @@ -84,8 +84,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) -mv $(MODPATH)/e1000.ko \ $(MODPATH)/e1000.ko.org @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP)/src && make -C /lib/modules/$(KVER)-$(VERSUFIX)/build/ \ - SUBDIRS=$(DIR_APP)/src modules + cd $(DIR_APP)/src && make BUILD_KERNEL=$(KVER)-$(VERSUFIX) cd $(DIR_APP)/src && install -m 644 e1000.ko $(MODPATH) @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/lfs/e1000e b/lfs/e1000e index 42f2638..693c054 100644 --- a/lfs/e1000e +++ b/lfs/e1000e @@ -84,8 +84,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) -mv $(MODPATH)/e1000e.ko \ $(MODPATH)/e1000e.ko.org @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP)/src && make -C /lib/modules/$(KVER)-$(VERSUFIX)/build/ \ - SUBDIRS=$(DIR_APP)/src modules + cd $(DIR_APP)/src && make BUILD_KERNEL=$(KVER)-$(VERSUFIX) cd $(DIR_APP)/src && install -m 644 e1000e.ko $(MODPATH) @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/lfs/ebtables b/lfs/ebtables index e6cc69b..a7da349 100644 --- a/lfs/ebtables +++ b/lfs/ebtables @@ -24,7 +24,7 @@
include Config
-VER = 2.0.8-2 +VER = 2.0.10-4
THISAPP = ebtables-v$(VER) DL_FILE = $(THISAPP).tar.gz @@ -32,7 +32,7 @@ DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) PROG = ebtables -PAK_VER = 1 +PAK_VER = 2
DEPS = ""
@@ -44,7 +44,8 @@ objects = $(DL_FILE)
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 66bcbcb2dcf3b981ad4e86e1720e796e +$(DL_FILE)_MD5 = 506742a3d44b9925955425a659c1a8d0 + install : $(TARGET)
check : $(patsubst %,$(DIR_CHK)/%,$(objects)) diff --git a/lfs/grub b/lfs/grub index 76315fa..8d58099 100644 --- a/lfs/grub +++ b/lfs/grub @@ -75,18 +75,19 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE)
# Applying patches. - cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-fedora-18.patch + cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/grub-gentoo-14.patch cd $(DIR_APP) && autoreconf cd $(DIR_APP) && autoconf
# Build. - cd $(DIR_APP) && CFLAGS="$(CFLAGS)" ./configure --prefix=/usr + cd $(DIR_APP) && CFLAGS="$(CFLAGS)" ./configure --prefix=/usr \ + --disable-auto-linux-mem-opt cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install
# grub files mkdir -vp /boot/grub - cp -v /usr/share/grub/i386-pc/stage{1,2} /boot/grub + cp -v /usr/lib/grub/i386-pc/stage{1,2} /boot/grub for i in $(DIR_SRC)/config/grub/*; do \ [ -f $$i ] && cp -f $$i /boot/grub; \ done diff --git a/lfs/igb b/lfs/igb index 2931881..29da8bb 100644 --- a/lfs/igb +++ b/lfs/igb @@ -84,8 +84,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) -mv $(MODPATH)/igb.ko \ $(MODPATH)//igb.ko.org @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP)/src && make -C /lib/modules/$(KVER)-$(VERSUFIX)/build/ \ - SUBDIRS=$(DIR_APP)/src modules + cd $(DIR_APP)/src && make BUILD_KERNEL=$(KVER)-$(VERSUFIX) cd $(DIR_APP)/src && install -m 644 igb.ko $(MODPATH) @rm -rf $(DIR_APP) @$(POSTBUILD) diff --git a/lfs/iptables b/lfs/iptables index 33a00e4..ceb560d 100644 --- a/lfs/iptables +++ b/lfs/iptables @@ -98,7 +98,8 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) cd $(DIR_APP) && ./configure --prefix=/usr --with-ksource=/usr/src/linux \ --libdir=/lib --includedir=/usr/include --enable-libipq \ --libexecdir=/lib --bindir=/sbin \ - --sbindir=/sbin --mandir=/usr/share/man + --sbindir=/sbin --mandir=/usr/share/man \ + --with-pkgconfigdir=/usr/lib/pkgconfig cd $(DIR_APP) && make $(MAKETUNING) cd $(DIR_APP) && make install
diff --git a/lfs/ppp b/lfs/ppp index e667b1e..5d772fc 100644 --- a/lfs/ppp +++ b/lfs/ppp @@ -32,6 +32,8 @@ DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP)
+CFLAGS += -fno-strict-aliasing + ############################################################################### # Top-level Rules ############################################################################### @@ -70,7 +72,7 @@ $(subst %,%_MD5,$(objects)) : $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && rm -f include/pcap-int.h + cd $(DIR_APP) && rm -f include/pcap-int.h include/linux/if_pppol2tp.h # cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/ppp-2.4.2-pppoatm.patch # cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/ppp-2.4.2-pppoatm-persist.patch # cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/ppp-2.4.1-oedod.patch @@ -80,7 +82,7 @@ $(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) # cd $(DIR_APP) && patch -Np1 < $(DIR_SRC)/src/patches/ppp-2.4.2-close.patch cd $(DIR_APP) && sed -i -e "s+/etc/ppp/connect-errors+/var/log/connect-errors+" pppd/pathnames.h cd $(DIR_APP) && ./configure --prefix=/usr --disable-nls - cd $(DIR_APP) && make $(MAKETUNING) + cd $(DIR_APP) && make $(MAKETUNING) CC="gcc $(CFLAGS)" cd $(DIR_APP) && make install cd $(DIR_APP) && make install-etcppp touch /var/log/connect-errors diff --git a/lfs/sysvinit b/lfs/sysvinit index 3f16dd9..85864fd 100644 --- a/lfs/sysvinit +++ b/lfs/sysvinit @@ -24,10 +24,10 @@
include Config
-VER = 2.86 +VER = 2.88dsf
THISAPP = sysvinit-$(VER) -DL_FILE = $(THISAPP).tar.gz +DL_FILE = $(THISAPP).tar.bz2 DL_FROM = $(URL_IPFIRE) DIR_APP = $(DIR_SRC)/$(THISAPP) TARGET = $(DIR_INFO)/$(THISAPP) @@ -40,7 +40,7 @@ objects = $(DL_FILE)
$(DL_FILE) = $(DL_FROM)/$(DL_FILE)
-$(DL_FILE)_MD5 = 7d5d61c026122ab791ac04c8a84db967 +$(DL_FILE)_MD5 = 6eda8a97b86e0a6f59dabbf25202aa6f
install : $(TARGET)
@@ -69,10 +69,7 @@ $(subst %,%_MD5,$(objects)) :
$(TARGET) : $(patsubst %,$(DIR_DL)/%,$(objects)) @$(PREBUILD) - @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar zxf $(DIR_DL)/$(DL_FILE) - cd $(DIR_APP) && cp src/init.c{,.backup} - cd $(DIR_APP) && sed -i 's@Sending processes@& started by init@g' \ - src/init.c + @rm -rf $(DIR_APP) && cd $(DIR_SRC) && tar axf $(DIR_DL)/$(DL_FILE) cd $(DIR_APP) && make $(MAKETUNING) -C src cd $(DIR_APP) && make -C src install @rm -rf $(DIR_APP) diff --git a/src/patches/grub-fedora-18.patch b/src/patches/grub-fedora-18.patch deleted file mode 100644 index e87c180..0000000 --- a/src/patches/grub-fedora-18.patch +++ /dev/null @@ -1,48870 +0,0 @@ -From: Peter Jones pjones@redhat.com" -Date: Wed Apr 18 12:53:49 EDT 2012 -Subject: [PATCH] Changes from grub-0.97 to master - -This patch is a bundle of the changes between grub-0.97 and master. -It can be reginerated from the git repository at: - -git://github.com/vathpela/grub-fedora.git - -Using the command: - -git diff grub-0.97 master - - .gitignore | 10 - ChangeLog | 48 - Makefile.am | 7 - Makefile.in | 605 --- - acinclude.m4 | 4 - aclocal.m4 | 1061 ----- - config.h.in | 106 - configure | 7639 ----------------------------------------- - configure.in | 113 - docs/.gitignore | 3 - docs/Makefile.am | 9 - docs/Makefile.in | 770 ---- - docs/grub-crypt.8 | 39 - docs/grub-install.8 | 2 - docs/grub.8 | 2 - docs/grub.info | 370 + - docs/grub.texi | 79 - docs/stamp-vti | 4 - docs/version.texi | 4 - efi/.gitignore | 7 - efi/Makefile.am | 76 - efi/byteswap.h | 37 - efi/dhcp.h | 133 - efi/efichainloader.c | 265 + - efi/eficon.c | 306 + - efi/eficore.c | 241 + - efi/efidisk.c | 801 ++++ - efi/efidp.c | 999 +++++ - efi/efigraph.c | 1501 ++++++++ - efi/efimain.c | 129 - efi/efimisc.c | 665 +++ - efi/efimm.c | 539 ++ - efi/efiserial.c | 265 + - efi/efitftp.c | 228 + - efi/efiuga.c | 982 +++++ - efi/font_8x16.c | 4638 ++++++++++++++++++++++++ - efi/graphics.c | 666 +++ - efi/graphics.h | 81 - efi/grub/.gitignore | 1 - efi/grub/efi/api.h | 1716 +++++++++ - efi/grub/efi/console_control.h | 59 - efi/grub/efi/efi.h | 85 - efi/grub/efi/eficall.h | 162 - efi/grub/efi/misc.h | 60 - efi/grub/efi/time.h | 31 - efi/grub/i386/linux.h | 226 + - efi/grub/i386/types.h | 32 - efi/grub/misc.h | 71 - efi/grub/symbol.h | 34 - efi/grub/types.h | 158 - efi/grub/x86_64/linux.h | 234 + - efi/grub/x86_64/types.h | 32 - efi/ia32/callwrap.S | 1 - efi/ia32/callwrap.c | 131 - efi/ia32/loader/bin_to_h.c | 29 - efi/ia32/loader/linux.c | 648 +++ - efi/ia32/loader/switch.S | 118 - efi/ia32/loader/switch.h | 19 - efi/ia32/reloc.c | 79 - efi/ia32/setjmp.S | 86 - efi/pxe.c | 460 ++ - efi/pxe.h | 237 + - efi/ugadebug.h | 201 + - efi/x86_64/callwrap.S | 274 + - efi/x86_64/crt0-efi.S | 63 - efi/x86_64/elf_efi.lds | 58 - efi/x86_64/loader/Makefile | 20 - efi/x86_64/loader/bin_to_h.c | 29 - efi/x86_64/loader/linux.c | 760 ++++ - efi/x86_64/loader/switch.S | 92 - efi/x86_64/loader/switch.h | 25 - efi/x86_64/reloc.c | 79 - efi/x86_64/setjmp.S | 56 - efi/xpm.c | 231 + - efi/xpm.h | 36 - grub.spec | 438 ++ - grub/.gitignore | 2 - grub/Makefile.am | 2 - grub/Makefile.in | 445 -- - grub/asmstub.c | 194 - - grub/efitftp.c | 34 - grub/main.c | 2 - lib/.gitignore | 2 - lib/Makefile.in | 416 -- - lib/device.c | 360 + - makediff | 21 - netboot/.gitignore | 2 - netboot/Makefile.in | 1091 ----- - netboot/etherboot.h | 34 - netboot/main.c | 6 - netboot/misc.c | 58 - netboot/osdep.h | 24 - stage1/.gitignore | 2 - stage1/Makefile.am | 15 - stage1/Makefile.in | 433 -- - stage1/stage1.S | 4 - stage2/.gitignore | 5 - stage2/Makefile.am | 77 - stage2/Makefile.in | 3250 ----------------- - stage2/asm.S | 284 + - stage2/boot.c | 114 - stage2/builtins.c | 1368 +++++-- - stage2/char_io.c | 609 ++- - stage2/cmdline.c | 19 - stage2/common.c | 16 - stage2/disk_io.c | 213 - - stage2/efistubs.c | 7 - stage2/efistubs.h | 8 - stage2/fat.h | 2 - stage2/filesys.h | 28 - stage2/fsys_ext2fs.c | 394 +- - stage2/fsys_fat.c | 41 - stage2/fsys_iso9660.c | 8 - stage2/fsys_jfs.c | 12 - stage2/fsys_minix.c | 10 - stage2/fsys_reiserfs.c | 44 - stage2/fsys_uefi.c | 265 + - stage2/fsys_vstafs.c | 28 - stage2/fsys_xfs.c | 22 - stage2/gpt.h | 69 - stage2/graphics.c | 573 +++ - stage2/graphics.h | 42 - stage2/gunzip.c | 15 - stage2/iso9660.h | 4 - stage2/mb_info.h | 4 - stage2/pc_slice.h | 51 - stage2/serial.c | 4 - stage2/sha256crypt.c | 723 +++ - stage2/sha512crypt.c | 795 ++++ - stage2/shared.h | 126 - stage2/smp-imps.h | 1 - stage2/stage1_5.c | 3 - stage2/stage2.c | 203 - - stage2/start.S | 13 - stage2/term.h | 35 - stage2/tparm.c | 14 - test | 1 - util/.gitignore | 7 - util/Makefile.am | 11 - util/Makefile.in | 478 -- - util/grub-crypt.in | 80 - util/grub-install.in | 334 + - 142 files changed, 26410 insertions(+), 17652 deletions(-) - -diff --git a/.gitignore b/.gitignore -new file mode 100644 -index 0000000..3d7295a ---- /dev/null -+++ b/.gitignore -@@ -0,0 +1,10 @@ -+Makefile.in -+Makefile -+configure -+aclocal.m4 -+autom4te.cache -+config.h -+config.h.in -+config.log -+config.status -+stamp-h1 -diff --git a/ChangeLog b/ChangeLog -index 0f93033..9602fb9 100644 ---- a/ChangeLog -+++ b/ChangeLog -@@ -772,6 +772,18 @@ - DATA_LEN is less than or equal to MULTIBOOT_SEARCH. - Reported by Neelkanth Natu neelnatu@yahoo.com. - -+2003-03-12 Leonid Lisovskiy lly@pisem.net -+ -+ * lib/device.c (get_drive_geometry): grub utility didn't work -+ due to uninitialized 'sector_size' struct geometry member. -+ * stage1/stage1.h (GRUB_NO_DRIVE): Constant moved from -+ stage2/shared.h and its value rolled back to 0xFF for backward -+ compatibility with original grub. -+ * stage1/stage1.S (boot_drive): Use GRUB_NO_DRIVE instead of -+ constant. -+ * stage2/bios.c (get_diskinfo): Workaround for BIOS'es that -+ has CD-ROM drive number = last harddisk + 1. -+ - 2003-03-10 Yoshinori K. Okuji okuji@enbug.org - - From Andrew Walrond andrew@walrond.org: -@@ -816,6 +828,42 @@ - thus corrupts the stack. This is why we specify the exactly - necessary size of 0x42 bytes. - -+2003-01-28 Leonid Lisovskiy lly@pisem.net -+ -+ ISO9660 support is added. -+ -+ * stage2/fsys_iso9660.c: New file - a lot of code stolen from -+ GRUB/98 0.5. -+ * stage2/iso9660.h: Likewise. -+ * stage2/start_torito.S: New file - El Torito boot sector. -+ * stage2/Makefile.am (noinst_HEADERS): iso9660.h added. -+ (libgrub_a_SOURCES): fsys_iso9660.c added. -+ (pkgdata_DATA): iso9660_stage1_5 added. -+ (noinst_PROGRAMS): iso9660_stage1_5.exec added. -+ * configure.in (--disable-iso9660): New option. -+ * stage2/builtins.c (setup_func): Add item for ISO9660 into -+ STAGE1_5_MAP. -+ * stage2/disk_io.c (rawread): Ability to read devices with -+ sector size other than 512 added. -+ (fsys_table): Added entry for ISO9660. -+ (check_and_print_mount): Don't print error when probing -+ partition. -+ (real_open_partition): Cleanup globals after probing. -+ * stage2/filesys.h [FSYS_ISO9660]: Add entries for ISO9660 -+ functions. -+ (NUM_FSYS): Added FSYS_ISO9660_NUM. -+ * stage2/shared.h (STAGE2_ID_ISO9660_STAGE1_5): New macro. -+ (GRUB_NO_DRIVE): New constant. -+ (struct geometry): New member 'sector_size'. -+ * stage2/bios.c (get_diskinfo): Request 1.xx version of -+ int13 extensions only since higher version request can -+ destroy El Torito emulation on some BIOS'es. -+ (get_cdinfo): New function - get El Torito emulation parameters. -+ * stage2/asm.S (biosdisk_int13_extensions): pass AX, instead -+ of AH for universality, save EBX,ECX,EDX registers content to -+ avoid data corruption in caller functions. -+ (get_diskinfo_int13_extensions): Removed. -+ - 2003-01-25 Yoshinori K. Okuji okuji@enbug.org - - From Steven Dick ssd.gnu@mmae.ucf.edu: -diff --git a/Makefile.am b/Makefile.am -index 63a9a4f..9bde872 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -1,4 +1,9 @@ - # Do not change this order if you don't know what you are doing. - AUTOMAKE_OPTIONS = 1.7 gnu --SUBDIRS = netboot stage2 stage1 lib grub util docs -+SUBDIRS = netboot stage2 stage1 lib util docs -+if PLATFORM_EFI -+SUBDIRS += efi -+else -+SUBDIRS += grub -+endif - EXTRA_DIST = BUGS MAINTENANCE -diff --git a/Makefile.in b/Makefile.in -deleted file mode 100644 -index 6652366..0000000 ---- a/Makefile.in -+++ /dev/null -@@ -1,605 +0,0 @@ --# Makefile.in generated by automake 1.9.4 from Makefile.am. --# @configure_input@ -- --# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004 Free Software Foundation, Inc. --# This Makefile.in is free software; the Free Software Foundation --# gives unlimited permission to copy and/or distribute it, --# with or without modifications, as long as this notice is preserved. -- --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY, to the extent permitted by law; without --# even the implied warranty of MERCHANTABILITY or FITNESS FOR A --# PARTICULAR PURPOSE. -- --@SET_MAKE@ --srcdir = @srcdir@ --top_srcdir = @top_srcdir@ --VPATH = @srcdir@ --pkgdatadir = $(datadir)/@PACKAGE@ --pkglibdir = $(libdir)/@PACKAGE@ --pkgincludedir = $(includedir)/@PACKAGE@ --top_builddir = . --am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd --INSTALL = @INSTALL@ --install_sh_DATA = $(install_sh) -c -m 644 --install_sh_PROGRAM = $(install_sh) -c --install_sh_SCRIPT = $(install_sh) -c --INSTALL_HEADER = $(INSTALL_DATA) --transform = $(program_transform_name) --NORMAL_INSTALL = : --PRE_INSTALL = : --POST_INSTALL = : --NORMAL_UNINSTALL = : --PRE_UNINSTALL = : --POST_UNINSTALL = : --build_triplet = @build@ --host_triplet = @host@ --DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ -- $(srcdir)/Makefile.in $(srcdir)/config.h.in \ -- $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \ -- THANKS TODO compile config.guess config.sub depcomp install-sh \ -- missing mkinstalldirs --subdir = . --ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 --am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ -- $(top_srcdir)/configure.ac --am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ -- $(ACLOCAL_M4) --am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ -- configure.lineno configure.status.lineno --mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs --CONFIG_HEADER = config.h --CONFIG_CLEAN_FILES = --SOURCES = --DIST_SOURCES = --RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ -- html-recursive info-recursive install-data-recursive \ -- install-exec-recursive install-info-recursive \ -- install-recursive installcheck-recursive installdirs-recursive \ -- pdf-recursive ps-recursive uninstall-info-recursive \ -- uninstall-recursive --ETAGS = etags --CTAGS = ctags --DIST_SUBDIRS = $(SUBDIRS) --DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) --distdir = $(PACKAGE)-$(VERSION) --top_distdir = $(distdir) --am__remove_distdir = \ -- { test ! -d $(distdir) \ -- || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \ -- && rm -fr $(distdir); }; } --DIST_ARCHIVES = $(distdir).tar.gz --GZIP_ENV = --best --distuninstallcheck_listfiles = find . -type f -print --distcleancheck_listfiles = find . -type f -print --ACLOCAL = @ACLOCAL@ --AMDEP_FALSE = @AMDEP_FALSE@ --AMDEP_TRUE = @AMDEP_TRUE@ --AMTAR = @AMTAR@ --AUTOCONF = @AUTOCONF@ --AUTOHEADER = @AUTOHEADER@ --AUTOMAKE = @AUTOMAKE@ --AWK = @AWK@ --BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ --BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ --CC = @CC@ --CCAS = @CCAS@ --CCASFLAGS = @CCASFLAGS@ --CCDEPMODE = @CCDEPMODE@ --CFLAGS = @CFLAGS@ --CPP = @CPP@ --CPPFLAGS = @CPPFLAGS@ --CYGPATH_W = @CYGPATH_W@ --DEFS = @DEFS@ --DEPDIR = @DEPDIR@ --DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ --DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ --ECHO_C = @ECHO_C@ --ECHO_N = @ECHO_N@ --ECHO_T = @ECHO_T@ --EGREP = @EGREP@ --EXEEXT = @EXEEXT@ --FSYS_CFLAGS = @FSYS_CFLAGS@ --GRUB_CFLAGS = @GRUB_CFLAGS@ --GRUB_LIBS = @GRUB_LIBS@ --HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ --HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ --INSTALL_DATA = @INSTALL_DATA@ --INSTALL_PROGRAM = @INSTALL_PROGRAM@ --INSTALL_SCRIPT = @INSTALL_SCRIPT@ --INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ --LDFLAGS = @LDFLAGS@ --LIBOBJS = @LIBOBJS@ --LIBS = @LIBS@ --LTLIBOBJS = @LTLIBOBJS@ --MAINT = @MAINT@ --MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ --MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ --MAKEINFO = @MAKEINFO@ --NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ --NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ --NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ --NET_CFLAGS = @NET_CFLAGS@ --NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ --OBJCOPY = @OBJCOPY@ --OBJEXT = @OBJEXT@ --PACKAGE = @PACKAGE@ --PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ --PACKAGE_NAME = @PACKAGE_NAME@ --PACKAGE_STRING = @PACKAGE_STRING@ --PACKAGE_TARNAME = @PACKAGE_TARNAME@ --PACKAGE_VERSION = @PACKAGE_VERSION@ --PATH_SEPARATOR = @PATH_SEPARATOR@ --PERL = @PERL@ --RANLIB = @RANLIB@ --SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ --SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ --SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ --SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ --SET_MAKE = @SET_MAKE@ --SHELL = @SHELL@ --STAGE1_CFLAGS = @STAGE1_CFLAGS@ --STAGE2_CFLAGS = @STAGE2_CFLAGS@ --STRIP = @STRIP@ --VERSION = @VERSION@ --ac_ct_CC = @ac_ct_CC@ --ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ --ac_ct_RANLIB = @ac_ct_RANLIB@ --ac_ct_STRIP = @ac_ct_STRIP@ --am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ --am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ --am__include = @am__include@ --am__leading_dot = @am__leading_dot@ --am__quote = @am__quote@ --am__tar = @am__tar@ --am__untar = @am__untar@ --bindir = @bindir@ --build = @build@ --build_alias = @build_alias@ --build_cpu = @build_cpu@ --build_os = @build_os@ --build_vendor = @build_vendor@ --datadir = @datadir@ --exec_prefix = @exec_prefix@ --host = @host@ --host_alias = @host_alias@ --host_cpu = @host_cpu@ --host_os = @host_os@ --host_vendor = @host_vendor@ --includedir = @includedir@ --infodir = @infodir@ --install_sh = @install_sh@ --libdir = @libdir@ --libexecdir = @libexecdir@ --localstatedir = @localstatedir@ --mandir = @mandir@ --mkdir_p = @mkdir_p@ --oldincludedir = @oldincludedir@ --prefix = @prefix@ --program_transform_name = @program_transform_name@ --sbindir = @sbindir@ --sharedstatedir = @sharedstatedir@ --sysconfdir = @sysconfdir@ --target_alias = @target_alias@ -- --# Do not change this order if you don't know what you are doing. --AUTOMAKE_OPTIONS = 1.7 gnu --SUBDIRS = netboot stage2 stage1 lib grub util docs --EXTRA_DIST = BUGS MAINTENANCE --all: config.h -- $(MAKE) $(AM_MAKEFLAGS) all-recursive -- --.SUFFIXES: --am--refresh: -- @: --$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) -- @for dep in $?; do \ -- case '$(am__configure_deps)' in \ -- *$$dep*) \ -- echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \ -- cd $(srcdir) && $(AUTOMAKE) --gnu \ -- && exit 0; \ -- exit 1;; \ -- esac; \ -- done; \ -- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ -- cd $(top_srcdir) && \ -- $(AUTOMAKE) --gnu Makefile --.PRECIOUS: Makefile --Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -- @case '$?' in \ -- *config.status*) \ -- echo ' $(SHELL) ./config.status'; \ -- $(SHELL) ./config.status;; \ -- *) \ -- echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ -- cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ -- esac; -- --$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) -- $(SHELL) ./config.status --recheck -- --$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) -- cd $(srcdir) && $(AUTOCONF) --$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) -- cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) -- --config.h: stamp-h1 -- @if test ! -f $@; then \ -- rm -f stamp-h1; \ -- $(MAKE) stamp-h1; \ -- else :; fi -- --stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status -- @rm -f stamp-h1 -- cd $(top_builddir) && $(SHELL) ./config.status config.h --$(srcdir)/config.h.in: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) -- cd $(top_srcdir) && $(AUTOHEADER) -- rm -f stamp-h1 -- touch $@ -- --distclean-hdr: -- -rm -f config.h stamp-h1 --uninstall-info-am: -- --# This directory's subdirectories are mostly independent; you can cd --# into them and run `make' without going through this Makefile. --# To change the values of `make' variables: instead of editing Makefiles, --# (1) if the variable is set in `config.status', edit `config.status' --# (which will cause the Makefiles to be regenerated when you run `make'); --# (2) otherwise, pass the desired values on the `make' command line. --$(RECURSIVE_TARGETS): -- @set fnord $$MAKEFLAGS; amf=$$2; \ -- dot_seen=no; \ -- target=`echo $@ | sed s/-recursive//`; \ -- list='$(SUBDIRS)'; for subdir in $$list; do \ -- echo "Making $$target in $$subdir"; \ -- if test "$$subdir" = "."; then \ -- dot_seen=yes; \ -- local_target="$$target-am"; \ -- else \ -- local_target="$$target"; \ -- fi; \ -- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ -- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ -- done; \ -- if test "$$dot_seen" = "no"; then \ -- $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ -- fi; test -z "$$fail" -- --mostlyclean-recursive clean-recursive distclean-recursive \ --maintainer-clean-recursive: -- @set fnord $$MAKEFLAGS; amf=$$2; \ -- dot_seen=no; \ -- case "$@" in \ -- distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ -- *) list='$(SUBDIRS)' ;; \ -- esac; \ -- rev=''; for subdir in $$list; do \ -- if test "$$subdir" = "."; then :; else \ -- rev="$$subdir $$rev"; \ -- fi; \ -- done; \ -- rev="$$rev ."; \ -- target=`echo $@ | sed s/-recursive//`; \ -- for subdir in $$rev; do \ -- echo "Making $$target in $$subdir"; \ -- if test "$$subdir" = "."; then \ -- local_target="$$target-am"; \ -- else \ -- local_target="$$target"; \ -- fi; \ -- (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ -- || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \ -- done && test -z "$$fail" --tags-recursive: -- list='$(SUBDIRS)'; for subdir in $$list; do \ -- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ -- done --ctags-recursive: -- list='$(SUBDIRS)'; for subdir in $$list; do \ -- test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ -- done -- --ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- mkid -fID $$unique --tags: TAGS -- --TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ -- include_option=--etags-include; \ -- empty_fix=.; \ -- else \ -- include_option=--include; \ -- empty_fix=; \ -- fi; \ -- list='$(SUBDIRS)'; for subdir in $$list; do \ -- if test "$$subdir" = .; then :; else \ -- test ! -f $$subdir/TAGS || \ -- tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \ -- fi; \ -- done; \ -- list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ -- test -n "$$unique" || unique=$$empty_fix; \ -- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -- $$tags $$unique; \ -- fi --ctags: CTAGS --CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- test -z "$(CTAGS_ARGS)$$tags$$unique" \ -- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ -- $$tags $$unique -- --GTAGS: -- here=`$(am__cd) $(top_builddir) && pwd` \ -- && cd $(top_srcdir) \ -- && gtags -i $(GTAGS_ARGS) $$here -- --distclean-tags: -- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -- --distdir: $(DISTFILES) -- $(am__remove_distdir) -- mkdir $(distdir) -- $(mkdir_p) $(distdir)/util -- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ -- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ -- list='$(DISTFILES)'; for file in $$list; do \ -- case $$file in \ -- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ -- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ -- esac; \ -- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ -- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ -- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ -- dir="/$$dir"; \ -- $(mkdir_p) "$(distdir)$$dir"; \ -- else \ -- dir=''; \ -- fi; \ -- if test -d $$d/$$file; then \ -- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ -- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ -- fi; \ -- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ -- else \ -- test -f $(distdir)/$$file \ -- || cp -p $$d/$$file $(distdir)/$$file \ -- || exit 1; \ -- fi; \ -- done -- list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ -- if test "$$subdir" = .; then :; else \ -- test -d "$(distdir)/$$subdir" \ -- || $(mkdir_p) "$(distdir)/$$subdir" \ -- || exit 1; \ -- distdir=`$(am__cd) $(distdir) && pwd`; \ -- top_distdir=`$(am__cd) $(top_distdir) && pwd`; \ -- (cd $$subdir && \ -- $(MAKE) $(AM_MAKEFLAGS) \ -- top_distdir="$$top_distdir" \ -- distdir="$$distdir/$$subdir" \ -- distdir) \ -- || exit 1; \ -- fi; \ -- done -- -find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} ; -o \ -- ! -type d ! -perm -444 -links 1 -exec chmod a+r {} ; -o \ -- ! -type d ! -perm -400 -exec chmod a+r {} ; -o \ -- ! -type d ! -perm -444 -exec $(SHELL) $(install_sh) -c -m a+r {} {} ; \ -- || chmod -R a+r $(distdir) --dist-gzip: distdir -- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz -- $(am__remove_distdir) -- --dist-bzip2: distdir -- tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 -- $(am__remove_distdir) -- --dist-tarZ: distdir -- tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z -- $(am__remove_distdir) -- --dist-shar: distdir -- shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz -- $(am__remove_distdir) -- --dist-zip: distdir -- -rm -f $(distdir).zip -- zip -rq $(distdir).zip $(distdir) -- $(am__remove_distdir) -- --dist dist-all: distdir -- tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz -- $(am__remove_distdir) -- --# This target untars the dist file and tries a VPATH configuration. Then --# it guarantees that the distribution is self-contained by making another --# tarfile. --distcheck: dist -- case '$(DIST_ARCHIVES)' in \ -- *.tar.gz*) \ -- GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\ -- *.tar.bz2*) \ -- bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\ -- *.tar.Z*) \ -- uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ -- *.shar.gz*) \ -- GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\ -- *.zip*) \ -- unzip $(distdir).zip ;;\ -- esac -- chmod -R a-w $(distdir); chmod a+w $(distdir) -- mkdir $(distdir)/_build -- mkdir $(distdir)/_inst -- chmod a-w $(distdir) -- dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\/]:[\/],/,'` \ -- && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ -- && cd $(distdir)/_build \ -- && ../configure --srcdir=.. --prefix="$$dc_install_base" \ -- $(DISTCHECK_CONFIGURE_FLAGS) \ -- && $(MAKE) $(AM_MAKEFLAGS) \ -- && $(MAKE) $(AM_MAKEFLAGS) dvi \ -- && $(MAKE) $(AM_MAKEFLAGS) check \ -- && $(MAKE) $(AM_MAKEFLAGS) install \ -- && $(MAKE) $(AM_MAKEFLAGS) installcheck \ -- && $(MAKE) $(AM_MAKEFLAGS) uninstall \ -- && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ -- distuninstallcheck \ -- && chmod -R a-w "$$dc_install_base" \ -- && ({ \ -- (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ -- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ -- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ -- && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ -- distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ -- } || { rm -rf "$$dc_destdir"; exit 1; }) \ -- && rm -rf "$$dc_destdir" \ -- && $(MAKE) $(AM_MAKEFLAGS) dist \ -- && rm -rf $(DIST_ARCHIVES) \ -- && $(MAKE) $(AM_MAKEFLAGS) distcleancheck -- $(am__remove_distdir) -- @(echo "$(distdir) archives ready for distribution: "; \ -- list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ -- sed -e '1{h;s/./=/g;p;x;}' -e '$${p;x;}' --distuninstallcheck: -- @cd $(distuninstallcheck_dir) \ -- && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ -- || { echo "ERROR: files left after uninstall:" ; \ -- if test -n "$(DESTDIR)"; then \ -- echo " (check DESTDIR support)"; \ -- fi ; \ -- $(distuninstallcheck_listfiles) ; \ -- exit 1; } >&2 --distcleancheck: distclean -- @if test '$(srcdir)' = . ; then \ -- echo "ERROR: distcleancheck can only run from a VPATH build" ; \ -- exit 1 ; \ -- fi -- @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ -- || { echo "ERROR: files left in build directory after distclean:" ; \ -- $(distcleancheck_listfiles) ; \ -- exit 1; } >&2 --check-am: all-am --check: check-recursive --all-am: Makefile config.h --installdirs: installdirs-recursive --installdirs-am: --install: install-recursive --install-exec: install-exec-recursive --install-data: install-data-recursive --uninstall: uninstall-recursive -- --install-am: all-am -- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -- --installcheck: installcheck-recursive --install-strip: -- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ -- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ -- `test -z '$(STRIP)' || \ -- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install --mostlyclean-generic: -- --clean-generic: -- --distclean-generic: -- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -- --maintainer-clean-generic: -- @echo "This command is intended for maintainers to use" -- @echo "it deletes files that may require special tools to rebuild." --clean: clean-recursive -- --clean-am: clean-generic mostlyclean-am -- --distclean: distclean-recursive -- -rm -f $(am__CONFIG_DISTCLEAN_FILES) -- -rm -f Makefile --distclean-am: clean-am distclean-generic distclean-hdr distclean-tags -- --dvi: dvi-recursive -- --dvi-am: -- --html: html-recursive -- --info: info-recursive -- --info-am: -- --install-data-am: -- --install-exec-am: -- --install-info: install-info-recursive -- --install-man: -- --installcheck-am: -- --maintainer-clean: maintainer-clean-recursive -- -rm -f $(am__CONFIG_DISTCLEAN_FILES) -- -rm -rf $(top_srcdir)/autom4te.cache -- -rm -f Makefile --maintainer-clean-am: distclean-am maintainer-clean-generic -- --mostlyclean: mostlyclean-recursive -- --mostlyclean-am: mostlyclean-generic -- --pdf: pdf-recursive -- --pdf-am: -- --ps: ps-recursive -- --ps-am: -- --uninstall-am: uninstall-info-am -- --uninstall-info: uninstall-info-recursive -- --.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am am--refresh check \ -- check-am clean clean-generic clean-recursive ctags \ -- ctags-recursive dist dist-all dist-bzip2 dist-gzip dist-shar \ -- dist-tarZ dist-zip distcheck distclean distclean-generic \ -- distclean-hdr distclean-recursive distclean-tags \ -- distcleancheck distdir distuninstallcheck dvi dvi-am html \ -- html-am info info-am install install-am install-data \ -- install-data-am install-exec install-exec-am install-info \ -- install-info-am install-man install-strip installcheck \ -- installcheck-am installdirs installdirs-am maintainer-clean \ -- maintainer-clean-generic maintainer-clean-recursive \ -- mostlyclean mostlyclean-generic mostlyclean-recursive pdf \ -- pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \ -- uninstall-info-am -- --# Tell versions [3.59,3.63) of GNU make to not export all variables. --# Otherwise a system limit (for SysV at least) may be exceeded. --.NOEXPORT: -diff --git a/acinclude.m4 b/acinclude.m4 -index 368839c..1cf1d67 100644 ---- a/acinclude.m4 -+++ b/acinclude.m4 -@@ -44,6 +44,8 @@ AC_DEFUN([grub_PROG_OBJCOPY_ABSOLUTE], - [AC_MSG_CHECKING([whether ${OBJCOPY} works for absolute addresses]) - AC_CACHE_VAL(grub_cv_prog_objcopy_absolute, - [cat > conftest.c <<\EOF -+void cmain(void); -+ - void - cmain (void) - { -@@ -57,7 +59,7 @@ else - fi - grub_cv_prog_objcopy_absolute=yes - for link_addr in 2000 8000 7C00; do -- if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec]); then : -+ if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr -Wl,--build-id=none conftest.o -o conftest.exec]); then : - else - AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr]) - fi -diff --git a/aclocal.m4 b/aclocal.m4 -deleted file mode 100644 -index aa691f6..0000000 ---- a/aclocal.m4 -+++ /dev/null -@@ -1,1061 +0,0 @@ --# generated automatically by aclocal 1.9.4 -*- Autoconf -*- -- --# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 --# Free Software Foundation, Inc. --# This file is free software; the Free Software Foundation --# gives unlimited permission to copy and/or distribute it, --# with or without modifications, as long as this notice is preserved. -- --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY, to the extent permitted by law; without --# even the implied warranty of MERCHANTABILITY or FITNESS FOR A --# PARTICULAR PURPOSE. -- --# -*- Autoconf -*- --# Copyright (C) 2002, 2003 Free Software Foundation, Inc. --# Generated from amversion.in; do not edit by hand. -- --# 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, 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., 59 Temple Place - Suite 330, Boston, MA -- --# AM_AUTOMAKE_VERSION(VERSION) --# ---------------------------- --# Automake X.Y traces this macro to ensure aclocal.m4 has been --# generated from the m4 files accompanying Automake X.Y. --AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version="1.9"]) -- --# AM_SET_CURRENT_AUTOMAKE_VERSION --# ------------------------------- --# Call AM_AUTOMAKE_VERSION so it can be traced. --# This function is AC_REQUIREd by AC_INIT_AUTOMAKE. --AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], -- [AM_AUTOMAKE_VERSION([1.9.4])]) -- --# AM_AUX_DIR_EXPAND -- --# Copyright (C) 2001, 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, 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., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -- --# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets --# $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to --# `$srcdir', `$srcdir/..', or `$srcdir/../..'. --# --# Of course, Automake must honor this variable whenever it calls a --# tool from the auxiliary directory. The problem is that $srcdir (and --# therefore $ac_aux_dir as well) can be either absolute or relative, --# depending on how configure is run. This is pretty annoying, since --# it makes $ac_aux_dir quite unusable in subdirectories: in the top --# source directory, any form will work fine, but in subdirectories a --# relative path needs to be adjusted first. --# --# $ac_aux_dir/missing --# fails when called from a subdirectory if $ac_aux_dir is relative --# $top_srcdir/$ac_aux_dir/missing --# fails if $ac_aux_dir is absolute, --# fails when called from a subdirectory in a VPATH build with --# a relative $ac_aux_dir --# --# The reason of the latter failure is that $top_srcdir and $ac_aux_dir --# are both prefixed by $srcdir. In an in-source build this is usually --# harmless because $srcdir is `.', but things will broke when you --# start a VPATH build or use an absolute $srcdir. --# --# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, --# iff we strip the leading $srcdir from $ac_aux_dir. That would be: --# am_aux_dir='$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*(.*)"` --# and then we would define $MISSING as --# MISSING="${SHELL} $am_aux_dir/missing" --# This will work as long as MISSING is not called from configure, because --# unfortunately $(top_srcdir) has no meaning in configure. --# However there are other variables, like CC, which are often used in --# configure, and could therefore not use this "fixed" $ac_aux_dir. --# --# Another solution, used here, is to always expand $ac_aux_dir to an --# absolute PATH. The drawback is that using absolute paths prevent a --# configured tree to be moved without reconfiguration. -- --AC_DEFUN([AM_AUX_DIR_EXPAND], --[dnl Rely on autoconf to set up CDPATH properly. --AC_PREREQ([2.50])dnl --# expand $ac_aux_dir to an absolute path --am_aux_dir=`cd $ac_aux_dir && pwd` --]) -- --# AM_CONDITIONAL -*- Autoconf -*- -- --# Copyright (C) 1997, 2000, 2001, 2003, 2004 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, 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., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -- --# serial 6 -- --# AM_CONDITIONAL(NAME, SHELL-CONDITION) --# ------------------------------------- --# Define a conditional. --AC_DEFUN([AM_CONDITIONAL], --[AC_PREREQ(2.52)dnl -- ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], -- [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl --AC_SUBST([$1_TRUE]) --AC_SUBST([$1_FALSE]) --if $2; then -- $1_TRUE= -- $1_FALSE='#' --else -- $1_TRUE='#' -- $1_FALSE= --fi --AC_CONFIG_COMMANDS_PRE( --[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then -- AC_MSG_ERROR([[conditional "$1" was never defined. --Usually this means the macro was only invoked conditionally.]]) --fi])]) -- --# serial 7 -*- Autoconf -*- -- --# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 --# 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, 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., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -- -- --# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be --# written in clear, in which case automake, when reading aclocal.m4, --# will think it sees a *use*, and therefore will trigger all it's --# C support machinery. Also note that it means that autoscan, seeing --# CC etc. in the Makefile, will ask for an AC_PROG_CC use... -- -- -- --# _AM_DEPENDENCIES(NAME) --# ---------------------- --# See how the compiler implements dependency checking. --# NAME is "CC", "CXX", "GCJ", or "OBJC". --# We try a few techniques and use that to set a single cache variable. --# --# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was --# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular --# dependency, and given that the user is not expected to run this macro, --# just rely on AC_PROG_CC. --AC_DEFUN([_AM_DEPENDENCIES], --[AC_REQUIRE([AM_SET_DEPDIR])dnl --AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl --AC_REQUIRE([AM_MAKE_INCLUDE])dnl --AC_REQUIRE([AM_DEP_TRACK])dnl -- --ifelse([$1], CC, [depcc="$CC" am_compiler_list=], -- [$1], CXX, [depcc="$CXX" am_compiler_list=], -- [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], -- [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], -- [depcc="$$1" am_compiler_list=]) -- --AC_CACHE_CHECK([dependency style of $depcc], -- [am_cv_$1_dependencies_compiler_type], --[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then -- # We make a subdir and do the tests there. Otherwise we can end up -- # making bogus files that we don't know about and never remove. For -- # instance it was reported that on HP-UX the gcc test will end up -- # making a dummy file named `D' -- because `-MD' means `put the output -- # in D'. -- mkdir conftest.dir -- # Copy depcomp to subdir because otherwise we won't find it if we're -- # using a relative directory. -- cp "$am_depcomp" conftest.dir -- cd conftest.dir -- # We will build objects and dependencies in a subdirectory because -- # it helps to detect inapplicable dependency modes. For instance -- # both Tru64's cc and ICC support -MD to output dependencies as a -- # side effect of compilation, but ICC will put the dependencies in -- # the current directory while Tru64 will put them in the object -- # directory. -- mkdir sub -- -- am_cv_$1_dependencies_compiler_type=none -- if test "$am_compiler_list" = ""; then -- am_compiler_list=`sed -n ['s/^#*([a-zA-Z0-9]*))$/\1/p'] < ./depcomp` -- fi -- for depmode in $am_compiler_list; do -- # Setup a source with many dependencies, because some compilers -- # like to wrap large dependency lists on column 80 (with ), and -- # we should not choose a depcomp mode which is confused by this. -- # -- # We need to recreate these files for each test, as the compiler may -- # overwrite some of them when testing with obscure command lines. -- # This happens at least with the AIX C compiler. -- : > sub/conftest.c -- for i in 1 2 3 4 5 6; do -- echo '#include "conftst'$i'.h"' >> sub/conftest.c -- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with -- # Solaris 8's {/usr,}/bin/sh. -- touch sub/conftst$i.h -- done -- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf -- -- case $depmode in -- nosideeffect) -- # after this tag, mechanisms are not by side-effect, so they'll -- # only be used when explicitly requested -- if test "x$enable_dependency_tracking" = xyes; then -- continue -- else -- break -- fi -- ;; -- none) break ;; -- esac -- # We check with `-c' and `-o' for the sake of the "dashmstdout" -- # mode. It turns out that the SunPro C++ compiler does not properly -- # handle `-M -o', and we need to detect this. -- if depmode=$depmode \ -- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ -- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ -- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ -- >/dev/null 2>conftest.err && -- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && -- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && -- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then -- # icc doesn't choke on unknown options, it will just issue warnings -- # or remarks (even with -Werror). So we grep stderr for any message -- # that says an option was ignored or not supported. -- # When given -MP, icc 7.0 and 7.1 complain thusly: -- # icc: Command line warning: ignoring option '-M'; no argument required -- # The diagnosis changed in icc 8.0: -- # icc: Command line remark: option '-MP' not supported -- if (grep 'ignoring option' conftest.err || -- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else -- am_cv_$1_dependencies_compiler_type=$depmode -- break -- fi -- fi -- done -- -- cd .. -- rm -rf conftest.dir --else -- am_cv_$1_dependencies_compiler_type=none --fi --]) --AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) --AM_CONDITIONAL([am__fastdep$1], [ -- test "x$enable_dependency_tracking" != xno \ -- && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) --]) -- -- --# AM_SET_DEPDIR --# ------------- --# Choose a directory name for dependency files. --# This macro is AC_REQUIREd in _AM_DEPENDENCIES --AC_DEFUN([AM_SET_DEPDIR], --[AC_REQUIRE([AM_SET_LEADING_DOT])dnl --AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl --]) -- -- --# AM_DEP_TRACK --# ------------ --AC_DEFUN([AM_DEP_TRACK], --[AC_ARG_ENABLE(dependency-tracking, --[ --disable-dependency-tracking speeds up one-time build -- --enable-dependency-tracking do not reject slow dependency extractors]) --if test "x$enable_dependency_tracking" != xno; then -- am_depcomp="$ac_aux_dir/depcomp" -- AMDEPBACKSLASH='' --fi --AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) --AC_SUBST([AMDEPBACKSLASH]) --]) -- --# Generate code to set up dependency tracking. -*- Autoconf -*- -- --# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004 --# 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, 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., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -- --#serial 2 -- --# _AM_OUTPUT_DEPENDENCY_COMMANDS --# ------------------------------ --AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], --[for mf in $CONFIG_FILES; do -- # Strip MF so we end up with the name of the file. -- mf=`echo "$mf" | sed -e 's/:.*$//'` -- # Check whether this is an Automake generated Makefile or not. -- # We used to match only the files named `Makefile.in', but -- # some people rename them; so instead we look at the file content. -- # Grep'ing the first line is not enough: some people post-process -- # each Makefile.in and add a new line on top of each file to say so. -- # So let's grep whole file. -- if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then -- dirpart=`AS_DIRNAME("$mf")` -- else -- continue -- fi -- # Extract the definition of DEPDIR, am__include, and am__quote -- # from the Makefile without running `make'. -- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` -- test -z "$DEPDIR" && continue -- am__include=`sed -n 's/^am__include = //p' < "$mf"` -- test -z "am__include" && continue -- am__quote=`sed -n 's/^am__quote = //p' < "$mf"` -- # When using ansi2knr, U may be empty or an underscore; expand it -- U=`sed -n 's/^U = //p' < "$mf"` -- # Find all dependency output files, they are included files with -- # $(DEPDIR) in their names. We invoke sed twice because it is the -- # simplest approach to changing $(DEPDIR) to its actual value in the -- # expansion. -- for file in `sed -n " -- s/^$am__include $am__quote(.*(DEPDIR).*)$am__quote"'$/\1/p' <"$mf" | \ -- sed -e 's/$(DEPDIR)/'"$DEPDIR"'/g' -e 's/$U/'"$U"'/g'`; do -- # Make sure the directory exists. -- test -f "$dirpart/$file" && continue -- fdir=`AS_DIRNAME(["$file"])` -- AS_MKDIR_P([$dirpart/$fdir]) -- # echo "creating $dirpart/$file" -- echo '# dummy' > "$dirpart/$file" -- done --done --])# _AM_OUTPUT_DEPENDENCY_COMMANDS -- -- --# AM_OUTPUT_DEPENDENCY_COMMANDS --# ----------------------------- --# This macro should only be invoked once -- use via AC_REQUIRE. --# --# This code is only required when automatic dependency tracking --# is enabled. FIXME. This creates each `.P' file that we will --# need in order to bootstrap the dependency handling code. --AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], --[AC_CONFIG_COMMANDS([depfiles], -- [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], -- [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) --]) -- --# Do all the work for Automake. -*- Autoconf -*- -- --# This macro actually does too much some checks are only needed if --# your package does certain things. But this isn't really a big deal. -- --# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004 --# 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, 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., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -- --# serial 11 -- --# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) --# AM_INIT_AUTOMAKE([OPTIONS]) --# ----------------------------------------------- --# The call with PACKAGE and VERSION arguments is the old style --# call (pre autoconf-2.50), which is being phased out. PACKAGE --# and VERSION should now be passed to AC_INIT and removed from --# the call to AM_INIT_AUTOMAKE. --# We support both call styles for the transition. After --# the next Automake release, Autoconf can make the AC_INIT --# arguments mandatory, and then we can depend on a new Autoconf --# release and drop the old call support. --AC_DEFUN([AM_INIT_AUTOMAKE], --[AC_PREREQ([2.58])dnl --dnl Autoconf wants to disallow AM_ names. We explicitly allow --dnl the ones we care about. --m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl --AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl --AC_REQUIRE([AC_PROG_INSTALL])dnl --# test to see if srcdir already configured --if test "`cd $srcdir && pwd`" != "`pwd`" && -- test -f $srcdir/config.status; then -- AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) --fi -- --# test whether we have cygpath --if test -z "$CYGPATH_W"; then -- if (cygpath --version) >/dev/null 2>/dev/null; then -- CYGPATH_W='cygpath -w' -- else -- CYGPATH_W=echo -- fi --fi --AC_SUBST([CYGPATH_W]) -- --# Define the identity of the package. --dnl Distinguish between old-style and new-style calls. --m4_ifval([$2], --[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl -- AC_SUBST([PACKAGE], [$1])dnl -- AC_SUBST([VERSION], [$2])], --[_AM_SET_OPTIONS([$1])dnl -- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl -- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl -- --_AM_IF_OPTION([no-define],, --[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) -- AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl -- --# Some tools Automake needs. --AC_REQUIRE([AM_SANITY_CHECK])dnl --AC_REQUIRE([AC_ARG_PROGRAM])dnl --AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) --AM_MISSING_PROG(AUTOCONF, autoconf) --AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) --AM_MISSING_PROG(AUTOHEADER, autoheader) --AM_MISSING_PROG(MAKEINFO, makeinfo) --AM_PROG_INSTALL_SH --AM_PROG_INSTALL_STRIP --AC_REQUIRE([AM_PROG_MKDIR_P])dnl --# We need awk for the "check" target. The system "awk" is bad on --# some platforms. --AC_REQUIRE([AC_PROG_AWK])dnl --AC_REQUIRE([AC_PROG_MAKE_SET])dnl --AC_REQUIRE([AM_SET_LEADING_DOT])dnl --_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], -- [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], -- [_AM_PROG_TAR([v7])])]) --_AM_IF_OPTION([no-dependencies],, --[AC_PROVIDE_IFELSE([AC_PROG_CC], -- [_AM_DEPENDENCIES(CC)], -- [define([AC_PROG_CC], -- defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl --AC_PROVIDE_IFELSE([AC_PROG_CXX], -- [_AM_DEPENDENCIES(CXX)], -- [define([AC_PROG_CXX], -- defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl --]) --]) -- -- --# When config.status generates a header, we must update the stamp-h file. --# This file resides in the same directory as the config header --# that is generated. The stamp files are numbered to have different names. -- --# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the --# loop where config.status creates the headers, so we can generate --# our stamp files there. --AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], --[# Compute $1's index in $config_headers. --_am_stamp_count=1 --for _am_header in $config_headers :; do -- case $_am_header in -- $1 | $1:* ) -- break ;; -- * ) -- _am_stamp_count=`expr $_am_stamp_count + 1` ;; -- esac --done --echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count]) -- --# AM_PROG_INSTALL_SH --# ------------------ --# Define $install_sh. -- --# Copyright (C) 2001, 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, 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., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -- --AC_DEFUN([AM_PROG_INSTALL_SH], --[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl --install_sh=${install_sh-"$am_aux_dir/install-sh"} --AC_SUBST(install_sh)]) -- --# -*- Autoconf -*- --# 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, 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., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -- --# serial 1 -- --# Check whether the underlying file-system supports filenames --# with a leading dot. For instance MS-DOS doesn't. --AC_DEFUN([AM_SET_LEADING_DOT], --[rm -rf .tst 2>/dev/null --mkdir .tst 2>/dev/null --if test -d .tst; then -- am__leading_dot=. --else -- am__leading_dot=_ --fi --rmdir .tst 2>/dev/null --AC_SUBST([am__leading_dot])]) -- --# Add --enable-maintainer-mode option to configure. --# From Jim Meyering -- --# Copyright (C) 1996, 1998, 2000, 2001, 2002, 2003, 2004 --# 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, 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., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -- --# serial 3 -- --AC_DEFUN([AM_MAINTAINER_MODE], --[AC_MSG_CHECKING([whether to enable maintainer-specific portions of Makefiles]) -- dnl maintainer-mode is disabled by default -- AC_ARG_ENABLE(maintainer-mode, --[ --enable-maintainer-mode enable make rules and dependencies not useful -- (and sometimes confusing) to the casual installer], -- USE_MAINTAINER_MODE=$enableval, -- USE_MAINTAINER_MODE=no) -- AC_MSG_RESULT([$USE_MAINTAINER_MODE]) -- AM_CONDITIONAL(MAINTAINER_MODE, [test $USE_MAINTAINER_MODE = yes]) -- MAINT=$MAINTAINER_MODE_TRUE -- AC_SUBST(MAINT)dnl --] --) -- --AU_DEFUN([jm_MAINTAINER_MODE], [AM_MAINTAINER_MODE]) -- --# Check to see how 'make' treats includes. -*- Autoconf -*- -- --# Copyright (C) 2001, 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, 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., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -- --# serial 2 -- --# AM_MAKE_INCLUDE() --# ----------------- --# Check to see how make treats includes. --AC_DEFUN([AM_MAKE_INCLUDE], --[am_make=${MAKE-make} --cat > confinc << 'END' --am__doit: -- @echo done --.PHONY: am__doit --END --# If we don't find an include directive, just comment out the code. --AC_MSG_CHECKING([for style of include used by $am_make]) --am__include="#" --am__quote= --_am_result=none --# First try GNU make style include. --echo "include confinc" > confmf --# We grep out `Entering directory' and `Leaving directory' --# messages which can occur if `w' ends up in MAKEFLAGS. --# In particular we don't look at `^make:' because GNU make might --# be invoked under some other name (usually "gmake"), in which --# case it prints its new name instead of `make'. --if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then -- am__include=include -- am__quote= -- _am_result=GNU --fi --# Now try BSD make style include. --if test "$am__include" = "#"; then -- echo '.include "confinc"' > confmf -- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then -- am__include=.include -- am__quote=""" -- _am_result=BSD -- fi --fi --AC_SUBST([am__include]) --AC_SUBST([am__quote]) --AC_MSG_RESULT([$_am_result]) --rm -f confinc confmf --]) -- --# -*- Autoconf -*- -- -- --# Copyright (C) 1997, 1999, 2000, 2001, 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, 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., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -- --# serial 3 -- --# AM_MISSING_PROG(NAME, PROGRAM) --# ------------------------------ --AC_DEFUN([AM_MISSING_PROG], --[AC_REQUIRE([AM_MISSING_HAS_RUN]) --$1=${$1-"${am_missing_run}$2"} --AC_SUBST($1)]) -- -- --# AM_MISSING_HAS_RUN --# ------------------ --# Define MISSING if not defined so far and test if it supports --run. --# If it does, set am_missing_run to use it, otherwise, to nothing. --AC_DEFUN([AM_MISSING_HAS_RUN], --[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl --test x"${MISSING+set}" = xset || MISSING="${SHELL} $am_aux_dir/missing" --# Use eval to expand $SHELL --if eval "$MISSING --run true"; then -- am_missing_run="$MISSING --run " --else -- am_missing_run= -- AC_MSG_WARN([`missing' script is too old or missing]) --fi --]) -- --# AM_PROG_MKDIR_P --# --------------- --# Check whether `mkdir -p' is supported, fallback to mkinstalldirs otherwise. -- --# Copyright (C) 2003, 2004 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, 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., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -- --# Automake 1.8 used `mkdir -m 0755 -p --' to ensure that directories --# created by `make install' are always world readable, even if the --# installer happens to have an overly restrictive umask (e.g. 077). --# This was a mistake. There are at least two reasons why we must not --# use `-m 0755': --# - it causes special bits like SGID to be ignored, --# - it may be too restrictive (some setups expect 775 directories). --# --# Do not use -m 0755 and let people choose whatever they expect by --# setting umask. --# --# We cannot accept any implementation of `mkdir' that recognizes `-p'. --# Some implementations (such as Solaris 8's) are not thread-safe: if a --# parallel make tries to run `mkdir -p a/b' and `mkdir -p a/c' --# concurrently, both version can detect that a/ is missing, but only --# one can create it and the other will error out. Consequently we --# restrict ourselves to GNU make (using the --version option ensures --# this.) --AC_DEFUN([AM_PROG_MKDIR_P], --[if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then -- # We used to keeping the `.' as first argument, in order to -- # allow $(mkdir_p) to be used without argument. As in -- # $(mkdir_p) $(somedir) -- # where $(somedir) is conditionally defined. However this is wrong -- # for two reasons: -- # 1. if the package is installed by a user who cannot write `.' -- # make install will fail, -- # 2. the above comment should most certainly read -- # $(mkdir_p) $(DESTDIR)$(somedir) -- # so it does not work when $(somedir) is undefined and -- # $(DESTDIR) is not. -- # To support the latter case, we have to write -- # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), -- # so the `.' trick is pointless. -- mkdir_p='mkdir -p --' --else -- # On NextStep and OpenStep, the `mkdir' command does not -- # recognize any option. It will interpret all options as -- # directories to create, and then abort because `.' already -- # exists. -- for d in ./-p ./--version; -- do -- test -d $d && rmdir $d -- done -- # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. -- if test -f "$ac_aux_dir/mkinstalldirs"; then -- mkdir_p='$(mkinstalldirs)' -- else -- mkdir_p='$(install_sh) -d' -- fi --fi --AC_SUBST([mkdir_p])]) -- --# Helper functions for option handling. -*- Autoconf -*- -- --# Copyright (C) 2001, 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, 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., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -- --# serial 2 -- --# _AM_MANGLE_OPTION(NAME) --# ----------------------- --AC_DEFUN([_AM_MANGLE_OPTION], --[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) -- --# _AM_SET_OPTION(NAME) --# ------------------------------ --# Set option NAME. Presently that only means defining a flag for this option. --AC_DEFUN([_AM_SET_OPTION], --[m4_define(_AM_MANGLE_OPTION([$1]), 1)]) -- --# _AM_SET_OPTIONS(OPTIONS) --# ---------------------------------- --# OPTIONS is a space-separated list of Automake options. --AC_DEFUN([_AM_SET_OPTIONS], --[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) -- --# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) --# ------------------------------------------- --# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. --AC_DEFUN([_AM_IF_OPTION], --[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) -- --# --# Check to make sure that the build environment is sane. --# -- --# Copyright (C) 1996, 1997, 2000, 2001, 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, 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., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -- --# serial 3 -- --# AM_SANITY_CHECK --# --------------- --AC_DEFUN([AM_SANITY_CHECK], --[AC_MSG_CHECKING([whether build environment is sane]) --# Just in case --sleep 1 --echo timestamp > conftest.file --# Do `set' in a subshell so we don't clobber the current shell's --# arguments. Must try -L first in case configure is actually a --# symlink; some systems play weird games with the mod time of symlinks --# (eg FreeBSD returns the mod time of the symlink's containing --# directory). --if ( -- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` -- if test "$[*]" = "X"; then -- # -L didn't work. -- set X `ls -t $srcdir/configure conftest.file` -- fi -- rm -f conftest.file -- if test "$[*]" != "X $srcdir/configure conftest.file" \ -- && test "$[*]" != "X conftest.file $srcdir/configure"; then -- -- # If neither matched, then we have a broken ls. This can happen -- # if, for instance, CONFIG_SHELL is bash and it inherits a -- # broken ls alias from the environment. This has actually -- # happened. Such a system could not be considered "sane". -- AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken --alias in your environment]) -- fi -- -- test "$[2]" = conftest.file -- ) --then -- # Ok. -- : --else -- AC_MSG_ERROR([newly created file is older than distributed files! --Check your system clock]) --fi --AC_MSG_RESULT(yes)]) -- --# AM_PROG_INSTALL_STRIP -- --# Copyright (C) 2001, 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, 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., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -- --# One issue with vendor `install' (even GNU) is that you can't --# specify the program used to strip binaries. This is especially --# annoying in cross-compiling environments, where the build's strip --# is unlikely to handle the host's binaries. --# Fortunately install-sh will honor a STRIPPROG variable, so we --# always use install-sh in `make install-strip', and initialize --# STRIPPROG with the value of the STRIP variable (set by the user). --AC_DEFUN([AM_PROG_INSTALL_STRIP], --[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl --# Installed binaries are usually stripped using `strip' when the user --# run `make install-strip'. However `strip' might not be the right --# tool to use in cross-compilation environments, therefore Automake --# will honor the `STRIP' environment variable to overrule this program. --dnl Don't test for $cross_compiling = yes, because it might be `maybe'. --if test "$cross_compiling" != no; then -- AC_CHECK_TOOL([STRIP], [strip], :) --fi --INSTALL_STRIP_PROGRAM="${SHELL} $(install_sh) -c -s" --AC_SUBST([INSTALL_STRIP_PROGRAM])]) -- --# Check how to create a tarball. -*- Autoconf -*- -- --# Copyright (C) 2004 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, 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., 59 Temple Place - Suite 330, Boston, MA --# 02111-1307, USA. -- --# serial 1 -- -- --# _AM_PROG_TAR(FORMAT) --# -------------------- --# Check how to create a tarball in format FORMAT. --# FORMAT should be one of `v7', `ustar', or `pax'. --# --# Substitute a variable $(am__tar) that is a command --# writing to stdout a FORMAT-tarball containing the directory --# $tardir. --# tardir=directory && $(am__tar) > result.tar --# --# Substitute a variable $(am__untar) that extract such --# a tarball read from stdin. --# $(am__untar) < result.tar --AC_DEFUN([_AM_PROG_TAR], --[# Always define AMTAR for backward compatibility. --AM_MISSING_PROG([AMTAR], [tar]) --m4_if([$1], [v7], -- [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], -- [m4_case([$1], [ustar],, [pax],, -- [m4_fatal([Unknown tar format])]) --AC_MSG_CHECKING([how to create a $1 tar archive]) --# Loop over all known methods to create a tar archive until one works. --_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' --_am_tools=${am_cv_prog_tar_$1-$_am_tools} --# Do not fold the above two line into one, because Tru64 sh and --# Solaris sh will not grok spaces in the rhs of `-'. --for _am_tool in $_am_tools --do -- case $_am_tool in -- gnutar) -- for _am_tar in tar gnutar gtar; -- do -- AM_RUN_LOG([$_am_tar --version]) && break -- done -- am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' -- am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' -- am__untar="$_am_tar -xf -" -- ;; -- plaintar) -- # Must skip GNU tar: if it does not support --format= it doesn't create -- # ustar tarball either. -- (tar --version) >/dev/null 2>&1 && continue -- am__tar='tar chf - "$$tardir"' -- am__tar_='tar chf - "$tardir"' -- am__untar='tar xf -' -- ;; -- pax) -- am__tar='pax -L -x $1 -w "$$tardir"' -- am__tar_='pax -L -x $1 -w "$tardir"' -- am__untar='pax -r' -- ;; -- cpio) -- am__tar='find "$$tardir" -print | cpio -o -H $1 -L' -- am__tar_='find "$tardir" -print | cpio -o -H $1 -L' -- am__untar='cpio -i -H $1 -d' -- ;; -- none) -- am__tar=false -- am__tar_=false -- am__untar=false -- ;; -- esac -- -- # If the value was cached, stop now. We just wanted to have am__tar -- # and am__untar set. -- test -n "${am_cv_prog_tar_$1}" && break -- -- # tar/untar a dummy directory, and stop if the command works -- rm -rf conftest.dir -- mkdir conftest.dir -- echo GrepMe > conftest.dir/file -- AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) -- rm -rf conftest.dir -- if test -s conftest.tar; then -- AM_RUN_LOG([$am__untar <conftest.tar]) -- grep GrepMe conftest.dir/file >/dev/null 2>&1 && break -- fi --done --rm -rf conftest.dir -- --AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) --AC_MSG_RESULT([$am_cv_prog_tar_$1])]) --AC_SUBST([am__tar]) --AC_SUBST([am__untar]) --]) # _AM_PROG_TAR -- --m4_include([acinclude.m4]) -diff --git a/config.h.in b/config.h.in -deleted file mode 100644 -index 68d7c8c..0000000 ---- a/config.h.in -+++ /dev/null -@@ -1,106 +0,0 @@ --/* config.h.in. Generated from configure.ac by autoheader. */ -- --/* Define if an absolute indirect call/jump must NOT be prefixed with `*' */ --#undef ABSOLUTE_WITHOUT_ASTERISK -- --/* Define it to "addr32" or "addr32;" to make GAS happy */ --#undef ADDR32 -- --/* Define if you don't want to pass the mem= option to Linux */ --#undef AUTO_LINUX_MEM_OPT -- --/* Define it to "data32" or "data32;" to make GAS happy */ --#undef DATA32 -- --/* Define if C symbols get an underscore after compilation */ --#undef HAVE_ASM_USCORE -- --/* Define to 1 if you have the <curses.h> header file. */ --#undef HAVE_CURSES_H -- --/* Define if edata is defined */ --#undef HAVE_EDATA_SYMBOL -- --/* Define if end is defined */ --#undef HAVE_END_SYMBOL -- --/* Define to 1 if you have the <inttypes.h> header file. */ --#undef HAVE_INTTYPES_H -- --/* Define if you have a curses library */ --#undef HAVE_LIBCURSES -- --/* Define to 1 if you have the <memory.h> header file. */ --#undef HAVE_MEMORY_H -- --/* Define to 1 if you have the <ncurses/curses.h> header file. */ --#undef HAVE_NCURSES_CURSES_H -- --/* Define to 1 if you have the <ncurses.h> header file. */ --#undef HAVE_NCURSES_H -- --/* Define if opendisk() in -lutil can be used */ --#undef HAVE_OPENDISK -- --/* Define if start is defined */ --#undef HAVE_START_SYMBOL -- --/* Define to 1 if you have the <stdint.h> header file. */ --#undef HAVE_STDINT_H -- --/* Define to 1 if you have the <stdlib.h> header file. */ --#undef HAVE_STDLIB_H -- --/* Define to 1 if you have the <strings.h> header file. */ --#undef HAVE_STRINGS_H -- --/* Define to 1 if you have the <string.h> header file. */ --#undef HAVE_STRING_H -- --/* Define to 1 if you have the <sys/stat.h> header file. */ --#undef HAVE_SYS_STAT_H -- --/* Define to 1 if you have the <sys/types.h> header file. */ --#undef HAVE_SYS_TYPES_H -- --/* Define to 1 if you have the <unistd.h> header file. */ --#undef HAVE_UNISTD_H -- --/* Define if _edata is defined */ --#undef HAVE_USCORE_EDATA_SYMBOL -- --/* Define if end is defined */ --#undef HAVE_USCORE_END_SYMBOL -- --/* Define if _start is defined */ --#undef HAVE_USCORE_START_SYMBOL -- --/* Define if __bss_start is defined */ --#undef HAVE_USCORE_USCORE_BSS_START_SYMBOL -- --/* Name of package */ --#undef PACKAGE -- --/* Define to the address where bug reports for this package should be sent. */ --#undef PACKAGE_BUGREPORT -- --/* Define to the full name of this package. */ --#undef PACKAGE_NAME -- --/* Define to the full name and version of this package. */ --#undef PACKAGE_STRING -- --/* Define to the one symbol short name of this package. */ --#undef PACKAGE_TARNAME -- --/* Define to the version of this package. */ --#undef PACKAGE_VERSION -- --/* Define if there is user specified preset menu string */ --#undef PRESET_MENU_STRING -- --/* Define to 1 if you have the ANSI C header files. */ --#undef STDC_HEADERS -- --/* Version number of package */ --#undef VERSION -diff --git a/configure b/configure -deleted file mode 100755 -index 537ab89..0000000 ---- a/configure -+++ /dev/null -@@ -1,7639 +0,0 @@ --#! /bin/sh --# Guess values for system-dependent variables and create Makefiles. --# Generated by GNU Autoconf 2.59 for GRUB 0.97. --# --# Report bugs to bug-grub@gnu.org. --# --# Copyright (C) 2003 Free Software Foundation, Inc. --# This configure script is free software; the Free Software Foundation --# gives unlimited permission to copy, distribute and modify it. --## --------------------- ## --## M4sh Initialization. ## --## --------------------- ## -- --# Be Bourne compatible --if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then -- emulate sh -- NULLCMD=: -- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which -- # is contrary to our usage. Disable this feature. -- alias -g '${1+"$@"}'='"$@"' --elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then -- set -o posix --fi --DUALCASE=1; export DUALCASE # for MKS sh -- --# Support unset when possible. --if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then -- as_unset=unset --else -- as_unset=false --fi -- -- --# Work around bugs in pre-3.0 UWIN ksh. --$as_unset ENV MAIL MAILPATH --PS1='$ ' --PS2='> ' --PS4='+ ' -- --# NLS nuisances. --for as_var in \ -- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ -- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ -- LC_TELEPHONE LC_TIME --do -- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then -- eval $as_var=C; export $as_var -- else -- $as_unset $as_var -- fi --done -- --# Required to use basename. --if expr a : '(a)' >/dev/null 2>&1; then -- as_expr=expr --else -- as_expr=false --fi -- --if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then -- as_basename=basename --else -- as_basename=false --fi -- -- --# Name of the executable. --as_me=`$as_basename "$0" || --$as_expr X/"$0" : '.*/([^/][^/]*)/*$' | \ -- X"$0" : 'X(//)$' | \ -- X"$0" : 'X(/)$' | \ -- . : '(.)' 2>/dev/null || --echo X/"$0" | -- sed '/^.*/([^/][^/]*)/*$/{ s//\1/; q; } -- /^X/(//)$/{ s//\1/; q; } -- /^X/(/).*/{ s//\1/; q; } -- s/.*/./; q'` -- -- --# PATH needs CR, and LINENO needs CR and PATH. --# Avoid depending upon Character Ranges. --as_cr_letters='abcdefghijklmnopqrstuvwxyz' --as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' --as_cr_Letters=$as_cr_letters$as_cr_LETTERS --as_cr_digits='0123456789' --as_cr_alnum=$as_cr_Letters$as_cr_digits -- --# The user is always right. --if test "${PATH_SEPARATOR+set}" != set; then -- echo "#! /bin/sh" >conf$$.sh -- echo "exit 0" >>conf$$.sh -- chmod +x conf$$.sh -- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then -- PATH_SEPARATOR=';' -- else -- PATH_SEPARATOR=: -- fi -- rm -f conf$$.sh --fi -- -- -- as_lineno_1=$LINENO -- as_lineno_2=$LINENO -- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` -- test "x$as_lineno_1" != "x$as_lineno_2" && -- test "x$as_lineno_3" = "x$as_lineno_2" || { -- # Find who we are. Look in the path if we contain no path at all -- # relative or not. -- case $0 in -- *[\/]* ) as_myself=$0 ;; -- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break --done -- -- ;; -- esac -- # We did not find ourselves, most probably we were run as `sh COMMAND' -- # in which case we are not to be found in the path. -- if test "x$as_myself" = x; then -- as_myself=$0 -- fi -- if test ! -f "$as_myself"; then -- { echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2 -- { (exit 1); exit 1; }; } -- fi -- case $CONFIG_SHELL in -- '') -- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for as_base in sh bash ksh sh5; do -- case $as_dir in -- /*) -- if ("$as_dir/$as_base" -c ' -- as_lineno_1=$LINENO -- as_lineno_2=$LINENO -- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` -- test "x$as_lineno_1" != "x$as_lineno_2" && -- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then -- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } -- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } -- CONFIG_SHELL=$as_dir/$as_base -- export CONFIG_SHELL -- exec "$CONFIG_SHELL" "$0" ${1+"$@"} -- fi;; -- esac -- done --done --;; -- esac -- -- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO -- # uniformly replaced by the line number. The first 'sed' inserts a -- # line-number line before each line; the second 'sed' does the real -- # work. The second script uses 'N' to pair each line-number line -- # with the numbered line, and appends trailing '-' during -- # substitution so that $LINENO is not a special case at line end. -- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the -- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) -- sed '=' <$as_myself | -- sed ' -- N -- s,$,-, -- : loop -- s,^(['$as_cr_digits']*)(.*)[$]LINENO([^'$as_cr_alnum'_]),\1\2\1\3, -- t loop -- s,-$,, -- s,^['$as_cr_digits']*\n,, -- ' >$as_me.lineno && -- chmod +x $as_me.lineno || -- { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2 -- { (exit 1); exit 1; }; } -- -- # Don't try to exec as it changes $[0], causing all sort of problems -- # (the dirname of $[0] is not the place where we might find the -- # original and so on. Autoconf is especially sensible to this). -- . ./$as_me.lineno -- # Exit status is that of the last command. -- exit --} -- -- --case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in -- *c*,-n*) ECHO_N= ECHO_C=' --' ECHO_T=' ' ;; -- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; -- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; --esac -- --if expr a : '(a)' >/dev/null 2>&1; then -- as_expr=expr --else -- as_expr=false --fi -- --rm -f conf$$ conf$$.exe conf$$.file --echo >conf$$.file --if ln -s conf$$.file conf$$ 2>/dev/null; then -- # We could just check for DJGPP; but this test a) works b) is more generic -- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). -- if test -f conf$$.exe; then -- # Don't use ln at all; we don't have any links -- as_ln_s='cp -p' -- else -- as_ln_s='ln -s' -- fi --elif ln conf$$.file conf$$ 2>/dev/null; then -- as_ln_s=ln --else -- as_ln_s='cp -p' --fi --rm -f conf$$ conf$$.exe conf$$.file -- --if mkdir -p . 2>/dev/null; then -- as_mkdir_p=: --else -- test -d ./-p && rmdir ./-p -- as_mkdir_p=false --fi -- --as_executable_p="test -f" -- --# Sed expression to map a string onto a valid CPP name. --as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" -- --# Sed expression to map a string onto a valid variable name. --as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" -- -- --# IFS --# We need space, tab and new line, in precisely that order. --as_nl=' --' --IFS=" $as_nl" -- --# CDPATH. --$as_unset CDPATH -- -- --# Name of the host. --# hostname on some systems (SVR3.2, Linux) returns a bogus exit status, --# so uname gets run too. --ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` -- --exec 6>&1 -- --# --# Initializations. --# --ac_default_prefix=/usr/local --ac_config_libobj_dir=. --cross_compiling=no --subdirs= --MFLAGS= --MAKEFLAGS= --SHELL=${CONFIG_SHELL-/bin/sh} -- --# Maximum number of lines to put in a shell here document. --# This variable seems obsolete. It should probably be removed, and --# only ac_max_sed_lines should be used. --: ${ac_max_here_lines=38} -- --# Identity of this package. --PACKAGE_NAME='GRUB' --PACKAGE_TARNAME='grub' --PACKAGE_VERSION='0.97' --PACKAGE_STRING='GRUB 0.97' --PACKAGE_BUGREPORT='bug-grub@gnu.org' -- --ac_unique_file="stage2/stage2.c" --# Factoring default headers for most tests. --ac_includes_default="\ --#include <stdio.h> --#if HAVE_SYS_TYPES_H --# include <sys/types.h> --#endif --#if HAVE_SYS_STAT_H --# include <sys/stat.h> --#endif --#if STDC_HEADERS --# include <stdlib.h> --# include <stddef.h> --#else --# if HAVE_STDLIB_H --# include <stdlib.h> --# endif --#endif --#if HAVE_STRING_H --# if !STDC_HEADERS && HAVE_MEMORY_H --# include <memory.h> --# endif --# include <string.h> --#endif --#if HAVE_STRINGS_H --# include <strings.h> --#endif --#if HAVE_INTTYPES_H --# include <inttypes.h> --#else --# if HAVE_STDINT_H --# include <stdint.h> --# endif --#endif --#if HAVE_UNISTD_H --# include <unistd.h> --#endif" -- --ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO install_sh STRIP ac_ct_STRIP INSTALL_STRIP_PROGRAM mkdir_p AWK SET_MAKE am__leading_dot AMTAR am__tar am__untar build build_cpu build_vendor build_os host host_cpu host_vendor host_os MAINTAINER_MODE_TRUE MAINTAINER_MODE_FALSE MAINT PERL CC ac_ct_CC CFLAGS LDFLAGS CPPFLAGS EXEEXT OBJEXT DEPDIR am__include am__quote AMDEP_TRUE AMDEP_FALSE AMDEPBACKSLASH CCDEPMODE am__fastdepCC_TRUE am__fastdepCC_FALSE CCAS RANLIB ac_ct_RANLIB STAGE1_CFLAGS STAGE2_CFLAGS GRUB_CFLAGS OBJCOPY ac_ct_OBJCOPY GRUB_LIBS CPP EGREP NETBOOT_SUPPORT_T RUE NETBOOT_SUPPORT_FALSE DISKLESS_SUPPORT_TRUE DISKLESS_SUPPORT_FALSE HERCULES_SUPPORT_TRUE HERCULES_SUPPORT_FALSE SERIAL_SUPPORT_TRUE SERIAL_SUPPORT_FALSE SERIAL_SPEED_SIMULATION_TRUE SERIAL_SPEED_SIMULATION_FALSE BUILD_EXAMPLE_KERNEL_TRUE BUILD_EXAMPLE_KERNEL_FALSE FSYS_CFLAGS NET_CFLAGS NET_EXTRAFLAGS NETBOOT_DRIVERS CCASFLAGS LIBOBJS LTLIBOBJS' --ac_subst_files='' -- --# Initialize some variables set by options. --ac_init_help= --ac_init_version=false --# The variables have the same names as the options, with --# dashes changed to underlines. --cache_file=/dev/null --exec_prefix=NONE --no_create= --no_recursion= --prefix=NONE --program_prefix=NONE --program_suffix=NONE --program_transform_name=s,x,x, --silent= --site= --srcdir= --verbose= --x_includes=NONE --x_libraries=NONE -- --# Installation directory options. --# These are left unexpanded so users can "make install exec_prefix=/foo" --# and all the variables that are supposed to be based on exec_prefix --# by default will actually change. --# Use braces instead of parens because sh, perl, etc. also accept them. --bindir='${exec_prefix}/bin' --sbindir='${exec_prefix}/sbin' --libexecdir='${exec_prefix}/libexec' --datadir='${prefix}/share' --sysconfdir='${prefix}/etc' --sharedstatedir='${prefix}/com' --localstatedir='${prefix}/var' --libdir='${exec_prefix}/lib' --includedir='${prefix}/include' --oldincludedir='/usr/include' --infodir='${prefix}/info' --mandir='${prefix}/man' -- --ac_prev= --for ac_option --do -- # If the previous option needs an argument, assign it. -- if test -n "$ac_prev"; then -- eval "$ac_prev=$ac_option" -- ac_prev= -- continue -- fi -- -- ac_optarg=`expr "x$ac_option" : 'x[^=]*=(.*)'` -- -- # Accept the important Cygnus configure options, so we can diagnose typos. -- -- case $ac_option in -- -- -bindir | --bindir | --bindi | --bind | --bin | --bi) -- ac_prev=bindir ;; -- -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) -- bindir=$ac_optarg ;; -- -- -build | --build | --buil | --bui | --bu) -- ac_prev=build_alias ;; -- -build=* | --build=* | --buil=* | --bui=* | --bu=*) -- build_alias=$ac_optarg ;; -- -- -cache-file | --cache-file | --cache-fil | --cache-fi \ -- | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) -- ac_prev=cache_file ;; -- -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ -- | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) -- cache_file=$ac_optarg ;; -- -- --config-cache | -C) -- cache_file=config.cache ;; -- -- -datadir | --datadir | --datadi | --datad | --data | --dat | --da) -- ac_prev=datadir ;; -- -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \ -- | --da=*) -- datadir=$ac_optarg ;; -- -- -disable-* | --disable-*) -- ac_feature=`expr "x$ac_option" : 'x-*disable-(.*)'` -- # Reject names that are not valid shell variable names. -- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && -- { echo "$as_me: error: invalid feature name: $ac_feature" >&2 -- { (exit 1); exit 1; }; } -- ac_feature=`echo $ac_feature | sed 's/-/_/g'` -- eval "enable_$ac_feature=no" ;; -- -- -enable-* | --enable-*) -- ac_feature=`expr "x$ac_option" : 'x-*enable-([^=]*)'` -- # Reject names that are not valid shell variable names. -- expr "x$ac_feature" : ".*[^-_$as_cr_alnum]" >/dev/null && -- { echo "$as_me: error: invalid feature name: $ac_feature" >&2 -- { (exit 1); exit 1; }; } -- ac_feature=`echo $ac_feature | sed 's/-/_/g'` -- case $ac_option in -- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\''/g"`;; -- *) ac_optarg=yes ;; -- esac -- eval "enable_$ac_feature='$ac_optarg'" ;; -- -- -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ -- | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ -- | --exec | --exe | --ex) -- ac_prev=exec_prefix ;; -- -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ -- | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ -- | --exec=* | --exe=* | --ex=*) -- exec_prefix=$ac_optarg ;; -- -- -gas | --gas | --ga | --g) -- # Obsolete; use --with-gas. -- with_gas=yes ;; -- -- -help | --help | --hel | --he | -h) -- ac_init_help=long ;; -- -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) -- ac_init_help=recursive ;; -- -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) -- ac_init_help=short ;; -- -- -host | --host | --hos | --ho) -- ac_prev=host_alias ;; -- -host=* | --host=* | --hos=* | --ho=*) -- host_alias=$ac_optarg ;; -- -- -includedir | --includedir | --includedi | --included | --include \ -- | --includ | --inclu | --incl | --inc) -- ac_prev=includedir ;; -- -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ -- | --includ=* | --inclu=* | --incl=* | --inc=*) -- includedir=$ac_optarg ;; -- -- -infodir | --infodir | --infodi | --infod | --info | --inf) -- ac_prev=infodir ;; -- -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) -- infodir=$ac_optarg ;; -- -- -libdir | --libdir | --libdi | --libd) -- ac_prev=libdir ;; -- -libdir=* | --libdir=* | --libdi=* | --libd=*) -- libdir=$ac_optarg ;; -- -- -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ -- | --libexe | --libex | --libe) -- ac_prev=libexecdir ;; -- -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ -- | --libexe=* | --libex=* | --libe=*) -- libexecdir=$ac_optarg ;; -- -- -localstatedir | --localstatedir | --localstatedi | --localstated \ -- | --localstate | --localstat | --localsta | --localst \ -- | --locals | --local | --loca | --loc | --lo) -- ac_prev=localstatedir ;; -- -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ -- | --localstate=* | --localstat=* | --localsta=* | --localst=* \ -- | --locals=* | --local=* | --loca=* | --loc=* | --lo=*) -- localstatedir=$ac_optarg ;; -- -- -mandir | --mandir | --mandi | --mand | --man | --ma | --m) -- ac_prev=mandir ;; -- -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) -- mandir=$ac_optarg ;; -- -- -nfp | --nfp | --nf) -- # Obsolete; use --without-fp. -- with_fp=no ;; -- -- -no-create | --no-create | --no-creat | --no-crea | --no-cre \ -- | --no-cr | --no-c | -n) -- no_create=yes ;; -- -- -no-recursion | --no-recursion | --no-recursio | --no-recursi \ -- | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) -- no_recursion=yes ;; -- -- -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ -- | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ -- | --oldin | --oldi | --old | --ol | --o) -- ac_prev=oldincludedir ;; -- -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ -- | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ -- | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) -- oldincludedir=$ac_optarg ;; -- -- -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) -- ac_prev=prefix ;; -- -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) -- prefix=$ac_optarg ;; -- -- -program-prefix | --program-prefix | --program-prefi | --program-pref \ -- | --program-pre | --program-pr | --program-p) -- ac_prev=program_prefix ;; -- -program-prefix=* | --program-prefix=* | --program-prefi=* \ -- | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) -- program_prefix=$ac_optarg ;; -- -- -program-suffix | --program-suffix | --program-suffi | --program-suff \ -- | --program-suf | --program-su | --program-s) -- ac_prev=program_suffix ;; -- -program-suffix=* | --program-suffix=* | --program-suffi=* \ -- | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) -- program_suffix=$ac_optarg ;; -- -- -program-transform-name | --program-transform-name \ -- | --program-transform-nam | --program-transform-na \ -- | --program-transform-n | --program-transform- \ -- | --program-transform | --program-transfor \ -- | --program-transfo | --program-transf \ -- | --program-trans | --program-tran \ -- | --progr-tra | --program-tr | --program-t) -- ac_prev=program_transform_name ;; -- -program-transform-name=* | --program-transform-name=* \ -- | --program-transform-nam=* | --program-transform-na=* \ -- | --program-transform-n=* | --program-transform-=* \ -- | --program-transform=* | --program-transfor=* \ -- | --program-transfo=* | --program-transf=* \ -- | --program-trans=* | --program-tran=* \ -- | --progr-tra=* | --program-tr=* | --program-t=*) -- program_transform_name=$ac_optarg ;; -- -- -q | -quiet | --quiet | --quie | --qui | --qu | --q \ -- | -silent | --silent | --silen | --sile | --sil) -- silent=yes ;; -- -- -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) -- ac_prev=sbindir ;; -- -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ -- | --sbi=* | --sb=*) -- sbindir=$ac_optarg ;; -- -- -sharedstatedir | --sharedstatedir | --sharedstatedi \ -- | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ -- | --sharedst | --shareds | --shared | --share | --shar \ -- | --sha | --sh) -- ac_prev=sharedstatedir ;; -- -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ -- | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ -- | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ -- | --sha=* | --sh=*) -- sharedstatedir=$ac_optarg ;; -- -- -site | --site | --sit) -- ac_prev=site ;; -- -site=* | --site=* | --sit=*) -- site=$ac_optarg ;; -- -- -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) -- ac_prev=srcdir ;; -- -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) -- srcdir=$ac_optarg ;; -- -- -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ -- | --syscon | --sysco | --sysc | --sys | --sy) -- ac_prev=sysconfdir ;; -- -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ -- | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) -- sysconfdir=$ac_optarg ;; -- -- -target | --target | --targe | --targ | --tar | --ta | --t) -- ac_prev=target_alias ;; -- -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) -- target_alias=$ac_optarg ;; -- -- -v | -verbose | --verbose | --verbos | --verbo | --verb) -- verbose=yes ;; -- -- -version | --version | --versio | --versi | --vers | -V) -- ac_init_version=: ;; -- -- -with-* | --with-*) -- ac_package=`expr "x$ac_option" : 'x-*with-([^=]*)'` -- # Reject names that are not valid shell variable names. -- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && -- { echo "$as_me: error: invalid package name: $ac_package" >&2 -- { (exit 1); exit 1; }; } -- ac_package=`echo $ac_package| sed 's/-/_/g'` -- case $ac_option in -- *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\''/g"`;; -- *) ac_optarg=yes ;; -- esac -- eval "with_$ac_package='$ac_optarg'" ;; -- -- -without-* | --without-*) -- ac_package=`expr "x$ac_option" : 'x-*without-(.*)'` -- # Reject names that are not valid shell variable names. -- expr "x$ac_package" : ".*[^-_$as_cr_alnum]" >/dev/null && -- { echo "$as_me: error: invalid package name: $ac_package" >&2 -- { (exit 1); exit 1; }; } -- ac_package=`echo $ac_package | sed 's/-/_/g'` -- eval "with_$ac_package=no" ;; -- -- --x) -- # Obsolete; use --with-x. -- with_x=yes ;; -- -- -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ -- | --x-incl | --x-inc | --x-in | --x-i) -- ac_prev=x_includes ;; -- -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ -- | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) -- x_includes=$ac_optarg ;; -- -- -x-libraries | --x-libraries | --x-librarie | --x-librari \ -- | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) -- ac_prev=x_libraries ;; -- -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ -- | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) -- x_libraries=$ac_optarg ;; -- -- -*) { echo "$as_me: error: unrecognized option: $ac_option --Try `$0 --help' for more information." >&2 -- { (exit 1); exit 1; }; } -- ;; -- -- *=*) -- ac_envvar=`expr "x$ac_option" : 'x([^=]*)='` -- # Reject names that are not valid shell variable names. -- expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null && -- { echo "$as_me: error: invalid variable name: $ac_envvar" >&2 -- { (exit 1); exit 1; }; } -- ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\''/g"` -- eval "$ac_envvar='$ac_optarg'" -- export $ac_envvar ;; -- -- *) -- # FIXME: should be removed in autoconf 3.0. -- echo "$as_me: WARNING: you should use --build, --host, --target" >&2 -- expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && -- echo "$as_me: WARNING: invalid host type: $ac_option" >&2 -- : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} -- ;; -- -- esac --done -- --if test -n "$ac_prev"; then -- ac_option=--`echo $ac_prev | sed 's/_/-/g'` -- { echo "$as_me: error: missing argument to $ac_option" >&2 -- { (exit 1); exit 1; }; } --fi -- --# Be sure to have absolute paths. --for ac_var in exec_prefix prefix --do -- eval ac_val=$`echo $ac_var` -- case $ac_val in -- [\/$]* | ?:[\/]* | NONE | '' ) ;; -- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 -- { (exit 1); exit 1; }; };; -- esac --done -- --# Be sure to have absolute paths. --for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \ -- localstatedir libdir includedir oldincludedir infodir mandir --do -- eval ac_val=$`echo $ac_var` -- case $ac_val in -- [\/$]* | ?:[\/]* ) ;; -- *) { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2 -- { (exit 1); exit 1; }; };; -- esac --done -- --# There might be people who depend on the old broken behavior: `$host' --# used to hold the argument of --host etc. --# FIXME: To remove some day. --build=$build_alias --host=$host_alias --target=$target_alias -- --# FIXME: To remove some day. --if test "x$host_alias" != x; then -- if test "x$build_alias" = x; then -- cross_compiling=maybe -- echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. -- If a cross compiler is detected then cross compile mode will be used." >&2 -- elif test "x$build_alias" != "x$host_alias"; then -- cross_compiling=yes -- fi --fi -- --ac_tool_prefix= --test -n "$host_alias" && ac_tool_prefix=$host_alias- -- --test "$silent" = yes && exec 6>/dev/null -- -- --# Find the source files, if location was not specified. --if test -z "$srcdir"; then -- ac_srcdir_defaulted=yes -- # Try the directory containing this script, then its parent. -- ac_confdir=`(dirname "$0") 2>/dev/null || --$as_expr X"$0" : 'X(.*[^/])//*[^/][^/]*/*$' | \ -- X"$0" : 'X(//)[^/]' | \ -- X"$0" : 'X(//)$' | \ -- X"$0" : 'X(/)' | \ -- . : '(.)' 2>/dev/null || --echo X"$0" | -- sed '/^X(.*[^/])//*[^/][^/]*/*$/{ s//\1/; q; } -- /^X(//)[^/].*/{ s//\1/; q; } -- /^X(//)$/{ s//\1/; q; } -- /^X(/).*/{ s//\1/; q; } -- s/.*/./; q'` -- srcdir=$ac_confdir -- if test ! -r $srcdir/$ac_unique_file; then -- srcdir=.. -- fi --else -- ac_srcdir_defaulted=no --fi --if test ! -r $srcdir/$ac_unique_file; then -- if test "$ac_srcdir_defaulted" = yes; then -- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2 -- { (exit 1); exit 1; }; } -- else -- { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2 -- { (exit 1); exit 1; }; } -- fi --fi --(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null || -- { echo "$as_me: error: sources are in $srcdir, but `cd $srcdir' does not work" >&2 -- { (exit 1); exit 1; }; } --srcdir=`echo "$srcdir" | sed 's%([^\/])[\/]*$%\1%'` --ac_env_build_alias_set=${build_alias+set} --ac_env_build_alias_value=$build_alias --ac_cv_env_build_alias_set=${build_alias+set} --ac_cv_env_build_alias_value=$build_alias --ac_env_host_alias_set=${host_alias+set} --ac_env_host_alias_value=$host_alias --ac_cv_env_host_alias_set=${host_alias+set} --ac_cv_env_host_alias_value=$host_alias --ac_env_target_alias_set=${target_alias+set} --ac_env_target_alias_value=$target_alias --ac_cv_env_target_alias_set=${target_alias+set} --ac_cv_env_target_alias_value=$target_alias --ac_env_CC_set=${CC+set} --ac_env_CC_value=$CC --ac_cv_env_CC_set=${CC+set} --ac_cv_env_CC_value=$CC --ac_env_CFLAGS_set=${CFLAGS+set} --ac_env_CFLAGS_value=$CFLAGS --ac_cv_env_CFLAGS_set=${CFLAGS+set} --ac_cv_env_CFLAGS_value=$CFLAGS --ac_env_LDFLAGS_set=${LDFLAGS+set} --ac_env_LDFLAGS_value=$LDFLAGS --ac_cv_env_LDFLAGS_set=${LDFLAGS+set} --ac_cv_env_LDFLAGS_value=$LDFLAGS --ac_env_CPPFLAGS_set=${CPPFLAGS+set} --ac_env_CPPFLAGS_value=$CPPFLAGS --ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set} --ac_cv_env_CPPFLAGS_value=$CPPFLAGS --ac_env_CPP_set=${CPP+set} --ac_env_CPP_value=$CPP --ac_cv_env_CPP_set=${CPP+set} --ac_cv_env_CPP_value=$CPP -- --# --# Report the --help message. --# --if test "$ac_init_help" = "long"; then -- # Omit some internal or obsolete options to make the list less imposing. -- # This message is too long to be a string in the A/UX 3.1 sh. -- cat <<_ACEOF --`configure' configures GRUB 0.97 to adapt to many kinds of systems. -- --Usage: $0 [OPTION]... [VAR=VALUE]... -- --To assign environment variables (e.g., CC, CFLAGS...), specify them as --VAR=VALUE. See below for descriptions of some of the useful variables. -- --Defaults for the options are specified in brackets. -- --Configuration: -- -h, --help display this help and exit -- --help=short display options specific to this package -- --help=recursive display the short help of all the included packages -- -V, --version display version information and exit -- -q, --quiet, --silent do not print `checking...' messages -- --cache-file=FILE cache test results in FILE [disabled] -- -C, --config-cache alias for `--cache-file=config.cache' -- -n, --no-create do not create output files -- --srcdir=DIR find the sources in DIR [configure dir or `..'] -- --_ACEOF -- -- cat <<_ACEOF --Installation directories: -- --prefix=PREFIX install architecture-independent files in PREFIX -- [$ac_default_prefix] -- --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX -- [PREFIX] -- --By default, `make install' will install all the files in --`$ac_default_prefix/bin', `$ac_default_prefix/lib' etc. You can specify --an installation prefix other than `$ac_default_prefix' using `--prefix', --for instance `--prefix=$HOME'. -- --For better control, use the options below. -- --Fine tuning of the installation directories: -- --bindir=DIR user executables [EPREFIX/bin] -- --sbindir=DIR system admin executables [EPREFIX/sbin] -- --libexecdir=DIR program executables [EPREFIX/libexec] -- --datadir=DIR read-only architecture-independent data [PREFIX/share] -- --sysconfdir=DIR read-only single-machine data [PREFIX/etc] -- --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] -- --localstatedir=DIR modifiable single-machine data [PREFIX/var] -- --libdir=DIR object code libraries [EPREFIX/lib] -- --includedir=DIR C header files [PREFIX/include] -- --oldincludedir=DIR C header files for non-gcc [/usr/include] -- --infodir=DIR info documentation [PREFIX/info] -- --mandir=DIR man documentation [PREFIX/man] --_ACEOF -- -- cat <<_ACEOF -- --Program names: -- --program-prefix=PREFIX prepend PREFIX to installed program names -- --program-suffix=SUFFIX append SUFFIX to installed program names -- --program-transform-name=PROGRAM run sed PROGRAM on installed program names -- --System types: -- --build=BUILD configure for building on BUILD [guessed] -- --host=HOST cross-compile to build programs to run on HOST [BUILD] --_ACEOF --fi -- --if test -n "$ac_init_help"; then -- case $ac_init_help in -- short | recursive ) echo "Configuration of GRUB 0.97:";; -- esac -- cat <<_ACEOF -- --Optional Features: -- --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) -- --enable-FEATURE[=ARG] include FEATURE [ARG=yes] -- --enable-maintainer-mode enable make rules and dependencies not useful -- (and sometimes confusing) to the casual installer -- --disable-dependency-tracking speeds up one-time build -- --enable-dependency-tracking do not reject slow dependency extractors -- --disable-ext2fs disable ext2fs support in Stage 2 -- --disable-fat disable FAT support in Stage 2 -- --disable-ffs disable FFS support in Stage 2 -- --disable-ufs2 disable UFS2 support in Stage 2 -- --disable-minix disable Minix fs support in Stage 2 -- --disable-reiserfs disable ReiserFS support in Stage 2 -- --disable-vstafs disable VSTa FS support in Stage 2 -- --disable-jfs disable IBM JFS support in Stage 2 -- --disable-xfs disable SGI XFS support in Stage 2 -- --disable-iso9660 disable ISO9660 support in Stage 2 -- --disable-gunzip disable decompression in Stage 2 -- --disable-md5-password disable MD5 password support in Stage 2 -- --disable-packet-retransmission -- turn off packet retransmission -- --enable-pci-direct access PCI directly instead of using BIOS -- --enable-3c509 enable 3Com509 driver -- --enable-3c529 enable 3Com529 driver -- --enable-3c595 enable 3Com595 driver -- --enable-3c90x enable 3Com90x driver -- --enable-cs89x0 enable CS89x0 driver -- --enable-davicom enable Davicom driver -- --enable-depca enable DEPCA and EtherWORKS driver -- --enable-eepro enable Etherexpress Pro/10 driver -- --enable-eepro100 enable Etherexpress Pro/100 driver -- --enable-epic100 enable SMC 83c170 EPIC/100 driver -- --enable-3c507 enable 3Com507 driver -- --enable-exos205 enable EXOS205 driver -- --enable-ni5210 enable Racal-Interlan NI5210 driver -- --enable-lance enable Lance PCI PCNet/32 driver -- --enable-ne2100 enable Novell NE2100 driver -- --enable-ni6510 enable Racal-Interlan NI6510 driver -- --enable-natsemi enable NatSemi DP8381x driver -- --enable-ni5010 enable Racal-Interlan NI5010 driver -- --enable-3c503 enable 3Com503 driver -- --enable-ne enable NE1000/2000 ISA driver -- --enable-ns8390 enable NE2000 PCI driver -- --enable-wd enable WD8003/8013, SMC8216/8416 driver -- --enable-otulip enable old Tulip driver -- --enable-rtl8139 enable Realtek 8139 driver -- --enable-sis900 enable SIS 900 and SIS 7016 driver -- --enable-sk-g16 enable Schneider and Koch G16 driver -- --enable-smc9000 enable SMC9000 driver -- --enable-tiara enable Tiara driver -- --enable-tulip enable Tulip driver -- --enable-via-rhine enable Rhine-I/II driver -- --enable-w89c840 enable Winbond W89c840, Compex RL100-ATX driver -- --enable-3c503-shmem use 3c503 shared memory mode -- --enable-3c503-aui use AUI by default on 3c503 cards -- --enable-compex-rl2000-fix -- specify this if you have a Compex RL2000 PCI -- --enable-smc9000-scan=LIST -- probe for SMC9000 I/O addresses using LIST -- --enable-ne-scan=LIST probe for NE base address using LIST -- --enable-wd-default-mem=MEM -- set the default memory location for WD/SMC -- --enable-cs-scan=LIST probe for CS89x0 base address using LIST -- --enable-diskless enable diskless support -- --disable-hercules disable hercules terminal support -- --disable-serial disable serial terminal support -- --enable-serial-speed-simulation -- simulate the slowness of a serial device -- --enable-preset-menu=FILE -- preset a menu file FILE in Stage 2 -- --enable-example-kernel -- build the example Multiboot kernel -- --disable-auto-linux-mem-opt -- don't pass Linux mem= option automatically -- --Optional Packages: -- --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] -- --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) -- --with-binutils=DIR search the directory DIR to find binutils -- --without-curses do not use curses -- --Some influential environment variables: -- CC C compiler command -- CFLAGS C compiler flags -- LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a -- nonstandard directory <lib dir> -- CPPFLAGS C/C++ preprocessor flags, e.g. -I<include dir> if you have -- headers in a nonstandard directory <include dir> -- CPP C preprocessor -- --Use these variables to override the choices made by `configure' or to help --it to find libraries and programs with nonstandard names/locations. -- --Report bugs to bug-grub@gnu.org. --_ACEOF --fi -- --if test "$ac_init_help" = "recursive"; then -- # If there are subdirs, report their specific --help. -- ac_popdir=`pwd` -- for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue -- test -d $ac_dir || continue -- ac_builddir=. -- --if test "$ac_dir" != .; then -- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^.[\/],,'` -- # A "../" for each directory in $ac_dir_suffix. -- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\/]*,../,g'` --else -- ac_dir_suffix= ac_top_builddir= --fi -- --case $srcdir in -- .) # No --srcdir option. We are building in place. -- ac_srcdir=. -- if test -z "$ac_top_builddir"; then -- ac_top_srcdir=. -- else -- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` -- fi ;; -- [\/]* | ?:[\/]* ) # Absolute path. -- ac_srcdir=$srcdir$ac_dir_suffix; -- ac_top_srcdir=$srcdir ;; -- *) # Relative path. -- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix -- ac_top_srcdir=$ac_top_builddir$srcdir ;; --esac -- --# Do not use `cd foo && pwd` to compute absolute paths, because --# the directories may not exist. --case `pwd` in --.) ac_abs_builddir="$ac_dir";; --*) -- case "$ac_dir" in -- .) ac_abs_builddir=`pwd`;; -- [\/]* | ?:[\/]* ) ac_abs_builddir="$ac_dir";; -- *) ac_abs_builddir=`pwd`/"$ac_dir";; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_builddir=${ac_top_builddir}.;; --*) -- case ${ac_top_builddir}. in -- .) ac_abs_top_builddir=$ac_abs_builddir;; -- [\/]* | ?:[\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; -- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_srcdir=$ac_srcdir;; --*) -- case $ac_srcdir in -- .) ac_abs_srcdir=$ac_abs_builddir;; -- [\/]* | ?:[\/]* ) ac_abs_srcdir=$ac_srcdir;; -- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_srcdir=$ac_top_srcdir;; --*) -- case $ac_top_srcdir in -- .) ac_abs_top_srcdir=$ac_abs_builddir;; -- [\/]* | ?:[\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; -- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; -- esac;; --esac -- -- cd $ac_dir -- # Check for guested configure; otherwise get Cygnus style configure. -- if test -f $ac_srcdir/configure.gnu; then -- echo -- $SHELL $ac_srcdir/configure.gnu --help=recursive -- elif test -f $ac_srcdir/configure; then -- echo -- $SHELL $ac_srcdir/configure --help=recursive -- elif test -f $ac_srcdir/configure.ac || -- test -f $ac_srcdir/configure.in; then -- echo -- $ac_configure --help -- else -- echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 -- fi -- cd $ac_popdir -- done --fi -- --test -n "$ac_init_help" && exit 0 --if $ac_init_version; then -- cat <<_ACEOF --GRUB configure 0.97 --generated by GNU Autoconf 2.59 -- --Copyright (C) 2003 Free Software Foundation, Inc. --This configure script is free software; the Free Software Foundation --gives unlimited permission to copy, distribute and modify it. --_ACEOF -- exit 0 --fi --exec 5>config.log --cat >&5 <<_ACEOF --This file contains any messages produced by compilers while --running configure, to aid debugging if configure makes a mistake. -- --It was created by GRUB $as_me 0.97, which was --generated by GNU Autoconf 2.59. Invocation command line was -- -- $ $0 $@ -- --_ACEOF --{ --cat <<_ASUNAME --## --------- ## --## Platform. ## --## --------- ## -- --hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` --uname -m = `(uname -m) 2>/dev/null || echo unknown` --uname -r = `(uname -r) 2>/dev/null || echo unknown` --uname -s = `(uname -s) 2>/dev/null || echo unknown` --uname -v = `(uname -v) 2>/dev/null || echo unknown` -- --/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` --/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` -- --/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` --/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` --/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` --hostinfo = `(hostinfo) 2>/dev/null || echo unknown` --/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` --/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` --/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` -- --_ASUNAME -- --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- echo "PATH: $as_dir" --done -- --} >&5 -- --cat >&5 <<_ACEOF -- -- --## ----------- ## --## Core tests. ## --## ----------- ## -- --_ACEOF -- -- --# Keep a trace of the command line. --# Strip out --no-create and --no-recursion so they do not pile up. --# Strip out --silent because we don't want to record it for future runs. --# Also quote any args containing shell meta-characters. --# Make two passes to allow for proper duplicate-argument suppression. --ac_configure_args= --ac_configure_args0= --ac_configure_args1= --ac_sep= --ac_must_keep_next=false --for ac_pass in 1 2 --do -- for ac_arg -- do -- case $ac_arg in -- -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -- -q | -quiet | --quiet | --quie | --qui | --qu | --q \ -- | -silent | --silent | --silen | --sile | --sil) -- continue ;; -- *" "*|*" "*|*[[]~#$^&*(){}\|;<>?"']*) -- ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\''/g"` ;; -- esac -- case $ac_pass in -- 1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;; -- 2) -- ac_configure_args1="$ac_configure_args1 '$ac_arg'" -- if test $ac_must_keep_next = true; then -- ac_must_keep_next=false # Got value, back to normal. -- else -- case $ac_arg in -- *=* | --config-cache | -C | -disable-* | --disable-* \ -- | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ -- | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ -- | -with-* | --with-* | -without-* | --without-* | --x) -- case "$ac_configure_args0 " in -- "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; -- esac -- ;; -- -* ) ac_must_keep_next=true ;; -- esac -- fi -- ac_configure_args="$ac_configure_args$ac_sep'$ac_arg'" -- # Get rid of the leading space. -- ac_sep=" " -- ;; -- esac -- done --done --$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; } --$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; } -- --# When interrupted or exit'd, cleanup temporary files, and complete --# config.log. We remove comments because anyway the quotes in there --# would cause problems or look ugly. --# WARNING: Be sure not to use single quotes in there, as some shells, --# such as our DU 5.0 friend, will then `close' the trap. --trap 'exit_status=$? -- # Save into config.log some information that might help in debugging. -- { -- echo -- -- cat <<_ASBOX --## ---------------- ## --## Cache variables. ## --## ---------------- ## --_ASBOX -- echo -- # The following way of writing the cache mishandles newlines in values, --{ -- (set) 2>&1 | -- case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in -- *ac_space=\ *) -- sed -n \ -- "s/'"'"'/'"'"'\\'"'"''"'"'/g; -- s/^\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\)=\(.*\)/\1='"'"'\2'"'"'/p" -- ;; -- *) -- sed -n \ -- "s/^\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\)=\(.*\)/\1=\2/p" -- ;; -- esac; --} -- echo -- -- cat <<_ASBOX --## ----------------- ## --## Output variables. ## --## ----------------- ## --_ASBOX -- echo -- for ac_var in $ac_subst_vars -- do -- eval ac_val=$`echo $ac_var` -- echo "$ac_var='"'"'$ac_val'"'"'" -- done | sort -- echo -- -- if test -n "$ac_subst_files"; then -- cat <<_ASBOX --## ------------- ## --## Output files. ## --## ------------- ## --_ASBOX -- echo -- for ac_var in $ac_subst_files -- do -- eval ac_val=$`echo $ac_var` -- echo "$ac_var='"'"'$ac_val'"'"'" -- done | sort -- echo -- fi -- -- if test -s confdefs.h; then -- cat <<_ASBOX --## ----------- ## --## confdefs.h. ## --## ----------- ## --_ASBOX -- echo -- sed "/^$/d" confdefs.h | sort -- echo -- fi -- test "$ac_signal" != 0 && -- echo "$as_me: caught signal $ac_signal" -- echo "$as_me: exit $exit_status" -- } >&5 -- rm -f core *.core && -- rm -rf conftest* confdefs* conf$$* $ac_clean_files && -- exit $exit_status -- ' 0 --for ac_signal in 1 2 13 15; do -- trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal --done --ac_signal=0 -- --# confdefs.h avoids OS command line length limits that DEFS can exceed. --rm -rf conftest* confdefs.h --# AIX cpp loses on an empty file, so make sure it contains at least a newline. --echo >confdefs.h -- --# Predefined preprocessor variables. -- --cat >>confdefs.h <<_ACEOF --#define PACKAGE_NAME "$PACKAGE_NAME" --_ACEOF -- -- --cat >>confdefs.h <<_ACEOF --#define PACKAGE_TARNAME "$PACKAGE_TARNAME" --_ACEOF -- -- --cat >>confdefs.h <<_ACEOF --#define PACKAGE_VERSION "$PACKAGE_VERSION" --_ACEOF -- -- --cat >>confdefs.h <<_ACEOF --#define PACKAGE_STRING "$PACKAGE_STRING" --_ACEOF -- -- --cat >>confdefs.h <<_ACEOF --#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" --_ACEOF -- -- --# Let the site file select an alternate cache file if it wants to. --# Prefer explicitly selected file to automatically selected ones. --if test -z "$CONFIG_SITE"; then -- if test "x$prefix" != xNONE; then -- CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" -- else -- CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" -- fi --fi --for ac_site_file in $CONFIG_SITE; do -- if test -r "$ac_site_file"; then -- { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5 --echo "$as_me: loading site script $ac_site_file" >&6;} -- sed 's/^/| /' "$ac_site_file" >&5 -- . "$ac_site_file" -- fi --done -- --if test -r "$cache_file"; then -- # Some versions of bash will fail to source /dev/null (special -- # files actually), so we avoid doing that. -- if test -f "$cache_file"; then -- { echo "$as_me:$LINENO: loading cache $cache_file" >&5 --echo "$as_me: loading cache $cache_file" >&6;} -- case $cache_file in -- [\/]* | ?:[\/]* ) . $cache_file;; -- *) . ./$cache_file;; -- esac -- fi --else -- { echo "$as_me:$LINENO: creating cache $cache_file" >&5 --echo "$as_me: creating cache $cache_file" >&6;} -- >$cache_file --fi -- --# Check that the precious variables saved in the cache have kept the same --# value. --ac_cache_corrupted=false --for ac_var in `(set) 2>&1 | -- sed -n 's/^ac_env_([a-zA-Z_0-9]*)_set=.*/\1/p'`; do -- eval ac_old_set=$ac_cv_env_${ac_var}_set -- eval ac_new_set=$ac_env_${ac_var}_set -- eval ac_old_val="$ac_cv_env_${ac_var}_value" -- eval ac_new_val="$ac_env_${ac_var}_value" -- case $ac_old_set,$ac_new_set in -- set,) -- { echo "$as_me:$LINENO: error: `$ac_var' was set to `$ac_old_val' in the previous run" >&5 --echo "$as_me: error: `$ac_var' was set to `$ac_old_val' in the previous run" >&2;} -- ac_cache_corrupted=: ;; -- ,set) -- { echo "$as_me:$LINENO: error: `$ac_var' was not set in the previous run" >&5 --echo "$as_me: error: `$ac_var' was not set in the previous run" >&2;} -- ac_cache_corrupted=: ;; -- ,);; -- *) -- if test "x$ac_old_val" != "x$ac_new_val"; then -- { echo "$as_me:$LINENO: error: `$ac_var' has changed since the previous run:" >&5 --echo "$as_me: error: `$ac_var' has changed since the previous run:" >&2;} -- { echo "$as_me:$LINENO: former value: $ac_old_val" >&5 --echo "$as_me: former value: $ac_old_val" >&2;} -- { echo "$as_me:$LINENO: current value: $ac_new_val" >&5 --echo "$as_me: current value: $ac_new_val" >&2;} -- ac_cache_corrupted=: -- fi;; -- esac -- # Pass precious variables to config.status. -- if test "$ac_new_set" = set; then -- case $ac_new_val in -- *" "*|*" "*|*[[]~#$^&*(){}\|;<>?"']*) -- ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\''/g"` ;; -- *) ac_arg=$ac_var=$ac_new_val ;; -- esac -- case " $ac_configure_args " in -- *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. -- *) ac_configure_args="$ac_configure_args '$ac_arg'" ;; -- esac -- fi --done --if $ac_cache_corrupted; then -- { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5 --echo "$as_me: error: changes in the environment can compromise the build" >&2;} -- { { echo "$as_me:$LINENO: error: run `make distclean' and/or `rm $cache_file' and start over" >&5 --echo "$as_me: error: run `make distclean' and/or `rm $cache_file' and start over" >&2;} -- { (exit 1); exit 1; }; } --fi -- --ac_ext=c --ac_cpp='$CPP $CPPFLAGS' --ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' --ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' --ac_compiler_gnu=$ac_cv_c_compiler_gnu -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- ac_config_headers="$ac_config_headers config.h" -- --am__api_version="1.9" --ac_aux_dir= --for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do -- if test -f $ac_dir/install-sh; then -- ac_aux_dir=$ac_dir -- ac_install_sh="$ac_aux_dir/install-sh -c" -- break -- elif test -f $ac_dir/install.sh; then -- ac_aux_dir=$ac_dir -- ac_install_sh="$ac_aux_dir/install.sh -c" -- break -- elif test -f $ac_dir/shtool; then -- ac_aux_dir=$ac_dir -- ac_install_sh="$ac_aux_dir/shtool install -c" -- break -- fi --done --if test -z "$ac_aux_dir"; then -- { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&5 --echo "$as_me: error: cannot find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." >&2;} -- { (exit 1); exit 1; }; } --fi --ac_config_guess="$SHELL $ac_aux_dir/config.guess" --ac_config_sub="$SHELL $ac_aux_dir/config.sub" --ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure. -- --# Find a good install program. We prefer a C program (faster), --# so one script is as good as another. But avoid the broken or --# incompatible versions: --# SysV /etc/install, /usr/sbin/install --# SunOS /usr/etc/install --# IRIX /sbin/install --# AIX /bin/install --# AmigaOS /C/install, which installs bootblocks on floppy discs --# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag --# AFS /usr/afsws/bin/install, which mishandles nonexistent args --# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" --# OS/2's system install, which has a completely different semantic --# ./install, which can be erroneously created by make from ./install.sh. --echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5 --echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6 --if test -z "$INSTALL"; then --if test "${ac_cv_path_install+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- # Account for people who put trailing slashes in PATH elements. --case $as_dir/ in -- ./ | .// | /cC/* | \ -- /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ -- ?:\/os2\/install\/* | ?:\/OS2\/INSTALL\/* | \ -- /usr/ucb/* ) ;; -- *) -- # OSF1 and SCO ODT 3.0 have their own names for install. -- # Don't use installbsd from OSF since it installs stuff as root -- # by default. -- for ac_prog in ginstall scoinst install; do -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then -- if test $ac_prog = install && -- grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then -- # AIX install. It has an incompatible calling convention. -- : -- elif test $ac_prog = install && -- grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then -- # program-specific install script used by HP pwplus--don't use. -- : -- else -- ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" -- break 3 -- fi -- fi -- done -- done -- ;; --esac --done -- -- --fi -- if test "${ac_cv_path_install+set}" = set; then -- INSTALL=$ac_cv_path_install -- else -- # As a last resort, use the slow shell script. We don't cache a -- # path for INSTALL within a source directory, because that will -- # break other packages using the cache if that directory is -- # removed, or if the path is relative. -- INSTALL=$ac_install_sh -- fi --fi --echo "$as_me:$LINENO: result: $INSTALL" >&5 --echo "${ECHO_T}$INSTALL" >&6 -- --# Use test -z because SunOS4 sh mishandles braces in ${var-val}. --# It thinks the first close brace ends the variable substitution. --test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' -- --test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' -- --test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' -- --echo "$as_me:$LINENO: checking whether build environment is sane" >&5 --echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6 --# Just in case --sleep 1 --echo timestamp > conftest.file --# Do `set' in a subshell so we don't clobber the current shell's --# arguments. Must try -L first in case configure is actually a --# symlink; some systems play weird games with the mod time of symlinks --# (eg FreeBSD returns the mod time of the symlink's containing --# directory). --if ( -- set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null` -- if test "$*" = "X"; then -- # -L didn't work. -- set X `ls -t $srcdir/configure conftest.file` -- fi -- rm -f conftest.file -- if test "$*" != "X $srcdir/configure conftest.file" \ -- && test "$*" != "X conftest.file $srcdir/configure"; then -- -- # If neither matched, then we have a broken ls. This can happen -- # if, for instance, CONFIG_SHELL is bash and it inherits a -- # broken ls alias from the environment. This has actually -- # happened. Such a system could not be considered "sane". -- { { echo "$as_me:$LINENO: error: ls -t appears to fail. Make sure there is not a broken --alias in your environment" >&5 --echo "$as_me: error: ls -t appears to fail. Make sure there is not a broken --alias in your environment" >&2;} -- { (exit 1); exit 1; }; } -- fi -- -- test "$2" = conftest.file -- ) --then -- # Ok. -- : --else -- { { echo "$as_me:$LINENO: error: newly created file is older than distributed files! --Check your system clock" >&5 --echo "$as_me: error: newly created file is older than distributed files! --Check your system clock" >&2;} -- { (exit 1); exit 1; }; } --fi --echo "$as_me:$LINENO: result: yes" >&5 --echo "${ECHO_T}yes" >&6 --test "$program_prefix" != NONE && -- program_transform_name="s,^,$program_prefix,;$program_transform_name" --# Use a double $ so make ignores it. --test "$program_suffix" != NONE && -- program_transform_name="s,$,$program_suffix,;$program_transform_name" --# Double any \ or $. echo might interpret backslashes. --# By default was `s,x,x', remove it if useless. --cat <<_ACEOF >conftest.sed --s/[\$]/&&/g;s/;s,x,x,$// --_ACEOF --program_transform_name=`echo $program_transform_name | sed -f conftest.sed` --rm conftest.sed -- --# expand $ac_aux_dir to an absolute path --am_aux_dir=`cd $ac_aux_dir && pwd` -- --test x"${MISSING+set}" = xset || MISSING="${SHELL} $am_aux_dir/missing" --# Use eval to expand $SHELL --if eval "$MISSING --run true"; then -- am_missing_run="$MISSING --run " --else -- am_missing_run= -- { echo "$as_me:$LINENO: WARNING: `missing' script is too old or missing" >&5 --echo "$as_me: WARNING: `missing' script is too old or missing" >&2;} --fi -- --if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then -- # We used to keeping the `.' as first argument, in order to -- # allow $(mkdir_p) to be used without argument. As in -- # $(mkdir_p) $(somedir) -- # where $(somedir) is conditionally defined. However this is wrong -- # for two reasons: -- # 1. if the package is installed by a user who cannot write `.' -- # make install will fail, -- # 2. the above comment should most certainly read -- # $(mkdir_p) $(DESTDIR)$(somedir) -- # so it does not work when $(somedir) is undefined and -- # $(DESTDIR) is not. -- # To support the latter case, we have to write -- # test -z "$(somedir)" || $(mkdir_p) $(DESTDIR)$(somedir), -- # so the `.' trick is pointless. -- mkdir_p='mkdir -p --' --else -- # On NextStep and OpenStep, the `mkdir' command does not -- # recognize any option. It will interpret all options as -- # directories to create, and then abort because `.' already -- # exists. -- for d in ./-p ./--version; -- do -- test -d $d && rmdir $d -- done -- # $(mkinstalldirs) is defined by Automake if mkinstalldirs exists. -- if test -f "$ac_aux_dir/mkinstalldirs"; then -- mkdir_p='$(mkinstalldirs)' -- else -- mkdir_p='$(install_sh) -d' -- fi --fi -- --for ac_prog in gawk mawk nawk awk --do -- # Extract the first word of "$ac_prog", so it can be a program name with args. --set dummy $ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_AWK+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$AWK"; then -- ac_cv_prog_AWK="$AWK" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_AWK="$ac_prog" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --AWK=$ac_cv_prog_AWK --if test -n "$AWK"; then -- echo "$as_me:$LINENO: result: $AWK" >&5 --echo "${ECHO_T}$AWK" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- -- test -n "$AWK" && break --done -- --echo "$as_me:$LINENO: checking whether ${MAKE-make} sets $(MAKE)" >&5 --echo $ECHO_N "checking whether ${MAKE-make} sets $(MAKE)... $ECHO_C" >&6 --set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'` --if eval "test "${ac_cv_prog_make_${ac_make}_set+set}" = set"; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.make <<_ACEOF --all: -- @echo 'ac_maketemp="$(MAKE)"' --_ACEOF --# GNU make sometimes prints "make[1]: Entering...", which would confuse us. --eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=` --if test -n "$ac_maketemp"; then -- eval ac_cv_prog_make_${ac_make}_set=yes --else -- eval ac_cv_prog_make_${ac_make}_set=no --fi --rm -f conftest.make --fi --if eval "test "`echo '$ac_cv_prog_make_'${ac_make}_set`" = yes"; then -- echo "$as_me:$LINENO: result: yes" >&5 --echo "${ECHO_T}yes" >&6 -- SET_MAKE= --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 -- SET_MAKE="MAKE=${MAKE-make}" --fi -- --rm -rf .tst 2>/dev/null --mkdir .tst 2>/dev/null --if test -d .tst; then -- am__leading_dot=. --else -- am__leading_dot=_ --fi --rmdir .tst 2>/dev/null -- --# test to see if srcdir already configured --if test "`cd $srcdir && pwd`" != "`pwd`" && -- test -f $srcdir/config.status; then -- { { echo "$as_me:$LINENO: error: source directory already configured; run "make distclean" there first" >&5 --echo "$as_me: error: source directory already configured; run "make distclean" there first" >&2;} -- { (exit 1); exit 1; }; } --fi -- --# test whether we have cygpath --if test -z "$CYGPATH_W"; then -- if (cygpath --version) >/dev/null 2>/dev/null; then -- CYGPATH_W='cygpath -w' -- else -- CYGPATH_W=echo -- fi --fi -- -- --# Define the identity of the package. -- PACKAGE='grub' -- VERSION='0.97' -- -- --cat >>confdefs.h <<_ACEOF --#define PACKAGE "$PACKAGE" --_ACEOF -- -- --cat >>confdefs.h <<_ACEOF --#define VERSION "$VERSION" --_ACEOF -- --# Some tools Automake needs. -- --ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} -- -- --AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} -- -- --AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} -- -- --AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} -- -- --MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} -- --install_sh=${install_sh-"$am_aux_dir/install-sh"} -- --# Installed binaries are usually stripped using `strip' when the user --# run `make install-strip'. However `strip' might not be the right --# tool to use in cross-compilation environments, therefore Automake --# will honor the `STRIP' environment variable to overrule this program. --if test "$cross_compiling" != no; then -- if test -n "$ac_tool_prefix"; then -- # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. --set dummy ${ac_tool_prefix}strip; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_STRIP+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$STRIP"; then -- ac_cv_prog_STRIP="$STRIP" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_STRIP="${ac_tool_prefix}strip" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --STRIP=$ac_cv_prog_STRIP --if test -n "$STRIP"; then -- echo "$as_me:$LINENO: result: $STRIP" >&5 --echo "${ECHO_T}$STRIP" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- --fi --if test -z "$ac_cv_prog_STRIP"; then -- ac_ct_STRIP=$STRIP -- # Extract the first word of "strip", so it can be a program name with args. --set dummy strip; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$ac_ct_STRIP"; then -- ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_ac_ct_STRIP="strip" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- -- test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":" --fi --fi --ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP --if test -n "$ac_ct_STRIP"; then -- echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5 --echo "${ECHO_T}$ac_ct_STRIP" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- -- STRIP=$ac_ct_STRIP --else -- STRIP="$ac_cv_prog_STRIP" --fi -- --fi --INSTALL_STRIP_PROGRAM="${SHELL} $(install_sh) -c -s" -- --# We need awk for the "check" target. The system "awk" is bad on --# some platforms. --# Always define AMTAR for backward compatibility. -- --AMTAR=${AMTAR-"${am_missing_run}tar"} -- --am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' -- -- -- -- -- -- --# Make sure we can run config.sub. --$ac_config_sub sun4 >/dev/null 2>&1 || -- { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5 --echo "$as_me: error: cannot run $ac_config_sub" >&2;} -- { (exit 1); exit 1; }; } -- --echo "$as_me:$LINENO: checking build system type" >&5 --echo $ECHO_N "checking build system type... $ECHO_C" >&6 --if test "${ac_cv_build+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- ac_cv_build_alias=$build_alias --test -z "$ac_cv_build_alias" && -- ac_cv_build_alias=`$ac_config_guess` --test -z "$ac_cv_build_alias" && -- { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5 --echo "$as_me: error: cannot guess build type; you must specify one" >&2;} -- { (exit 1); exit 1; }; } --ac_cv_build=`$ac_config_sub $ac_cv_build_alias` || -- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5 --echo "$as_me: error: $ac_config_sub $ac_cv_build_alias failed" >&2;} -- { (exit 1); exit 1; }; } -- --fi --echo "$as_me:$LINENO: result: $ac_cv_build" >&5 --echo "${ECHO_T}$ac_cv_build" >&6 --build=$ac_cv_build --build_cpu=`echo $ac_cv_build | sed 's/^([^-]*)-([^-]*)-(.*)$/\1/'` --build_vendor=`echo $ac_cv_build | sed 's/^([^-]*)-([^-]*)-(.*)$/\2/'` --build_os=`echo $ac_cv_build | sed 's/^([^-]*)-([^-]*)-(.*)$/\3/'` -- -- --echo "$as_me:$LINENO: checking host system type" >&5 --echo $ECHO_N "checking host system type... $ECHO_C" >&6 --if test "${ac_cv_host+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- ac_cv_host_alias=$host_alias --test -z "$ac_cv_host_alias" && -- ac_cv_host_alias=$ac_cv_build_alias --ac_cv_host=`$ac_config_sub $ac_cv_host_alias` || -- { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5 --echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;} -- { (exit 1); exit 1; }; } -- --fi --echo "$as_me:$LINENO: result: $ac_cv_host" >&5 --echo "${ECHO_T}$ac_cv_host" >&6 --host=$ac_cv_host --host_cpu=`echo $ac_cv_host | sed 's/^([^-]*)-([^-]*)-(.*)$/\1/'` --host_vendor=`echo $ac_cv_host | sed 's/^([^-]*)-([^-]*)-(.*)$/\2/'` --host_os=`echo $ac_cv_host | sed 's/^([^-]*)-([^-]*)-(.*)$/\3/'` -- -- -- --case "$host_cpu" in --i[3456]86) host_cpu=i386 ;; --x86_64) host_cpu=x86_64 ;; --*) { { echo "$as_me:$LINENO: error: unsupported CPU type" >&5 --echo "$as_me: error: unsupported CPU type" >&2;} -- { (exit 1); exit 1; }; } ;; --esac -- -- -- -- --# --# Options --# -- --echo "$as_me:$LINENO: checking whether to enable maintainer-specific portions of Makefiles" >&5 --echo $ECHO_N "checking whether to enable maintainer-specific portions of Makefiles... $ECHO_C" >&6 -- # Check whether --enable-maintainer-mode or --disable-maintainer-mode was given. --if test "${enable_maintainer_mode+set}" = set; then -- enableval="$enable_maintainer_mode" -- USE_MAINTAINER_MODE=$enableval --else -- USE_MAINTAINER_MODE=no --fi; -- echo "$as_me:$LINENO: result: $USE_MAINTAINER_MODE" >&5 --echo "${ECHO_T}$USE_MAINTAINER_MODE" >&6 -- -- --if test $USE_MAINTAINER_MODE = yes; then -- MAINTAINER_MODE_TRUE= -- MAINTAINER_MODE_FALSE='#' --else -- MAINTAINER_MODE_TRUE='#' -- MAINTAINER_MODE_FALSE= --fi -- -- MAINT=$MAINTAINER_MODE_TRUE -- -- --if test "x$enable_maintainer_mode" = xyes; then -- # Extract the first word of "perl", so it can be a program name with args. --set dummy perl; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_path_PERL+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- case $PERL in -- [\/]* | ?:[\/]*) -- ac_cv_path_PERL="$PERL" # Let the user override the test with a path. -- ;; -- *) -- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- -- ;; --esac --fi --PERL=$ac_cv_path_PERL -- --if test -n "$PERL"; then -- echo "$as_me:$LINENO: result: $PERL" >&5 --echo "${ECHO_T}$PERL" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- -- if test -z "$PERL"; then -- { { echo "$as_me:$LINENO: error: perl not found" >&5 --echo "$as_me: error: perl not found" >&2;} -- { (exit 1); exit 1; }; } -- fi --fi -- --# This should be checked before AC_PROG_CC --if test "x$CFLAGS" = x; then -- default_CFLAGS=yes --fi -- --if test "x$host_cpu" = xx86_64; then -- CFLAGS="-m32 $CFLAGS" --fi -- --# --# Programs --# -- --if test -n "$ac_tool_prefix"; then -- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. --set dummy ${ac_tool_prefix}gcc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$CC"; then -- ac_cv_prog_CC="$CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_CC="${ac_tool_prefix}gcc" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --CC=$ac_cv_prog_CC --if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- --fi --if test -z "$ac_cv_prog_CC"; then -- ac_ct_CC=$CC -- # Extract the first word of "gcc", so it can be a program name with args. --set dummy gcc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$ac_ct_CC"; then -- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_ac_ct_CC="gcc" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --ac_ct_CC=$ac_cv_prog_ac_ct_CC --if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- -- CC=$ac_ct_CC --else -- CC="$ac_cv_prog_CC" --fi -- --ac_ext=c --ac_cpp='$CPP $CPPFLAGS' --ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' --ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' --ac_compiler_gnu=$ac_cv_c_compiler_gnu --if test -n "$ac_tool_prefix"; then -- # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. --set dummy ${ac_tool_prefix}gcc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$CC"; then -- ac_cv_prog_CC="$CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_CC="${ac_tool_prefix}gcc" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --CC=$ac_cv_prog_CC --if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- --fi --if test -z "$ac_cv_prog_CC"; then -- ac_ct_CC=$CC -- # Extract the first word of "gcc", so it can be a program name with args. --set dummy gcc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$ac_ct_CC"; then -- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_ac_ct_CC="gcc" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --ac_ct_CC=$ac_cv_prog_ac_ct_CC --if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- -- CC=$ac_ct_CC --else -- CC="$ac_cv_prog_CC" --fi -- --if test -z "$CC"; then -- if test -n "$ac_tool_prefix"; then -- # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. --set dummy ${ac_tool_prefix}cc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$CC"; then -- ac_cv_prog_CC="$CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_CC="${ac_tool_prefix}cc" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --CC=$ac_cv_prog_CC --if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- --fi --if test -z "$ac_cv_prog_CC"; then -- ac_ct_CC=$CC -- # Extract the first word of "cc", so it can be a program name with args. --set dummy cc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$ac_ct_CC"; then -- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_ac_ct_CC="cc" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --ac_ct_CC=$ac_cv_prog_ac_ct_CC --if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- -- CC=$ac_ct_CC --else -- CC="$ac_cv_prog_CC" --fi -- --fi --if test -z "$CC"; then -- # Extract the first word of "cc", so it can be a program name with args. --set dummy cc; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$CC"; then -- ac_cv_prog_CC="$CC" # Let the user override the test. --else -- ac_prog_rejected=no --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then -- ac_prog_rejected=yes -- continue -- fi -- ac_cv_prog_CC="cc" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --if test $ac_prog_rejected = yes; then -- # We found a bogon in the path, so make sure we never use it. -- set dummy $ac_cv_prog_CC -- shift -- if test $# != 0; then -- # We chose a different compiler from the bogus one. -- # However, it has the same basename, so the bogon will be chosen -- # first if we set CC to just the basename; use the full file name. -- shift -- ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" -- fi --fi --fi --fi --CC=$ac_cv_prog_CC --if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- --fi --if test -z "$CC"; then -- if test -n "$ac_tool_prefix"; then -- for ac_prog in cl -- do -- # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. --set dummy $ac_tool_prefix$ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$CC"; then -- ac_cv_prog_CC="$CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_CC="$ac_tool_prefix$ac_prog" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --CC=$ac_cv_prog_CC --if test -n "$CC"; then -- echo "$as_me:$LINENO: result: $CC" >&5 --echo "${ECHO_T}$CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- -- test -n "$CC" && break -- done --fi --if test -z "$CC"; then -- ac_ct_CC=$CC -- for ac_prog in cl --do -- # Extract the first word of "$ac_prog", so it can be a program name with args. --set dummy $ac_prog; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_ac_ct_CC+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$ac_ct_CC"; then -- ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_ac_ct_CC="$ac_prog" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --ac_ct_CC=$ac_cv_prog_ac_ct_CC --if test -n "$ac_ct_CC"; then -- echo "$as_me:$LINENO: result: $ac_ct_CC" >&5 --echo "${ECHO_T}$ac_ct_CC" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- -- test -n "$ac_ct_CC" && break --done -- -- CC=$ac_ct_CC --fi -- --fi -- -- --test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in $PATH --See `config.log' for more details." >&5 --echo "$as_me: error: no acceptable C compiler found in $PATH --See `config.log' for more details." >&2;} -- { (exit 1); exit 1; }; } -- --# Provide some information about the compiler. --echo "$as_me:$LINENO:" \ -- "checking for C compiler version" >&5 --ac_compiler=`set X $ac_compile; echo $2` --{ (eval echo "$as_me:$LINENO: "$ac_compiler --version </dev/null >&5"") >&5 -- (eval $ac_compiler --version </dev/null >&5) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } --{ (eval echo "$as_me:$LINENO: "$ac_compiler -v </dev/null >&5"") >&5 -- (eval $ac_compiler -v </dev/null >&5) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } --{ (eval echo "$as_me:$LINENO: "$ac_compiler -V </dev/null >&5"") >&5 -- (eval $ac_compiler -V </dev/null >&5) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } -- --cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --int --main () --{ -- -- ; -- return 0; --} --_ACEOF --ac_clean_files_save=$ac_clean_files --ac_clean_files="$ac_clean_files a.out a.exe b.out" --# Try to create an executable without -o first, disregard a.out. --# It will help us diagnose broken compilers, and finding out an intuition --# of exeext. --echo "$as_me:$LINENO: checking for C compiler default output file name" >&5 --echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6 --ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` --if { (eval echo "$as_me:$LINENO: "$ac_link_default"") >&5 -- (eval $ac_link_default) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; then -- # Find the output, starting from the most likely. This scheme is --# not robust to junk in `.', hence go to wildcards (a.*) only as a last --# resort. -- --# Be careful to initialize this variable, since it used to be cached. --# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile. --ac_cv_exeext= --# b.out is created by i960 compilers. --for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out --do -- test -f "$ac_file" || continue -- case $ac_file in -- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) -- ;; -- conftest.$ac_ext ) -- # This is the source file. -- ;; -- [ab].out ) -- # We found the default executable, but exeext='' is most -- # certainly right. -- break;; -- *.* ) -- ac_cv_exeext=`expr "$ac_file" : '[^.]*(..*)'` -- # FIXME: I believe we export ac_cv_exeext for Libtool, -- # but it would be cool to find out if it's true. Does anybody -- # maintain Libtool? --akim. -- export ac_cv_exeext -- break;; -- * ) -- break;; -- esac --done --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --{ { echo "$as_me:$LINENO: error: C compiler cannot create executables --See `config.log' for more details." >&5 --echo "$as_me: error: C compiler cannot create executables --See `config.log' for more details." >&2;} -- { (exit 77); exit 77; }; } --fi -- --ac_exeext=$ac_cv_exeext --echo "$as_me:$LINENO: result: $ac_file" >&5 --echo "${ECHO_T}$ac_file" >&6 -- --# Check the compiler produces executables we can run. If not, either --# the compiler is broken, or we cross compile. --echo "$as_me:$LINENO: checking whether the C compiler works" >&5 --echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6 --# FIXME: These cross compiler hacks should be removed for Autoconf 3.0 --# If not cross compiling, check that we can run a simple program. --if test "$cross_compiling" != yes; then -- if { ac_try='./$ac_file' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- cross_compiling=no -- else -- if test "$cross_compiling" = maybe; then -- cross_compiling=yes -- else -- { { echo "$as_me:$LINENO: error: cannot run C compiled programs. --If you meant to cross compile, use `--host'. --See `config.log' for more details." >&5 --echo "$as_me: error: cannot run C compiled programs. --If you meant to cross compile, use `--host'. --See `config.log' for more details." >&2;} -- { (exit 1); exit 1; }; } -- fi -- fi --fi --echo "$as_me:$LINENO: result: yes" >&5 --echo "${ECHO_T}yes" >&6 -- --rm -f a.out a.exe conftest$ac_cv_exeext b.out --ac_clean_files=$ac_clean_files_save --# Check the compiler produces executables we can run. If not, either --# the compiler is broken, or we cross compile. --echo "$as_me:$LINENO: checking whether we are cross compiling" >&5 --echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6 --echo "$as_me:$LINENO: result: $cross_compiling" >&5 --echo "${ECHO_T}$cross_compiling" >&6 -- --echo "$as_me:$LINENO: checking for suffix of executables" >&5 --echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6 --if { (eval echo "$as_me:$LINENO: "$ac_link"") >&5 -- (eval $ac_link) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; then -- # If both `conftest.exe' and `conftest' are `present' (well, observable) --# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will --# work properly (i.e., refer to `conftest.exe'), while it won't with --# `rm'. --for ac_file in conftest.exe conftest conftest.*; do -- test -f "$ac_file" || continue -- case $ac_file in -- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj ) ;; -- *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*(..*)'` -- export ac_cv_exeext -- break;; -- * ) break;; -- esac --done --else -- { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link --See `config.log' for more details." >&5 --echo "$as_me: error: cannot compute suffix of executables: cannot compile and link --See `config.log' for more details." >&2;} -- { (exit 1); exit 1; }; } --fi -- --rm -f conftest$ac_cv_exeext --echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5 --echo "${ECHO_T}$ac_cv_exeext" >&6 -- --rm -f conftest.$ac_ext --EXEEXT=$ac_cv_exeext --ac_exeext=$EXEEXT --echo "$as_me:$LINENO: checking for suffix of object files" >&5 --echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6 --if test "${ac_cv_objext+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --int --main () --{ -- -- ; -- return 0; --} --_ACEOF --rm -f conftest.o conftest.obj --if { (eval echo "$as_me:$LINENO: "$ac_compile"") >&5 -- (eval $ac_compile) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; then -- for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do -- case $ac_file in -- *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;; -- *) ac_cv_objext=`expr "$ac_file" : '.*.(.*)'` -- break;; -- esac --done --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile --See `config.log' for more details." >&5 --echo "$as_me: error: cannot compute suffix of object files: cannot compile --See `config.log' for more details." >&2;} -- { (exit 1); exit 1; }; } --fi -- --rm -f conftest.$ac_cv_objext conftest.$ac_ext --fi --echo "$as_me:$LINENO: result: $ac_cv_objext" >&5 --echo "${ECHO_T}$ac_cv_objext" >&6 --OBJEXT=$ac_cv_objext --ac_objext=$OBJEXT --echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5 --echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6 --if test "${ac_cv_c_compiler_gnu+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --int --main () --{ --#ifndef __GNUC__ -- choke me --#endif -- -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: "$ac_compile"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_compiler_gnu=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --ac_compiler_gnu=no --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --ac_cv_c_compiler_gnu=$ac_compiler_gnu -- --fi --echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5 --echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6 --GCC=`test $ac_compiler_gnu = yes && echo yes` --ac_test_CFLAGS=${CFLAGS+set} --ac_save_CFLAGS=$CFLAGS --CFLAGS="-g" --echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5 --echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6 --if test "${ac_cv_prog_cc_g+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --int --main () --{ -- -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: "$ac_compile"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_prog_cc_g=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --ac_cv_prog_cc_g=no --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --fi --echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5 --echo "${ECHO_T}$ac_cv_prog_cc_g" >&6 --if test "$ac_test_CFLAGS" = set; then -- CFLAGS=$ac_save_CFLAGS --elif test $ac_cv_prog_cc_g = yes; then -- if test "$GCC" = yes; then -- CFLAGS="-g -O2" -- else -- CFLAGS="-g" -- fi --else -- if test "$GCC" = yes; then -- CFLAGS="-O2" -- else -- CFLAGS= -- fi --fi --echo "$as_me:$LINENO: checking for $CC option to accept ANSI C" >&5 --echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6 --if test "${ac_cv_prog_cc_stdc+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- ac_cv_prog_cc_stdc=no --ac_save_CC=$CC --cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include <stdarg.h> --#include <stdio.h> --#include <sys/types.h> --#include <sys/stat.h> --/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ --struct buf { int x; }; --FILE * (*rcsopen) (struct buf *, struct stat *, int); --static char *e (p, i) -- char **p; -- int i; --{ -- return p[i]; --} --static char *f (char * (*g) (char **, int), char **p, ...) --{ -- char *s; -- va_list v; -- va_start (v,p); -- s = g (p, va_arg (v,int)); -- va_end (v); -- return s; --} -- --/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has -- function prototypes and stuff, but not '\xHH' hex character constants. -- These don't provoke an error unfortunately, instead are silently treated -- as 'x'. The following induces an error, until -std1 is added to get -- proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an -- array size at least. It's necessary to write '\x00'==0 to get something -- that's true only with -std1. */ --int osf4_cc_array ['\x00' == 0 ? 1 : -1]; -- --int test (int i, double x); --struct s1 {int (*f) (int a);}; --struct s2 {int (*f) (double a);}; --int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); --int argc; --char **argv; --int --main () --{ --return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; -- ; -- return 0; --} --_ACEOF --# Don't try gcc -ansi; that turns off useful extensions and --# breaks some systems' header files. --# AIX -qlanglvl=ansi --# Ultrix and OSF/1 -std1 --# HP-UX 10.20 and later -Ae --# HP-UX older versions -Aa -D_HPUX_SOURCE --# SVR4 -Xc -D__EXTENSIONS__ --for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" --do -- CC="$ac_save_CC $ac_arg" -- rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: "$ac_compile"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_prog_cc_stdc=$ac_arg --break --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --fi --rm -f conftest.err conftest.$ac_objext --done --rm -f conftest.$ac_ext conftest.$ac_objext --CC=$ac_save_CC -- --fi -- --case "x$ac_cv_prog_cc_stdc" in -- x|xno) -- echo "$as_me:$LINENO: result: none needed" >&5 --echo "${ECHO_T}none needed" >&6 ;; -- *) -- echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5 --echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6 -- CC="$CC $ac_cv_prog_cc_stdc" ;; --esac -- --# Some people use a C++ compiler to compile C. Since we use `exit', --# in C++ we need to declare it. In case someone uses the same compiler --# for both compiling C and C++ we need to have the C++ compiler decide --# the declaration of exit, since it's the most demanding environment. --cat >conftest.$ac_ext <<_ACEOF --#ifndef __cplusplus -- choke me --#endif --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: "$ac_compile"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- for ac_declaration in \ -- '' \ -- 'extern "C" void std::exit (int) throw (); using std::exit;' \ -- 'extern "C" void std::exit (int); using std::exit;' \ -- 'extern "C" void exit (int) throw ();' \ -- 'extern "C" void exit (int);' \ -- 'void exit (int);' --do -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --$ac_declaration --#include <stdlib.h> --int --main () --{ --exit (42); -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: "$ac_compile"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- : --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --continue --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --$ac_declaration --int --main () --{ --exit (42); -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: "$ac_compile"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- break --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --done --rm -f conftest* --if test -n "$ac_declaration"; then -- echo '#ifdef __cplusplus' >>confdefs.h -- echo $ac_declaration >>confdefs.h -- echo '#endif' >>confdefs.h --fi -- --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --ac_ext=c --ac_cpp='$CPP $CPPFLAGS' --ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' --ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' --ac_compiler_gnu=$ac_cv_c_compiler_gnu --DEPDIR="${am__leading_dot}deps" -- -- ac_config_commands="$ac_config_commands depfiles" -- -- --am_make=${MAKE-make} --cat > confinc << 'END' --am__doit: -- @echo done --.PHONY: am__doit --END --# If we don't find an include directive, just comment out the code. --echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5 --echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6 --am__include="#" --am__quote= --_am_result=none --# First try GNU make style include. --echo "include confinc" > confmf --# We grep out `Entering directory' and `Leaving directory' --# messages which can occur if `w' ends up in MAKEFLAGS. --# In particular we don't look at `^make:' because GNU make might --# be invoked under some other name (usually "gmake"), in which --# case it prints its new name instead of `make'. --if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then -- am__include=include -- am__quote= -- _am_result=GNU --fi --# Now try BSD make style include. --if test "$am__include" = "#"; then -- echo '.include "confinc"' > confmf -- if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then -- am__include=.include -- am__quote=""" -- _am_result=BSD -- fi --fi -- -- --echo "$as_me:$LINENO: result: $_am_result" >&5 --echo "${ECHO_T}$_am_result" >&6 --rm -f confinc confmf -- --# Check whether --enable-dependency-tracking or --disable-dependency-tracking was given. --if test "${enable_dependency_tracking+set}" = set; then -- enableval="$enable_dependency_tracking" -- --fi; --if test "x$enable_dependency_tracking" != xno; then -- am_depcomp="$ac_aux_dir/depcomp" -- AMDEPBACKSLASH='' --fi -- -- --if test "x$enable_dependency_tracking" != xno; then -- AMDEP_TRUE= -- AMDEP_FALSE='#' --else -- AMDEP_TRUE='#' -- AMDEP_FALSE= --fi -- -- -- -- --depcc="$CC" am_compiler_list= -- --echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 --echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 --if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then -- # We make a subdir and do the tests there. Otherwise we can end up -- # making bogus files that we don't know about and never remove. For -- # instance it was reported that on HP-UX the gcc test will end up -- # making a dummy file named `D' -- because `-MD' means `put the output -- # in D'. -- mkdir conftest.dir -- # Copy depcomp to subdir because otherwise we won't find it if we're -- # using a relative directory. -- cp "$am_depcomp" conftest.dir -- cd conftest.dir -- # We will build objects and dependencies in a subdirectory because -- # it helps to detect inapplicable dependency modes. For instance -- # both Tru64's cc and ICC support -MD to output dependencies as a -- # side effect of compilation, but ICC will put the dependencies in -- # the current directory while Tru64 will put them in the object -- # directory. -- mkdir sub -- -- am_cv_CC_dependencies_compiler_type=none -- if test "$am_compiler_list" = ""; then -- am_compiler_list=`sed -n 's/^#*([a-zA-Z0-9]*))$/\1/p' < ./depcomp` -- fi -- for depmode in $am_compiler_list; do -- # Setup a source with many dependencies, because some compilers -- # like to wrap large dependency lists on column 80 (with ), and -- # we should not choose a depcomp mode which is confused by this. -- # -- # We need to recreate these files for each test, as the compiler may -- # overwrite some of them when testing with obscure command lines. -- # This happens at least with the AIX C compiler. -- : > sub/conftest.c -- for i in 1 2 3 4 5 6; do -- echo '#include "conftst'$i'.h"' >> sub/conftest.c -- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with -- # Solaris 8's {/usr,}/bin/sh. -- touch sub/conftst$i.h -- done -- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf -- -- case $depmode in -- nosideeffect) -- # after this tag, mechanisms are not by side-effect, so they'll -- # only be used when explicitly requested -- if test "x$enable_dependency_tracking" = xyes; then -- continue -- else -- break -- fi -- ;; -- none) break ;; -- esac -- # We check with `-c' and `-o' for the sake of the "dashmstdout" -- # mode. It turns out that the SunPro C++ compiler does not properly -- # handle `-M -o', and we need to detect this. -- if depmode=$depmode \ -- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ -- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ -- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ -- >/dev/null 2>conftest.err && -- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && -- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && -- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then -- # icc doesn't choke on unknown options, it will just issue warnings -- # or remarks (even with -Werror). So we grep stderr for any message -- # that says an option was ignored or not supported. -- # When given -MP, icc 7.0 and 7.1 complain thusly: -- # icc: Command line warning: ignoring option '-M'; no argument required -- # The diagnosis changed in icc 8.0: -- # icc: Command line remark: option '-MP' not supported -- if (grep 'ignoring option' conftest.err || -- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else -- am_cv_CC_dependencies_compiler_type=$depmode -- break -- fi -- fi -- done -- -- cd .. -- rm -rf conftest.dir --else -- am_cv_CC_dependencies_compiler_type=none --fi -- --fi --echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 --echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 --CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type -- -- -- --if -- test "x$enable_dependency_tracking" != xno \ -- && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then -- am__fastdepCC_TRUE= -- am__fastdepCC_FALSE='#' --else -- am__fastdepCC_TRUE='#' -- am__fastdepCC_FALSE= --fi -- -- --# We need this for older versions of Autoconf. -- --depcc="$CC" am_compiler_list= -- --echo "$as_me:$LINENO: checking dependency style of $depcc" >&5 --echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6 --if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then -- # We make a subdir and do the tests there. Otherwise we can end up -- # making bogus files that we don't know about and never remove. For -- # instance it was reported that on HP-UX the gcc test will end up -- # making a dummy file named `D' -- because `-MD' means `put the output -- # in D'. -- mkdir conftest.dir -- # Copy depcomp to subdir because otherwise we won't find it if we're -- # using a relative directory. -- cp "$am_depcomp" conftest.dir -- cd conftest.dir -- # We will build objects and dependencies in a subdirectory because -- # it helps to detect inapplicable dependency modes. For instance -- # both Tru64's cc and ICC support -MD to output dependencies as a -- # side effect of compilation, but ICC will put the dependencies in -- # the current directory while Tru64 will put them in the object -- # directory. -- mkdir sub -- -- am_cv_CC_dependencies_compiler_type=none -- if test "$am_compiler_list" = ""; then -- am_compiler_list=`sed -n 's/^#*([a-zA-Z0-9]*))$/\1/p' < ./depcomp` -- fi -- for depmode in $am_compiler_list; do -- # Setup a source with many dependencies, because some compilers -- # like to wrap large dependency lists on column 80 (with ), and -- # we should not choose a depcomp mode which is confused by this. -- # -- # We need to recreate these files for each test, as the compiler may -- # overwrite some of them when testing with obscure command lines. -- # This happens at least with the AIX C compiler. -- : > sub/conftest.c -- for i in 1 2 3 4 5 6; do -- echo '#include "conftst'$i'.h"' >> sub/conftest.c -- # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with -- # Solaris 8's {/usr,}/bin/sh. -- touch sub/conftst$i.h -- done -- echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf -- -- case $depmode in -- nosideeffect) -- # after this tag, mechanisms are not by side-effect, so they'll -- # only be used when explicitly requested -- if test "x$enable_dependency_tracking" = xyes; then -- continue -- else -- break -- fi -- ;; -- none) break ;; -- esac -- # We check with `-c' and `-o' for the sake of the "dashmstdout" -- # mode. It turns out that the SunPro C++ compiler does not properly -- # handle `-M -o', and we need to detect this. -- if depmode=$depmode \ -- source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \ -- depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ -- $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \ -- >/dev/null 2>conftest.err && -- grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && -- grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 && -- ${MAKE-make} -s -f confmf > /dev/null 2>&1; then -- # icc doesn't choke on unknown options, it will just issue warnings -- # or remarks (even with -Werror). So we grep stderr for any message -- # that says an option was ignored or not supported. -- # When given -MP, icc 7.0 and 7.1 complain thusly: -- # icc: Command line warning: ignoring option '-M'; no argument required -- # The diagnosis changed in icc 8.0: -- # icc: Command line remark: option '-MP' not supported -- if (grep 'ignoring option' conftest.err || -- grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else -- am_cv_CC_dependencies_compiler_type=$depmode -- break -- fi -- fi -- done -- -- cd .. -- rm -rf conftest.dir --else -- am_cv_CC_dependencies_compiler_type=none --fi -- --fi --echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5 --echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6 --CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type -- -- -- --if -- test "x$enable_dependency_tracking" != xno \ -- && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then -- am__fastdepCC_TRUE= -- am__fastdepCC_FALSE='#' --else -- am__fastdepCC_TRUE='#' -- am__fastdepCC_FALSE= --fi -- -- -- --CCAS="$CC" -- -- -- --# Check whether --with-binutils or --without-binutils was given. --if test "${with_binutils+set}" = set; then -- withval="$with_binutils" -- --fi; -- --if test "x$with_binutils" != x; then -- # Extract the first word of "ranlib", so it can be a program name with args. --set dummy ranlib; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_path_RANLIB+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- case $RANLIB in -- [\/]* | ?:[\/]*) -- ac_cv_path_RANLIB="$RANLIB" # Let the user override the test with a path. -- ;; -- *) -- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --as_dummy=""$with_binutils:$PATH"" --for as_dir in $as_dummy --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_path_RANLIB="$as_dir/$ac_word$ac_exec_ext" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- -- test -z "$ac_cv_path_RANLIB" && ac_cv_path_RANLIB=":" -- ;; --esac --fi --RANLIB=$ac_cv_path_RANLIB -- --if test -n "$RANLIB"; then -- echo "$as_me:$LINENO: result: $RANLIB" >&5 --echo "${ECHO_T}$RANLIB" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- --else -- if test -n "$ac_tool_prefix"; then -- # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. --set dummy ${ac_tool_prefix}ranlib; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_RANLIB+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$RANLIB"; then -- ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --RANLIB=$ac_cv_prog_RANLIB --if test -n "$RANLIB"; then -- echo "$as_me:$LINENO: result: $RANLIB" >&5 --echo "${ECHO_T}$RANLIB" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- --fi --if test -z "$ac_cv_prog_RANLIB"; then -- ac_ct_RANLIB=$RANLIB -- # Extract the first word of "ranlib", so it can be a program name with args. --set dummy ranlib; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$ac_ct_RANLIB"; then -- ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_ac_ct_RANLIB="ranlib" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- -- test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":" --fi --fi --ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB --if test -n "$ac_ct_RANLIB"; then -- echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5 --echo "${ECHO_T}$ac_ct_RANLIB" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- -- RANLIB=$ac_ct_RANLIB --else -- RANLIB="$ac_cv_prog_RANLIB" --fi -- --fi -- --# optimization flags --if test "x$ac_cv_c_compiler_gnu" = xyes; then -- if test "x$default_CFLAGS" = xyes; then -- # Autoconf may set CFLAGS to -O2 and/or -g. So eliminate them. -- CFLAGS="`echo $CFLAGS | sed -e 's/-g//g' -e 's/-O[0-9]//g'` -g" -- # If the user specify the directory for binutils, add the option `-B'. -- if test "x$with_binutils" != x; then -- CFLAGS="-B$with_binutils/ $CFLAGS" -- fi -- STAGE1_CFLAGS="-O2" -- GRUB_CFLAGS="-O2" -- --echo "$as_me:$LINENO: checking whether optimization for size works" >&5 --echo $ECHO_N "checking whether optimization for size works... $ECHO_C" >&6 --if test "${size_flag+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- -- saved_CFLAGS=$CFLAGS -- CFLAGS="-Os -g" -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --int --main () --{ -- -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: "$ac_compile"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- size_flag=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --size_flag=no --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -- CFLAGS=$saved_CFLAGS -- --fi --echo "$as_me:$LINENO: result: $size_flag" >&5 --echo "${ECHO_T}$size_flag" >&6 -- if test "x$size_flag" = xyes; then -- STAGE2_CFLAGS="-Os" -- else -- STAGE2_CFLAGS="-O2 -fno-strength-reduce -fno-unroll-loops" -- fi -- # OpenBSD has a GCC extension for protecting applications from -- # stack smashing attacks, but GRUB doesn't want this feature. -- echo "$as_me:$LINENO: checking whether gcc has -fno-stack-protector" >&5 --echo $ECHO_N "checking whether gcc has -fno-stack-protector... $ECHO_C" >&6 --if test "${no_stack_protector_flag+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- -- saved_CFLAGS=$CFLAGS -- CFLAGS="-fno-stack-protector" -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --int --main () --{ -- -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: "$ac_compile"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- no_stack_protector_flag=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --no_stack_protector_flag=no --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -- CFLAGS=$saved_CFLAGS -- --fi --echo "$as_me:$LINENO: result: $no_stack_protector_flag" >&5 --echo "${ECHO_T}$no_stack_protector_flag" >&6 -- if test "x$no_stack_protector_flag" = xyes; then -- STAGE2_CFLAGS="$STAGE2_CFLAGS -fno-stack-protector" -- fi -- fi --fi -- -- -- -- -- --# Enforce coding standards. --CPPFLAGS="$CPPFLAGS -Wall -Wmissing-prototypes -Wunused -Wshadow" --CPPFLAGS="$CPPFLAGS -Wpointer-arith" -- --echo "$as_me:$LINENO: checking whether -Wundef works" >&5 --echo $ECHO_N "checking whether -Wundef works... $ECHO_C" >&6 --if test "${undef_flag+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- -- saved_CPPFLAGS="$CPPFLAGS" -- CPPFLAGS="-Wundef" -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --int --main () --{ -- -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: "$ac_compile"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- undef_flag=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --undef_flag=no --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -- CPPFLAGS="$saved_CPPFLAGS" -- --fi --echo "$as_me:$LINENO: result: $undef_flag" >&5 --echo "${ECHO_T}$undef_flag" >&6 -- --# The options `-falign-*' are supported by gcc 3.0 or later. --# Probably it is sufficient to only check for -falign-loops. --echo "$as_me:$LINENO: checking whether -falign-loops works" >&5 --echo $ECHO_N "checking whether -falign-loops works... $ECHO_C" >&6 --if test "${falign_loop_flag+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- -- saved_CPPFLAGS="$CPPFLAGS" -- CPPFLAGS="-falign-loops=1" -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --int --main () --{ -- -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: "$ac_compile"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- falign_loop_flag=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --falign_loop_flag=no --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -- CPPFLAGS="$saved_CPPFLAGS" -- --fi --echo "$as_me:$LINENO: result: $falign_loop_flag" >&5 --echo "${ECHO_T}$falign_loop_flag" >&6 -- --# Force no alignment to save space. --if test "x$falign_loop_flag" = xyes; then -- CPPFLAGS="$CPPFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1" --else -- CPPFLAGS="$CPPFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1" --fi -- --if test "x$undef_flag" = xyes; then -- CPPFLAGS="$CPPFLAGS -Wundef" --fi -- --if test "x$with_binutils" != x; then -- # Extract the first word of "objcopy", so it can be a program name with args. --set dummy objcopy; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_path_OBJCOPY+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- case $OBJCOPY in -- [\/]* | ?:[\/]*) -- ac_cv_path_OBJCOPY="$OBJCOPY" # Let the user override the test with a path. -- ;; -- *) -- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --as_dummy=""$with_binutils:$PATH"" --for as_dir in $as_dummy --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_path_OBJCOPY="$as_dir/$ac_word$ac_exec_ext" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- -- ;; --esac --fi --OBJCOPY=$ac_cv_path_OBJCOPY -- --if test -n "$OBJCOPY"; then -- echo "$as_me:$LINENO: result: $OBJCOPY" >&5 --echo "${ECHO_T}$OBJCOPY" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- --else -- if test -n "$ac_tool_prefix"; then -- # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args. --set dummy ${ac_tool_prefix}objcopy; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_OBJCOPY+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$OBJCOPY"; then -- ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_OBJCOPY="${ac_tool_prefix}objcopy" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --OBJCOPY=$ac_cv_prog_OBJCOPY --if test -n "$OBJCOPY"; then -- echo "$as_me:$LINENO: result: $OBJCOPY" >&5 --echo "${ECHO_T}$OBJCOPY" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- --fi --if test -z "$ac_cv_prog_OBJCOPY"; then -- ac_ct_OBJCOPY=$OBJCOPY -- # Extract the first word of "objcopy", so it can be a program name with args. --set dummy objcopy; ac_word=$2 --echo "$as_me:$LINENO: checking for $ac_word" >&5 --echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6 --if test "${ac_cv_prog_ac_ct_OBJCOPY+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if test -n "$ac_ct_OBJCOPY"; then -- ac_cv_prog_ac_ct_OBJCOPY="$ac_ct_OBJCOPY" # Let the user override the test. --else --as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for ac_exec_ext in '' $ac_executable_extensions; do -- if $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then -- ac_cv_prog_ac_ct_OBJCOPY="objcopy" -- echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 -- break 2 -- fi --done --done -- --fi --fi --ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY --if test -n "$ac_ct_OBJCOPY"; then -- echo "$as_me:$LINENO: result: $ac_ct_OBJCOPY" >&5 --echo "${ECHO_T}$ac_ct_OBJCOPY" >&6 --else -- echo "$as_me:$LINENO: result: no" >&5 --echo "${ECHO_T}no" >&6 --fi -- -- OBJCOPY=$ac_ct_OBJCOPY --else -- OBJCOPY="$ac_cv_prog_OBJCOPY" --fi -- --fi -- --# Defined in acinclude.m4. -- --echo "$as_me:$LINENO: checking if C symbols get an underscore after compilation" >&5 --echo $ECHO_N "checking if C symbols get an underscore after compilation... $ECHO_C" >&6 --if test "${grub_cv_asm_uscore+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat > conftest.c <<\EOF --int --func (int *list) --{ -- *list = 0; -- return *list; --} --EOF -- --if { ac_try='${CC-cc} ${CFLAGS} -S conftest.c' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && test -s conftest.s; then -- true --else -- { { echo "$as_me:$LINENO: error: ${CC-cc} failed to produce assembly code" >&5 --echo "$as_me: error: ${CC-cc} failed to produce assembly code" >&2;} -- { (exit 1); exit 1; }; } --fi -- --if grep _func conftest.s >/dev/null 2>&1; then -- grub_cv_asm_uscore=yes --else -- grub_cv_asm_uscore=no --fi -- --rm -f conftest* --fi -- -- --if test "x$grub_cv_asm_uscore" = xyes; then -- --cat >>confdefs.h <<_ACEOF --#define HAVE_ASM_USCORE $grub_cv_asm_uscore --_ACEOF -- --fi -- --echo "$as_me:$LINENO: result: $grub_cv_asm_uscore" >&5 --echo "${ECHO_T}$grub_cv_asm_uscore" >&6 -- --echo "$as_me:$LINENO: checking whether ${OBJCOPY} works for absolute addresses" >&5 --echo $ECHO_N "checking whether ${OBJCOPY} works for absolute addresses... $ECHO_C" >&6 --if test "${grub_cv_prog_objcopy_absolute+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat > conftest.c <<\EOF --void --cmain (void) --{ -- *((int *) 0x1000) = 2; --} --EOF -- --if { (eval echo "$as_me:$LINENO: "$ac_compile"") >&5 -- (eval $ac_compile) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && test -s conftest.o; then : --else -- { { echo "$as_me:$LINENO: error: ${CC-cc} cannot compile C source code" >&5 --echo "$as_me: error: ${CC-cc} cannot compile C source code" >&2;} -- { (exit 1); exit 1; }; } --fi --grub_cv_prog_objcopy_absolute=yes --for link_addr in 2000 8000 7C00; do -- if { ac_try='${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then : -- else -- { { echo "$as_me:$LINENO: error: ${CC-cc} cannot link at address $link_addr" >&5 --echo "$as_me: error: ${CC-cc} cannot link at address $link_addr" >&2;} -- { (exit 1); exit 1; }; } -- fi -- if { ac_try='${OBJCOPY-objcopy} -O binary conftest.exec conftest' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then : -- else -- { { echo "$as_me:$LINENO: error: ${OBJCOPY-objcopy} cannot create binary files" >&5 --echo "$as_me: error: ${OBJCOPY-objcopy} cannot create binary files" >&2;} -- { (exit 1); exit 1; }; } -- fi -- if test ! -f conftest.old || { ac_try='cmp -s conftest.old conftest' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- mv -f conftest conftest.old -- else -- grub_cv_prog_objcopy_absolute=no -- break -- fi --done --rm -f conftest* --fi -- --echo "$as_me:$LINENO: result: $grub_cv_prog_objcopy_absolute" >&5 --echo "${ECHO_T}$grub_cv_prog_objcopy_absolute" >&6 --if test "x$grub_cv_prog_objcopy_absolute" != xyes; then -- { { echo "$as_me:$LINENO: error: GRUB requires a working absolute objcopy; upgrade your binutils" >&5 --echo "$as_me: error: GRUB requires a working absolute objcopy; upgrade your binutils" >&2;} -- { (exit 1); exit 1; }; } --fi -- -- --echo "$as_me:$LINENO: checking whether addr32 must be in the same line as the instruction" >&5 --echo $ECHO_N "checking whether addr32 must be in the same line as the instruction... $ECHO_C" >&6 --if test "${grub_cv_asm_prefix_requirement+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat > conftest.s <<\EOF -- .code16 --l1: addr32 movb %al, l1 --EOF -- --if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && test -s conftest.o; then -- grub_cv_asm_prefix_requirement=yes --else -- grub_cv_asm_prefix_requirement=no --fi -- --rm -f conftest* --fi -- -- --if test "x$grub_cv_asm_prefix_requirement" = xyes; then -- grub_tmp_addr32="addr32" -- grub_tmp_data32="data32" --else -- grub_tmp_addr32="addr32;" -- grub_tmp_data32="data32;" --fi -- -- --cat >>confdefs.h <<_ACEOF --#define ADDR32 $grub_tmp_addr32 --_ACEOF -- -- --cat >>confdefs.h <<_ACEOF --#define DATA32 $grub_tmp_data32 --_ACEOF -- -- --echo "$as_me:$LINENO: result: $grub_cv_asm_prefix_requirement" >&5 --echo "${ECHO_T}$grub_cv_asm_prefix_requirement" >&6 -- -- -- --echo "$as_me:$LINENO: checking for .code16 addr32 assembler support" >&5 --echo $ECHO_N "checking for .code16 addr32 assembler support... $ECHO_C" >&6 --if test "${grub_cv_asm_addr32+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat > conftest.s.in <<\EOF -- .code16 --l1: @ADDR32@ movb %al, l1 --EOF -- --if test "x$grub_cv_asm_prefix_requirement" = xyes; then -- sed -e s/@ADDR32@/addr32/ < conftest.s.in > conftest.s --else -- sed -e s/@ADDR32@/addr32;/ < conftest.s.in > conftest.s --fi -- --if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && test -s conftest.o; then -- grub_cv_asm_addr32=yes --else -- grub_cv_asm_addr32=no --fi -- --rm -f conftest* --fi -- -- --echo "$as_me:$LINENO: result: $grub_cv_asm_addr32" >&5 --echo "${ECHO_T}$grub_cv_asm_addr32" >&6 --if test "x$grub_cv_asm_addr32" != xyes; then -- { { echo "$as_me:$LINENO: error: GRUB requires GAS .code16 addr32 support; upgrade your binutils" >&5 --echo "$as_me: error: GRUB requires GAS .code16 addr32 support; upgrade your binutils" >&2;} -- { (exit 1); exit 1; }; } --fi -- -- --echo "$as_me:$LINENO: checking whether an absolute indirect call/jump must not be prefixed with an asterisk" >&5 --echo $ECHO_N "checking whether an absolute indirect call/jump must not be prefixed with an asterisk... $ECHO_C" >&6 --if test "${grub_cv_asm_absolute_without_asterisk+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat > conftest.s <<\EOF -- lcall *(offset) --offset: -- .long 0 -- .word 0 --EOF -- --if { ac_try='${CC-cc} ${CFLAGS} -c conftest.s' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && test -s conftest.o; then -- grub_cv_asm_absolute_without_asterisk=no --else -- grub_cv_asm_absolute_without_asterisk=yes --fi -- --rm -f conftest* --fi -- -- --if test "x$grub_cv_asm_absolute_without_asterisk" = xyes; then -- --cat >>confdefs.h <<_ACEOF --#define ABSOLUTE_WITHOUT_ASTERISK 1 --_ACEOF -- --fi -- --echo "$as_me:$LINENO: result: $grub_cv_asm_absolute_without_asterisk" >&5 --echo "${ECHO_T}$grub_cv_asm_absolute_without_asterisk" >&6 -- -- --echo "$as_me:$LINENO: checking if start is defined by the compiler" >&5 --echo $ECHO_N "checking if start is defined by the compiler... $ECHO_C" >&6 --if test "${grub_cv_check_start_symbol+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --int --main () --{ --asm ("incl start") -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: "$ac_link"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- grub_cv_check_start_symbol=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --grub_cv_check_start_symbol=no --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --fi -- -- --if test "x$grub_cv_check_start_symbol" = xyes; then -- --cat >>confdefs.h <<_ACEOF --#define HAVE_START_SYMBOL 1 --_ACEOF -- --fi -- --echo "$as_me:$LINENO: result: $grub_cv_check_start_symbol" >&5 --echo "${ECHO_T}$grub_cv_check_start_symbol" >&6 -- -- --echo "$as_me:$LINENO: checking if _start is defined by the compiler" >&5 --echo $ECHO_N "checking if _start is defined by the compiler... $ECHO_C" >&6 --if test "${grub_cv_check_uscore_start_symbol+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --int --main () --{ --asm ("incl _start") -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: "$ac_link"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- grub_cv_check_uscore_start_symbol=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --grub_cv_check_uscore_start_symbol=no --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --fi -- -- --if test "x$grub_cv_check_uscore_start_symbol" = xyes; then -- --cat >>confdefs.h <<_ACEOF --#define HAVE_USCORE_START_SYMBOL 1 --_ACEOF -- --fi -- --echo "$as_me:$LINENO: result: $grub_cv_check_uscore_start_symbol" >&5 --echo "${ECHO_T}$grub_cv_check_uscore_start_symbol" >&6 -- --if test "x$grub_cv_check_start_symbol" != "xyes" \ -- -a "x$grub_cv_check_uscore_start_symbol" != "xyes"; then -- { { echo "$as_me:$LINENO: error: Neither start nor _start is defined" >&5 --echo "$as_me: error: Neither start nor _start is defined" >&2;} -- { (exit 1); exit 1; }; } --fi -- -- --echo "$as_me:$LINENO: checking if __bss_start is defined by the compiler" >&5 --echo $ECHO_N "checking if __bss_start is defined by the compiler... $ECHO_C" >&6 --if test "${grub_cv_check_uscore_uscore_bss_start_symbol+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --int --main () --{ --asm ("incl __bss_start") -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: "$ac_link"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- grub_cv_check_uscore_uscore_bss_start_symbol=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --grub_cv_check_uscore_uscore_bss_start_symbol=no --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --fi -- -- --if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" = xyes; then -- --cat >>confdefs.h <<_ACEOF --#define HAVE_USCORE_USCORE_BSS_START_SYMBOL 1 --_ACEOF -- --fi -- --echo "$as_me:$LINENO: result: $grub_cv_check_uscore_uscore_bss_start_symbol" >&5 --echo "${ECHO_T}$grub_cv_check_uscore_uscore_bss_start_symbol" >&6 -- -- --echo "$as_me:$LINENO: checking if _edata is defined by the compiler" >&5 --echo $ECHO_N "checking if _edata is defined by the compiler... $ECHO_C" >&6 --if test "${grub_cv_check_uscore_edata_symbol+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --int --main () --{ --asm ("incl _edata") -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: "$ac_link"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- grub_cv_check_uscore_edata_symbol=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --grub_cv_check_uscore_edata_symbol=no --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --fi -- -- --if test "x$grub_cv_check_uscore_edata_symbol" = xyes; then -- --cat >>confdefs.h <<_ACEOF --#define HAVE_USCORE_EDATA_SYMBOL 1 --_ACEOF -- --fi -- --echo "$as_me:$LINENO: result: $grub_cv_check_uscore_edata_symbol" >&5 --echo "${ECHO_T}$grub_cv_check_uscore_edata_symbol" >&6 -- -- --echo "$as_me:$LINENO: checking if edata is defined by the compiler" >&5 --echo $ECHO_N "checking if edata is defined by the compiler... $ECHO_C" >&6 --if test "${grub_cv_check_edata_symbol+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --int --main () --{ --asm ("incl edata") -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: "$ac_link"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- grub_cv_check_edata_symbol=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --grub_cv_check_edata_symbol=no --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --fi -- -- --if test "x$grub_cv_check_edata_symbol" = xyes; then -- --cat >>confdefs.h <<_ACEOF --#define HAVE_EDATA_SYMBOL 1 --_ACEOF -- --fi -- --echo "$as_me:$LINENO: result: $grub_cv_check_edata_symbol" >&5 --echo "${ECHO_T}$grub_cv_check_edata_symbol" >&6 -- --if test "x$grub_cv_check_uscore_uscore_bss_start_symbol" != "xyes" \ -- -a "x$grub_cv_check_uscore_edata_symbol" != "xyes" \ -- -a "x$grub_cv_check_edata_symbol" != "xyes"; then -- { { echo "$as_me:$LINENO: error: None of __bss_start, _edata, edata defined" >&5 --echo "$as_me: error: None of __bss_start, _edata, edata defined" >&2;} -- { (exit 1); exit 1; }; } --fi -- -- --echo "$as_me:$LINENO: checking if end is defined by the compiler" >&5 --echo $ECHO_N "checking if end is defined by the compiler... $ECHO_C" >&6 --if test "${grub_cv_check_end_symbol+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --int --main () --{ --asm ("incl end") -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: "$ac_link"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- grub_cv_check_end_symbol=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --grub_cv_check_end_symbol=no --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --fi -- -- --if test "x$grub_cv_check_end_symbol" = xyes; then -- --cat >>confdefs.h <<_ACEOF --#define HAVE_END_SYMBOL 1 --_ACEOF -- --fi -- --echo "$as_me:$LINENO: result: $grub_cv_check_end_symbol" >&5 --echo "${ECHO_T}$grub_cv_check_end_symbol" >&6 -- -- --echo "$as_me:$LINENO: checking if _end is defined by the compiler" >&5 --echo $ECHO_N "checking if _end is defined by the compiler... $ECHO_C" >&6 --if test "${grub_cv_check_uscore_end_symbol+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --int --main () --{ --asm ("incl _end") -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: "$ac_link"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- grub_cv_check_uscore_end_symbol=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --grub_cv_check_uscore_end_symbol=no --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --fi -- -- --if test "x$grub_cv_check_uscore_end_symbol" = xyes; then -- --cat >>confdefs.h <<_ACEOF --#define HAVE_USCORE_END_SYMBOL 1 --_ACEOF -- --fi -- --echo "$as_me:$LINENO: result: $grub_cv_check_uscore_end_symbol" >&5 --echo "${ECHO_T}$grub_cv_check_uscore_end_symbol" >&6 -- --if test "x$grub_cv_check_end_symbol" != "xyes" \ -- -a "x$grub_cv_check_uscore_end_symbol" != "xyes"; then -- { { echo "$as_me:$LINENO: error: Neither end nor _end is defined" >&5 --echo "$as_me: error: Neither end nor _end is defined" >&2;} -- { (exit 1); exit 1; }; } --fi -- --# Check for curses libraries. -- --# Check whether --with-curses or --without-curses was given. --if test "${with_curses+set}" = set; then -- withval="$with_curses" -- --fi; -- --# Get the filename or the whole disk and open it. --# Known to work on NetBSD. --echo "$as_me:$LINENO: checking for opendisk in -lutil" >&5 --echo $ECHO_N "checking for opendisk in -lutil... $ECHO_C" >&6 --if test "${ac_cv_lib_util_opendisk+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- ac_check_lib_save_LIBS=$LIBS --LIBS="-lutil $LIBS" --cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --/* Override any gcc2 internal prototype to avoid an error. */ --#ifdef __cplusplus --extern "C" --#endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ --char opendisk (); --int --main () --{ --opendisk (); -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: "$ac_link"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_lib_util_opendisk=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --ac_cv_lib_util_opendisk=no --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --LIBS=$ac_check_lib_save_LIBS --fi --echo "$as_me:$LINENO: result: $ac_cv_lib_util_opendisk" >&5 --echo "${ECHO_T}$ac_cv_lib_util_opendisk" >&6 --if test $ac_cv_lib_util_opendisk = yes; then -- GRUB_LIBS="$GRUB_LIBS -lutil" -- --cat >>confdefs.h <<_ACEOF --#define HAVE_OPENDISK 1 --_ACEOF -- --fi -- -- --# Unless the user specify --without-curses, check for curses. --if test "x$with_curses" != "xno"; then -- echo "$as_me:$LINENO: checking for wgetch in -lncurses" >&5 --echo $ECHO_N "checking for wgetch in -lncurses... $ECHO_C" >&6 --if test "${ac_cv_lib_ncurses_wgetch+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- ac_check_lib_save_LIBS=$LIBS --LIBS="-lncurses $LIBS" --cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --/* Override any gcc2 internal prototype to avoid an error. */ --#ifdef __cplusplus --extern "C" --#endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ --char wgetch (); --int --main () --{ --wgetch (); -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: "$ac_link"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_lib_ncurses_wgetch=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --ac_cv_lib_ncurses_wgetch=no --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --LIBS=$ac_check_lib_save_LIBS --fi --echo "$as_me:$LINENO: result: $ac_cv_lib_ncurses_wgetch" >&5 --echo "${ECHO_T}$ac_cv_lib_ncurses_wgetch" >&6 --if test $ac_cv_lib_ncurses_wgetch = yes; then -- GRUB_LIBS="$GRUB_LIBS -lncurses" -- --cat >>confdefs.h <<_ACEOF --#define HAVE_LIBCURSES 1 --_ACEOF -- --else -- echo "$as_me:$LINENO: checking for wgetch in -lcurses" >&5 --echo $ECHO_N "checking for wgetch in -lcurses... $ECHO_C" >&6 --if test "${ac_cv_lib_curses_wgetch+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- ac_check_lib_save_LIBS=$LIBS --LIBS="-lcurses $LIBS" --cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ -- --/* Override any gcc2 internal prototype to avoid an error. */ --#ifdef __cplusplus --extern "C" --#endif --/* We use char because int might match the return type of a gcc2 -- builtin and then its argument prototype would still apply. */ --char wgetch (); --int --main () --{ --wgetch (); -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: "$ac_link"") >&5 -- (eval $ac_link) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_lib_curses_wgetch=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --ac_cv_lib_curses_wgetch=no --fi --rm -f conftest.err conftest.$ac_objext \ -- conftest$ac_exeext conftest.$ac_ext --LIBS=$ac_check_lib_save_LIBS --fi --echo "$as_me:$LINENO: result: $ac_cv_lib_curses_wgetch" >&5 --echo "${ECHO_T}$ac_cv_lib_curses_wgetch" >&6 --if test $ac_cv_lib_curses_wgetch = yes; then -- GRUB_LIBS="$GRUB_LIBS -lcurses" -- --cat >>confdefs.h <<_ACEOF --#define HAVE_LIBCURSES 1 --_ACEOF -- --fi -- --fi -- --fi -- -- -- --# Check for headers. --ac_ext=c --ac_cpp='$CPP $CPPFLAGS' --ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' --ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' --ac_compiler_gnu=$ac_cv_c_compiler_gnu --echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5 --echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6 --# On Suns, sometimes $CPP names a directory. --if test -n "$CPP" && test -d "$CPP"; then -- CPP= --fi --if test -z "$CPP"; then -- if test "${ac_cv_prog_CPP+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- # Double quotes because CPP needs to be expanded -- for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" -- do -- ac_preproc_ok=false --for ac_c_preproc_warn_flag in '' yes --do -- # Use a header file that comes with gcc, so configuring glibc -- # with a fresh cross-compiler works. -- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since -- # <limits.h> exists even on freestanding compilers. -- # On the NeXT, cc -E runs the code through the compiler's parser, -- # not just through cpp. "Syntax error" is here to catch this case. -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#ifdef __STDC__ --# include <limits.h> --#else --# include <assert.h> --#endif -- Syntax error --_ACEOF --if { (eval echo "$as_me:$LINENO: "$ac_cpp conftest.$ac_ext"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -- : --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- -- # Broken: fails on valid input. --continue --fi --rm -f conftest.err conftest.$ac_ext -- -- # OK, works on sane cases. Now check whether non-existent headers -- # can be detected and how. -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include <ac_nonexistent.h> --_ACEOF --if { (eval echo "$as_me:$LINENO: "$ac_cpp conftest.$ac_ext"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -- # Broken: success on invalid input. --continue --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- -- # Passes both tests. --ac_preproc_ok=: --break --fi --rm -f conftest.err conftest.$ac_ext -- --done --# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. --rm -f conftest.err conftest.$ac_ext --if $ac_preproc_ok; then -- break --fi -- -- done -- ac_cv_prog_CPP=$CPP -- --fi -- CPP=$ac_cv_prog_CPP --else -- ac_cv_prog_CPP=$CPP --fi --echo "$as_me:$LINENO: result: $CPP" >&5 --echo "${ECHO_T}$CPP" >&6 --ac_preproc_ok=false --for ac_c_preproc_warn_flag in '' yes --do -- # Use a header file that comes with gcc, so configuring glibc -- # with a fresh cross-compiler works. -- # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since -- # <limits.h> exists even on freestanding compilers. -- # On the NeXT, cc -E runs the code through the compiler's parser, -- # not just through cpp. "Syntax error" is here to catch this case. -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#ifdef __STDC__ --# include <limits.h> --#else --# include <assert.h> --#endif -- Syntax error --_ACEOF --if { (eval echo "$as_me:$LINENO: "$ac_cpp conftest.$ac_ext"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -- : --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- -- # Broken: fails on valid input. --continue --fi --rm -f conftest.err conftest.$ac_ext -- -- # OK, works on sane cases. Now check whether non-existent headers -- # can be detected and how. -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include <ac_nonexistent.h> --_ACEOF --if { (eval echo "$as_me:$LINENO: "$ac_cpp conftest.$ac_ext"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -- # Broken: success on invalid input. --continue --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- -- # Passes both tests. --ac_preproc_ok=: --break --fi --rm -f conftest.err conftest.$ac_ext -- --done --# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. --rm -f conftest.err conftest.$ac_ext --if $ac_preproc_ok; then -- : --else -- { { echo "$as_me:$LINENO: error: C preprocessor "$CPP" fails sanity check --See `config.log' for more details." >&5 --echo "$as_me: error: C preprocessor "$CPP" fails sanity check --See `config.log' for more details." >&2;} -- { (exit 1); exit 1; }; } --fi -- --ac_ext=c --ac_cpp='$CPP $CPPFLAGS' --ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' --ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' --ac_compiler_gnu=$ac_cv_c_compiler_gnu -- -- --echo "$as_me:$LINENO: checking for egrep" >&5 --echo $ECHO_N "checking for egrep... $ECHO_C" >&6 --if test "${ac_cv_prog_egrep+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- if echo a | (grep -E '(a|b)') >/dev/null 2>&1 -- then ac_cv_prog_egrep='grep -E' -- else ac_cv_prog_egrep='egrep' -- fi --fi --echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5 --echo "${ECHO_T}$ac_cv_prog_egrep" >&6 -- EGREP=$ac_cv_prog_egrep -- -- --echo "$as_me:$LINENO: checking for ANSI C header files" >&5 --echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6 --if test "${ac_cv_header_stdc+set}" = set; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include <stdlib.h> --#include <stdarg.h> --#include <string.h> --#include <float.h> -- --int --main () --{ -- -- ; -- return 0; --} --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: "$ac_compile"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_cv_header_stdc=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --ac_cv_header_stdc=no --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext -- --if test $ac_cv_header_stdc = yes; then -- # SunOS 4.x string.h does not declare mem*, contrary to ANSI. -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include <string.h> -- --_ACEOF --if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -- $EGREP "memchr" >/dev/null 2>&1; then -- : --else -- ac_cv_header_stdc=no --fi --rm -f conftest* -- --fi -- --if test $ac_cv_header_stdc = yes; then -- # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include <stdlib.h> -- --_ACEOF --if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | -- $EGREP "free" >/dev/null 2>&1; then -- : --else -- ac_cv_header_stdc=no --fi --rm -f conftest* -- --fi -- --if test $ac_cv_header_stdc = yes; then -- # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. -- if test "$cross_compiling" = yes; then -- : --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include <ctype.h> --#if ((' ' & 0x0FF) == 0x020) --# define ISLOWER(c) ('a' <= (c) && (c) <= 'z') --# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) --#else --# define ISLOWER(c) \ -- (('a' <= (c) && (c) <= 'i') \ -- || ('j' <= (c) && (c) <= 'r') \ -- || ('s' <= (c) && (c) <= 'z')) --# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) --#endif -- --#define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) --int --main () --{ -- int i; -- for (i = 0; i < 256; i++) -- if (XOR (islower (i), ISLOWER (i)) -- || toupper (i) != TOUPPER (i)) -- exit(2); -- exit (0); --} --_ACEOF --rm -f conftest$ac_exeext --if { (eval echo "$as_me:$LINENO: "$ac_link"") >&5 -- (eval $ac_link) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && { ac_try='./conftest$ac_exeext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- : --else -- echo "$as_me: program exited with status $ac_status" >&5 --echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --( exit $ac_status ) --ac_cv_header_stdc=no --fi --rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext --fi --fi --fi --echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5 --echo "${ECHO_T}$ac_cv_header_stdc" >&6 --if test $ac_cv_header_stdc = yes; then -- --cat >>confdefs.h <<_ACEOF --#define STDC_HEADERS 1 --_ACEOF -- --fi -- --# On IRIX 5.3, sys/types and inttypes.h are conflicting. -- -- -- -- -- -- -- -- -- --for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ -- inttypes.h stdint.h unistd.h --do --as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` --echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test "${$as_ac_Header+set}" = set"; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --$ac_includes_default -- --#include <$ac_header> --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: "$ac_compile"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- eval "$as_ac_Header=yes" --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --eval "$as_ac_Header=no" --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 --if test `eval echo '${'$as_ac_Header'}'` = yes; then -- cat >>confdefs.h <<_ACEOF --#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 --_ACEOF -- --fi -- --done -- -- -- -- -- -- -- --for ac_header in string.h strings.h ncurses/curses.h ncurses.h curses.h --do --as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh` --if eval "test "${$as_ac_Header+set}" = set"; then -- echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test "${$as_ac_Header+set}" = set"; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 --else -- # Is the header compilable? --echo "$as_me:$LINENO: checking $ac_header usability" >&5 --echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6 --cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --$ac_includes_default --#include <$ac_header> --_ACEOF --rm -f conftest.$ac_objext --if { (eval echo "$as_me:$LINENO: "$ac_compile"") >&5 -- (eval $ac_compile) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } && -- { ac_try='test -z "$ac_c_werror_flag" -- || test ! -s conftest.err' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && -- { ac_try='test -s conftest.$ac_objext' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; }; then -- ac_header_compiler=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- --ac_header_compiler=no --fi --rm -f conftest.err conftest.$ac_objext conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_compiler" >&5 --echo "${ECHO_T}$ac_header_compiler" >&6 -- --# Is the header present? --echo "$as_me:$LINENO: checking $ac_header presence" >&5 --echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6 --cat >conftest.$ac_ext <<_ACEOF --/* confdefs.h. */ --_ACEOF --cat confdefs.h >>conftest.$ac_ext --cat >>conftest.$ac_ext <<_ACEOF --/* end confdefs.h. */ --#include <$ac_header> --_ACEOF --if { (eval echo "$as_me:$LINENO: "$ac_cpp conftest.$ac_ext"") >&5 -- (eval $ac_cpp conftest.$ac_ext) 2>conftest.er1 -- ac_status=$? -- grep -v '^ *+' conftest.er1 >conftest.err -- rm -f conftest.er1 -- cat conftest.err >&5 -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); } >/dev/null; then -- if test -s conftest.err; then -- ac_cpp_err=$ac_c_preproc_warn_flag -- ac_cpp_err=$ac_cpp_err$ac_c_werror_flag -- else -- ac_cpp_err= -- fi --else -- ac_cpp_err=yes --fi --if test -z "$ac_cpp_err"; then -- ac_header_preproc=yes --else -- echo "$as_me: failed program was:" >&5 --sed 's/^/| /' conftest.$ac_ext >&5 -- -- ac_header_preproc=no --fi --rm -f conftest.err conftest.$ac_ext --echo "$as_me:$LINENO: result: $ac_header_preproc" >&5 --echo "${ECHO_T}$ac_header_preproc" >&6 -- --# So? What about this header? --case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in -- yes:no: ) -- { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5 --echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;} -- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5 --echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;} -- ac_header_preproc=yes -- ;; -- no:yes:* ) -- { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5 --echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;} -- { echo "$as_me:$LINENO: WARNING: $ac_header: check for missing prerequisite headers?" >&5 --echo "$as_me: WARNING: $ac_header: check for missing prerequisite headers?" >&2;} -- { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5 --echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;} -- { echo "$as_me:$LINENO: WARNING: $ac_header: section "Present But Cannot Be Compiled"" >&5 --echo "$as_me: WARNING: $ac_header: section "Present But Cannot Be Compiled"" >&2;} -- { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5 --echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;} -- { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5 --echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;} -- ( -- cat <<_ASBOX --## ------------------------------- ## --## Report this to bug-grub@gnu.org ## --## ------------------------------- ## --_ASBOX -- ) | -- sed "s/^/$as_me: WARNING: /" >&2 -- ;; --esac --echo "$as_me:$LINENO: checking for $ac_header" >&5 --echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6 --if eval "test "${$as_ac_Header+set}" = set"; then -- echo $ECHO_N "(cached) $ECHO_C" >&6 --else -- eval "$as_ac_Header=$ac_header_preproc" --fi --echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5 --echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&6 -- --fi --if test `eval echo '${'$as_ac_Header'}'` = yes; then -- cat >>confdefs.h <<_ACEOF --#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1 --_ACEOF -- --fi -- --done -- -- --# Check for user options. -- --# filesystems support. --# Check whether --enable-ext2fs or --disable-ext2fs was given. --if test "${enable_ext2fs+set}" = set; then -- enableval="$enable_ext2fs" -- --fi; -- --if test x"$enable_ext2fs" != xno; then -- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_EXT2FS=1" --fi -- --# Check whether --enable-fat or --disable-fat was given. --if test "${enable_fat+set}" = set; then -- enableval="$enable_fat" -- --fi; -- --if test x"$enable_fat" != xno; then -- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_FAT=1" --fi -- --# Check whether --enable-ffs or --disable-ffs was given. --if test "${enable_ffs+set}" = set; then -- enableval="$enable_ffs" -- --fi; -- --if test x"$enable_ffs" != xno; then -- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_FFS=1" --fi -- --# Check whether --enable-ufs2 or --disable-ufs2 was given. --if test "${enable_ufs2+set}" = set; then -- enableval="$enable_ufs2" -- --fi; -- --if test x"$enable_ufs2" != xno; then -- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_UFS2=1" --fi -- --# Check whether --enable-minix or --disable-minix was given. --if test "${enable_minix+set}" = set; then -- enableval="$enable_minix" -- --fi; -- --if test x"$enable_minix" != xno; then -- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_MINIX=1" --fi -- --# Check whether --enable-reiserfs or --disable-reiserfs was given. --if test "${enable_reiserfs+set}" = set; then -- enableval="$enable_reiserfs" -- --fi; -- --if test x"$enable_reiserfs" != xno; then -- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_REISERFS=1" --fi -- --# Check whether --enable-vstafs or --disable-vstafs was given. --if test "${enable_vstafs+set}" = set; then -- enableval="$enable_vstafs" -- --fi; -- --if test x"$enable_vstafs" != xno; then -- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_VSTAFS=1" --fi -- --# Check whether --enable-jfs or --disable-jfs was given. --if test "${enable_jfs+set}" = set; then -- enableval="$enable_jfs" -- --fi; -- --if test x"$enable_jfs" != xno; then -- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_JFS=1" --fi -- --# Check whether --enable-xfs or --disable-xfs was given. --if test "${enable_xfs+set}" = set; then -- enableval="$enable_xfs" -- --fi; -- --if test x"$enable_xfs" != xno; then -- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_XFS=1" --fi -- --# Check whether --enable-iso9660 or --disable-iso9660 was given. --if test "${enable_iso9660+set}" = set; then -- enableval="$enable_iso9660" -- --fi; -- --if test x"$enable_iso9660" != xno; then -- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_ISO9660=1" --fi -- -- --# Check whether --enable-gunzip or --disable-gunzip was given. --if test "${enable_gunzip+set}" = set; then -- enableval="$enable_gunzip" -- --fi; -- --if test x"$enable_gunzip" = xno; then -- FSYS_CFLAGS="$FSYS_CFLAGS -DNO_DECOMPRESSION=1" --fi -- --# Check whether --enable-md5-password or --disable-md5-password was given. --if test "${enable_md5_password+set}" = set; then -- enableval="$enable_md5_password" -- --fi; --if test "x$enable_md5_password" != xno; then -- FSYS_CFLAGS="$FSYS_CFLAGS -DUSE_MD5_PASSWORDS=1" --fi -- --# Check whether --enable-packet-retransmission or --disable-packet-retransmission was given. --if test "${enable_packet_retransmission+set}" = set; then -- enableval="$enable_packet_retransmission" -- --fi; --if test "x$enable_packet_retransmission" != xno; then -- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCONGESTED=1" --fi -- --# Check whether --enable-pci-direct or --disable-pci-direct was given. --if test "${enable_pci_direct+set}" = set; then -- enableval="$enable_pci_direct" -- --fi; --if test "x$enable_pci_direct" = xyes; then -- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCONFIG_PCI_DIRECT=1" --fi -- --# Check whether --enable-3c509 or --disable-3c509 was given. --if test "${enable_3c509+set}" = set; then -- enableval="$enable_3c509" -- --fi; --if test "x$enable_3c509" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C509" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c509.o" --fi -- --# Check whether --enable-3c529 or --disable-3c529 was given. --if test "${enable_3c529+set}" = set; then -- enableval="$enable_3c529" -- --fi; --if test "x$enable_3c529" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C529=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c529.o" --fi -- --# Check whether --enable-3c595 or --disable-3c595 was given. --if test "${enable_3c595+set}" = set; then -- enableval="$enable_3c595" -- --fi; --if test "x$enable_3c595" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C595=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c595.o" --fi -- --# Check whether --enable-3c90x or --disable-3c90x was given. --if test "${enable_3c90x+set}" = set; then -- enableval="$enable_3c90x" -- --fi; --if test "x$enable_3c90x" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C90X=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c90x.o" --fi -- --# Check whether --enable-cs89x0 or --disable-cs89x0 was given. --if test "${enable_cs89x0+set}" = set; then -- enableval="$enable_cs89x0" -- --fi; --if test "x$enable_cs89x0" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_CS89X0=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS cs89x0.o" --fi -- --# Check whether --enable-davicom or --disable-davicom was given. --if test "${enable_davicom+set}" = set; then -- enableval="$enable_davicom" -- --fi; --if test "x$enable_davicom" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_DAVICOM=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS davicom.o" --fi -- --# Check whether --enable-depca or --disable-depca was given. --if test "${enable_depca+set}" = set; then -- enableval="$enable_depca" -- --fi; --if test "x$enable_depca" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_DEPCA=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS depca.o" --fi -- --# Check whether --enable-eepro or --disable-eepro was given. --if test "${enable_eepro+set}" = set; then -- enableval="$enable_eepro" -- --fi; --if test "x$enable_eepro" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EEPRO=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS eepro.o" --fi -- --# Check whether --enable-eepro100 or --disable-eepro100 was given. --if test "${enable_eepro100+set}" = set; then -- enableval="$enable_eepro100" -- --fi; --if test "x$enable_eepro100" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EEPRO100=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS eepro100.o" --fi -- --# Check whether --enable-epic100 or --disable-epic100 was given. --if test "${enable_epic100+set}" = set; then -- enableval="$enable_epic100" -- --fi; --if test "x$enable_epic100" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EPIC100=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS epic100.o" --fi -- --# Check whether --enable-3c507 or --disable-3c507 was given. --if test "${enable_3c507+set}" = set; then -- enableval="$enable_3c507" -- --fi; --if test "x$enable_3c507" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C507=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c507.o" --fi -- --# Check whether --enable-exos205 or --disable-exos205 was given. --if test "${enable_exos205+set}" = set; then -- enableval="$enable_exos205" -- --fi; --if test "x$enable_exos205" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_EXOS205=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS exos205.o" --fi -- --# Check whether --enable-ni5210 or --disable-ni5210 was given. --if test "${enable_ni5210+set}" = set; then -- enableval="$enable_ni5210" -- --fi; --if test "x$enable_ni5210" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NI5210=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ni5210.o" --fi -- --# Check whether --enable-lance or --disable-lance was given. --if test "${enable_lance+set}" = set; then -- enableval="$enable_lance" -- --fi; --if test "x$enable_lance" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_LANCE=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS lance.o" --fi -- --# Check whether --enable-ne2100 or --disable-ne2100 was given. --if test "${enable_ne2100+set}" = set; then -- enableval="$enable_ne2100" -- --fi; --if test "x$enable_ne2100" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NE2100=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ne2100.o" --fi -- --# Check whether --enable-ni6510 or --disable-ni6510 was given. --if test "${enable_ni6510+set}" = set; then -- enableval="$enable_ni6510" -- --fi; --if test "x$enable_ni6510" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NI6510=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ni6510.o" --fi -- --# Check whether --enable-natsemi or --disable-natsemi was given. --if test "${enable_natsemi+set}" = set; then -- enableval="$enable_natsemi" -- --fi; --if test "x$enable_natsemi" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NATSEMI=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS natsemi.o" --fi -- --# Check whether --enable-ni5010 or --disable-ni5010 was given. --if test "${enable_ni5010+set}" = set; then -- enableval="$enable_ni5010" -- --fi; --if test "x$enable_ni5010" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NI5010=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ni5010.o" --fi -- --# Check whether --enable-3c503 or --disable-3c503 was given. --if test "${enable_3c503+set}" = set; then -- enableval="$enable_3c503" -- --fi; --if test "x$enable_3c503" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_3C503=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS 3c503.o" --fi -- --# Check whether --enable-ne or --disable-ne was given. --if test "${enable_ne+set}" = set; then -- enableval="$enable_ne" -- --fi; --if test "x$enable_ne" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NE=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ne.o" --fi -- --# Check whether --enable-ns8390 or --disable-ns8390 was given. --if test "${enable_ns8390+set}" = set; then -- enableval="$enable_ns8390" -- --fi; --if test "x$enable_ns8390" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_NS8390=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS ns8390.o" --fi -- --# Check whether --enable-wd or --disable-wd was given. --if test "${enable_wd+set}" = set; then -- enableval="$enable_wd" -- --fi; --if test "x$enable_wd" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_WD=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS wd.o" --fi -- --# Check whether --enable-otulip or --disable-otulip was given. --if test "${enable_otulip+set}" = set; then -- enableval="$enable_otulip" -- --fi; --if test "x$enable_otulip" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_OTULIP=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS otulip.o" --fi -- --# Check whether --enable-rtl8139 or --disable-rtl8139 was given. --if test "${enable_rtl8139+set}" = set; then -- enableval="$enable_rtl8139" -- --fi; --if test "x$enable_rtl8139" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_RTL8139=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS rtl8139.o" --fi -- --# Check whether --enable-sis900 or --disable-sis900 was given. --if test "${enable_sis900+set}" = set; then -- enableval="$enable_sis900" -- --fi; --if test "x$enable_sis900" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_SIS900=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS sis900.o" --fi -- --# Check whether --enable-sk-g16 or --disable-sk-g16 was given. --if test "${enable_sk_g16+set}" = set; then -- enableval="$enable_sk_g16" -- --fi; --if test "x$enable_sk_g16" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_SK_G16=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS sk_g16.o" --fi -- --# Check whether --enable-smc9000 or --disable-smc9000 was given. --if test "${enable_smc9000+set}" = set; then -- enableval="$enable_smc9000" -- --fi; --if test "x$enable_smc9000" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_SMC9000=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS smc9000.o" --fi -- --# Check whether --enable-tiara or --disable-tiara was given. --if test "${enable_tiara+set}" = set; then -- enableval="$enable_tiara" -- --fi; --if test "x$enable_tiara" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_TIARA=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS tiara.o" --fi -- --# Check whether --enable-tulip or --disable-tulip was given. --if test "${enable_tulip+set}" = set; then -- enableval="$enable_tulip" -- --fi; --if test "x$enable_tulip" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_TULIP=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS tulip.o" --fi -- --# Check whether --enable-via-rhine or --disable-via-rhine was given. --if test "${enable_via_rhine+set}" = set; then -- enableval="$enable_via_rhine" -- --fi; --if test "x$enable_via_rhine" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_VIA_RHINE=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS via_rhine.o" --fi -- --# Check whether --enable-w89c840 or --disable-w89c840 was given. --if test "${enable_w89c840+set}" = set; then -- enableval="$enable_w89c840" -- --fi; --if test "x$enable_w89c840" = xyes; then -- NET_CFLAGS="$NET_CFLAGS -DINCLUDE_W89C840=1" -- NETBOOT_DRIVERS="$NETBOOT_DRIVERS w89c840.o" --fi -- -- -- --if test "x$NET_CFLAGS" != x; then -- NETBOOT_SUPPORT_TRUE= -- NETBOOT_SUPPORT_FALSE='#' --else -- NETBOOT_SUPPORT_TRUE='#' -- NETBOOT_SUPPORT_FALSE= --fi -- --if test "x$NET_CFLAGS" != x; then -- FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_TFTP=1" --fi -- --# Check whether --enable-3c503-shmem or --disable-3c503-shmem was given. --if test "${enable_3c503_shmem+set}" = set; then -- enableval="$enable_3c503_shmem" -- --fi; --if test "x$enable_3c503_shmem" = xyes; then -- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DT503_SHMEM=1" --fi -- --# Check whether --enable-3c503-aui or --disable-3c503-aui was given. --if test "${enable_3c503_aui+set}" = set; then -- enableval="$enable_3c503_aui" -- --fi; --if test "x$enable_3c503_aui" = xyes; then -- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DT503_AUI=1" --fi -- --# Check whether --enable-compex-rl2000-fix or --disable-compex-rl2000-fix was given. --if test "${enable_compex_rl2000_fix+set}" = set; then -- enableval="$enable_compex_rl2000_fix" -- --fi; --if test "x$enable_compex_rl2000_fix" = xyes; then -- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCOMPEX_RL2000_FIX=1" --fi -- --# Check whether --enable-smc9000-scan or --disable-smc9000-scan was given. --if test "${enable_smc9000_scan+set}" = set; then -- enableval="$enable_smc9000_scan" -- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DSMC9000_SCAN=$enable_smc9000_scan" --fi; -- --# Check whether --enable-ne-scan or --disable-ne-scan was given. --if test "${enable_ne_scan+set}" = set; then -- enableval="$enable_ne_scan" -- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DNE_SCAN=$enable_ne_scan" --else -- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DNE_SCAN=0x280,0x300,0x320,0x340" --fi; -- --# Check whether --enable-wd-default-mem or --disable-wd-default-mem was given. --if test "${enable_wd_default_mem+set}" = set; then -- enableval="$enable_wd_default_mem" -- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DWD_DEFAULT_MEM=$enable_wd_default_mem" --else -- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DWD_DEFAULT_MEM=0xCC000" --fi; -- --# Check whether --enable-cs-scan or --disable-cs-scan was given. --if test "${enable_cs_scan+set}" = set; then -- enableval="$enable_cs_scan" -- NET_EXTRAFLAGS="$NET_EXTRAFLAGS -DCS_SCAN=$enable_cs_scan" --fi; -- --# Check whether --enable-diskless or --disable-diskless was given. --if test "${enable_diskless+set}" = set; then -- enableval="$enable_diskless" -- --fi; -- -- --if test "x$enable_diskless" = xyes; then -- DISKLESS_SUPPORT_TRUE= -- DISKLESS_SUPPORT_FALSE='#' --else -- DISKLESS_SUPPORT_TRUE='#' -- DISKLESS_SUPPORT_FALSE= --fi -- -- --# Check whether --enable-hercules or --disable-hercules was given. --if test "${enable_hercules+set}" = set; then -- enableval="$enable_hercules" -- --fi; -- -- --if test "x$enable_hercules" != xno; then -- HERCULES_SUPPORT_TRUE= -- HERCULES_SUPPORT_FALSE='#' --else -- HERCULES_SUPPORT_TRUE='#' -- HERCULES_SUPPORT_FALSE= --fi -- -- --# Check whether --enable-serial or --disable-serial was given. --if test "${enable_serial+set}" = set; then -- enableval="$enable_serial" -- --fi; -- -- --if test "x$enable_serial" != xno; then -- SERIAL_SUPPORT_TRUE= -- SERIAL_SUPPORT_FALSE='#' --else -- SERIAL_SUPPORT_TRUE='#' -- SERIAL_SUPPORT_FALSE= --fi -- -- --# Check whether --enable-serial-speed-simulation or --disable-serial-speed-simulation was given. --if test "${enable_serial_speed_simulation+set}" = set; then -- enableval="$enable_serial_speed_simulation" -- --fi; -- -- --if test "x$enable_serial_speed_simulation" = xyes; then -- SERIAL_SPEED_SIMULATION_TRUE= -- SERIAL_SPEED_SIMULATION_FALSE='#' --else -- SERIAL_SPEED_SIMULATION_TRUE='#' -- SERIAL_SPEED_SIMULATION_FALSE= --fi -- -- --# Sanity check. --if test "x$enable_diskless" = xyes; then -- if test "x$NET_CFLAGS" = x; then -- { { echo "$as_me:$LINENO: error: You must enable at least one network driver" >&5 --echo "$as_me: error: You must enable at least one network driver" >&2;} -- { (exit 1); exit 1; }; } -- fi --fi -- --# Check whether --enable-preset-menu or --disable-preset-menu was given. --if test "${enable_preset_menu+set}" = set; then -- enableval="$enable_preset_menu" -- --fi; --if test "x$enable_preset_menu" = x; then -- : --else -- if test -r $enable_preset_menu; then -- --# Because early versions of GNU sed 3.x are too buggy, use a C program --# instead of shell commands. *sigh* --cat >conftest.c <<\EOF --#include <stdio.h> -- --int --main (void) --{ -- int c; -- -- while ((c = getchar ()) != EOF) -- { -- switch (c) -- { -- case '\n': -- fputs ("\n", stdout); -- break; -- case '\r': -- fputs ("\r", stdout); -- break; -- case '\': -- fputs ("\\", stdout); -- break; -- case '"': -- fputs ("\"", stdout); -- break; -- default: -- putchar (c); -- } -- } -- -- return 0; --} --EOF -- --if { ac_try='${CC-cc} ${CFLAGS} conftest.c -o conftest' -- { (eval echo "$as_me:$LINENO: "$ac_try"") >&5 -- (eval $ac_try) 2>&5 -- ac_status=$? -- echo "$as_me:$LINENO: $? = $ac_status" >&5 -- (exit $ac_status); }; } && test -s conftest; then -- grub_tmp_value=`./conftest < "$enable_preset_menu"` --else -- { { echo "$as_me:$LINENO: error: ${CC-cc} failed to produce an executable file" >&5 --echo "$as_me: error: ${CC-cc} failed to produce an executable file" >&2;} -- { (exit 1); exit 1; }; } --fi -- -- --cat >>confdefs.h <<_ACEOF --#define PRESET_MENU_STRING "$grub_tmp_value" --_ACEOF -- --rm -f conftest* -- -- else -- { { echo "$as_me:$LINENO: error: Cannot read the preset menu file $enable_preset_menu" >&5 --echo "$as_me: error: Cannot read the preset menu file $enable_preset_menu" >&2;} -- { (exit 1); exit 1; }; } -- fi --fi -- --# Check whether --enable-example-kernel or --disable-example-kernel was given. --if test "${enable_example_kernel+set}" = set; then -- enableval="$enable_example_kernel" -- --fi; -- -- --if test "x$enable_example_kernel" = xyes; then -- BUILD_EXAMPLE_KERNEL_TRUE= -- BUILD_EXAMPLE_KERNEL_FALSE='#' --else -- BUILD_EXAMPLE_KERNEL_TRUE='#' -- BUILD_EXAMPLE_KERNEL_FALSE= --fi -- -- --# Check whether --enable-auto-linux-mem-opt or --disable-auto-linux-mem-opt was given. --if test "${enable_auto_linux_mem_opt+set}" = set; then -- enableval="$enable_auto_linux_mem_opt" -- --fi; --if test "x$enable_auto_linux_mem_opt" = xno; then -- : --else -- --cat >>confdefs.h <<_ACEOF --#define AUTO_LINUX_MEM_OPT 1 --_ACEOF -- --fi -- -- -- -- -- -- --CCASFLAGS='$(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(CPPFLAGS) $(CFLAGS)' -- -- -- -- ac_config_files="$ac_config_files Makefile stage1/Makefile stage2/Makefile docs/Makefile lib/Makefile util/Makefile grub/Makefile netboot/Makefile util/grub-image util/grub-install util/grub-md5-crypt util/grub-terminfo util/grub-set-default" -- --cat >confcache <<_ACEOF --# This file is a shell script that caches the results of configure --# tests run on this system so they can be shared between configure --# scripts and configure runs, see configure's option --config-cache. --# It is not useful on other systems. If it contains results you don't --# want to keep, you may remove or edit it. --# --# config.status only pays attention to the cache file if you give it --# the --recheck option to rerun configure. --# --# `ac_cv_env_foo' variables (set or unset) will be overridden when --# loading this file, other *unset* `ac_cv_foo' will be assigned the --# following values. -- --_ACEOF -- --# The following way of writing the cache mishandles newlines in values, --# but we know of no workaround that is simple, portable, and efficient. --# So, don't put newlines in cache variables' values. --# Ultrix sh set writes to stderr and can't be redirected directly, --# and sets the high bit in the cache file unless we assign to the vars. --{ -- (set) 2>&1 | -- case `(ac_space=' '; set | grep ac_space) 2>&1` in -- *ac_space=\ *) -- # `set' does not quote correctly, so add quotes (double-quote -- # substitution turns \\ into \, and sed turns \ into ). -- sed -n \ -- "s/'/'\\''/g; -- s/^\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\)=\(.*\)/\1='\2'/p" -- ;; -- *) -- # `set' quotes correctly as required by POSIX, so do not add quotes. -- sed -n \ -- "s/^\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\)=\(.*\)/\1=\2/p" -- ;; -- esac; --} | -- sed ' -- t clear -- : clear -- s/^([^=]*)=(.*[{}].*)$/test "${\1+set}" = set || &/ -- t end -- /^ac_cv_env/!s/^([^=]*)=(.*)$/\1=${\1=\2}/ -- : end' >>confcache --if diff $cache_file confcache >/dev/null 2>&1; then :; else -- if test -w $cache_file; then -- test "x$cache_file" != "x/dev/null" && echo "updating cache $cache_file" -- cat confcache >$cache_file -- else -- echo "not updating unwritable cache $cache_file" -- fi --fi --rm -f confcache -- --test "x$prefix" = xNONE && prefix=$ac_default_prefix --# Let make expand exec_prefix. --test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' -- --# VPATH may cause trouble with some makes, so we remove $(srcdir), --# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and --# trailing colons and then remove the whole line if VPATH becomes empty --# (actually we leave an empty line to preserve line numbers). --if test "x$srcdir" = x.; then -- ac_vpsub='/^[ ]*VPATH[ ]*=/{ --s/:*$(srcdir):*/:/; --s/:*${srcdir}:*/:/; --s/:*@srcdir@:*/:/; --s/^([^=]*=[ ]*):*/\1/; --s/:*$//; --s/^[^=]*=[ ]*$//; --}' --fi -- --DEFS=-DHAVE_CONFIG_H -- --ac_libobjs= --ac_ltlibobjs= --for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue -- # 1. Remove the extension, and $U if already installed. -- ac_i=`echo "$ac_i" | -- sed 's/$U././;s/.o$//;s/.obj$//'` -- # 2. Add them. -- ac_libobjs="$ac_libobjs $ac_i$U.$ac_objext" -- ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo' --done --LIBOBJS=$ac_libobjs -- --LTLIBOBJS=$ac_ltlibobjs -- -- --if test -z "${MAINTAINER_MODE_TRUE}" && test -z "${MAINTAINER_MODE_FALSE}"; then -- { { echo "$as_me:$LINENO: error: conditional "MAINTAINER_MODE" was never defined. --Usually this means the macro was only invoked conditionally." >&5 --echo "$as_me: error: conditional "MAINTAINER_MODE" was never defined. --Usually this means the macro was only invoked conditionally." >&2;} -- { (exit 1); exit 1; }; } --fi --if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then -- { { echo "$as_me:$LINENO: error: conditional "AMDEP" was never defined. --Usually this means the macro was only invoked conditionally." >&5 --echo "$as_me: error: conditional "AMDEP" was never defined. --Usually this means the macro was only invoked conditionally." >&2;} -- { (exit 1); exit 1; }; } --fi --if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then -- { { echo "$as_me:$LINENO: error: conditional "am__fastdepCC" was never defined. --Usually this means the macro was only invoked conditionally." >&5 --echo "$as_me: error: conditional "am__fastdepCC" was never defined. --Usually this means the macro was only invoked conditionally." >&2;} -- { (exit 1); exit 1; }; } --fi --if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then -- { { echo "$as_me:$LINENO: error: conditional "am__fastdepCC" was never defined. --Usually this means the macro was only invoked conditionally." >&5 --echo "$as_me: error: conditional "am__fastdepCC" was never defined. --Usually this means the macro was only invoked conditionally." >&2;} -- { (exit 1); exit 1; }; } --fi --if test -z "${NETBOOT_SUPPORT_TRUE}" && test -z "${NETBOOT_SUPPORT_FALSE}"; then -- { { echo "$as_me:$LINENO: error: conditional "NETBOOT_SUPPORT" was never defined. --Usually this means the macro was only invoked conditionally." >&5 --echo "$as_me: error: conditional "NETBOOT_SUPPORT" was never defined. --Usually this means the macro was only invoked conditionally." >&2;} -- { (exit 1); exit 1; }; } --fi --if test -z "${DISKLESS_SUPPORT_TRUE}" && test -z "${DISKLESS_SUPPORT_FALSE}"; then -- { { echo "$as_me:$LINENO: error: conditional "DISKLESS_SUPPORT" was never defined. --Usually this means the macro was only invoked conditionally." >&5 --echo "$as_me: error: conditional "DISKLESS_SUPPORT" was never defined. --Usually this means the macro was only invoked conditionally." >&2;} -- { (exit 1); exit 1; }; } --fi --if test -z "${HERCULES_SUPPORT_TRUE}" && test -z "${HERCULES_SUPPORT_FALSE}"; then -- { { echo "$as_me:$LINENO: error: conditional "HERCULES_SUPPORT" was never defined. --Usually this means the macro was only invoked conditionally." >&5 --echo "$as_me: error: conditional "HERCULES_SUPPORT" was never defined. --Usually this means the macro was only invoked conditionally." >&2;} -- { (exit 1); exit 1; }; } --fi --if test -z "${SERIAL_SUPPORT_TRUE}" && test -z "${SERIAL_SUPPORT_FALSE}"; then -- { { echo "$as_me:$LINENO: error: conditional "SERIAL_SUPPORT" was never defined. --Usually this means the macro was only invoked conditionally." >&5 --echo "$as_me: error: conditional "SERIAL_SUPPORT" was never defined. --Usually this means the macro was only invoked conditionally." >&2;} -- { (exit 1); exit 1; }; } --fi --if test -z "${SERIAL_SPEED_SIMULATION_TRUE}" && test -z "${SERIAL_SPEED_SIMULATION_FALSE}"; then -- { { echo "$as_me:$LINENO: error: conditional "SERIAL_SPEED_SIMULATION" was never defined. --Usually this means the macro was only invoked conditionally." >&5 --echo "$as_me: error: conditional "SERIAL_SPEED_SIMULATION" was never defined. --Usually this means the macro was only invoked conditionally." >&2;} -- { (exit 1); exit 1; }; } --fi --if test -z "${BUILD_EXAMPLE_KERNEL_TRUE}" && test -z "${BUILD_EXAMPLE_KERNEL_FALSE}"; then -- { { echo "$as_me:$LINENO: error: conditional "BUILD_EXAMPLE_KERNEL" was never defined. --Usually this means the macro was only invoked conditionally." >&5 --echo "$as_me: error: conditional "BUILD_EXAMPLE_KERNEL" was never defined. --Usually this means the macro was only invoked conditionally." >&2;} -- { (exit 1); exit 1; }; } --fi -- --: ${CONFIG_STATUS=./config.status} --ac_clean_files_save=$ac_clean_files --ac_clean_files="$ac_clean_files $CONFIG_STATUS" --{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5 --echo "$as_me: creating $CONFIG_STATUS" >&6;} --cat >$CONFIG_STATUS <<_ACEOF --#! $SHELL --# Generated by $as_me. --# Run this file to recreate the current configuration. --# Compiler output produced by configure, useful for debugging --# configure, is in config.log if it exists. -- --debug=false --ac_cs_recheck=false --ac_cs_silent=false --SHELL=${CONFIG_SHELL-$SHELL} --_ACEOF -- --cat >>$CONFIG_STATUS <<_ACEOF --## --------------------- ## --## M4sh Initialization. ## --## --------------------- ## -- --# Be Bourne compatible --if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then -- emulate sh -- NULLCMD=: -- # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which -- # is contrary to our usage. Disable this feature. -- alias -g '${1+"$@"}'='"$@"' --elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then -- set -o posix --fi --DUALCASE=1; export DUALCASE # for MKS sh -- --# Support unset when possible. --if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then -- as_unset=unset --else -- as_unset=false --fi -- -- --# Work around bugs in pre-3.0 UWIN ksh. --$as_unset ENV MAIL MAILPATH --PS1='$ ' --PS2='> ' --PS4='+ ' -- --# NLS nuisances. --for as_var in \ -- LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \ -- LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \ -- LC_TELEPHONE LC_TIME --do -- if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then -- eval $as_var=C; export $as_var -- else -- $as_unset $as_var -- fi --done -- --# Required to use basename. --if expr a : '(a)' >/dev/null 2>&1; then -- as_expr=expr --else -- as_expr=false --fi -- --if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then -- as_basename=basename --else -- as_basename=false --fi -- -- --# Name of the executable. --as_me=`$as_basename "$0" || --$as_expr X/"$0" : '.*/([^/][^/]*)/*$' | \ -- X"$0" : 'X(//)$' | \ -- X"$0" : 'X(/)$' | \ -- . : '(.)' 2>/dev/null || --echo X/"$0" | -- sed '/^.*/([^/][^/]*)/*$/{ s//\1/; q; } -- /^X/(//)$/{ s//\1/; q; } -- /^X/(/).*/{ s//\1/; q; } -- s/.*/./; q'` -- -- --# PATH needs CR, and LINENO needs CR and PATH. --# Avoid depending upon Character Ranges. --as_cr_letters='abcdefghijklmnopqrstuvwxyz' --as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' --as_cr_Letters=$as_cr_letters$as_cr_LETTERS --as_cr_digits='0123456789' --as_cr_alnum=$as_cr_Letters$as_cr_digits -- --# The user is always right. --if test "${PATH_SEPARATOR+set}" != set; then -- echo "#! /bin/sh" >conf$$.sh -- echo "exit 0" >>conf$$.sh -- chmod +x conf$$.sh -- if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then -- PATH_SEPARATOR=';' -- else -- PATH_SEPARATOR=: -- fi -- rm -f conf$$.sh --fi -- -- -- as_lineno_1=$LINENO -- as_lineno_2=$LINENO -- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` -- test "x$as_lineno_1" != "x$as_lineno_2" && -- test "x$as_lineno_3" = "x$as_lineno_2" || { -- # Find who we are. Look in the path if we contain no path at all -- # relative or not. -- case $0 in -- *[\/]* ) as_myself=$0 ;; -- *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in $PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break --done -- -- ;; -- esac -- # We did not find ourselves, most probably we were run as `sh COMMAND' -- # in which case we are not to be found in the path. -- if test "x$as_myself" = x; then -- as_myself=$0 -- fi -- if test ! -f "$as_myself"; then -- { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5 --echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;} -- { (exit 1); exit 1; }; } -- fi -- case $CONFIG_SHELL in -- '') -- as_save_IFS=$IFS; IFS=$PATH_SEPARATOR --for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH --do -- IFS=$as_save_IFS -- test -z "$as_dir" && as_dir=. -- for as_base in sh bash ksh sh5; do -- case $as_dir in -- /*) -- if ("$as_dir/$as_base" -c ' -- as_lineno_1=$LINENO -- as_lineno_2=$LINENO -- as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null` -- test "x$as_lineno_1" != "x$as_lineno_2" && -- test "x$as_lineno_3" = "x$as_lineno_2" ') 2>/dev/null; then -- $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; } -- $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; } -- CONFIG_SHELL=$as_dir/$as_base -- export CONFIG_SHELL -- exec "$CONFIG_SHELL" "$0" ${1+"$@"} -- fi;; -- esac -- done --done --;; -- esac -- -- # Create $as_me.lineno as a copy of $as_myself, but with $LINENO -- # uniformly replaced by the line number. The first 'sed' inserts a -- # line-number line before each line; the second 'sed' does the real -- # work. The second script uses 'N' to pair each line-number line -- # with the numbered line, and appends trailing '-' during -- # substitution so that $LINENO is not a special case at line end. -- # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the -- # second 'sed' script. Blame Lee E. McMahon for sed's syntax. :-) -- sed '=' <$as_myself | -- sed ' -- N -- s,$,-, -- : loop -- s,^(['$as_cr_digits']*)(.*)[$]LINENO([^'$as_cr_alnum'_]),\1\2\1\3, -- t loop -- s,-$,, -- s,^['$as_cr_digits']*\n,, -- ' >$as_me.lineno && -- chmod +x $as_me.lineno || -- { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5 --echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;} -- { (exit 1); exit 1; }; } -- -- # Don't try to exec as it changes $[0], causing all sort of problems -- # (the dirname of $[0] is not the place where we might find the -- # original and so on. Autoconf is especially sensible to this). -- . ./$as_me.lineno -- # Exit status is that of the last command. -- exit --} -- -- --case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in -- *c*,-n*) ECHO_N= ECHO_C=' --' ECHO_T=' ' ;; -- *c*,* ) ECHO_N=-n ECHO_C= ECHO_T= ;; -- *) ECHO_N= ECHO_C='\c' ECHO_T= ;; --esac -- --if expr a : '(a)' >/dev/null 2>&1; then -- as_expr=expr --else -- as_expr=false --fi -- --rm -f conf$$ conf$$.exe conf$$.file --echo >conf$$.file --if ln -s conf$$.file conf$$ 2>/dev/null; then -- # We could just check for DJGPP; but this test a) works b) is more generic -- # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04). -- if test -f conf$$.exe; then -- # Don't use ln at all; we don't have any links -- as_ln_s='cp -p' -- else -- as_ln_s='ln -s' -- fi --elif ln conf$$.file conf$$ 2>/dev/null; then -- as_ln_s=ln --else -- as_ln_s='cp -p' --fi --rm -f conf$$ conf$$.exe conf$$.file -- --if mkdir -p . 2>/dev/null; then -- as_mkdir_p=: --else -- test -d ./-p && rmdir ./-p -- as_mkdir_p=false --fi -- --as_executable_p="test -f" -- --# Sed expression to map a string onto a valid CPP name. --as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" -- --# Sed expression to map a string onto a valid variable name. --as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" -- -- --# IFS --# We need space, tab and new line, in precisely that order. --as_nl=' --' --IFS=" $as_nl" -- --# CDPATH. --$as_unset CDPATH -- --exec 6>&1 -- --# Open the log real soon, to keep $[0] and so on meaningful, and to --# report actual input values of CONFIG_FILES etc. instead of their --# values after options handling. Logging --version etc. is OK. --exec 5>>config.log --{ -- echo -- sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX --## Running $as_me. ## --_ASBOX --} >&5 --cat >&5 <<_CSEOF -- --This file was extended by GRUB $as_me 0.97, which was --generated by GNU Autoconf 2.59. Invocation command line was -- -- CONFIG_FILES = $CONFIG_FILES -- CONFIG_HEADERS = $CONFIG_HEADERS -- CONFIG_LINKS = $CONFIG_LINKS -- CONFIG_COMMANDS = $CONFIG_COMMANDS -- $ $0 $@ -- --_CSEOF --echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5 --echo >&5 --_ACEOF -- --# Files that config.status was made for. --if test -n "$ac_config_files"; then -- echo "config_files="$ac_config_files"" >>$CONFIG_STATUS --fi -- --if test -n "$ac_config_headers"; then -- echo "config_headers="$ac_config_headers"" >>$CONFIG_STATUS --fi -- --if test -n "$ac_config_links"; then -- echo "config_links="$ac_config_links"" >>$CONFIG_STATUS --fi -- --if test -n "$ac_config_commands"; then -- echo "config_commands="$ac_config_commands"" >>$CONFIG_STATUS --fi -- --cat >>$CONFIG_STATUS <<_ACEOF -- --ac_cs_usage="\ --`$as_me' instantiates files from templates according to the --current configuration. -- --Usage: $0 [OPTIONS] [FILE]... -- -- -h, --help print this help, then exit -- -V, --version print version number, then exit -- -q, --quiet do not print progress messages -- -d, --debug don't remove temporary files -- --recheck update $as_me by reconfiguring in the same conditions -- --file=FILE[:TEMPLATE] -- instantiate the configuration file FILE -- --header=FILE[:TEMPLATE] -- instantiate the configuration header FILE -- --Configuration files: --$config_files -- --Configuration headers: --$config_headers -- --Configuration commands: --$config_commands -- --Report bugs to bug-autoconf@gnu.org." --_ACEOF -- --cat >>$CONFIG_STATUS <<_ACEOF --ac_cs_version="\ --GRUB config.status 0.97 --configured by $0, generated by GNU Autoconf 2.59, -- with options \"`echo "$ac_configure_args" | sed 's/[\""`$]/\\&/g'`\" -- --Copyright (C) 2003 Free Software Foundation, Inc. --This config.status script is free software; the Free Software Foundation --gives unlimited permission to copy, distribute and modify it." --srcdir=$srcdir --INSTALL="$INSTALL" --_ACEOF -- --cat >>$CONFIG_STATUS <<_ACEOF --# If no file are specified by the user, then we need to provide default --# value. By we need to know if files were specified by the user. --ac_need_defaults=: --while test $# != 0 --do -- case $1 in -- --*=*) -- ac_option=`expr "x$1" : 'x([^=]*)='` -- ac_optarg=`expr "x$1" : 'x[^=]*=(.*)'` -- ac_shift=: -- ;; -- -*) -- ac_option=$1 -- ac_optarg=$2 -- ac_shift=shift -- ;; -- *) # This is not an option, so the user has probably given explicit -- # arguments. -- ac_option=$1 -- ac_need_defaults=false;; -- esac -- -- case $ac_option in -- # Handling of the options. --_ACEOF --cat >>$CONFIG_STATUS <<_ACEOF -- -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) -- ac_cs_recheck=: ;; -- --version | --vers* | -V ) -- echo "$ac_cs_version"; exit 0 ;; -- --he | --h) -- # Conflict between --help and --header -- { { echo "$as_me:$LINENO: error: ambiguous option: $1 --Try `$0 --help' for more information." >&5 --echo "$as_me: error: ambiguous option: $1 --Try `$0 --help' for more information." >&2;} -- { (exit 1); exit 1; }; };; -- --help | --hel | -h ) -- echo "$ac_cs_usage"; exit 0 ;; -- --debug | --d* | -d ) -- debug=: ;; -- --file | --fil | --fi | --f ) -- $ac_shift -- CONFIG_FILES="$CONFIG_FILES $ac_optarg" -- ac_need_defaults=false;; -- --header | --heade | --head | --hea ) -- $ac_shift -- CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg" -- ac_need_defaults=false;; -- -q | -quiet | --quiet | --quie | --qui | --qu | --q \ -- | -silent | --silent | --silen | --sile | --sil | --si | --s) -- ac_cs_silent=: ;; -- -- # This is an error. -- -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1 --Try `$0 --help' for more information." >&5 --echo "$as_me: error: unrecognized option: $1 --Try `$0 --help' for more information." >&2;} -- { (exit 1); exit 1; }; } ;; -- -- *) ac_config_targets="$ac_config_targets $1" ;; -- -- esac -- shift --done -- --ac_configure_extra_args= -- --if $ac_cs_silent; then -- exec 6>/dev/null -- ac_configure_extra_args="$ac_configure_extra_args --silent" --fi -- --_ACEOF --cat >>$CONFIG_STATUS <<_ACEOF --if $ac_cs_recheck; then -- echo "running $SHELL $0 " $ac_configure_args $ac_configure_extra_args " --no-create --no-recursion" >&6 -- exec $SHELL $0 $ac_configure_args $ac_configure_extra_args --no-create --no-recursion --fi -- --_ACEOF -- --cat >>$CONFIG_STATUS <<_ACEOF --# --# INIT-COMMANDS section. --# -- --AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" -- --_ACEOF -- -- -- --cat >>$CONFIG_STATUS <<_ACEOF --for ac_config_target in $ac_config_targets --do -- case "$ac_config_target" in -- # Handling of arguments. -- "Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;; -- "stage1/Makefile" ) CONFIG_FILES="$CONFIG_FILES stage1/Makefile" ;; -- "stage2/Makefile" ) CONFIG_FILES="$CONFIG_FILES stage2/Makefile" ;; -- "docs/Makefile" ) CONFIG_FILES="$CONFIG_FILES docs/Makefile" ;; -- "lib/Makefile" ) CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; -- "util/Makefile" ) CONFIG_FILES="$CONFIG_FILES util/Makefile" ;; -- "grub/Makefile" ) CONFIG_FILES="$CONFIG_FILES grub/Makefile" ;; -- "netboot/Makefile" ) CONFIG_FILES="$CONFIG_FILES netboot/Makefile" ;; -- "util/grub-image" ) CONFIG_FILES="$CONFIG_FILES util/grub-image" ;; -- "util/grub-install" ) CONFIG_FILES="$CONFIG_FILES util/grub-install" ;; -- "util/grub-md5-crypt" ) CONFIG_FILES="$CONFIG_FILES util/grub-md5-crypt" ;; -- "util/grub-terminfo" ) CONFIG_FILES="$CONFIG_FILES util/grub-terminfo" ;; -- "util/grub-set-default" ) CONFIG_FILES="$CONFIG_FILES util/grub-set-default" ;; -- "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; -- "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; -- *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5 --echo "$as_me: error: invalid argument: $ac_config_target" >&2;} -- { (exit 1); exit 1; }; };; -- esac --done -- --# If the user did not use the arguments to specify the items to instantiate, --# then the envvar interface is used. Set only those that are not. --# We use the long form for the default assignment because of an extremely --# bizarre bug on SunOS 4.1.3. --if $ac_need_defaults; then -- test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files -- test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers -- test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands --fi -- --# Have a temporary directory for convenience. Make it in the build tree --# simply because there is no reason to put it here, and in addition, --# creating and moving files from /tmp can sometimes cause problems. --# Create a temporary directory, and hook for its removal unless debugging. --$debug || --{ -- trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0 -- trap '{ (exit 1); exit 1; }' 1 2 13 15 --} -- --# Create a (secure) tmp directory for tmp files. -- --{ -- tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` && -- test -n "$tmp" && test -d "$tmp" --} || --{ -- tmp=./confstat$$-$RANDOM -- (umask 077 && mkdir $tmp) --} || --{ -- echo "$me: cannot create a temporary directory in ." >&2 -- { (exit 1); exit 1; } --} -- --_ACEOF -- --cat >>$CONFIG_STATUS <<_ACEOF -- --# --# CONFIG_FILES section. --# -- --# No need to generate the scripts if there are no CONFIG_FILES. --# This happens for instance when ./config.status config.h --if test -n "$CONFIG_FILES"; then -- # Protect against being on the right side of a sed subst in config.status. -- sed 's/,@/@@/; s/@,/@@/; s/,;t t$/@;t t/; /@;t t$/s/[\\&,]/\\&/g; -- s/@@/,@/; s/@@/@,/; s/@;t t$/,;t t/' >$tmp/subs.sed <<\CEOF --s,@SHELL@,$SHELL,;t t --s,@PATH_SEPARATOR@,$PATH_SEPARATOR,;t t --s,@PACKAGE_NAME@,$PACKAGE_NAME,;t t --s,@PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t --s,@PACKAGE_VERSION@,$PACKAGE_VERSION,;t t --s,@PACKAGE_STRING@,$PACKAGE_STRING,;t t --s,@PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t --s,@exec_prefix@,$exec_prefix,;t t --s,@prefix@,$prefix,;t t --s,@program_transform_name@,$program_transform_name,;t t --s,@bindir@,$bindir,;t t --s,@sbindir@,$sbindir,;t t --s,@libexecdir@,$libexecdir,;t t --s,@datadir@,$datadir,;t t --s,@sysconfdir@,$sysconfdir,;t t --s,@sharedstatedir@,$sharedstatedir,;t t --s,@localstatedir@,$localstatedir,;t t --s,@libdir@,$libdir,;t t --s,@includedir@,$includedir,;t t --s,@oldincludedir@,$oldincludedir,;t t --s,@infodir@,$infodir,;t t --s,@mandir@,$mandir,;t t --s,@build_alias@,$build_alias,;t t --s,@host_alias@,$host_alias,;t t --s,@target_alias@,$target_alias,;t t --s,@DEFS@,$DEFS,;t t --s,@ECHO_C@,$ECHO_C,;t t --s,@ECHO_N@,$ECHO_N,;t t --s,@ECHO_T@,$ECHO_T,;t t --s,@LIBS@,$LIBS,;t t --s,@INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t --s,@INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t --s,@INSTALL_DATA@,$INSTALL_DATA,;t t --s,@CYGPATH_W@,$CYGPATH_W,;t t --s,@PACKAGE@,$PACKAGE,;t t --s,@VERSION@,$VERSION,;t t --s,@ACLOCAL@,$ACLOCAL,;t t --s,@AUTOCONF@,$AUTOCONF,;t t --s,@AUTOMAKE@,$AUTOMAKE,;t t --s,@AUTOHEADER@,$AUTOHEADER,;t t --s,@MAKEINFO@,$MAKEINFO,;t t --s,@install_sh@,$install_sh,;t t --s,@STRIP@,$STRIP,;t t --s,@ac_ct_STRIP@,$ac_ct_STRIP,;t t --s,@INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t --s,@mkdir_p@,$mkdir_p,;t t --s,@AWK@,$AWK,;t t --s,@SET_MAKE@,$SET_MAKE,;t t --s,@am__leading_dot@,$am__leading_dot,;t t --s,@AMTAR@,$AMTAR,;t t --s,@am__tar@,$am__tar,;t t --s,@am__untar@,$am__untar,;t t --s,@build@,$build,;t t --s,@build_cpu@,$build_cpu,;t t --s,@build_vendor@,$build_vendor,;t t --s,@build_os@,$build_os,;t t --s,@host@,$host,;t t --s,@host_cpu@,$host_cpu,;t t --s,@host_vendor@,$host_vendor,;t t --s,@host_os@,$host_os,;t t --s,@MAINTAINER_MODE_TRUE@,$MAINTAINER_MODE_TRUE,;t t --s,@MAINTAINER_MODE_FALSE@,$MAINTAINER_MODE_FALSE,;t t --s,@MAINT@,$MAINT,;t t --s,@PERL@,$PERL,;t t --s,@CC@,$CC,;t t --s,@ac_ct_CC@,$ac_ct_CC,;t t --s,@CFLAGS@,$CFLAGS,;t t --s,@LDFLAGS@,$LDFLAGS,;t t --s,@CPPFLAGS@,$CPPFLAGS,;t t --s,@EXEEXT@,$EXEEXT,;t t --s,@OBJEXT@,$OBJEXT,;t t --s,@DEPDIR@,$DEPDIR,;t t --s,@am__include@,$am__include,;t t --s,@am__quote@,$am__quote,;t t --s,@AMDEP_TRUE@,$AMDEP_TRUE,;t t --s,@AMDEP_FALSE@,$AMDEP_FALSE,;t t --s,@AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t --s,@CCDEPMODE@,$CCDEPMODE,;t t --s,@am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t --s,@am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t --s,@CCAS@,$CCAS,;t t --s,@RANLIB@,$RANLIB,;t t --s,@ac_ct_RANLIB@,$ac_ct_RANLIB,;t t --s,@STAGE1_CFLAGS@,$STAGE1_CFLAGS,;t t --s,@STAGE2_CFLAGS@,$STAGE2_CFLAGS,;t t --s,@GRUB_CFLAGS@,$GRUB_CFLAGS,;t t --s,@OBJCOPY@,$OBJCOPY,;t t --s,@ac_ct_OBJCOPY@,$ac_ct_OBJCOPY,;t t --s,@GRUB_LIBS@,$GRUB_LIBS,;t t --s,@CPP@,$CPP,;t t --s,@EGREP@,$EGREP,;t t --s,@NETBOOT_SUPPORT_TRUE@,$NETBOOT_SUPPORT_TRUE,;t t --s,@NETBOOT_SUPPORT_FALSE@,$NETBOOT_SUPPORT_FALSE,;t t --s,@DISKLESS_SUPPORT_TRUE@,$DISKLESS_SUPPORT_TRUE,;t t --s,@DISKLESS_SUPPORT_FALSE@,$DISKLESS_SUPPORT_FALSE,;t t --s,@HERCULES_SUPPORT_TRUE@,$HERCULES_SUPPORT_TRUE,;t t --s,@HERCULES_SUPPORT_FALSE@,$HERCULES_SUPPORT_FALSE,;t t --s,@SERIAL_SUPPORT_TRUE@,$SERIAL_SUPPORT_TRUE,;t t --s,@SERIAL_SUPPORT_FALSE@,$SERIAL_SUPPORT_FALSE,;t t --s,@SERIAL_SPEED_SIMULATION_TRUE@,$SERIAL_SPEED_SIMULATION_TRUE,;t t --s,@SERIAL_SPEED_SIMULATION_FALSE@,$SERIAL_SPEED_SIMULATION_FALSE,;t t --s,@BUILD_EXAMPLE_KERNEL_TRUE@,$BUILD_EXAMPLE_KERNEL_TRUE,;t t --s,@BUILD_EXAMPLE_KERNEL_FALSE@,$BUILD_EXAMPLE_KERNEL_FALSE,;t t --s,@FSYS_CFLAGS@,$FSYS_CFLAGS,;t t --s,@NET_CFLAGS@,$NET_CFLAGS,;t t --s,@NET_EXTRAFLAGS@,$NET_EXTRAFLAGS,;t t --s,@NETBOOT_DRIVERS@,$NETBOOT_DRIVERS,;t t --s,@CCASFLAGS@,$CCASFLAGS,;t t --s,@LIBOBJS@,$LIBOBJS,;t t --s,@LTLIBOBJS@,$LTLIBOBJS,;t t --CEOF -- --_ACEOF -- -- cat >>$CONFIG_STATUS <<_ACEOF -- # Split the substitutions into bite-sized pieces for seds with -- # small command number limits, like on Digital OSF/1 and HP-UX. -- ac_max_sed_lines=48 -- ac_sed_frag=1 # Number of current file. -- ac_beg=1 # First line for current file. -- ac_end=$ac_max_sed_lines # Line after last line for current file. -- ac_more_lines=: -- ac_sed_cmds= -- while $ac_more_lines; do -- if test $ac_beg -gt 1; then -- sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag -- else -- sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag -- fi -- if test ! -s $tmp/subs.frag; then -- ac_more_lines=false -- else -- # The purpose of the label and of the branching condition is to -- # speed up the sed processing (if there are no `@' at all, there -- # is no need to browse any of the substitutions). -- # These are the two extra sed commands mentioned above. -- (echo ':t -- /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed -- if test -z "$ac_sed_cmds"; then -- ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed" -- else -- ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed" -- fi -- ac_sed_frag=`expr $ac_sed_frag + 1` -- ac_beg=$ac_end -- ac_end=`expr $ac_end + $ac_max_sed_lines` -- fi -- done -- if test -z "$ac_sed_cmds"; then -- ac_sed_cmds=cat -- fi --fi # test -n "$CONFIG_FILES" -- --_ACEOF --cat >>$CONFIG_STATUS <<_ACEOF --for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue -- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". -- case $ac_file in -- - | *:- | *:-:* ) # input from stdin -- cat >$tmp/stdin -- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -- * ) ac_file_in=$ac_file.in ;; -- esac -- -- # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories. -- ac_dir=`(dirname "$ac_file") 2>/dev/null || --$as_expr X"$ac_file" : 'X(.*[^/])//*[^/][^/]*/*$' | \ -- X"$ac_file" : 'X(//)[^/]' | \ -- X"$ac_file" : 'X(//)$' | \ -- X"$ac_file" : 'X(/)' | \ -- . : '(.)' 2>/dev/null || --echo X"$ac_file" | -- sed '/^X(.*[^/])//*[^/][^/]*/*$/{ s//\1/; q; } -- /^X(//)[^/].*/{ s//\1/; q; } -- /^X(//)$/{ s//\1/; q; } -- /^X(/).*/{ s//\1/; q; } -- s/.*/./; q'` -- { if $as_mkdir_p; then -- mkdir -p "$ac_dir" -- else -- as_dir="$ac_dir" -- as_dirs= -- while test ! -d "$as_dir"; do -- as_dirs="$as_dir $as_dirs" -- as_dir=`(dirname "$as_dir") 2>/dev/null || --$as_expr X"$as_dir" : 'X(.*[^/])//*[^/][^/]*/*$' | \ -- X"$as_dir" : 'X(//)[^/]' | \ -- X"$as_dir" : 'X(//)$' | \ -- X"$as_dir" : 'X(/)' | \ -- . : '(.)' 2>/dev/null || --echo X"$as_dir" | -- sed '/^X(.*[^/])//*[^/][^/]*/*$/{ s//\1/; q; } -- /^X(//)[^/].*/{ s//\1/; q; } -- /^X(//)$/{ s//\1/; q; } -- /^X(/).*/{ s//\1/; q; } -- s/.*/./; q'` -- done -- test ! -n "$as_dirs" || mkdir $as_dirs -- fi || { { echo "$as_me:$LINENO: error: cannot create directory "$ac_dir"" >&5 --echo "$as_me: error: cannot create directory "$ac_dir"" >&2;} -- { (exit 1); exit 1; }; }; } -- -- ac_builddir=. -- --if test "$ac_dir" != .; then -- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^.[\/],,'` -- # A "../" for each directory in $ac_dir_suffix. -- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\/]*,../,g'` --else -- ac_dir_suffix= ac_top_builddir= --fi -- --case $srcdir in -- .) # No --srcdir option. We are building in place. -- ac_srcdir=. -- if test -z "$ac_top_builddir"; then -- ac_top_srcdir=. -- else -- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` -- fi ;; -- [\/]* | ?:[\/]* ) # Absolute path. -- ac_srcdir=$srcdir$ac_dir_suffix; -- ac_top_srcdir=$srcdir ;; -- *) # Relative path. -- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix -- ac_top_srcdir=$ac_top_builddir$srcdir ;; --esac -- --# Do not use `cd foo && pwd` to compute absolute paths, because --# the directories may not exist. --case `pwd` in --.) ac_abs_builddir="$ac_dir";; --*) -- case "$ac_dir" in -- .) ac_abs_builddir=`pwd`;; -- [\/]* | ?:[\/]* ) ac_abs_builddir="$ac_dir";; -- *) ac_abs_builddir=`pwd`/"$ac_dir";; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_builddir=${ac_top_builddir}.;; --*) -- case ${ac_top_builddir}. in -- .) ac_abs_top_builddir=$ac_abs_builddir;; -- [\/]* | ?:[\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; -- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_srcdir=$ac_srcdir;; --*) -- case $ac_srcdir in -- .) ac_abs_srcdir=$ac_abs_builddir;; -- [\/]* | ?:[\/]* ) ac_abs_srcdir=$ac_srcdir;; -- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_srcdir=$ac_top_srcdir;; --*) -- case $ac_top_srcdir in -- .) ac_abs_top_srcdir=$ac_abs_builddir;; -- [\/]* | ?:[\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; -- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; -- esac;; --esac -- -- -- case $INSTALL in -- [\/$]* | ?:[\/]* ) ac_INSTALL=$INSTALL ;; -- *) ac_INSTALL=$ac_top_builddir$INSTALL ;; -- esac -- -- if test x"$ac_file" != x-; then -- { echo "$as_me:$LINENO: creating $ac_file" >&5 --echo "$as_me: creating $ac_file" >&6;} -- rm -f "$ac_file" -- fi -- # Let's still pretend it is `configure' which instantiates (i.e., don't -- # use $as_me), people would be surprised to read: -- # /* config.h. Generated by config.status. */ -- if test x"$ac_file" = x-; then -- configure_input= -- else -- configure_input="$ac_file. " -- fi -- configure_input=$configure_input"Generated from `echo $ac_file_in | -- sed 's,.*/,,'` by configure." -- -- # First look for the input files in the build tree, otherwise in the -- # src tree. -- ac_file_inputs=`IFS=: -- for f in $ac_file_in; do -- case $f in -- -) echo $tmp/stdin ;; -- [\/$]*) -- # Absolute (can't be DOS-style, as IFS=:) -- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 --echo "$as_me: error: cannot find input file: $f" >&2;} -- { (exit 1); exit 1; }; } -- echo "$f";; -- *) # Relative -- if test -f "$f"; then -- # Build tree -- echo "$f" -- elif test -f "$srcdir/$f"; then -- # Source tree -- echo "$srcdir/$f" -- else -- # /dev/null tree -- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 --echo "$as_me: error: cannot find input file: $f" >&2;} -- { (exit 1); exit 1; }; } -- fi;; -- esac -- done` || { (exit 1); exit 1; } --_ACEOF --cat >>$CONFIG_STATUS <<_ACEOF -- sed "$ac_vpsub --$extrasub --_ACEOF --cat >>$CONFIG_STATUS <<_ACEOF --:t --/@[a-zA-Z_][a-zA-Z_0-9]*@/!b --s,@configure_input@,$configure_input,;t t --s,@srcdir@,$ac_srcdir,;t t --s,@abs_srcdir@,$ac_abs_srcdir,;t t --s,@top_srcdir@,$ac_top_srcdir,;t t --s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t --s,@builddir@,$ac_builddir,;t t --s,@abs_builddir@,$ac_abs_builddir,;t t --s,@top_builddir@,$ac_top_builddir,;t t --s,@abs_top_builddir@,$ac_abs_top_builddir,;t t --s,@INSTALL@,$ac_INSTALL,;t t --" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out -- rm -f $tmp/stdin -- if test x"$ac_file" != x-; then -- mv $tmp/out $ac_file -- else -- cat $tmp/out -- rm -f $tmp/out -- fi -- --done --_ACEOF --cat >>$CONFIG_STATUS <<_ACEOF -- --# --# CONFIG_HEADER section. --# -- --# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where --# NAME is the cpp macro being defined and VALUE is the value it is being given. --# --# ac_d sets the value in "#define NAME VALUE" lines. --ac_dA='s,^([ ]*)#([ ]*define[ ][ ]*)' --ac_dB='[ ].*$,\1#\2' --ac_dC=' ' --ac_dD=',;t' --# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE". --ac_uA='s,^([ ]*)#([ ]*)undef([ ][ ]*)' --ac_uB='$,\1#\2define\3' --ac_uC=' ' --ac_uD=',;t' -- --for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue -- # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in". -- case $ac_file in -- - | *:- | *:-:* ) # input from stdin -- cat >$tmp/stdin -- ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -- *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;; -- * ) ac_file_in=$ac_file.in ;; -- esac -- -- test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5 --echo "$as_me: creating $ac_file" >&6;} -- -- # First look for the input files in the build tree, otherwise in the -- # src tree. -- ac_file_inputs=`IFS=: -- for f in $ac_file_in; do -- case $f in -- -) echo $tmp/stdin ;; -- [\/$]*) -- # Absolute (can't be DOS-style, as IFS=:) -- test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 --echo "$as_me: error: cannot find input file: $f" >&2;} -- { (exit 1); exit 1; }; } -- # Do quote $f, to prevent DOS paths from being IFS'd. -- echo "$f";; -- *) # Relative -- if test -f "$f"; then -- # Build tree -- echo "$f" -- elif test -f "$srcdir/$f"; then -- # Source tree -- echo "$srcdir/$f" -- else -- # /dev/null tree -- { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5 --echo "$as_me: error: cannot find input file: $f" >&2;} -- { (exit 1); exit 1; }; } -- fi;; -- esac -- done` || { (exit 1); exit 1; } -- # Remove the trailing spaces. -- sed 's/[ ]*$//' $ac_file_inputs >$tmp/in -- --_ACEOF -- --# Transform confdefs.h into two sed scripts, `conftest.defines' and --# `conftest.undefs', that substitutes the proper values into --# config.h.in to produce config.h. The first handles `#define' --# templates, and the second `#undef' templates. --# And first: Protect against being on the right side of a sed subst in --# config.status. Protect against being in an unquoted here document --# in config.status. --rm -f conftest.defines conftest.undefs --# Using a here document instead of a string reduces the quoting nightmare. --# Putting comments in sed scripts is not portable. --# --# `end' is used to avoid that the second main sed command (meant for --# 0-ary CPP macros) applies to n-ary macro definitions. --# See the Autoconf documentation for `clear'. --cat >confdef2sed.sed <<_ACEOF --s/[\&,]/\&/g --s,[\$`],\&,g --t clear --: clear --s,^[ ]*#[ ]*define[ ][ ]*([^ (][^ (]*)(([^)]*))[ ]*(.*)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp --t end --s,^[ ]*#[ ]*define[ ][ ]*([^ ][^ ]*)[ ]*(.*)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp --: end --_ACEOF --# If some macros were called several times there might be several times --# the same #defines, which is useless. Nevertheless, we may not want to --# sort them, since we want the *last* AC-DEFINE to be honored. --uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines --sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs --rm -f confdef2sed.sed -- --# This sed command replaces #undef with comments. This is necessary, for --# example, in the case of _POSIX_SOURCE, which is predefined and required --# on some systems where configure will not decide to define it. --cat >>conftest.undefs <<_ACEOF --s,^[ ]*#[ ]*undef[ ][ ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */, --_ACEOF -- --# Break up conftest.defines because some shells have a limit on the size --# of here documents, and old seds have small limits too (100 cmds). --echo ' # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS --echo ' if grep "^[ ]*#[ ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS --echo ' # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS --echo ' :' >>$CONFIG_STATUS --rm -f conftest.tail --while grep . conftest.defines >/dev/null --do -- # Write a limited-size here document to $tmp/defines.sed. -- echo ' cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS -- # Speed up: don't consider the non `#define' lines. -- echo '/^[ ]*#[ ]*define/!b' >>$CONFIG_STATUS -- # Work around the forget-to-reset-the-flag bug. -- echo 't clr' >>$CONFIG_STATUS -- echo ': clr' >>$CONFIG_STATUS -- sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS -- echo 'CEOF -- sed -f $tmp/defines.sed $tmp/in >$tmp/out -- rm -f $tmp/in -- mv $tmp/out $tmp/in --' >>$CONFIG_STATUS -- sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail -- rm -f conftest.defines -- mv conftest.tail conftest.defines --done --rm -f conftest.defines --echo ' fi # grep' >>$CONFIG_STATUS --echo >>$CONFIG_STATUS -- --# Break up conftest.undefs because some shells have a limit on the size --# of here documents, and old seds have small limits too (100 cmds). --echo ' # Handle all the #undef templates' >>$CONFIG_STATUS --rm -f conftest.tail --while grep . conftest.undefs >/dev/null --do -- # Write a limited-size here document to $tmp/undefs.sed. -- echo ' cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS -- # Speed up: don't consider the non `#undef' -- echo '/^[ ]*#[ ]*undef/!b' >>$CONFIG_STATUS -- # Work around the forget-to-reset-the-flag bug. -- echo 't clr' >>$CONFIG_STATUS -- echo ': clr' >>$CONFIG_STATUS -- sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS -- echo 'CEOF -- sed -f $tmp/undefs.sed $tmp/in >$tmp/out -- rm -f $tmp/in -- mv $tmp/out $tmp/in --' >>$CONFIG_STATUS -- sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail -- rm -f conftest.undefs -- mv conftest.tail conftest.undefs --done --rm -f conftest.undefs -- --cat >>$CONFIG_STATUS <<_ACEOF -- # Let's still pretend it is `configure' which instantiates (i.e., don't -- # use $as_me), people would be surprised to read: -- # /* config.h. Generated by config.status. */ -- if test x"$ac_file" = x-; then -- echo "/* Generated by configure. */" >$tmp/config.h -- else -- echo "/* $ac_file. Generated by configure. */" >$tmp/config.h -- fi -- cat $tmp/in >>$tmp/config.h -- rm -f $tmp/in -- if test x"$ac_file" != x-; then -- if diff $ac_file $tmp/config.h >/dev/null 2>&1; then -- { echo "$as_me:$LINENO: $ac_file is unchanged" >&5 --echo "$as_me: $ac_file is unchanged" >&6;} -- else -- ac_dir=`(dirname "$ac_file") 2>/dev/null || --$as_expr X"$ac_file" : 'X(.*[^/])//*[^/][^/]*/*$' | \ -- X"$ac_file" : 'X(//)[^/]' | \ -- X"$ac_file" : 'X(//)$' | \ -- X"$ac_file" : 'X(/)' | \ -- . : '(.)' 2>/dev/null || --echo X"$ac_file" | -- sed '/^X(.*[^/])//*[^/][^/]*/*$/{ s//\1/; q; } -- /^X(//)[^/].*/{ s//\1/; q; } -- /^X(//)$/{ s//\1/; q; } -- /^X(/).*/{ s//\1/; q; } -- s/.*/./; q'` -- { if $as_mkdir_p; then -- mkdir -p "$ac_dir" -- else -- as_dir="$ac_dir" -- as_dirs= -- while test ! -d "$as_dir"; do -- as_dirs="$as_dir $as_dirs" -- as_dir=`(dirname "$as_dir") 2>/dev/null || --$as_expr X"$as_dir" : 'X(.*[^/])//*[^/][^/]*/*$' | \ -- X"$as_dir" : 'X(//)[^/]' | \ -- X"$as_dir" : 'X(//)$' | \ -- X"$as_dir" : 'X(/)' | \ -- . : '(.)' 2>/dev/null || --echo X"$as_dir" | -- sed '/^X(.*[^/])//*[^/][^/]*/*$/{ s//\1/; q; } -- /^X(//)[^/].*/{ s//\1/; q; } -- /^X(//)$/{ s//\1/; q; } -- /^X(/).*/{ s//\1/; q; } -- s/.*/./; q'` -- done -- test ! -n "$as_dirs" || mkdir $as_dirs -- fi || { { echo "$as_me:$LINENO: error: cannot create directory "$ac_dir"" >&5 --echo "$as_me: error: cannot create directory "$ac_dir"" >&2;} -- { (exit 1); exit 1; }; }; } -- -- rm -f $ac_file -- mv $tmp/config.h $ac_file -- fi -- else -- cat $tmp/config.h -- rm -f $tmp/config.h -- fi --# Compute $ac_file's index in $config_headers. --_am_stamp_count=1 --for _am_header in $config_headers :; do -- case $_am_header in -- $ac_file | $ac_file:* ) -- break ;; -- * ) -- _am_stamp_count=`expr $_am_stamp_count + 1` ;; -- esac --done --echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null || --$as_expr X$ac_file : 'X(.*[^/])//*[^/][^/]*/*$' | \ -- X$ac_file : 'X(//)[^/]' | \ -- X$ac_file : 'X(//)$' | \ -- X$ac_file : 'X(/)' | \ -- . : '(.)' 2>/dev/null || --echo X$ac_file | -- sed '/^X(.*[^/])//*[^/][^/]*/*$/{ s//\1/; q; } -- /^X(//)[^/].*/{ s//\1/; q; } -- /^X(//)$/{ s//\1/; q; } -- /^X(/).*/{ s//\1/; q; } -- s/.*/./; q'`/stamp-h$_am_stamp_count --done --_ACEOF --cat >>$CONFIG_STATUS <<_ACEOF -- --# --# CONFIG_COMMANDS section. --# --for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue -- ac_dest=`echo "$ac_file" | sed 's,:.*,,'` -- ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'` -- ac_dir=`(dirname "$ac_dest") 2>/dev/null || --$as_expr X"$ac_dest" : 'X(.*[^/])//*[^/][^/]*/*$' | \ -- X"$ac_dest" : 'X(//)[^/]' | \ -- X"$ac_dest" : 'X(//)$' | \ -- X"$ac_dest" : 'X(/)' | \ -- . : '(.)' 2>/dev/null || --echo X"$ac_dest" | -- sed '/^X(.*[^/])//*[^/][^/]*/*$/{ s//\1/; q; } -- /^X(//)[^/].*/{ s//\1/; q; } -- /^X(//)$/{ s//\1/; q; } -- /^X(/).*/{ s//\1/; q; } -- s/.*/./; q'` -- { if $as_mkdir_p; then -- mkdir -p "$ac_dir" -- else -- as_dir="$ac_dir" -- as_dirs= -- while test ! -d "$as_dir"; do -- as_dirs="$as_dir $as_dirs" -- as_dir=`(dirname "$as_dir") 2>/dev/null || --$as_expr X"$as_dir" : 'X(.*[^/])//*[^/][^/]*/*$' | \ -- X"$as_dir" : 'X(//)[^/]' | \ -- X"$as_dir" : 'X(//)$' | \ -- X"$as_dir" : 'X(/)' | \ -- . : '(.)' 2>/dev/null || --echo X"$as_dir" | -- sed '/^X(.*[^/])//*[^/][^/]*/*$/{ s//\1/; q; } -- /^X(//)[^/].*/{ s//\1/; q; } -- /^X(//)$/{ s//\1/; q; } -- /^X(/).*/{ s//\1/; q; } -- s/.*/./; q'` -- done -- test ! -n "$as_dirs" || mkdir $as_dirs -- fi || { { echo "$as_me:$LINENO: error: cannot create directory "$ac_dir"" >&5 --echo "$as_me: error: cannot create directory "$ac_dir"" >&2;} -- { (exit 1); exit 1; }; }; } -- -- ac_builddir=. -- --if test "$ac_dir" != .; then -- ac_dir_suffix=/`echo "$ac_dir" | sed 's,^.[\/],,'` -- # A "../" for each directory in $ac_dir_suffix. -- ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\/]*,../,g'` --else -- ac_dir_suffix= ac_top_builddir= --fi -- --case $srcdir in -- .) # No --srcdir option. We are building in place. -- ac_srcdir=. -- if test -z "$ac_top_builddir"; then -- ac_top_srcdir=. -- else -- ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'` -- fi ;; -- [\/]* | ?:[\/]* ) # Absolute path. -- ac_srcdir=$srcdir$ac_dir_suffix; -- ac_top_srcdir=$srcdir ;; -- *) # Relative path. -- ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix -- ac_top_srcdir=$ac_top_builddir$srcdir ;; --esac -- --# Do not use `cd foo && pwd` to compute absolute paths, because --# the directories may not exist. --case `pwd` in --.) ac_abs_builddir="$ac_dir";; --*) -- case "$ac_dir" in -- .) ac_abs_builddir=`pwd`;; -- [\/]* | ?:[\/]* ) ac_abs_builddir="$ac_dir";; -- *) ac_abs_builddir=`pwd`/"$ac_dir";; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_builddir=${ac_top_builddir}.;; --*) -- case ${ac_top_builddir}. in -- .) ac_abs_top_builddir=$ac_abs_builddir;; -- [\/]* | ?:[\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;; -- *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_srcdir=$ac_srcdir;; --*) -- case $ac_srcdir in -- .) ac_abs_srcdir=$ac_abs_builddir;; -- [\/]* | ?:[\/]* ) ac_abs_srcdir=$ac_srcdir;; -- *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;; -- esac;; --esac --case $ac_abs_builddir in --.) ac_abs_top_srcdir=$ac_top_srcdir;; --*) -- case $ac_top_srcdir in -- .) ac_abs_top_srcdir=$ac_abs_builddir;; -- [\/]* | ?:[\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;; -- *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;; -- esac;; --esac -- -- -- { echo "$as_me:$LINENO: executing $ac_dest commands" >&5 --echo "$as_me: executing $ac_dest commands" >&6;} -- case $ac_dest in -- depfiles ) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do -- # Strip MF so we end up with the name of the file. -- mf=`echo "$mf" | sed -e 's/:.*$//'` -- # Check whether this is an Automake generated Makefile or not. -- # We used to match only the files named `Makefile.in', but -- # some people rename them; so instead we look at the file content. -- # Grep'ing the first line is not enough: some people post-process -- # each Makefile.in and add a new line on top of each file to say so. -- # So let's grep whole file. -- if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then -- dirpart=`(dirname "$mf") 2>/dev/null || --$as_expr X"$mf" : 'X(.*[^/])//*[^/][^/]*/*$' | \ -- X"$mf" : 'X(//)[^/]' | \ -- X"$mf" : 'X(//)$' | \ -- X"$mf" : 'X(/)' | \ -- . : '(.)' 2>/dev/null || --echo X"$mf" | -- sed '/^X(.*[^/])//*[^/][^/]*/*$/{ s//\1/; q; } -- /^X(//)[^/].*/{ s//\1/; q; } -- /^X(//)$/{ s//\1/; q; } -- /^X(/).*/{ s//\1/; q; } -- s/.*/./; q'` -- else -- continue -- fi -- # Extract the definition of DEPDIR, am__include, and am__quote -- # from the Makefile without running `make'. -- DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` -- test -z "$DEPDIR" && continue -- am__include=`sed -n 's/^am__include = //p' < "$mf"` -- test -z "am__include" && continue -- am__quote=`sed -n 's/^am__quote = //p' < "$mf"` -- # When using ansi2knr, U may be empty or an underscore; expand it -- U=`sed -n 's/^U = //p' < "$mf"` -- # Find all dependency output files, they are included files with -- # $(DEPDIR) in their names. We invoke sed twice because it is the -- # simplest approach to changing $(DEPDIR) to its actual value in the -- # expansion. -- for file in `sed -n " -- s/^$am__include $am__quote(.*(DEPDIR).*)$am__quote"'$/\1/p' <"$mf" | \ -- sed -e 's/$(DEPDIR)/'"$DEPDIR"'/g' -e 's/$U/'"$U"'/g'`; do -- # Make sure the directory exists. -- test -f "$dirpart/$file" && continue -- fdir=`(dirname "$file") 2>/dev/null || --$as_expr X"$file" : 'X(.*[^/])//*[^/][^/]*/*$' | \ -- X"$file" : 'X(//)[^/]' | \ -- X"$file" : 'X(//)$' | \ -- X"$file" : 'X(/)' | \ -- . : '(.)' 2>/dev/null || --echo X"$file" | -- sed '/^X(.*[^/])//*[^/][^/]*/*$/{ s//\1/; q; } -- /^X(//)[^/].*/{ s//\1/; q; } -- /^X(//)$/{ s//\1/; q; } -- /^X(/).*/{ s//\1/; q; } -- s/.*/./; q'` -- { if $as_mkdir_p; then -- mkdir -p $dirpart/$fdir -- else -- as_dir=$dirpart/$fdir -- as_dirs= -- while test ! -d "$as_dir"; do -- as_dirs="$as_dir $as_dirs" -- as_dir=`(dirname "$as_dir") 2>/dev/null || --$as_expr X"$as_dir" : 'X(.*[^/])//*[^/][^/]*/*$' | \ -- X"$as_dir" : 'X(//)[^/]' | \ -- X"$as_dir" : 'X(//)$' | \ -- X"$as_dir" : 'X(/)' | \ -- . : '(.)' 2>/dev/null || --echo X"$as_dir" | -- sed '/^X(.*[^/])//*[^/][^/]*/*$/{ s//\1/; q; } -- /^X(//)[^/].*/{ s//\1/; q; } -- /^X(//)$/{ s//\1/; q; } -- /^X(/).*/{ s//\1/; q; } -- s/.*/./; q'` -- done -- test ! -n "$as_dirs" || mkdir $as_dirs -- fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5 --echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;} -- { (exit 1); exit 1; }; }; } -- -- # echo "creating $dirpart/$file" -- echo '# dummy' > "$dirpart/$file" -- done --done -- ;; -- esac --done --_ACEOF -- --cat >>$CONFIG_STATUS <<_ACEOF -- --{ (exit 0); exit 0; } --_ACEOF --chmod +x $CONFIG_STATUS --ac_clean_files=$ac_clean_files_save -- -- --# configure is writing to config.log, and then calls config.status. --# config.status does its own redirection, appending to config.log. --# Unfortunately, on DOS this fails, as config.log is still kept open --# by configure, so config.status won't be able to write to it; its --# output is simply discarded. So we exec the FD to /dev/null, --# effectively closing config.log, so it can be properly (re)opened and --# appended to by config.status. When coming back to configure, we --# need to make the FD available again. --if test "$no_create" != yes; then -- ac_cs_success=: -- ac_config_status_args= -- test "$silent" = yes && -- ac_config_status_args="$ac_config_status_args --quiet" -- exec 5>/dev/null -- $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false -- exec 5>>config.log -- # Use ||, not &&, to avoid exiting from the if with $? = 1, which -- # would make configure fail if this is the last instruction. -- $ac_cs_success || { (exit 1); exit 1; } --fi -- -diff --git a/configure.ac b/configure.in -similarity index 86% -rename from configure.ac -rename to configure.in -index bb9e1d9..e5970af 100644 ---- a/configure.ac -+++ b/configure.in -@@ -29,6 +29,65 @@ esac - AC_SUBST(host_cpu) - AC_SUBST(host_vendor) - -+# Specify the platform (such as firmware). -+AC_ARG_WITH([platform], -+ AS_HELP_STRING([--with-platform=PLATFORM], -+ [select the host platform [[guessed]]])) -+ -+# Guess the platform if not specified. -+if test "x$with_platform" = x; then -+ case "$host_cpu"-"$host_vendor" in -+ i386-*) platform=pc ;; -+ x86_64-*) platform=pc ;; -+ *) AC_MSG_ERROR([unsupported machine type $host_cpu-$host_vendor]) ;; -+ esac -+else -+ platform="$with_platform" -+fi -+ -+# Sanity check. -+case "$host_cpu"-"$platform" in -+ i386-pc) ;; -+ i386-efi) ;; -+ x86_64-pc) ;; -+ x86_64-efi) ;; -+ *) AC_MSG_ERROR([unsupported machine type "$host_cpu"-"$platform"]) ;; -+esac -+ -+if test "x$platform" = xefi; then -+ case "$host_cpu" in -+ i386) EFI_ARCH=ia32 ;; -+ x86_64) EFI_ARCH=x86_64 ;; -+ *) AC_MSG_ERROR([unsupported machine type "$host_cpu"]) ;; -+ esac -+ AC_SUBST(EFI_ARCH) -+fi -+ -+gnuefi_path=${libdir}/gnuefi -+gnuefi_crt0=${gnuefi_path}/crt0-efi-${EFI_ARCH}.o -+if ! test -f $gnuefi_crt0 ; then -+ gnuefi_crt0=crt0-efi.o -+fi -+GNUEFI_CRT0=${gnuefi_crt0} -+AC_SUBST(GNUEFI_CRT0) -+gnuefi_lds=${gnuefi_path}/elf_${EFI_ARCH}_efi.lds -+if ! test -f $gnuefi_lds ; then -+ gnuefi_lds=${EFI_ARCH}/elf_efi.lds -+fi -+GNUEFI_LDS=${gnuefi_lds} -+AC_SUBST(GNUEFI_LDS) -+LIBGNUEFI=${libdir}/libgnuefi.a -+AC_SUBST(LIBGNUEFI) -+LIBEFI=${libdir}/libefi.a -+AC_SUBST(LIBEFI) -+ -+AC_SUBST(platform) -+AM_CONDITIONAL(PLATFORM_EFI, test "x$platform" = xefi) -+ -+if test "x$platform" = xefi; then -+ AC_DEFINE(PLATFORM_EFI, 1, [Define if you run on EFI platform.]) -+fi -+ - # - # Options - # -@@ -46,7 +105,7 @@ if test "x$CFLAGS" = x; then - default_CFLAGS=yes - fi - --if test "x$host_cpu" = xx86_64; then -+if test "x$platform" = xpc -a "x$host_cpu" = xx86_64; then - CFLAGS="-m32 $CFLAGS" - fi - -@@ -63,6 +122,8 @@ dnl Because recent automake complains about AS, set it here. - CCAS="$CC" - AC_SUBST(CCAS) - -+_AM_DEPENDENCIES(CCAS) -+ - AC_ARG_WITH(binutils, - [ --with-binutils=DIR search the directory DIR to find binutils]) - -@@ -114,6 +175,20 @@ if test "x$ac_cv_prog_gcc" = xyes; then - fi - fi - fi -+STAGE2_CFLAGS="$STAGE2_CFLAGS -isystem `$CC -print-file-name=include`" -+ -+LIBGCC=$(gcc $CFLAGS -static-libgcc -print-libgcc-file-name) -+AC_SUBST(LIBGCC) -+ -+LOADER_LDFLAGS="-Wl,--build-id=none ${LIBGCC}" -+AC_SUBST(LOADER_LDFLAGS) -+ -+if test "x$platform" = xefi; then -+ STAGE2_CFLAGS="$STAGE2_CFLAGS -fpic -fshort-wchar -fno-strict-aliasing -fno-merge-constants -fno-reorder-functions" -+ if test "x$EFI_ARCH" = xx86_64; then -+ STAGE2_CFLAGS="$STAGE2_CFLAGS -DEFI_FUNCTION_WRAPPER" -+ fi -+fi - - AC_SUBST(STAGE1_CFLAGS) - AC_SUBST(STAGE2_CFLAGS) -@@ -159,9 +234,12 @@ fi - - # Defined in acinclude.m4. - grub_ASM_USCORE --grub_PROG_OBJCOPY_ABSOLUTE --if test "x$grub_cv_prog_objcopy_absolute" != xyes; then -- AC_MSG_ERROR([GRUB requires a working absolute objcopy; upgrade your binutils]) -+ -+if test "x$platform" != xefi; then -+ grub_PROG_OBJCOPY_ABSOLUTE -+ if test "x$grub_cv_prog_objcopy_absolute" != xyes; then -+ AC_MSG_ERROR([GRUB requires a working absolute objcopy; upgrade your binutils]) -+ fi - fi - - grub_ASM_PREFIX_REQUIREMENT -@@ -207,9 +285,9 @@ AC_CHECK_LIB(util, opendisk, [GRUB_LIBS="$GRUB_LIBS -lutil" - - # Unless the user specify --without-curses, check for curses. - if test "x$with_curses" != "xno"; then -- AC_CHECK_LIB(ncurses, wgetch, [GRUB_LIBS="$GRUB_LIBS -lncurses" -+ AC_CHECK_LIB(ncurses, wgetch, [GRUB_LIBS="$GRUB_LIBS -Wl,-Bstatic -lncurses -ltinfo -Wl,-Bdynamic" - AC_DEFINE(HAVE_LIBCURSES, 1, [Define if you have a curses library])], -- [AC_CHECK_LIB(curses, wgetch, [GRUB_LIBS="$GRUB_LIBS -lcurses" -+ [AC_CHECK_LIB(curses, wgetch, [GRUB_LIBS="$GRUB_LIBS -Wl,-Bstatic -lcurses -Wl,-Bdynamic" - AC_DEFINE(HAVE_LIBCURSES, 1, [Define if you have a curses library])])]) - fi - -@@ -595,9 +673,18 @@ AC_ARG_ENABLE(diskless, - [ --enable-diskless enable diskless support]) - AM_CONDITIONAL(DISKLESS_SUPPORT, test "x$enable_diskless" = xyes) - -+dnl Graphical splashscreen support -+AC_ARG_ENABLE(graphics, -+ [ --disable-graphics disable graphics terminal support]) -+AM_CONDITIONAL(GRAPHICS_SUPPORT, test "x$enable_graphics" != xno) -+ - dnl Hercules terminal --AC_ARG_ENABLE(hercules, -- [ --disable-hercules disable hercules terminal support]) -+if test "x$platform" = xefi; then -+ enable_hercules=no -+else -+ AC_ARG_ENABLE(hercules, -+ [ --disable-hercules disable hercules terminal support]) -+fi - AM_CONDITIONAL(HERCULES_SUPPORT, test "x$enable_hercules" != xno) - - dnl Serial terminal -@@ -662,9 +749,13 @@ AC_SUBST(CCASFLAGS) - - - dnl Output. -+if test "x$platform" = xefi; then -+ AC_CONFIG_FILES([efi/Makefile]) -+ AC_CONFIG_LINKS([efi/grub/cpu:efi/grub/$host_cpu]) -+fi - AC_CONFIG_FILES([Makefile stage1/Makefile stage2/Makefile \ - docs/Makefile lib/Makefile util/Makefile \ -- grub/Makefile netboot/Makefile util/grub-image \ -- util/grub-install util/grub-md5-crypt \ -- util/grub-terminfo util/grub-set-default]) -+ grub/Makefile netboot/Makefile util/grub-crypt \ -+ util/grub-image util/grub-install util/grub-md5-crypt \ -+ util/grub-terminfo]) - AC_OUTPUT -diff --git a/docs/.gitignore b/docs/.gitignore -new file mode 100644 -index 0000000..e440faf ---- /dev/null -+++ b/docs/.gitignore -@@ -0,0 +1,3 @@ -+Makefile.in -+Makefile -+.deps -diff --git a/docs/Makefile.am b/docs/Makefile.am -index db99e2d..fe6b22b 100644 ---- a/docs/Makefile.am -+++ b/docs/Makefile.am -@@ -2,7 +2,8 @@ info_TEXINFOS = grub.texi multiboot.texi - grub_TEXINFOS = internals.texi - EXAMPLES = boot.S kernel.c multiboot.h - multiboot_TEXINFOS = boot.S.texi kernel.c.texi multiboot.h.texi --man_MANS = grub.8 mbchk.1 grub-install.8 grub-md5-crypt.8 grub-terminfo.8 -+man_MANS = grub.8 mbchk.1 grub-crypt.8 grub-install.8 grub-md5-crypt.8 \ -+ grub-terminfo.8 - HELP2MAN = help2man - SRC2TEXI = src2texi - noinst_SCRIPTS = $(HELP2MAN) $(SRC2TEXI) -@@ -51,6 +52,12 @@ $(srcdir)/mbchk.1: ../util/mbchk $(srcdir)/$(HELP2MAN) - --name="check the format of a Multiboot kernel" \ - --section=1 --output=$@ $< - -+$(srcdir)/grub-crypt.8: ../util/grub-crypt $(srcdir)/$(HELP2MAN) -+ chmod 755 $< -+ $(PERL) $(srcdir)/$(HELP2MAN) \ -+ --name="Encrypt a password" \ -+ --section=8 --output=$@ $< -+ - $(srcdir)/grub-md5-crypt.8: ../util/grub-md5-crypt $(srcdir)/$(HELP2MAN) - chmod 755 $< - $(PERL) $(srcdir)/$(HELP2MAN) \ -diff --git a/docs/Makefile.in b/docs/Makefile.in -deleted file mode 100644 -index 3e2de4b..0000000 ---- a/docs/Makefile.in -+++ /dev/null -@@ -1,770 +0,0 @@ --# Makefile.in generated by automake 1.9.4 from Makefile.am. --# @configure_input@ -- --# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004 Free Software Foundation, Inc. --# This Makefile.in is free software; the Free Software Foundation --# gives unlimited permission to copy and/or distribute it, --# with or without modifications, as long as this notice is preserved. -- --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY, to the extent permitted by law; without --# even the implied warranty of MERCHANTABILITY or FITNESS FOR A --# PARTICULAR PURPOSE. -- --@SET_MAKE@ -- -- --SOURCES = $(kernel_SOURCES) -- --srcdir = @srcdir@ --top_srcdir = @top_srcdir@ --VPATH = @srcdir@ --pkgdatadir = $(datadir)/@PACKAGE@ --pkglibdir = $(libdir)/@PACKAGE@ --pkgincludedir = $(includedir)/@PACKAGE@ --top_builddir = .. --am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd --INSTALL = @INSTALL@ --install_sh_DATA = $(install_sh) -c -m 644 --install_sh_PROGRAM = $(install_sh) -c --install_sh_SCRIPT = $(install_sh) -c --INSTALL_HEADER = $(INSTALL_DATA) --transform = $(program_transform_name) --NORMAL_INSTALL = : --PRE_INSTALL = : --POST_INSTALL = : --NORMAL_UNINSTALL = : --PRE_UNINSTALL = : --POST_UNINSTALL = : --build_triplet = @build@ --host_triplet = @host@ --EXTRA_PROGRAMS = kernel$(EXEEXT) --@BUILD_EXAMPLE_KERNEL_TRUE@noinst_PROGRAMS = kernel$(EXEEXT) --subdir = docs --DIST_COMMON = $(grub_TEXINFOS) $(multiboot_TEXINFOS) \ -- $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ -- $(srcdir)/stamp-vti $(srcdir)/version.texi mdate-sh \ -- texinfo.tex --ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 --am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ -- $(top_srcdir)/configure.ac --am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ -- $(ACLOCAL_M4) --mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs --CONFIG_HEADER = $(top_builddir)/config.h --CONFIG_CLEAN_FILES = --PROGRAMS = $(noinst_PROGRAMS) --am__kernel_SOURCES_DIST = boot.S kernel.c multiboot.h --am__objects_1 = boot.$(OBJEXT) kernel-kernel.$(OBJEXT) --@BUILD_EXAMPLE_KERNEL_TRUE@am_kernel_OBJECTS = $(am__objects_1) --kernel_OBJECTS = $(am_kernel_OBJECTS) --kernel_LDADD = $(LDADD) --SCRIPTS = $(noinst_SCRIPTS) --DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) --depcomp = $(SHELL) $(top_srcdir)/depcomp --am__depfiles_maybe = depfiles --CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) --COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ -- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) --CCLD = $(CC) --LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ --SOURCES = $(kernel_SOURCES) --DIST_SOURCES = $(am__kernel_SOURCES_DIST) --INFO_DEPS = $(srcdir)/grub.info $(srcdir)/multiboot.info --am__TEXINFO_TEX_DIR = $(srcdir) --DVIS = grub.dvi multiboot.dvi --PDFS = grub.pdf multiboot.pdf --PSS = grub.ps multiboot.ps --HTMLS = grub.html multiboot.html --TEXINFOS = grub.texi multiboot.texi --TEXI2DVI = texi2dvi --TEXI2PDF = $(TEXI2DVI) --pdf --batch --MAKEINFOHTML = $(MAKEINFO) --html --AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) --DVIPS = dvips --am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \ -- "$(DESTDIR)$(man8dir)" --man1dir = $(mandir)/man1 --man8dir = $(mandir)/man8 --NROFF = nroff --MANS = $(man_MANS) --ETAGS = etags --CTAGS = ctags --DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) --ACLOCAL = @ACLOCAL@ --AMDEP_FALSE = @AMDEP_FALSE@ --AMDEP_TRUE = @AMDEP_TRUE@ --AMTAR = @AMTAR@ --AUTOCONF = @AUTOCONF@ --AUTOHEADER = @AUTOHEADER@ --AUTOMAKE = @AUTOMAKE@ --AWK = @AWK@ --BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ --BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ --CC = @CC@ --CCAS = @CCAS@ --CCASFLAGS = @CCASFLAGS@ --CCDEPMODE = @CCDEPMODE@ --CFLAGS = @CFLAGS@ --CPP = @CPP@ --CPPFLAGS = @CPPFLAGS@ --CYGPATH_W = @CYGPATH_W@ --DEFS = @DEFS@ --DEPDIR = @DEPDIR@ --DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ --DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ --ECHO_C = @ECHO_C@ --ECHO_N = @ECHO_N@ --ECHO_T = @ECHO_T@ --EGREP = @EGREP@ --EXEEXT = @EXEEXT@ --FSYS_CFLAGS = @FSYS_CFLAGS@ --GRUB_CFLAGS = @GRUB_CFLAGS@ --GRUB_LIBS = @GRUB_LIBS@ --HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ --HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ --INSTALL_DATA = @INSTALL_DATA@ --INSTALL_PROGRAM = @INSTALL_PROGRAM@ --INSTALL_SCRIPT = @INSTALL_SCRIPT@ --INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ --LDFLAGS = @LDFLAGS@ --LIBOBJS = @LIBOBJS@ --LIBS = @LIBS@ --LTLIBOBJS = @LTLIBOBJS@ --MAINT = @MAINT@ --MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ --MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ --MAKEINFO = @MAKEINFO@ --NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ --NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ --NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ --NET_CFLAGS = @NET_CFLAGS@ --NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ --OBJCOPY = @OBJCOPY@ --OBJEXT = @OBJEXT@ --PACKAGE = @PACKAGE@ --PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ --PACKAGE_NAME = @PACKAGE_NAME@ --PACKAGE_STRING = @PACKAGE_STRING@ --PACKAGE_TARNAME = @PACKAGE_TARNAME@ --PACKAGE_VERSION = @PACKAGE_VERSION@ --PATH_SEPARATOR = @PATH_SEPARATOR@ --PERL = @PERL@ --RANLIB = @RANLIB@ --SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ --SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ --SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ --SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ --SET_MAKE = @SET_MAKE@ --SHELL = @SHELL@ --STAGE1_CFLAGS = @STAGE1_CFLAGS@ --STAGE2_CFLAGS = @STAGE2_CFLAGS@ --STRIP = @STRIP@ --VERSION = @VERSION@ --ac_ct_CC = @ac_ct_CC@ --ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ --ac_ct_RANLIB = @ac_ct_RANLIB@ --ac_ct_STRIP = @ac_ct_STRIP@ --am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ --am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ --am__include = @am__include@ --am__leading_dot = @am__leading_dot@ --am__quote = @am__quote@ --am__tar = @am__tar@ --am__untar = @am__untar@ --bindir = @bindir@ --build = @build@ --build_alias = @build_alias@ --build_cpu = @build_cpu@ --build_os = @build_os@ --build_vendor = @build_vendor@ --datadir = @datadir@ --exec_prefix = @exec_prefix@ --host = @host@ --host_alias = @host_alias@ --host_cpu = @host_cpu@ --host_os = @host_os@ --host_vendor = @host_vendor@ --includedir = @includedir@ --infodir = @infodir@ --install_sh = @install_sh@ --libdir = @libdir@ --libexecdir = @libexecdir@ --localstatedir = @localstatedir@ --mandir = @mandir@ --mkdir_p = @mkdir_p@ --oldincludedir = @oldincludedir@ --prefix = @prefix@ --program_transform_name = @program_transform_name@ --sbindir = @sbindir@ --sharedstatedir = @sharedstatedir@ --sysconfdir = @sysconfdir@ --target_alias = @target_alias@ --info_TEXINFOS = grub.texi multiboot.texi --grub_TEXINFOS = internals.texi --EXAMPLES = boot.S kernel.c multiboot.h --multiboot_TEXINFOS = boot.S.texi kernel.c.texi multiboot.h.texi --man_MANS = grub.8 mbchk.1 grub-install.8 grub-md5-crypt.8 grub-terminfo.8 --HELP2MAN = help2man --SRC2TEXI = src2texi --noinst_SCRIPTS = $(HELP2MAN) $(SRC2TEXI) --@BUILD_EXAMPLE_KERNEL_TRUE@kernel_SOURCES = $(EXAMPLES) --@BUILD_EXAMPLE_KERNEL_TRUE@kernel_CFLAGS = -fno-builtin -nostdinc -O -g -Wall \ --@BUILD_EXAMPLE_KERNEL_TRUE@ -imacros $(top_builddir)/config.h -- --@BUILD_EXAMPLE_KERNEL_TRUE@kernel_LDFLAGS = -nostdlib -Wl,-N -Wl,-Ttext -Wl,100000 --EXTRA_DIST = menu.lst $(man_MANS) $(noinst_SCRIPTS) \ -- $(EXAMPLES) $(multiboot_TEXINFOS) -- --CLEANFILES = $(noinst_PROGRAMS) --all: all-am -- --.SUFFIXES: --.SUFFIXES: .S .c .dvi .html .info .o .obj .pdf .ps .texi --$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) -- @for dep in $?; do \ -- case '$(am__configure_deps)' in \ -- *$$dep*) \ -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ -- && exit 0; \ -- exit 1;; \ -- esac; \ -- done; \ -- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu docs/Makefile'; \ -- cd $(top_srcdir) && \ -- $(AUTOMAKE) --gnu docs/Makefile --.PRECIOUS: Makefile --Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -- @case '$?' in \ -- *config.status*) \ -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ -- *) \ -- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ -- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ -- esac; -- --$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -- --$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh --$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -- --clean-noinstPROGRAMS: -- -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) --kernel$(EXEEXT): $(kernel_OBJECTS) $(kernel_DEPENDENCIES) -- @rm -f kernel$(EXEEXT) -- $(LINK) $(kernel_LDFLAGS) $(kernel_OBJECTS) $(kernel_LDADD) $(LIBS) -- --mostlyclean-compile: -- -rm -f *.$(OBJEXT) -- --distclean-compile: -- -rm -f *.tab.c -- --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kernel-kernel.Po@am__quote@ -- --.S.o: -- $(CCASCOMPILE) -c $< -- --.S.obj: -- $(CCASCOMPILE) -c `$(CYGPATH_W) '$<'` -- --.c.o: --@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(COMPILE) -c $< -- --.c.obj: --@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` -- --kernel-kernel.o: kernel.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -MT kernel-kernel.o -MD -MP -MF "$(DEPDIR)/kernel-kernel.Tpo" -c -o kernel-kernel.o `test -f 'kernel.c' || echo '$(srcdir)/'`kernel.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/kernel-kernel.Tpo" "$(DEPDIR)/kernel-kernel.Po"; else rm -f "$(DEPDIR)/kernel-kernel.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kernel.c' object='kernel-kernel.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -c -o kernel-kernel.o `test -f 'kernel.c' || echo '$(srcdir)/'`kernel.c -- --kernel-kernel.obj: kernel.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -MT kernel-kernel.obj -MD -MP -MF "$(DEPDIR)/kernel-kernel.Tpo" -c -o kernel-kernel.obj `if test -f 'kernel.c'; then $(CYGPATH_W) 'kernel.c'; else $(CYGPATH_W) '$(srcdir)/kernel.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/kernel-kernel.Tpo" "$(DEPDIR)/kernel-kernel.Po"; else rm -f "$(DEPDIR)/kernel-kernel.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='kernel.c' object='kernel-kernel.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(kernel_CFLAGS) $(CFLAGS) -c -o kernel-kernel.obj `if test -f 'kernel.c'; then $(CYGPATH_W) 'kernel.c'; else $(CYGPATH_W) '$(srcdir)/kernel.c'; fi` -- --.texi.info: -- restore=: && backupdir="$(am__leading_dot)am$$$$" && \ -- am__cwd=`pwd` && cd $(srcdir) && \ -- rm -rf $$backupdir && mkdir $$backupdir && \ -- for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ -- if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ -- done; \ -- cd "$$am__cwd"; \ -- if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -- -o $@ $<; \ -- then \ -- rc=0; \ -- cd $(srcdir); \ -- else \ -- rc=$$?; \ -- cd $(srcdir) && \ -- $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ -- fi; \ -- rm -rf $$backupdir; exit $$rc -- --.texi.dvi: -- TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ -- MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ -- $(TEXI2DVI) $< -- --.texi.pdf: -- TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ -- MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ -- $(TEXI2PDF) $< -- --.texi.html: -- rm -rf $(@:.html=.htp) -- if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -- -o $(@:.html=.htp) $<; \ -- then \ -- rm -rf $@; \ -- if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ -- mv $(@:.html=) $@; else mv $(@:.html=.htp) $@; fi; \ -- else \ -- if test ! -d $(@:.html=.htp) && test -d $(@:.html=); then \ -- rm -rf $(@:.html=); else rm -Rf $(@:.html=.htp) $@; fi; \ -- exit 1; \ -- fi --$(srcdir)/grub.info: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) --grub.dvi: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) --grub.pdf: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) --grub.html: grub.texi $(srcdir)/version.texi $(grub_TEXINFOS) --$(srcdir)/version.texi: @MAINTAINER_MODE_TRUE@ $(srcdir)/stamp-vti --$(srcdir)/stamp-vti: grub.texi $(top_srcdir)/configure -- @(dir=.; test -f ./grub.texi || dir=$(srcdir); \ -- set `$(SHELL) $(srcdir)/mdate-sh $$dir/grub.texi`; \ -- echo "@set UPDATED $$1 $$2 $$3"; \ -- echo "@set UPDATED-MONTH $$2 $$3"; \ -- echo "@set EDITION $(VERSION)"; \ -- echo "@set VERSION $(VERSION)") > vti.tmp -- @cmp -s vti.tmp $(srcdir)/version.texi \ -- || (echo "Updating $(srcdir)/version.texi"; \ -- cp vti.tmp $(srcdir)/version.texi) -- -@rm -f vti.tmp -- @cp $(srcdir)/version.texi $@ -- --mostlyclean-vti: -- -rm -f vti.tmp -- --maintainer-clean-vti: --@MAINTAINER_MODE_TRUE@ -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi --$(srcdir)/multiboot.info: multiboot.texi $(multiboot_TEXINFOS) --multiboot.dvi: multiboot.texi $(multiboot_TEXINFOS) --multiboot.pdf: multiboot.texi $(multiboot_TEXINFOS) --multiboot.html: multiboot.texi $(multiboot_TEXINFOS) --.dvi.ps: -- $(DVIPS) -o $@ $< -- --uninstall-info-am: -- $(PRE_UNINSTALL) -- @if (install-info --version && \ -- install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ -- list='$(INFO_DEPS)'; \ -- for file in $$list; do \ -- relfile=`echo "$$file" | sed 's|^.*/||'`; \ -- echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ -- install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ -- done; \ -- else :; fi -- @$(NORMAL_UNINSTALL) -- @list='$(INFO_DEPS)'; \ -- for file in $$list; do \ -- relfile=`echo "$$file" | sed 's|^.*/||'`; \ -- relfile_i=`echo "$$relfile" | sed 's|.info$$||;s|$$|.i|'`; \ -- (if cd "$(DESTDIR)$(infodir)"; then \ -- echo " rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9])"; \ -- rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ -- else :; fi); \ -- done -- --dist-info: $(INFO_DEPS) -- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ -- list='$(INFO_DEPS)'; \ -- for base in $$list; do \ -- case $$base in \ -- $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ -- esac; \ -- if test -f $$base; then d=.; else d=$(srcdir); fi; \ -- for file in $$d/$$base*; do \ -- relfile=`expr "$$file" : "$$d/(.*)"`; \ -- test -f $(distdir)/$$relfile || \ -- cp -p $$file $(distdir)/$$relfile; \ -- done; \ -- done -- --mostlyclean-aminfo: -- -rm -rf grub.aux grub.cp grub.cps grub.fn grub.ky grub.log grub.pg grub.tmp \ -- grub.toc grub.tp grub.vr grub.dvi grub.pdf grub.ps grub.html \ -- multiboot.aux multiboot.cp multiboot.cps multiboot.fn \ -- multiboot.ky multiboot.log multiboot.pg multiboot.tmp \ -- multiboot.toc multiboot.tp multiboot.vr multiboot.dvi \ -- multiboot.pdf multiboot.ps multiboot.html -- --maintainer-clean-aminfo: -- @list='$(INFO_DEPS)'; for i in $$list; do \ -- i_i=`echo "$$i" | sed 's|.info$$||;s|$$|.i|'`; \ -- echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ -- rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ -- done --install-man1: $(man1_MANS) $(man_MANS) -- @$(NORMAL_INSTALL) -- test -z "$(man1dir)" || $(mkdir_p) "$(DESTDIR)$(man1dir)" -- @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ -- l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ -- for i in $$l2; do \ -- case "$$i" in \ -- *.1*) list="$$list $$i" ;; \ -- esac; \ -- done; \ -- for i in $$list; do \ -- if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ -- else file=$$i; fi; \ -- ext=`echo $$i | sed -e 's/^.*\.//'`; \ -- case "$$ext" in \ -- 1*) ;; \ -- *) ext='1' ;; \ -- esac; \ -- inst=`echo $$i | sed -e 's/\.[0-9a-z]*$$//'`; \ -- inst=`echo $$inst | sed -e 's/^.*///'`; \ -- inst=`echo $$inst | sed '$(transform)'`.$$ext; \ -- echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ -- $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \ -- done --uninstall-man1: -- @$(NORMAL_UNINSTALL) -- @list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \ -- l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ -- for i in $$l2; do \ -- case "$$i" in \ -- *.1*) list="$$list $$i" ;; \ -- esac; \ -- done; \ -- for i in $$list; do \ -- ext=`echo $$i | sed -e 's/^.*\.//'`; \ -- case "$$ext" in \ -- 1*) ;; \ -- *) ext='1' ;; \ -- esac; \ -- inst=`echo $$i | sed -e 's/\.[0-9a-z]*$$//'`; \ -- inst=`echo $$inst | sed -e 's/^.*///'`; \ -- inst=`echo $$inst | sed '$(transform)'`.$$ext; \ -- echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \ -- rm -f "$(DESTDIR)$(man1dir)/$$inst"; \ -- done --install-man8: $(man8_MANS) $(man_MANS) -- @$(NORMAL_INSTALL) -- test -z "$(man8dir)" || $(mkdir_p) "$(DESTDIR)$(man8dir)" -- @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ -- l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ -- for i in $$l2; do \ -- case "$$i" in \ -- *.8*) list="$$list $$i" ;; \ -- esac; \ -- done; \ -- for i in $$list; do \ -- if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \ -- else file=$$i; fi; \ -- ext=`echo $$i | sed -e 's/^.*\.//'`; \ -- case "$$ext" in \ -- 8*) ;; \ -- *) ext='8' ;; \ -- esac; \ -- inst=`echo $$i | sed -e 's/\.[0-9a-z]*$$//'`; \ -- inst=`echo $$inst | sed -e 's/^.*///'`; \ -- inst=`echo $$inst | sed '$(transform)'`.$$ext; \ -- echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ -- $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \ -- done --uninstall-man8: -- @$(NORMAL_UNINSTALL) -- @list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \ -- l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \ -- for i in $$l2; do \ -- case "$$i" in \ -- *.8*) list="$$list $$i" ;; \ -- esac; \ -- done; \ -- for i in $$list; do \ -- ext=`echo $$i | sed -e 's/^.*\.//'`; \ -- case "$$ext" in \ -- 8*) ;; \ -- *) ext='8' ;; \ -- esac; \ -- inst=`echo $$i | sed -e 's/\.[0-9a-z]*$$//'`; \ -- inst=`echo $$inst | sed -e 's/^.*///'`; \ -- inst=`echo $$inst | sed '$(transform)'`.$$ext; \ -- echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \ -- rm -f "$(DESTDIR)$(man8dir)/$$inst"; \ -- done -- --ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- mkid -fID $$unique --tags: TAGS -- --TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ -- test -n "$$unique" || unique=$$empty_fix; \ -- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -- $$tags $$unique; \ -- fi --ctags: CTAGS --CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- test -z "$(CTAGS_ARGS)$$tags$$unique" \ -- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ -- $$tags $$unique -- --GTAGS: -- here=`$(am__cd) $(top_builddir) && pwd` \ -- && cd $(top_srcdir) \ -- && gtags -i $(GTAGS_ARGS) $$here -- --distclean-tags: -- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -- --distdir: $(DISTFILES) -- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ -- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ -- list='$(DISTFILES)'; for file in $$list; do \ -- case $$file in \ -- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ -- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ -- esac; \ -- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ -- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ -- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ -- dir="/$$dir"; \ -- $(mkdir_p) "$(distdir)$$dir"; \ -- else \ -- dir=''; \ -- fi; \ -- if test -d $$d/$$file; then \ -- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ -- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ -- fi; \ -- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ -- else \ -- test -f $(distdir)/$$file \ -- || cp -p $$d/$$file $(distdir)/$$file \ -- || exit 1; \ -- fi; \ -- done -- $(MAKE) $(AM_MAKEFLAGS) \ -- top_distdir="$(top_distdir)" distdir="$(distdir)" \ -- dist-info --check-am: all-am --check: check-am --all-am: Makefile $(INFO_DEPS) $(PROGRAMS) $(SCRIPTS) $(MANS) --installdirs: -- for dir in "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man8dir)"; do \ -- test -z "$$dir" || $(mkdir_p) "$$dir"; \ -- done --install: install-am --install-exec: install-exec-am --install-data: install-data-am --uninstall: uninstall-am -- --install-am: all-am -- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -- --installcheck: installcheck-am --install-strip: -- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ -- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ -- `test -z '$(STRIP)' || \ -- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install --mostlyclean-generic: -- --clean-generic: -- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) -- --distclean-generic: -- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -- --maintainer-clean-generic: -- @echo "This command is intended for maintainers to use" -- @echo "it deletes files that may require special tools to rebuild." --clean: clean-am -- --clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am -- --distclean: distclean-am -- -rm -rf ./$(DEPDIR) -- -rm -f Makefile --distclean-am: clean-am distclean-compile distclean-generic \ -- distclean-tags -- --dvi: dvi-am -- --dvi-am: $(DVIS) -- --html: html-am -- --html-am: $(HTMLS) -- --info: info-am -- --info-am: $(INFO_DEPS) -- --install-data-am: install-info-am install-man -- --install-exec-am: -- --install-info: install-info-am -- --install-info-am: $(INFO_DEPS) -- @$(NORMAL_INSTALL) -- test -z "$(infodir)" || $(mkdir_p) "$(DESTDIR)$(infodir)" -- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ -- list='$(INFO_DEPS)'; \ -- for file in $$list; do \ -- case $$file in \ -- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ -- esac; \ -- if test -f $$file; then d=.; else d=$(srcdir); fi; \ -- file_i=`echo "$$file" | sed 's|.info$$||;s|$$|.i|'`; \ -- for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ -- $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ -- if test -f $$ifile; then \ -- relfile=`echo "$$ifile" | sed 's|^.*/||'`; \ -- echo " $(INSTALL_DATA) '$$ifile' '$(DESTDIR)$(infodir)/$$relfile'"; \ -- $(INSTALL_DATA) "$$ifile" "$(DESTDIR)$(infodir)/$$relfile"; \ -- else : ; fi; \ -- done; \ -- done -- @$(POST_INSTALL) -- @if (install-info --version && \ -- install-info --version 2>&1 | sed 1q | grep -i -v debian) >/dev/null 2>&1; then \ -- list='$(INFO_DEPS)'; \ -- for file in $$list; do \ -- relfile=`echo "$$file" | sed 's|^.*/||'`; \ -- echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ -- install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ -- done; \ -- else : ; fi --install-man: install-man1 install-man8 -- --installcheck-am: -- --maintainer-clean: maintainer-clean-am -- -rm -rf ./$(DEPDIR) -- -rm -f Makefile --maintainer-clean-am: distclean-am maintainer-clean-aminfo \ -- maintainer-clean-generic maintainer-clean-vti -- --mostlyclean: mostlyclean-am -- --mostlyclean-am: mostlyclean-aminfo mostlyclean-compile \ -- mostlyclean-generic mostlyclean-vti -- --pdf: pdf-am -- --pdf-am: $(PDFS) -- --ps: ps-am -- --ps-am: $(PSS) -- --uninstall-am: uninstall-info-am uninstall-man -- --uninstall-man: uninstall-man1 uninstall-man8 -- --.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ -- clean-noinstPROGRAMS ctags dist-info distclean \ -- distclean-compile distclean-generic distclean-tags distdir dvi \ -- dvi-am html html-am info info-am install install-am \ -- install-data install-data-am install-exec install-exec-am \ -- install-info install-info-am install-man install-man1 \ -- install-man8 install-strip installcheck installcheck-am \ -- installdirs maintainer-clean maintainer-clean-aminfo \ -- maintainer-clean-generic maintainer-clean-vti mostlyclean \ -- mostlyclean-aminfo mostlyclean-compile mostlyclean-generic \ -- mostlyclean-vti pdf pdf-am ps ps-am tags uninstall \ -- uninstall-am uninstall-info-am uninstall-man uninstall-man1 \ -- uninstall-man8 -- -- --@BUILD_EXAMPLE_KERNEL_TRUE@boot.o: multiboot.h -- --# Cancel the rule %.texi -> %. This rule may confuse make to determine --# the dependecies. --.texi: -- --%.c.texi: %.c $(srcdir)/$(SRC2TEXI) -- $(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@ -- --%.h.texi: %.h $(srcdir)/$(SRC2TEXI) -- $(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@ -- --%.S.texi: %.S $(srcdir)/$(SRC2TEXI) -- $(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@ -- --@MAINTAINER_MODE_TRUE@$(srcdir)/grub.8: ../grub/grub $(srcdir)/$(HELP2MAN) --@MAINTAINER_MODE_TRUE@ $(PERL) $(srcdir)/$(HELP2MAN) --name="the grub shell" \ --@MAINTAINER_MODE_TRUE@ --section=8 --output=$@ $< -- --@MAINTAINER_MODE_TRUE@$(srcdir)/grub-install.8: ../util/grub-install $(srcdir)/$(HELP2MAN) --@MAINTAINER_MODE_TRUE@ chmod 755 $< --@MAINTAINER_MODE_TRUE@ $(PERL) $(srcdir)/$(HELP2MAN) --name="install GRUB on your drive" \ --@MAINTAINER_MODE_TRUE@ --section=8 --output=$@ $< -- --@MAINTAINER_MODE_TRUE@$(srcdir)/mbchk.1: ../util/mbchk $(srcdir)/$(HELP2MAN) --@MAINTAINER_MODE_TRUE@ $(PERL) $(srcdir)/$(HELP2MAN) \ --@MAINTAINER_MODE_TRUE@ --name="check the format of a Multiboot kernel" \ --@MAINTAINER_MODE_TRUE@ --section=1 --output=$@ $< -- --@MAINTAINER_MODE_TRUE@$(srcdir)/grub-md5-crypt.8: ../util/grub-md5-crypt $(srcdir)/$(HELP2MAN) --@MAINTAINER_MODE_TRUE@ chmod 755 $< --@MAINTAINER_MODE_TRUE@ $(PERL) $(srcdir)/$(HELP2MAN) \ --@MAINTAINER_MODE_TRUE@ --name="Encrypt a password in MD5 format" \ --@MAINTAINER_MODE_TRUE@ --section=8 --output=$@ $< -- --@MAINTAINER_MODE_TRUE@$(srcdir)/grub-terminfo.8: ../util/grub-terminfo $(srcdir)/$(HELP2MAN) --@MAINTAINER_MODE_TRUE@ chmod 755 $< --@MAINTAINER_MODE_TRUE@ $(PERL) $(srcdir)/$(HELP2MAN) \ --@MAINTAINER_MODE_TRUE@ --name="Generate a terminfo command from a terminfo name" \ --@MAINTAINER_MODE_TRUE@ --section=8 --output=$@ $< --# Tell versions [3.59,3.63) of GNU make to not export all variables. --# Otherwise a system limit (for SysV at least) may be exceeded. --.NOEXPORT: -diff --git a/docs/grub-crypt.8 b/docs/grub-crypt.8 -new file mode 100644 -index 0000000..eb132d7 ---- /dev/null -+++ b/docs/grub-crypt.8 -@@ -0,0 +1,39 @@ -+." DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. -+.TH GRUB-CRYPT "1" "January 2010" "grub-crypt (GNU GRUB 0.97)" FSF -+.SH NAME -+grub-crypt - manual page for grub-crypt (GNU GRUB 0.97) -+.SH SYNOPSIS -+.B grub-crypt -+[\fIOPTION\fR]... -+.SH DESCRIPTION -+Encrypt a password. -+.TP -+\fB-h\fR, \fB--help\fR -+Print this message and exit -+.TP -+\fB-v\fR, \fB--version\fR -+Print the version information and exit -+.TP -+\fB--md5\fR -+Use MD5 to encrypt the password -+.TP -+\fB--sha-256\fR -+Use SHA-256 to encrypt the password -+.TP -+\fB--sha-512\fR -+Use SHA-512 to encrypt the password (default) -+.SH "REPORTING BUGS" -+Report bugs to bug-grub@gnu.org. -+EOF -+.SH "SEE ALSO" -+The full documentation for -+.B grub-crypt -+is maintained as a Texinfo manual. If the -+.B info -+and -+.B grub-crypt -+programs are properly installed at your site, the command -+.IP -+.B info grub-crypt -+.PP -+should give you access to the complete manual. -diff --git a/docs/grub-install.8 b/docs/grub-install.8 -index ac588a3..accff22 100644 ---- a/docs/grub-install.8 -+++ b/docs/grub-install.8 -@@ -30,6 +30,8 @@ BIOS - .TP - \fB--recheck\fR - probe a device map even if it already exists -+ -+This option is unreliable and its use is strongly discouraged. - .PP - INSTALL_DEVICE can be a GRUB device name or a system device filename. - .PP -diff --git a/docs/grub.8 b/docs/grub.8 -index 92149f7..7a087d6 100644 ---- a/docs/grub.8 -+++ b/docs/grub.8 -@@ -15,7 +15,7 @@ turn on batch mode for non-interactive use - specify stage2 boot_drive [default=0x0] - .TP - \fB--config-file\fR=\fIFILE\fR --specify stage2 config_file [default=/boot/grub/menu.lst] -+specify stage2 config_file [default=/boot/grub/grub.conf] - .TP - \fB--device-map\fR=\fIFILE\fR - use the device map file FILE -diff --git a/docs/grub.info b/docs/grub.info -index f48783c..7692f31 100644 ---- a/docs/grub.info -+++ b/docs/grub.info -@@ -1,5 +1,4 @@ --This is ../../docs/grub.info, produced by makeinfo version 4.8 from --../../docs/grub.texi. -+This is grub.info, produced by makeinfo version 4.9 from grub.texi. - - INFO-DIR-SECTION Kernel - START-INFO-DIR-ENTRY -@@ -1147,7 +1146,7 @@ your OS. There's a solution to that - GRUB provides a menu interface - (*note Menu interface::) from which you can select an item (using arrow - keys) that will do everything to boot an OS. - -- To enable the menu, you need a configuration file, `menu.lst' under -+ To enable the menu, you need a configuration file, `grub.conf' under - the boot directory. We'll analyze an example file. - - The file first contains some general settings, the menu interface -@@ -1693,12 +1692,12 @@ There are two ways to specify files, by "absolute file name" and by - - An absolute file name resembles a Unix absolute file name, using `/' - for the directory separator (not `' as in DOS). One example is --`(hd0,0)/boot/grub/menu.lst'. This means the file `/boot/grub/menu.lst' --in the first partition of the first hard disk. If you omit the device --name in an absolute file name, GRUB uses GRUB's "root device" --implicitly. So if you set the root device to, say, `(hd1,0)' by the --command `root' (*note root::), then `/boot/kernel' is the same as --`(hd1,0)/boot/kernel'. -+`(hd0,0)/boot/grub/grub.conf'. This means the file -+`/boot/grub/grub.conf' in the first partition of the first hard disk. -+If you omit the device name in an absolute file name, GRUB uses GRUB's -+"root device" implicitly. So if you set the root device to, say, -+`(hd1,0)' by the command `root' (*note root::), then `/boot/kernel' is -+the same as `(hd1,0)/boot/kernel'. - - - File: grub.info, Node: Block list syntax, Prev: File name syntax, Up: Filesystem -@@ -2023,6 +2022,7 @@ Commands usable anywhere in the menu and in the command-line. - * rarp:: Initialize a network device via RARP - * serial:: Set up a serial device - * setkey:: Configure the key map -+* splashimage:: Use a splash image - * terminal:: Choose a terminal - * terminfo:: Define escape sequences for a terminal - * tftpserver:: Specify a TFTP server -@@ -2258,7 +2258,7 @@ File: grub.info, Node: serial, Next: setkey, Prev: rarp, Up: General command - support. See also *Note Serial terminal::. - - --File: grub.info, Node: setkey, Next: terminal, Prev: serial, Up: General commands -+File: grub.info, Node: setkey, Next: splashimage, Prev: serial, Up: General commands - - 13.2.13 setkey - -------------- -@@ -2384,9 +2384,20 @@ File: grub.info, Node: setkey, Next: terminal, Prev: serial, Up: General com - ` ' - - --File: grub.info, Node: terminal, Next: terminfo, Prev: setkey, Up: General commands -+File: grub.info, Node: splashimage, Next: terminal, Prev: setkey, Up: General commands - --13.2.14 terminal -+13.2.14 splashimage -+------------------- -+ -+ -- Command: splashimage file -+ Select an image to use as the background image. This should be -+ specified using normal GRUB device naming syntax. The format of -+ the file is a gzipped xpm which is 640x480 with a 14 color palette. -+ -+ -+File: grub.info, Node: terminal, Next: terminfo, Prev: splashimage, Up: General commands -+ -+13.2.15 terminal - ---------------- - - -- Command: terminal [`--dumb'] [`--no-echo'] [`--no-edit'] -@@ -2421,7 +2432,7 @@ File: grub.info, Node: terminal, Next: terminfo, Prev: setkey, Up: General c - - File: grub.info, Node: terminfo, Next: tftpserver, Prev: terminal, Up: General commands - --13.2.15 terminfo -+13.2.16 terminfo - ---------------- - - -- Command: terminfo `--name=name' `--cursor-address=seq' -@@ -2439,7 +2450,7 @@ File: grub.info, Node: terminfo, Next: tftpserver, Prev: terminal, Up: Gener - - File: grub.info, Node: tftpserver, Next: unhide, Prev: terminfo, Up: General commands - --13.2.16 tftpserver -+13.2.17 tftpserver - ------------------ - - -- Command: tftpserver ipaddr -@@ -2454,7 +2465,7 @@ File: grub.info, Node: tftpserver, Next: unhide, Prev: terminfo, Up: General - - File: grub.info, Node: unhide, Prev: tftpserver, Up: General commands - --13.2.17 unhide -+13.2.18 unhide - -------------- - - -- Command: unhide partition -@@ -3405,9 +3416,9 @@ calls with UNIX system calls and libc functions. - grub shell just ignores this option. - - `--config-file=FILE' -- Read the configuration file FILE instead of `/boot/grub/menu.lst'. -- The format is the same as the normal GRUB syntax. See *Note -- Filesystem::, for more information. -+ Read the configuration file FILE instead of -+ `/boot/grub/grub.conf'. The format is the same as the normal GRUB -+ syntax. See *Note Filesystem::, for more information. - - `--boot-drive=DRIVE' - Set the stage2 BOOT_DRIVE to DRIVE. This argument should be an -@@ -3551,8 +3562,9 @@ name. - - `--recheck' - Recheck the device map, even if `/boot/grub/device.map' already -- exists. You should use this option whenever you add/remove a disk -- into/from your computer. -+ exists. -+ -+ This option is unreliable and its use is strongly discouraged. - - - File: grub.info, Node: Invoking grub-md5-crypt, Next: Invoking grub-terminfo, Prev: Invoking grub-install, Up: Top -@@ -4279,6 +4291,7 @@ Index - * serial: serial. (line 9) - * setkey: setkey. (line 7) - * setup: setup. (line 8) -+* splashimage: splashimage. (line 7) - * terminal: terminal. (line 9) - * terminfo: terminfo. (line 9) - * testload: testload. (line 7) -@@ -4293,163 +4306,164 @@ Index - - - Tag Table: --Node: Top1487 --Node: Introduction3266 --Node: Overview3643 --Node: Overview-Footnotes5865 --Ref: Overview-Footnote-15926 --Node: History6087 --Node: Features7208 --Node: Features-Footnotes12976 --Ref: Features-Footnote-113037 --Node: Role of a boot loader13182 --Node: Role of a boot loader-Footnotes14520 --Ref: Role of a boot loader-Footnote-114607 --Node: Naming convention14686 --Node: Installation17621 --Node: Creating a GRUB boot floppy19363 --Node: Installing GRUB natively20181 --Node: Installing GRUB natively-Footnotes22461 --Ref: Installing GRUB natively-Footnote-122554 --Node: Installing GRUB using grub-install22739 --Node: Making a GRUB bootable CD-ROM25685 --Node: Making a GRUB bootable CD-ROM-Footnotes27730 --Ref: Making a GRUB bootable CD-ROM-Footnote-127833 --Node: Booting27908 --Node: General boot methods28363 --Node: Loading an operating system directly29104 --Node: Chain-loading30408 --Node: Chain-loading-Footnotes31718 --Ref: Chain-loading-Footnote-131789 --Node: OS-specific notes31861 --Node: GNU/Hurd32237 --Node: GNU/Linux32856 --Node: FreeBSD34104 --Node: NetBSD34617 --Node: OpenBSD35275 --Node: DOS/Windows35475 --Node: SCO UnixWare37301 --Node: QNX37719 --Node: Making your system robust37969 --Node: Booting once-only39294 --Node: Booting fallback systems41219 --Node: Configuration44066 --Node: Network48495 --Node: General usage of network support48989 --Node: General usage of network support-Footnotes50850 --Ref: General usage of network support-Footnote-150959 --Node: Diskless51027 --Node: Serial terminal53211 --Node: Preset Menu55444 --Node: Security57812 --Node: Images60620 --Node: Filesystem63131 --Node: Device syntax63814 --Node: File name syntax65308 --Node: Block list syntax66051 --Node: Interface66784 --Node: Command-line interface67661 --Node: Command-line interface-Footnotes69602 --Ref: Command-line interface-Footnote-169691 --Node: Menu interface69786 --Node: Menu entry editor70796 --Node: Hidden menu interface71875 --Node: Commands72452 --Node: Menu-specific commands73029 --Node: default74200 --Node: fallback74678 --Node: hiddenmenu75229 --Node: timeout75717 --Node: title75995 --Node: General commands76266 --Node: bootp77579 --Node: color78058 --Node: device79532 --Node: dhcp80104 --Node: hide80689 --Node: ifconfig81066 --Node: pager81642 --Node: partnew81976 --Node: parttype82412 --Node: password82779 --Node: rarp83598 --Node: serial83899 --Node: setkey85172 --Node: terminal87341 --Node: terminfo88878 --Node: tftpserver89565 --Node: unhide90111 --Node: Command-line and menu entry commands90486 --Node: blocklist93017 --Node: boot93259 --Node: cat93580 --Node: chainloader93884 --Node: cmp94500 --Node: configfile95051 --Node: debug95265 --Node: displayapm95649 --Node: displaymem95860 --Node: embed96562 --Node: embed-Footnotes97096 --Ref: embed-Footnote-197151 --Node: find97208 --Node: fstest97588 --Node: geometry98273 --Node: halt98885 --Node: help99212 --Node: impsprobe99833 --Node: initrd100232 --Node: install100571 --Node: install-Footnotes103415 --Ref: install-Footnote-1103474 --Node: ioprobe103571 --Node: kernel103896 --Node: lock105016 --Node: makeactive105591 --Node: map105903 --Node: md5crypt106470 --Node: module106817 --Node: modulenounzip107394 --Node: pause107687 --Node: quit108101 --Node: reboot108377 --Node: read108558 --Node: root108800 --Node: rootnoverify109677 --Node: savedefault110232 --Node: setup111208 --Node: testload112274 --Node: testvbe112884 --Node: uppermem113255 --Node: vbeprobe113837 --Node: Troubleshooting114220 --Node: Stage1 errors114758 --Node: Stage1.5 errors116135 --Node: Stage2 errors116573 --Node: Invoking the grub shell124033 --Node: Basic usage124786 --Node: Installation under UNIX127073 --Node: Device map128748 --Node: Invoking grub-install129896 --Node: Invoking grub-md5-crypt131484 --Node: Invoking grub-terminfo132133 --Node: Invoking grub-set-default132899 --Node: Invoking mbchk134700 --Node: Obtaining and Building GRUB135214 --Node: Reporting bugs136631 --Node: Future139435 --Node: Internals139926 --Node: Memory map141149 --Node: Embedded data142627 --Node: Filesystem interface144644 --Node: Command interface148077 --Node: Bootstrap tricks149392 --Node: I/O ports detection151541 --Node: Memory detection151813 --Node: Low-level disk I/O152105 --Node: MBR152374 --Node: Partition table152571 --Node: Submitting patches152844 --Node: Index154332 -+Node: Top1465 -+Node: Introduction3244 -+Node: Overview3621 -+Node: Overview-Footnotes5843 -+Ref: Overview-Footnote-15904 -+Node: History6065 -+Node: Features7186 -+Node: Features-Footnotes12954 -+Ref: Features-Footnote-113015 -+Node: Role of a boot loader13160 -+Node: Role of a boot loader-Footnotes14498 -+Ref: Role of a boot loader-Footnote-114585 -+Node: Naming convention14664 -+Node: Installation17599 -+Node: Creating a GRUB boot floppy19341 -+Node: Installing GRUB natively20159 -+Node: Installing GRUB natively-Footnotes22439 -+Ref: Installing GRUB natively-Footnote-122532 -+Node: Installing GRUB using grub-install22717 -+Node: Making a GRUB bootable CD-ROM25663 -+Node: Making a GRUB bootable CD-ROM-Footnotes27708 -+Ref: Making a GRUB bootable CD-ROM-Footnote-127811 -+Node: Booting27886 -+Node: General boot methods28341 -+Node: Loading an operating system directly29082 -+Node: Chain-loading30386 -+Node: Chain-loading-Footnotes31696 -+Ref: Chain-loading-Footnote-131767 -+Node: OS-specific notes31839 -+Node: GNU/Hurd32215 -+Node: GNU/Linux32834 -+Node: FreeBSD34082 -+Node: NetBSD34595 -+Node: OpenBSD35253 -+Node: DOS/Windows35453 -+Node: SCO UnixWare37279 -+Node: QNX37697 -+Node: Making your system robust37947 -+Node: Booting once-only39272 -+Node: Booting fallback systems41197 -+Node: Configuration44044 -+Node: Network48474 -+Node: General usage of network support48968 -+Node: General usage of network support-Footnotes50829 -+Ref: General usage of network support-Footnote-150938 -+Node: Diskless51006 -+Node: Serial terminal53190 -+Node: Preset Menu55423 -+Node: Security57791 -+Node: Images60599 -+Node: Filesystem63110 -+Node: Device syntax63793 -+Node: File name syntax65287 -+Node: Block list syntax66032 -+Node: Interface66765 -+Node: Command-line interface67642 -+Node: Command-line interface-Footnotes69583 -+Ref: Command-line interface-Footnote-169672 -+Node: Menu interface69767 -+Node: Menu entry editor70777 -+Node: Hidden menu interface71856 -+Node: Commands72433 -+Node: Menu-specific commands73010 -+Node: default74181 -+Node: fallback74659 -+Node: hiddenmenu75210 -+Node: timeout75698 -+Node: title75976 -+Node: General commands76247 -+Node: bootp77611 -+Node: color78090 -+Node: device79564 -+Node: dhcp80136 -+Node: hide80721 -+Node: ifconfig81098 -+Node: pager81674 -+Node: partnew82008 -+Node: parttype82444 -+Node: password82811 -+Node: rarp83630 -+Node: serial83931 -+Node: setkey85204 -+Node: splashimage87376 -+Node: terminal87754 -+Node: terminfo89296 -+Node: tftpserver89983 -+Node: unhide90529 -+Node: Command-line and menu entry commands90904 -+Node: blocklist93435 -+Node: boot93677 -+Node: cat93998 -+Node: chainloader94302 -+Node: cmp94918 -+Node: configfile95469 -+Node: debug95683 -+Node: displayapm96067 -+Node: displaymem96278 -+Node: embed96980 -+Node: embed-Footnotes97514 -+Ref: embed-Footnote-197569 -+Node: find97626 -+Node: fstest98006 -+Node: geometry98691 -+Node: halt99303 -+Node: help99630 -+Node: impsprobe100251 -+Node: initrd100650 -+Node: install100989 -+Node: install-Footnotes103833 -+Ref: install-Footnote-1103892 -+Node: ioprobe103989 -+Node: kernel104314 -+Node: lock105434 -+Node: makeactive106009 -+Node: map106321 -+Node: md5crypt106888 -+Node: module107235 -+Node: modulenounzip107812 -+Node: pause108105 -+Node: quit108519 -+Node: reboot108795 -+Node: read108976 -+Node: root109218 -+Node: rootnoverify110095 -+Node: savedefault110650 -+Node: setup111626 -+Node: testload112692 -+Node: testvbe113302 -+Node: uppermem113673 -+Node: vbeprobe114255 -+Node: Troubleshooting114638 -+Node: Stage1 errors115176 -+Node: Stage1.5 errors116553 -+Node: Stage2 errors116991 -+Node: Invoking the grub shell124451 -+Node: Basic usage125204 -+Node: Installation under UNIX127492 -+Node: Device map129167 -+Node: Invoking grub-install130315 -+Node: Invoking grub-md5-crypt131884 -+Node: Invoking grub-terminfo132533 -+Node: Invoking grub-set-default133299 -+Node: Invoking mbchk135100 -+Node: Obtaining and Building GRUB135614 -+Node: Reporting bugs137031 -+Node: Future139835 -+Node: Internals140326 -+Node: Memory map141549 -+Node: Embedded data143027 -+Node: Filesystem interface145044 -+Node: Command interface148477 -+Node: Bootstrap tricks149792 -+Node: I/O ports detection151941 -+Node: Memory detection152213 -+Node: Low-level disk I/O152505 -+Node: MBR152774 -+Node: Partition table152971 -+Node: Submitting patches153244 -+Node: Index154732 - - End Tag Table -diff --git a/docs/grub.texi b/docs/grub.texi -index 51d330a..5fd324d 100644 ---- a/docs/grub.texi -+++ b/docs/grub.texi -@@ -21,6 +21,7 @@ - @dircategory Kernel - @direntry - * GRUB: (grub). The GRand Unified Bootloader -+* grub-crypt: (grub)Invoking grub-crypt. Encrypt a password - * grub-install: (grub)Invoking grub-install. Install GRUB on your drive - * grub-md5-crypt: (grub)Invoking grub-md5-crypt. Encrypt a password - in MD5 format -@@ -115,8 +116,9 @@ This edition documents version @value{VERSION}. - * Commands:: The list of available builtin commands - * Troubleshooting:: Error messages produced by GRUB - * Invoking the grub shell:: How to use the grub shell -+* Invoking grub-crypt:: How to generate an encrypted password - * Invoking grub-install:: How to use the GRUB installer --* Invoking grub-md5-crypt:: How to generate a cryptic password -+* Invoking grub-md5-crypt:: How to generate an MD5-encrypted password - * Invoking grub-terminfo:: How to generate a terminfo command - * Invoking grub-set-default:: How to set a default boot entry - * Invoking mbchk:: How to use the Multiboot checker -@@ -1265,7 +1267,7 @@ OS. There's a solution to that - GRUB provides a menu interface - keys) that will do everything to boot an OS. - - To enable the menu, you need a configuration file, --@file{menu.lst} under the boot directory. We'll analyze an example -+@file{grub.conf} under the boot directory. We'll analyze an example - file. - - The file first contains some general settings, the menu interface -@@ -1685,27 +1687,17 @@ run the command @command{password} in your configuration file - (@pxref{password}), like this: - - @example --password --md5 PASSWORD -+password --encrypted PASSWORD - @end example - - If this is specified, GRUB disallows any interactive control, until you - press the key @key{p} and enter a correct password. The option --@option{--md5} tells GRUB that @samp{PASSWORD} is in MD5 format. If it -+@option{--encrypted} tells GRUB that @samp{PASSWORD} is encrypted format. If it - is omitted, GRUB assumes the @samp{PASSWORD} is in clear text. - --You can encrypt your password with the command @command{md5crypt} --(@pxref{md5crypt}). For example, run the grub shell (@pxref{Invoking the --grub shell}), and enter your password: -- --@example --@group --grub> md5crypt --Password: ********** --Encrypted: $1$U$JK7xFegdxWH6VuppCUSIb. --@end group --@end example -- --Then, cut and paste the encrypted password to your configuration file. -+You can encrypt your password with the program @command{grub-crypt} -+(@pxref{Invoking grub-crypt}). Then, cut and paste the encrypted password to -+your configuration file. - - Also, you can specify an optional argument to @command{password}. See - this example: -@@ -1882,8 +1874,8 @@ There are two ways to specify files, by @dfn{absolute file name} and by - - An absolute file name resembles a Unix absolute file name, using - @samp{/} for the directory separator (not @samp{} as in DOS). One --example is @samp{(hd0,0)/boot/grub/menu.lst}. This means the file --@file{/boot/grub/menu.lst} in the first partition of the first hard -+example is @samp{(hd0,0)/boot/grub/grub.conf}. This means the file -+@file{/boot/grub/grub.conf} in the first partition of the first hard - disk. If you omit the device name in an absolute file name, GRUB uses - GRUB's @dfn{root device} implicitly. So if you set the root device to, - say, @samp{(hd1,0)} by the command @command{root} (@pxref{root}), then -@@ -2199,6 +2191,7 @@ Commands usable anywhere in the menu and in the command-line. - * rarp:: Initialize a network device via RARP - * serial:: Set up a serial device - * setkey:: Configure the key map -+* splashimage:: Use a splash image - * terminal:: Choose a terminal - * terminfo:: Define escape sequences for a terminal - * tftpserver:: Specify a TFTP server -@@ -2398,7 +2391,7 @@ is the new partition type and must be a number in the range 0-0xff. - @node password - @subsection password - --@deffn Command password [@option{--md5}] passwd [new-config-file] -+@deffn Command password [@option{--md5}] [@option{--encrypted}] passwd [new-config-file] - If used in the first section of a menu file, disable all interactive - editing control (menu entry editor and command-line) and entries - protected by the command @command{lock}. If the password @var{passwd} is -@@ -2408,7 +2401,9 @@ specified. Otherwise, GRUB will just unlock the privileged instructions. - You can also use this command in the script section, in which case it - will ask for the password, before continuing. The option - @option{--md5} tells GRUB that @var{passwd} is encrypted with --@command{md5crypt} (@pxref{md5crypt}). -+@command{md5crypt} (@pxref{md5crypt}), the option @option{--encrypted} -+tells GRUB that @var{passwd} is using one of the crypt formats (GRUB currently -+supports MD5, SHA-256 and SHA-512 encryption). - @end deffn - - -@@ -2578,6 +2573,16 @@ character each of the symbols corresponds: - @end deffn - - -+@node splashimage -+@subsection splashimage -+ -+@deffn Command splashimage file -+Select an image to use as the background image. This should be -+specified using normal GRUB device naming syntax. The format of the -+file is a gzipped xpm which is 640x480 with a 14 color palette. -+@end deffn -+ -+ - @node terminal - @subsection terminal - -@@ -3542,7 +3547,7 @@ ignores this option. - - @item --config-file=@var{file} - Read the configuration file @var{file} instead of --@file{/boot/grub/menu.lst}. The format is the same as the normal GRUB -+@file{/boot/grub/grub.conf}. The format is the same as the normal GRUB - syntax. See @ref{Filesystem}, for more information. - - @item --boot-drive=@var{drive} -@@ -3653,6 +3658,31 @@ comments in the file if needed, as the grub shell assumes that a line is - just a comment if the first character is @samp{#}. - - -+@node Invoking grub-crypt -+@chapter Invoking grub-crypt -+ -+The program @command{grub-crypt} encrypts a password in one of the specified -+formats. Passwords encrypted by this program can be used with the -+command @command{password} (@pxref{password}). -+ -+@command{grub-crypt} accepts the following options: -+ -+@table @option -+@item --help -+Print a summary of the command-line options and exit. -+ -+@item --version -+Print the version information and exit. -+ -+@item --md5 -+Use MD5 for password encryption. -+@item --sha-256 -+Use SHA-256 for password encryption. -+@item --sha-512 -+Use SHA-512 for password encryption. This is the default. -+@end table -+ -+ - @node Invoking grub-install - @chapter Invoking grub-install - -@@ -3702,8 +3732,9 @@ Use @var{file} as the grub shell. You can append arbitrary options to - - @item --recheck - Recheck the device map, even if @file{/boot/grub/device.map} already --exists. You should use this option whenever you add/remove a disk --into/from your computer. -+exists. -+ -+This option is unreliable and its use is strongly discouraged. - @end table - - -diff --git a/docs/stamp-vti b/docs/stamp-vti -index b97de24..eb5144d 100644 ---- a/docs/stamp-vti -+++ b/docs/stamp-vti -@@ -1,4 +1,4 @@ --@set UPDATED 8 May 2005 --@set UPDATED-MONTH May 2005 -+@set UPDATED 7 August 2007 -+@set UPDATED-MONTH August 2007 - @set EDITION 0.97 - @set VERSION 0.97 -diff --git a/docs/version.texi b/docs/version.texi -index b97de24..eb5144d 100644 ---- a/docs/version.texi -+++ b/docs/version.texi -@@ -1,4 +1,4 @@ --@set UPDATED 8 May 2005 --@set UPDATED-MONTH May 2005 -+@set UPDATED 7 August 2007 -+@set UPDATED-MONTH August 2007 - @set EDITION 0.97 - @set VERSION 0.97 -diff --git a/efi/.gitignore b/efi/.gitignore -new file mode 100644 -index 0000000..a0e4294 ---- /dev/null -+++ b/efi/.gitignore -@@ -0,0 +1,7 @@ -+.deps -+Makefile.in -+Makefile -+*.a -+*.o -+*.so -+*.efi -diff --git a/efi/Makefile.am b/efi/Makefile.am -new file mode 100644 -index 0000000..1d5bd15 ---- /dev/null -+++ b/efi/Makefile.am -@@ -0,0 +1,76 @@ -+ -+pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) -+pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) -+ -+if PLATFORM_EFI -+ -+if NETBOOT_SUPPORT -+NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1 -+else -+NETBOOT_FLAGS = -+endif -+ -+if SERIAL_SUPPORT -+SERIAL_FLAGS = -DSUPPORT_SERIAL=1 -+else -+SERIAL_FLAGS = -+endif -+ -+if HERCULES_SUPPORT -+HERCULES_FLAGS = -DSUPPORT_HERCULES=1 -+else -+HERCULES_FLAGS = -+endif -+ -+if GRAPHICS_SUPPORT -+GRAPHICS_FLAGS = -DSUPPORT_GRAPHICS=1 -+else -+GRAPHICS_FLAGS = -+endif -+ -+GRUBEFI_FORMAT = efi-app-$(EFI_ARCH) -+GRUBSO_LD_SCRIPT = @GNUEFI_LDS@ -+GRUBSO_LD_FLAGS = -T $(GRUBSO_LD_SCRIPT) -nostdlib -shared -Bsymbolic -+ -+GRUBSO_OBJS = efimain.o -+GRUBSO_LIBS = @GNUEFI_CRT0@ $(top_srcdir)/stage2/libstage2.a \ -+ libgrubefi.a @LIBGCC@ -+ -+if NETBOOT_SUPPORT -+GRUBSO_LIBS += $(top_srcdir)/netboot/libdrivers.a -+endif -+ -+pkgdata_DATA = grub.efi -+ -+grub.efi: grub.so -+ $(OBJCOPY) -j .text -j .sdata -j .data -j .dynamic -j .dynsym -j .rel \ -+ -j .rela -j .reloc --target=$(GRUBEFI_FORMAT) $^ $@ -+ -+grub.so: $(GRUBSO_OBJS) $(GRUBSO_LIBS) @LIBGNUEFI@ -+ $(LD) -o $@ $(GRUBSO_LD_FLAGS) $^ -+ echo '-------------- unresolved symbols ---------------------' -+ ! nm $@ | grep -iw u -+ echo '-------------------------------------------------------' -+ -+crt0-efi.o: $(EFI_ARCH)/crt0-efi.S -+ $(CC) -o $@ -c $(libgrubefi_a_CFLAGS) $^ -+ -+efimain.o: efimain.c -+ $(CC) -o $@ -c $(libgrubefi_a_CFLAGS) $^ -+ -+clean-local: -+ -rm -rf grub.so grub.efi -+ -+RELOC_FLAGS = $(STAGE2_CFLAGS) -I$(top_srcdir)/stage1 \ -+ -I$(top_srcdir)/lib -I. -I$(top_srcdir) -I$(top_srcdir)/stage2 \ -+ -fno-builtin $(NETBOOT_FLAGS) $(SERIAL_FLAGS) \ -+ $(HERCULES_FLAGS) $(GRAPHICS_FLAGS) -+ -+noinst_LIBRARIES = libgrubefi.a -+libgrubefi_a_SOURCES = $(EFI_ARCH)/callwrap.S eficore.c efimm.c efimisc.c \ -+ eficon.c efidisk.c graphics.c efigraph.c efiuga.c efidp.c \ -+ font_8x16.c efiserial.c $(EFI_ARCH)/loader/linux.c efichainloader.c \ -+ xpm.c pxe.c efitftp.c -+libgrubefi_a_CFLAGS = $(RELOC_FLAGS) -nostdinc -+ -+endif -diff --git a/efi/byteswap.h b/efi/byteswap.h -new file mode 100644 -index 0000000..5a057c4 ---- /dev/null -+++ b/efi/byteswap.h -@@ -0,0 +1,37 @@ -+#ifndef BYTESWAP_H -+#define BYTESWAP_H 1 -+ -+#if defined(__i386__) -+#define LITTLE_ENDIAN 1 -+#elif defined(__x86_64__) -+#define LITTLE_ENDIAN 1 -+#else -+#error endian not defined -+#endif -+ -+#define bswap_16(x) \ -+ ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) -+ -+#define bswap_32(x) \ -+ ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ -+ (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) -+ -+static inline grub_efi_uint16_t htons(grub_efi_uint16_t hostshort) -+{ -+#ifdef LITTLE_ENDIAN -+ return bswap_16(hostshort); -+#else -+ return hostshort; -+#endif -+} -+ -+static inline grub_efi_uint32_t htonl(grub_efi_uint32_t hostshort) -+{ -+#ifdef LITTLE_ENDIAN -+ return bswap_32(hostshort); -+#else -+ return hostshort; -+#endif -+} -+ -+#endif /* BYTESWAP_H */ -diff --git a/efi/dhcp.h b/efi/dhcp.h -new file mode 100644 -index 0000000..a82a522 ---- /dev/null -+++ b/efi/dhcp.h -@@ -0,0 +1,133 @@ -+#ifndef DHCP_H -+#define DHCP_H 1 -+ -+#include "pxe.h" -+ -+#define EFI_DHCP4_PROTOCOL_GUID \ -+{ 0x8a219718, 0x4ef5, 0x4761, {0x91,0xc8,0xc0,0xf0,0x4b,0xda,0x9e,0x56} } -+static grub_efi_guid_t DHCP4Protocol = EFI_DHCP4_PROTOCOL_GUID; -+ -+#define EFI_DHCP4_SERVICE_BINDING_PROTOCOL_GUID \ -+{ 0x9d9a39d8, 0xbd42, 0x4a73, {0xa4,0xd5,0x8e,0xe9,0x4b,0xe1,0x13,0x80} } -+static grub_efi_guid_t DHCP4SbProtocol = EFI_DHCP4_SERVICE_BINDING_PROTOCOL_GUID; -+ -+#define EFI_PXE_DHCP4_PROTOCOL_GUID \ -+{ 0x03c4e624, 0xac28, 0x11d3, {0x9a,0x2d,0x00,0x90,0x29,0x3f,0xc1,0x4d} } -+static grub_efi_guid_t PxeDHCP4Protocol = EFI_PXE_DHCP4_PROTOCOL_GUID; -+ -+ -+typedef EFI_STATUS (*EFI_DHCP4_GET_MODE_DATA)(); -+typedef EFI_STATUS (*EFI_DHCP4_CONFIGURE)(); -+typedef EFI_STATUS (*EFI_DHCP4_START)(); -+typedef EFI_STATUS (*EFI_DHCP4_RENEW_REBIND)(); -+typedef EFI_STATUS (*EFI_DHCP4_RELEASE)(); -+typedef EFI_STATUS (*EFI_DHCP4_STOP)(); -+typedef EFI_STATUS (*EFI_DHCP4_BUILD)(); -+typedef EFI_STATUS (*EFI_DHCP4_TRANSMIT_RECIEVE)(); -+typedef EFI_STATUS (*EFI_DHCP4_PARSE)(); -+ -+typedef struct _EFI_DHCP4_PROTOCOL { -+ EFI_DHCP4_GET_MODE_DATA GetModeData; -+ EFI_DHCP4_CONFIGURE Configure; -+ EFI_DHCP4_START Start; -+ EFI_DHCP4_RENEW_REBIND RenewRebind; -+ EFI_DHCP4_RELEASE Release; -+ EFI_DHCP4_STOP Stop; -+ EFI_DHCP4_BUILD Build; -+ EFI_DHCP4_TRANSMIT_RECIEVE TransmitReceive; -+ EFI_DHCP4_PARSE Parse; -+} EFI_DHCP4_PROTOCOL; -+ -+typedef enum { -+ Dhcp4Stopped, -+ Dhcp4Init, -+ Dhcp4Selecting, -+ Dhcp4Requesting, -+ Dhcp4Bound, -+ Dhcp4Renewing, -+ Dhcp4Rebinding, -+ Dhcp4InitReboot, -+ Dhcp4Rebooting, -+} EFI_DHCP4_STATE; -+ -+typedef enum { -+ Dhcp4SendDiscover = 0x1, -+ Dhcp4RcvdOffer, -+ Dhcp4SelectOffer, -+ Dhcp4SendRequest, -+ Dhcp4RcvdAck, -+ Dhcp4RcvdNak, -+ Dhcp4SendDecline, -+ Dhcp4BoundCompleted, -+ Dhcp4EnterRenewing, -+ Dhcp4EnterRebinding, -+ Dhcp4AddressLost, -+ Dhcp4Fail, -+} EFI_DHCP4_EVENT; -+ -+typedef struct { -+ grub_efi_uint8_t OpCode; -+ grub_efi_uint8_t HwType; -+ grub_efi_uint8_t HwAddrLen; -+ grub_efi_uint8_t Hops; -+ grub_efi_uint32_t xid; -+ grub_efi_uint16_t Seconds; -+ grub_efi_uint16_t reserved; -+ EFI_IPv4_ADDRESS ClientAddr; -+ EFI_IPv4_ADDRESS YourAddr; -+ EFI_IPv4_ADDRESS ServerAddr; -+ EFI_IPv4_ADDRESS GatewayAddr; -+ grub_efi_uint8_t ClientHwAddr[16]; -+ char ServerName[64]; -+ char BootFileName[128]; -+} EFI_DHCP4_HEADER; -+ -+typedef struct { -+ grub_efi_uint32_t Size; -+ grub_efi_uint32_t Length; -+ struct { -+ EFI_DHCP4_HEADER Header; -+ grub_efi_uint32_t Magik; -+ grub_efi_uint8_t option[]; -+ } Dhcp4; -+} EFI_DHCP4_PACKET; -+ -+typedef struct { -+ grub_efi_uint8_t OpCode; -+ grub_efi_uint8_t Length; -+ grub_efi_uint8_t Data[1]; -+} EFI_DHCP4_PACKET_OPTION; -+ -+typedef EFI_STATUS (*EFI_DHCP4_CALLBACK) ( -+ EFI_DHCP4_PROTOCOL *This, -+ void *Context, -+ EFI_DHCP4_STATE CurrentState, -+ EFI_DHCP4_EVENT Dhcp4Event, -+ EFI_DHCP4_PACKET *Packet, -+ EFI_DHCP4_PACKET **NewPacket); -+ -+typedef struct { -+ grub_efi_uint32_t DiscoverTryCount; -+ grub_efi_uint32_t *DiscoverTimeout; -+ grub_efi_uint32_t RequestTryCount; -+ grub_efi_uint32_t *RequestTimeout; -+ EFI_IPv4_ADDRESS ClientAddress; -+ EFI_DHCP4_CALLBACK Dhcp4Callback; -+ void *CallbackContext; -+ grub_efi_uint32_t OptionCount; -+ EFI_DHCP4_PACKET_OPTION **OptionList; -+} EFI_DHCP4_CONFIG_DATA; -+ -+typedef struct { -+ EFI_DHCP4_STATE State; -+ EFI_DHCP4_CONFIG_DATA ConfigData; -+ EFI_IPv4_ADDRESS ClientAddress; -+ EFI_MAC_ADDRESS ClientMacAddress; -+ EFI_IPv4_ADDRESS ServerAddress; -+ EFI_IPv4_ADDRESS RouterAddress; -+ EFI_IPv4_ADDRESS SubnetMask; -+ grub_efi_uint32_t LeaseTime; -+ EFI_DHCP4_PACKET *ReplyPacket; -+} EFI_DHCP4_MODE_DATA; -+ -+#endif /* DHCP_H */ -diff --git a/efi/efichainloader.c b/efi/efichainloader.c -new file mode 100644 -index 0000000..016636c ---- /dev/null -+++ b/efi/efichainloader.c -@@ -0,0 +1,265 @@ -+/* efichainloader.c - boot another boot loader */ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2002,2004,2006 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/misc.h> -+#include <grub/types.h> -+#include <grub/efi/api.h> -+#include <grub/efi/efi.h> -+#include <grub/efi/misc.h> -+ -+#include <shared.h> -+ -+#define grub_file_size() filemax -+ -+static grub_efi_physical_address_t address; -+static grub_efi_uintn_t pages; -+static grub_efi_device_path_t *file_path; -+static grub_efi_handle_t image_handle; -+ -+static int -+grub_chainloader_unload (void) -+{ -+ grub_efi_boot_services_t *b; -+ -+ b = grub_efi_system_table->boot_services; -+ Call_Service_1 (b->unload_image, image_handle); -+ Call_Service_2 (b->free_pages, address, pages); -+ grub_free (file_path); -+ -+ return 0; -+} -+ -+static int -+grub_chainloader_boot (void) -+{ -+ grub_efi_boot_services_t *b; -+ grub_efi_status_t status; -+ grub_efi_uintn_t exit_data_size = 0; -+ grub_efi_char16_t *exit_data = NULL; -+ -+ b = grub_efi_system_table->boot_services; -+ status = Call_Service_3 (b->start_image, image_handle, -+ &exit_data_size, &exit_data); -+ if (status != GRUB_EFI_SUCCESS) -+ { -+ if (exit_data) -+ { -+ char *buf; -+ -+ buf = grub_malloc (exit_data_size * 4 + 1); -+ if (buf) -+ { -+ *grub_utf16_to_utf8 ((grub_uint8_t *) buf, -+ exit_data, exit_data_size) = 0; -+ -+ grub_printf (buf); -+ grub_free (buf); -+ } -+ else -+ grub_printf ("unknown error\n"); -+ } -+ errnum = ERR_UNRECOGNIZED; -+ } -+ -+ if (exit_data) -+ Call_Service_1 (b->free_pool, exit_data); -+ -+ grub_chainloader_unload (); -+ -+ return 0; -+} -+ -+static void -+copy_file_path (grub_efi_file_path_device_path_t *fp, -+ const char *str, grub_efi_uint16_t len) -+{ -+ grub_efi_char16_t *p; -+ grub_efi_uint16_t size; -+ -+ fp->header.type = GRUB_EFI_MEDIA_DEVICE_PATH_TYPE; -+ fp->header.subtype = GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE; -+ size = len * sizeof (grub_efi_char16_t) + sizeof (*fp); -+ fp->header.length[0] = (grub_efi_uint8_t) (size & 0xff); -+ fp->header.length[1] = (grub_efi_uint8_t) (size >> 8); -+ for (p = fp->path_name; len > 0; len--, p++, str++) -+ { -+ *p = (grub_efi_char16_t) (*str == '/' ? '\' : *str); -+ } -+} -+ -+static grub_efi_device_path_t * -+make_file_path (const char *filename) -+{ -+ char *dir_start; -+ char *dir_end; -+ grub_size_t size; -+ grub_efi_device_path_t *d; -+ -+ dir_start = grub_strchr (filename, ')'); -+ if (! dir_start) -+ dir_start = (char *) filename; -+ else -+ dir_start++; -+ -+ dir_end = grub_strrchr (dir_start, '/'); -+ if (! dir_end) -+ { -+ errnum = ERR_BAD_FILENAME; -+ grub_printf ("invalid EFI file path"); -+ return 0; -+ } -+ -+ size = 0; -+ file_path = grub_malloc ((grub_strlen (dir_start) + 1) -+ * sizeof (grub_efi_char16_t) -+ + sizeof (grub_efi_file_path_device_path_t) * 2); -+ if (! file_path) -+ return 0; -+ -+ /* Fill the file path for the directory. */ -+ d = (grub_efi_device_path_t *) file_path; -+ -+ if (dir_end - dir_start) -+ { -+ copy_file_path ((grub_efi_file_path_device_path_t *) d, -+ dir_start, dir_end - dir_start); -+ d = GRUB_EFI_NEXT_DEVICE_PATH (d); -+ /* Fill the file path for the file. */ -+ copy_file_path ((grub_efi_file_path_device_path_t *) d, -+ dir_end + 1, grub_strlen (dir_end + 1)); -+ } -+ else -+ { -+ /* Fill the file path for the file. */ -+ copy_file_path ((grub_efi_file_path_device_path_t *) d, -+ dir_end, grub_strlen (dir_end)); -+ } -+ -+ /* Fill the end of device path nodes. */ -+ d = GRUB_EFI_NEXT_DEVICE_PATH (d); -+ d->type = GRUB_EFI_END_DEVICE_PATH_TYPE; -+ d->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; -+ d->length[0] = sizeof (*d); -+ d->length[1] = 0; -+ -+ return file_path; -+} -+ -+int -+grub_chainloader (char *filename) -+{ -+ grub_ssize_t size; -+ grub_efi_status_t status; -+ grub_efi_boot_services_t *b; -+ grub_efi_handle_t dev_handle = 0; -+ grub_efi_loaded_image_t *loaded_image; -+ -+ /* Initialize some global variables. */ -+ address = 0xffffffff; -+ image_handle = 0; -+ -+ b = grub_efi_system_table->boot_services; -+ -+ if (! grub_open (filename)) -+ goto fail1; -+ -+ dev_handle = grub_efidisk_get_current_bdev_handle (); -+ if (! dev_handle) -+ { -+ errnum = ERR_UNRECOGNIZED; -+ grub_printf ("not a valid root device\n"); -+ goto fail; -+ } -+ -+ file_path = make_file_path (filename); -+ if (! file_path) -+ goto fail; -+ -+ grub_printf ("file path: "); -+ grub_efi_print_device_path (file_path); -+ -+ size = grub_file_size (); -+ pages = (((grub_efi_uintn_t) size + ((1 << 12) - 1)) >> 12); -+ -+ status = Call_Service_4 (b->allocate_pages, GRUB_EFI_ALLOCATE_ANY_PAGES, -+ GRUB_EFI_LOADER_CODE, pages, &address); -+ if (status != GRUB_EFI_SUCCESS) -+ { -+ errnum = ERR_UNRECOGNIZED; -+ grub_printf ("cannot allocate %u pages", pages); -+ goto fail; -+ } -+ -+ if (grub_read ((void *) ((grub_addr_t) address), size) != size) -+ { -+ if (errnum == ERR_NONE) -+ { -+ errnum = ERR_UNRECOGNIZED; -+ grub_printf ("too small"); -+ } -+ goto fail; -+ } -+ -+ status = Call_Service_6 (b->load_image, 0, grub_efi_image_handle, file_path, -+ (void *) ((grub_addr_t) address), size, -+ &image_handle); -+ if (status != GRUB_EFI_SUCCESS) -+ { -+ errnum = ERR_UNRECOGNIZED; -+ if (status == GRUB_EFI_OUT_OF_RESOURCES) -+ grub_printf ("out of resources"); -+ else -+ grub_printf ("cannot load image"); -+ -+ goto fail; -+ } -+ -+ /* LoadImage does not set a device handler when the image is -+ loaded from memory, so it is necessary to set it explicitly here. -+ This is a mess. */ -+ loaded_image = grub_efi_get_loaded_image (image_handle); -+ if (! loaded_image) -+ { -+ errnum = ERR_UNRECOGNIZED; -+ grub_printf ("no loaded image available"); -+ goto fail; -+ } -+ loaded_image->device_handle = dev_handle; -+ -+ grub_close (); -+ return KERNEL_TYPE_CHAINLOADER; -+ -+ fail: -+ grub_close (); -+ fail1: -+ if (address) -+ b->free_pages (address, pages); -+ -+ return KERNEL_TYPE_NONE; -+} -+ -+/* calls for direct boot-loader chaining */ -+void -+chain_stage1 (unsigned long segment, unsigned long offset, -+ unsigned long part_table_addr) -+{ -+ grub_chainloader_boot (); -+ for (;;); -+} -diff --git a/efi/eficon.c b/efi/eficon.c -new file mode 100644 -index 0000000..037f050 ---- /dev/null -+++ b/efi/eficon.c -@@ -0,0 +1,306 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2006 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/misc.h> -+#include <grub/types.h> -+#include <grub/efi/efi.h> -+#include <grub/efi/api.h> -+#include <grub/efi/misc.h> -+ -+#include <shared.h> -+#include <term.h> -+ -+static int -+grub_console_standard_color = GRUB_EFI_TEXT_ATTR (GRUB_EFI_YELLOW, -+ GRUB_EFI_BACKGROUND_BLACK); -+static int -+grub_console_normal_color = GRUB_EFI_TEXT_ATTR (GRUB_EFI_LIGHTGRAY, -+ GRUB_EFI_BACKGROUND_BLACK); -+static int -+grub_console_highlight_color = GRUB_EFI_TEXT_ATTR (GRUB_EFI_BLACK, -+ GRUB_EFI_BACKGROUND_LIGHTGRAY); -+ -+static int read_key = -1; -+ -+void -+console_putchar (int c) -+{ -+ grub_efi_char16_t str[2]; -+ grub_efi_simple_text_output_interface_t *o; -+ -+ o = grub_efi_system_table->con_out; -+ -+ switch (c) -+ { -+ case DISP_LEFT: -+ c = '<'; -+ break; -+ -+ case DISP_UP: -+ c = '^'; -+ break; -+ -+ case DISP_RIGHT: -+ c = '>'; -+ break; -+ -+ case DISP_DOWN: -+ c = 'v'; -+ break; -+ -+ case DISP_HORIZ: -+ c = '-'; -+ break; -+ -+ case DISP_VERT: -+ c = '|'; -+ break; -+ -+ case DISP_UL: -+ case DISP_UR: -+ case DISP_LL: -+ case DISP_LR: -+ c = '+'; -+ break; -+ } -+ -+ /* For now, do not try to use a surrogate pair. */ -+ if (c > 0xffff) -+ c = '?'; -+ -+ str[0] = (grub_efi_char16_t) (c & 0xffff); -+ str[1] = 0; -+ -+ /* Should this test be cached? */ -+ if (c > 0x7f && Call_Service_2 (o->test_string, o, str) != GRUB_EFI_SUCCESS) -+ return; -+ -+ Call_Service_2 (o->output_string, o, str); -+} -+ -+int -+console_checkkey (void) -+{ -+ grub_efi_simple_input_interface_t *i; -+ grub_efi_input_key_t key; -+ grub_efi_status_t status; -+ -+ if (read_key >= 0) -+ return 1; -+ -+ i = grub_efi_system_table->con_in; -+ status = Call_Service_2 (i->read_key_stroke ,i, &key); -+#if 0 -+ switch (status) -+ { -+ case GRUB_EFI_SUCCESS: -+ { -+ int xy; -+ -+ xy = console_getxy (); -+ console_gotoxy (0, 0); -+ grub_printf ("scan_code=%x,unicode_char=%x ", -+ (unsigned) key.scan_code, -+ (unsigned) key.unicode_char); -+ console_gotoxy (xy >> 8, xy & 0xff); -+ } -+ break; -+ -+ case GRUB_EFI_NOT_READY: -+ grub_printf ("not ready "); -+ break; -+ -+ default: -+ grub_printf ("device error "); -+ break; -+ } -+#endif -+ -+ if (status == GRUB_EFI_SUCCESS) -+ { -+ switch (key.scan_code) -+ { -+ case 0x00: -+ read_key = key.unicode_char; -+ break; -+ case 0x01: -+ read_key = 16; -+ break; -+ case 0x02: -+ read_key = 14; -+ break; -+ case 0x03: -+ read_key = 6; -+ break; -+ case 0x04: -+ read_key = 2; -+ break; -+ case 0x05: -+ read_key = 1; -+ break; -+ case 0x06: -+ read_key = 5; -+ break; -+ case 0x07: -+ break; -+ case 0x08: -+ read_key = 4; -+ break; -+ case 0x09: -+ break; -+ case 0x0a: -+ break; -+ case 0x17: -+ read_key = '\e'; -+ break; -+ default: -+ break; -+ } -+ } -+ -+ return read_key; -+} -+ -+int -+console_getkey (void) -+{ -+ grub_efi_simple_input_interface_t *i; -+ grub_efi_boot_services_t *b; -+ grub_efi_uintn_t index; -+ grub_efi_status_t status; -+ int key; -+ -+ if (read_key >= 0) -+ { -+ key = read_key; -+ read_key = -1; -+ return key; -+ } -+ -+ i = grub_efi_system_table->con_in; -+ b = grub_efi_system_table->boot_services; -+ -+ do -+ { -+ status = Call_Service_3 (b->wait_for_event , 1, &(i->wait_for_key), &index); -+ if (status != GRUB_EFI_SUCCESS) -+ return -1; -+ -+ console_checkkey (); -+ } -+ while (read_key < 0); -+ -+ key = read_key; -+ read_key = -1; -+ return key; -+} -+ -+int -+console_keystatus (void) -+{ -+ /* Doesn't look like EFI can support this... */ -+ return 0; -+} -+ -+int -+console_getxy (void) -+{ -+ grub_efi_simple_text_output_interface_t *o; -+ -+ o = grub_efi_system_table->con_out; -+ return ((o->mode->cursor_column << 8) | o->mode->cursor_row); -+} -+ -+void -+console_gotoxy (int x, int y) -+{ -+ grub_efi_simple_text_output_interface_t *o; -+ -+ o = grub_efi_system_table->con_out; -+ Call_Service_3 (o->set_cursor_position , o, x, y); -+} -+ -+void -+console_cls (void) -+{ -+ grub_efi_simple_text_output_interface_t *o; -+ grub_efi_int32_t orig_attr; -+ -+ o = grub_efi_system_table->con_out; -+ orig_attr = o->mode->attribute; -+ Call_Service_2 (o->set_attributes, o, GRUB_EFI_BACKGROUND_BLACK); -+ Call_Service_1 (o->clear_screen , o); -+ Call_Service_2 (o->set_attributes , o, orig_attr); -+} -+ -+void -+console_setcolorstate (color_state state) -+{ -+ grub_efi_simple_text_output_interface_t *o; -+ -+ o = grub_efi_system_table->con_out; -+ -+ switch (state) { -+ case COLOR_STATE_STANDARD: -+ Call_Service_2 (o->set_attributes, o, grub_console_standard_color); -+ break; -+ case COLOR_STATE_NORMAL: -+ Call_Service_2 (o->set_attributes, o, grub_console_normal_color); -+ break; -+ case COLOR_STATE_HIGHLIGHT: -+ Call_Service_2 (o->set_attributes, o, grub_console_highlight_color); -+ break; -+ default: -+ break; -+ } -+} -+ -+void -+console_setcolor (int normal_color, int highlight_color) -+{ -+ grub_console_normal_color = normal_color; -+ grub_console_highlight_color = highlight_color; -+} -+ -+int -+console_setcursor (int on) -+{ -+ grub_efi_simple_text_output_interface_t *o; -+ -+ o = grub_efi_system_table->con_out; -+ Call_Service_2 (o->enable_cursor, o, on); -+ return on; -+} -+ -+void -+grub_console_init (void) -+{ -+ /* FIXME: it is necessary to consider the case where no console control -+ is present but the default is already in text mode. */ -+ if (! grub_efi_set_text_mode (1)) -+ { -+ grub_printf ("cannot set text mode"); -+ return; -+ } -+} -+ -+void -+grub_console_fini (void) -+{ -+} -diff --git a/efi/eficore.c b/efi/eficore.c -new file mode 100644 -index 0000000..8abea7d ---- /dev/null -+++ b/efi/eficore.c -@@ -0,0 +1,241 @@ -+/* eficore.c - generic EFI support */ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2006 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 <config.h> -+#include <grub/misc.h> -+#include <grub/efi/api.h> -+#include <grub/efi/efi.h> -+#include <grub/efi/eficall.h> -+#include <grub/efi/console_control.h> -+#include <grub/efi/time.h> -+ -+#include <shared.h> -+ -+/* The handle of GRUB itself. Filled in by the startup code. */ -+grub_efi_handle_t grub_efi_image_handle; -+ -+/* The pointer to a system table. Filled in by the startup code. */ -+grub_efi_system_table_t *grub_efi_system_table; -+ -+static grub_efi_guid_t console_control_guid = GRUB_EFI_CONSOLE_CONTROL_GUID; -+static grub_efi_guid_t loaded_image_guid = GRUB_EFI_LOADED_IMAGE_GUID; -+static grub_efi_guid_t device_path_guid = GRUB_EFI_DEVICE_PATH_GUID; -+ -+/* temporary, until we're using gnu-efi's include files --pjones */ -+extern int setjmp(grub_jmp_buf env); -+int grub_setjmp(grub_jmp_buf env) -+{ -+ return setjmp(env); -+} -+ -+extern void longjmp(grub_jmp_buf env, int val); -+void grub_longjmp(grub_jmp_buf env, int val) -+{ -+ longjmp(env, val); -+} -+ -+grub_efi_status_t -+grub_efi_locate_device_path (grub_efi_guid_t *protocol, -+ grub_efi_device_path_t **dp, -+ grub_efi_handle_t *handle) -+{ -+ return Call_Service_3( -+ grub_efi_system_table->boot_services->locate_device_path, -+ protocol, dp, handle); -+} -+ -+grub_efi_status_t -+grub_efi_locate_handle_buffer (grub_efi_locate_search_type_t search_type, -+ grub_efi_guid_t *protocol, -+ void *search_key, -+ grub_efi_uintn_t *no_handles, -+ grub_efi_handle_t **buffer) -+{ -+ return Call_Service_5( -+ grub_efi_system_table->boot_services->locate_handle_buffer, -+ search_type, protocol, search_key, no_handles, buffer); -+} -+ -+void * -+grub_efi_locate_protocol (grub_efi_guid_t *protocol, void *registration) -+{ -+ void *interface; -+ grub_efi_status_t status; -+ -+ status = Call_Service_3 (grub_efi_system_table->boot_services->locate_protocol, -+ protocol, -+ registration, -+ &interface); -+ if (status != GRUB_EFI_SUCCESS) -+ return 0; -+ -+ return interface; -+} -+ -+/* Return the array of handles which meet the requirement. If successful, -+ the number of handles is stored in NUM_HANDLES. The array is allocated -+ from the heap. */ -+grub_efi_handle_t * -+grub_efi_locate_handle (grub_efi_locate_search_type_t search_type, -+ grub_efi_guid_t *protocol, -+ void *search_key, -+ grub_efi_uintn_t *num_handles) -+{ -+ grub_efi_boot_services_t *b; -+ grub_efi_status_t status; -+ grub_efi_handle_t *buffer; -+ grub_efi_uintn_t buffer_size = 8 * sizeof (grub_efi_handle_t); -+ -+ buffer = grub_malloc (buffer_size); -+ if (! buffer) -+ return 0; -+ -+ b = grub_efi_system_table->boot_services; -+ status = Call_Service_5 (b->locate_handle, search_type, protocol, -+ search_key, &buffer_size, buffer); -+ if (status == GRUB_EFI_BUFFER_TOO_SMALL) -+ { -+ grub_free (buffer); -+ buffer = grub_malloc (buffer_size); -+ if (! buffer) -+ return 0; -+ -+ status = Call_Service_5 (b->locate_handle, search_type, protocol, -+ search_key, &buffer_size, buffer); -+ } -+ -+ if (status != GRUB_EFI_SUCCESS) -+ { -+ grub_free (buffer); -+ return 0; -+ } -+ -+ *num_handles = buffer_size / sizeof (grub_efi_handle_t); -+ return buffer; -+} -+ -+void * -+grub_efi_open_protocol (grub_efi_handle_t handle, -+ grub_efi_guid_t *protocol, -+ grub_efi_uint32_t attributes) -+{ -+ grub_efi_boot_services_t *b; -+ grub_efi_status_t status; -+ void *interface; -+ -+ b = grub_efi_system_table->boot_services; -+ status = Call_Service_6 ( b->open_protocol, -+ handle, -+ protocol, -+ &interface, -+ grub_efi_image_handle, -+ 0, -+ attributes); -+ if (status != GRUB_EFI_SUCCESS) -+ return 0; -+ -+ return interface; -+} -+ -+int -+grub_efi_set_text_mode (int on) -+{ -+ grub_efi_console_control_protocol_t *c; -+ grub_efi_screen_mode_t mode, new_mode; -+ -+ c = grub_efi_locate_protocol (&console_control_guid, 0); -+ if (! c) -+ /* No console control protocol instance available, assume it is -+ already in text mode. */ -+ return 1; -+ -+ if (Call_Service_4 (c->get_mode , c, &mode, 0, 0) != GRUB_EFI_SUCCESS) -+ return 0; -+ -+ new_mode = on ? GRUB_EFI_SCREEN_TEXT : GRUB_EFI_SCREEN_GRAPHICS; -+ if (mode != new_mode) -+ if (Call_Service_2 (c->set_mode , c, new_mode) != GRUB_EFI_SUCCESS) -+ return 0; -+ -+ return 1; -+} -+ -+void -+grub_efi_stall (grub_efi_uintn_t microseconds) -+{ -+ Call_Service_1 (grub_efi_system_table->boot_services->stall , microseconds); -+} -+ -+grub_efi_loaded_image_t * -+grub_efi_get_loaded_image (grub_efi_handle_t image_handle) -+{ -+ return grub_efi_open_protocol (image_handle, -+ &loaded_image_guid, -+ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+} -+ -+void -+grub_exit (void) -+{ -+ grub_efi_fini (); -+ Call_Service_4(grub_efi_system_table->boot_services->exit, -+ grub_efi_image_handle, -+ GRUB_EFI_SUCCESS, -+ 0, -+ 0 ); -+ for (;;); -+} -+ -+int -+grub_efi_exit_boot_services (grub_efi_uintn_t map_key) -+{ -+ grub_efi_boot_services_t *b; -+ grub_efi_status_t status; -+ -+ b = grub_efi_system_table->boot_services; -+ status = Call_Service_2 (b->exit_boot_services , -+ grub_efi_image_handle, -+ map_key); -+ return status == GRUB_EFI_SUCCESS; -+} -+ -+grub_uint32_t -+grub_get_rtc (void) -+{ -+ grub_efi_time_t time; -+ grub_efi_runtime_services_t *r; -+ -+ r = grub_efi_system_table->runtime_services; -+ if (Call_Service_2(r->get_time , &time, 0) != GRUB_EFI_SUCCESS) -+ /* What is possible in this case? */ -+ return 0; -+ -+ return (((time.minute * 60 + time.second) * 1000 -+ + time.nanosecond / 1000000) -+ * GRUB_TICKS_PER_SECOND / 1000); -+} -+ -+grub_efi_device_path_t * -+grub_efi_get_device_path (grub_efi_handle_t handle) -+{ -+ return grub_efi_open_protocol (handle, &device_path_guid, -+ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+} -+ -diff --git a/efi/efidisk.c b/efi/efidisk.c -new file mode 100644 -index 0000000..6a505f3 ---- /dev/null -+++ b/efi/efidisk.c -@@ -0,0 +1,801 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2006 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. -+ */ -+ -+#include <grub/types.h> -+#include <grub/misc.h> -+#include <grub/efi/api.h> -+#include <grub/efi/efi.h> -+#include <grub/efi/misc.h> -+ -+#include <shared.h> -+ -+struct grub_efidisk_data -+{ -+ grub_efi_handle_t handle; -+ grub_efi_device_path_t *device_path; -+ grub_efi_device_path_t *last_device_path; -+ grub_efi_block_io_t *block_io; -+ grub_efi_disk_io_t *disk_io; -+ struct grub_efidisk_data *next; -+}; -+ -+/* GUIDs. */ -+static grub_efi_guid_t disk_io_guid = GRUB_EFI_DISK_IO_GUID; -+static grub_efi_guid_t block_io_guid = GRUB_EFI_BLOCK_IO_GUID; -+static grub_efi_guid_t device_path_from_text_guid = GRUB_EFI_DEVICE_PATH_FROM_TEXT_GUID; -+ -+static struct grub_efidisk_data *fd_devices; -+static struct grub_efidisk_data *hd_devices; -+static struct grub_efidisk_data *cd_devices; -+ -+static int get_device_sector_bits(struct grub_efidisk_data *device); -+static int get_device_sector_size(struct grub_efidisk_data *device); -+static struct grub_efidisk_data *get_device_from_drive (int drive); -+ -+static struct grub_efidisk_data * -+make_devices (void) -+{ -+ grub_efi_uintn_t num_handles; -+ grub_efi_handle_t *handles; -+ grub_efi_handle_t *handle; -+ struct grub_efidisk_data *devices = 0; -+ -+ /* Find handles which support the disk io interface. */ -+ handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, &disk_io_guid, -+ 0, &num_handles); -+ if (! handles) -+ return 0; -+ -+ /* Make a linked list of devices. */ -+ for (handle = handles; num_handles--; handle++) -+ { -+ grub_efi_device_path_t *dp; -+ grub_efi_device_path_t *ldp; -+ struct grub_efidisk_data *d; -+ grub_efi_block_io_t *bio; -+ grub_efi_disk_io_t *dio; -+ -+ dp = grub_efi_get_device_path (*handle); -+ if (! dp) -+ continue; -+ -+ ldp = find_last_device_path (dp); -+ if (! ldp) -+ /* This is empty. Why? */ -+ continue; -+ -+ bio = grub_efi_open_protocol (*handle, &block_io_guid, -+ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+ dio = grub_efi_open_protocol (*handle, &disk_io_guid, -+ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+ if (! bio || ! dio) -+ /* This should not happen... Why? */ -+ continue; -+ -+ d = grub_malloc (sizeof (*d)); -+ if (! d) -+ { -+ /* Uggh. */ -+ grub_free (handles); -+ return 0; -+ } -+ -+ d->handle = *handle; -+ d->device_path = dp; -+ d->last_device_path = ldp; -+ d->block_io = bio; -+ d->disk_io = dio; -+ d->next = devices; -+ devices = d; -+ } -+ -+ grub_free (handles); -+ -+ return devices; -+} -+ -+static int -+iterate_child_devices (struct grub_efidisk_data *devices, -+ struct grub_efidisk_data *d, -+ int (*hook) (struct grub_efidisk_data *child)) -+{ -+ struct grub_efidisk_data *p; -+ -+ for (p = devices; p; p = p->next) -+ { -+ grub_efi_device_path_t *dp, *ldp; -+ -+ dp = duplicate_device_path (p->device_path); -+ if (! dp) -+ return 0; -+ -+ ldp = find_last_device_path (dp); -+ ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; -+ ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; -+ ldp->length[0] = sizeof (*ldp); -+ ldp->length[1] = 0; -+ -+ if (compare_device_paths (dp, d->device_path) == 0) -+ if (hook (p)) -+ { -+ grub_free (dp); -+ return 1; -+ } -+ -+ grub_free (dp); -+ } -+ -+ return 0; -+} -+ -+/* Add a device into a list of devices in an ascending order. */ -+static void -+add_device (struct grub_efidisk_data **devices, struct grub_efidisk_data *d) -+{ -+ struct grub_efidisk_data **p; -+ struct grub_efidisk_data *n; -+ -+ for (p = devices; *p; p = &((*p)->next)) -+ { -+ int ret; -+ -+ ret = compare_device_paths (find_last_device_path ((*p)->device_path), -+ find_last_device_path (d->device_path)); -+ if (ret == 0) -+ ret = compare_device_paths ((*p)->device_path, -+ d->device_path); -+ if (ret == 0) -+ return; -+ else if (ret > 0) -+ break; -+ } -+ -+ n = grub_malloc (sizeof (*n)); -+ if (! n) -+ return; -+ -+ grub_memcpy (n, d, sizeof (*n)); -+ n->next = (*p); -+ (*p) = n; -+} -+ -+/* Name the devices. */ -+static void -+name_devices (struct grub_efidisk_data *devices) -+{ -+ struct grub_efidisk_data *d; -+ -+ /* Let's see what can be added more. */ -+ for (d = devices; d; d = d->next) -+ { -+ grub_efi_device_path_t *dp; -+ grub_efi_block_io_media_t *m; -+ -+ dp = d->last_device_path; -+ if (! dp) -+ continue; -+ -+ m = d->block_io->media; -+ if (GRUB_EFI_DEVICE_PATH_TYPE(dp) == GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE) -+ { -+ /* XXX FIXME this won't work if we see write-protected disks with -+ * 4k sectors */ -+ if (m->read_only && m->block_size > 0x200) -+ { -+ add_device (&cd_devices, d); -+ } else -+ { -+ add_device (&hd_devices, d); -+ } -+ } -+ if (GRUB_EFI_DEVICE_PATH_TYPE(dp) == GRUB_EFI_ACPI_DEVICE_PATH_TYPE) -+ { -+ add_device (&fd_devices, d); -+ } -+ } -+} -+ -+static void -+free_devices (struct grub_efidisk_data *devices) -+{ -+ struct grub_efidisk_data *p, *q; -+ -+ for (p = devices; p; p = q) -+ { -+ q = p->next; -+ grub_free (p); -+ } -+} -+ -+/* Enumerate all disks to name devices. */ -+static void -+enumerate_disks (void) -+{ -+ struct grub_efidisk_data *devices; -+ -+ devices = make_devices (); -+ if (! devices) -+ return; -+ -+ name_devices (devices); -+ free_devices (devices); -+} -+ -+static struct grub_efidisk_data * -+get_device (struct grub_efidisk_data *devices, int num) -+{ -+ struct grub_efidisk_data *d; -+ -+ for (d = devices; d && num; d = d->next, num--) -+ ; -+ -+ if (num == 0) -+ return d; -+ -+ return 0; -+} -+ -+static int -+grub_efidisk_read (struct grub_efidisk_data *d, grub_disk_addr_t sector, -+ grub_size_t size, char *buf) -+{ -+ /* For now, use the disk io interface rather than the block io's. */ -+ grub_efi_disk_io_t *dio; -+ grub_efi_block_io_t *bio; -+ grub_efi_status_t status; -+ grub_efi_uint64_t sector_size = get_device_sector_size(d); -+ -+ dio = d->disk_io; -+ bio = d->block_io; -+ -+ status = Call_Service_5 (dio->read, -+ dio, bio->media->media_id, -+ sector * sector_size, -+ size * sector_size, -+ buf); -+ if (status != GRUB_EFI_SUCCESS) -+ return -1; -+ -+ return 0; -+} -+ -+static int -+grub_efidisk_write (struct grub_efidisk_data *d, grub_disk_addr_t sector, -+ grub_size_t size, const char *buf) -+{ -+ /* For now, use the disk io interface rather than the block io's. */ -+ grub_efi_disk_io_t *dio; -+ grub_efi_block_io_t *bio; -+ grub_efi_status_t status; -+ grub_efi_uint64_t sector_size = get_device_sector_size(d); -+ -+ dio = d->disk_io; -+ bio = d->block_io; -+ -+ grub_dprintf ("efidisk", -+ "writing 0x%x sectors at the sector 0x%x to ??\n", -+ (unsigned) size, (unsigned int) sector); -+ -+ status = Call_Service_5 (dio->write , -+ dio, bio->media->media_id, -+ sector * sector_size, -+ size * sector_size, -+ (void *) buf); -+ if (status != GRUB_EFI_SUCCESS) -+ return -1; -+ -+ return 0; -+} -+ -+void -+grub_efidisk_init (void) -+{ -+ enumerate_disks (); -+} -+ -+void -+grub_efidisk_fini (void) -+{ -+ free_devices (fd_devices); -+ free_devices (hd_devices); -+ free_devices (cd_devices); -+} -+ -+static int -+get_device_sector_size(struct grub_efidisk_data *device) -+{ -+ return device->block_io->media->block_size; -+} -+ -+int -+get_sector_size(int drive) -+{ -+ struct grub_efidisk_data *device = get_device_from_drive(drive); -+ return get_device_sector_size(device); -+} -+ -+/* -+ * ffz = Find First Zero in word. Undefined if no zero exists, -+ * so code should check against ~0UL first.. -+ */ -+static __inline__ unsigned int -+ffz (unsigned int word) -+{ -+ __asm__ ("bsfl %1,%0" -+: "=r" (word) -+: "r" (~word)); -+ return word; -+} -+#define log2(n) ffz(~(n)) -+ -+static int -+get_device_sector_bits(struct grub_efidisk_data *device) -+{ -+ int sector_size = get_device_sector_size(device); -+ return log2(sector_size); -+} -+ -+int -+get_sector_bits(int drive) -+{ -+ int sector_size = get_sector_size(drive); -+ return log2(sector_size); -+} -+ -+static struct grub_efidisk_data * -+get_device_from_drive (int drive) -+{ -+#ifdef SUPPORT_NETBOOT -+ /* Not supported */ -+ if (drive == NETWORK_DRIVE) -+ return NULL; -+#endif -+ if (drive == GRUB_INVALID_DRIVE) -+ return NULL; -+ if (drive == cdrom_drive) -+ return get_device (cd_devices, 0); -+ /* Hard disk */ -+ if (drive & 0x80) -+ return get_device (hd_devices, drive - 0x80); -+ /* Floppy disk */ -+ else -+ return get_device (fd_devices, drive); -+} -+ -+/* Low-level disk I/O. Our stubbed version just returns a file -+ descriptor, not the actual geometry. */ -+int -+get_diskinfo (int drive, struct geometry *geometry) -+{ -+ struct grub_efidisk_data *d; -+ -+ d = get_device_from_drive (drive); -+ if (!d) -+ return -1; -+ geometry->total_sectors = d->block_io->media->last_block+1; -+ geometry->sector_size = d->block_io->media->block_size; -+ geometry->flags = BIOSDISK_FLAG_LBA_EXTENSION; -+ geometry->sectors = 63; -+ if (geometry->total_sectors / 63 < 255) -+ geometry->heads = 1; -+ else -+ geometry->heads = 255; -+ geometry->cylinders = geometry->total_sectors / 63 / geometry->heads; -+ return 0; -+} -+ -+int -+biosdisk (int subfunc, int drive, struct geometry *geometry, -+ int sector, int nsec, int segment) -+{ -+ char *buf; -+ struct grub_efidisk_data *d; -+ int ret; -+ -+ d = get_device_from_drive (drive); -+ if (!d) -+ return -1; -+ buf = (char *) ((unsigned long) segment << 4); -+ switch (subfunc) -+ { -+ case BIOSDISK_READ: -+ ret = grub_efidisk_read (d, sector, nsec, buf); -+ break; -+ case BIOSDISK_WRITE: -+ ret = grub_efidisk_write (d, sector, nsec, buf); -+ break; -+ default: -+ return -1; -+ } -+ -+ return 0; -+} -+ -+/* Some utility functions to map GRUB devices with EFI devices. */ -+grub_efi_handle_t -+grub_efidisk_get_current_bdev_handle (void) -+{ -+ struct grub_efidisk_data *d; -+ -+ d = get_device_from_drive (current_drive); -+ if (d == NULL) -+ return NULL; -+ -+ if (current_drive == GRUB_INVALID_DRIVE) -+ return NULL; -+ -+ if (current_drive == cdrom_drive) -+ return d->handle; -+ -+ if (! (current_drive & 0x80)) -+ return d->handle; -+ /* If this is the whole disk, just return its own data. */ -+ else if (current_partition == 0xFFFFFF) -+ return d->handle; -+ /* Otherwise, we must query the corresponding device to the firmware. */ -+ else -+ { -+ struct grub_efidisk_data *devices; -+ grub_efi_handle_t handle = 0; -+ auto int find_partition (struct grub_efidisk_data *c); -+ -+ int find_partition (struct grub_efidisk_data *c) -+ { -+ grub_efi_hard_drive_device_path_t hd; -+ -+ grub_memcpy (&hd, c->last_device_path, sizeof (hd)); -+ -+ if ((GRUB_EFI_DEVICE_PATH_TYPE (c->last_device_path) -+ == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE) -+ && (GRUB_EFI_DEVICE_PATH_SUBTYPE (c->last_device_path) -+ == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE) -+ && (part_start == hd.partition_start)) -+ { -+ handle = c->handle; -+ return 1; -+ } -+ -+ return 0; -+ } -+ -+ devices = make_devices (); -+ iterate_child_devices (devices, d, find_partition); -+ free_devices (devices); -+ -+ if (handle != 0) -+ return handle; -+ } -+ -+ return 0; -+} -+ -+int -+grub_get_drive_partition_from_bdev_handle (grub_efi_handle_t handle, -+ unsigned long *drive, -+ unsigned long *partition) -+{ -+ grub_efi_device_path_t *dp, *dp1; -+ struct grub_efidisk_data *d, *devices; -+ int drv; -+ unsigned long part; -+ grub_efi_hard_drive_device_path_t hd; -+ int found; -+ int part_type, part_entry; -+ unsigned long partition_start, partition_len, part_offset, part_extoffset; -+ unsigned long gpt_offset; -+ int gpt_count, gpt_size; -+ auto int find_bdev (struct grub_efidisk_data *c); -+ -+ int find_bdev (struct grub_efidisk_data *c) -+ { -+ if (! compare_device_paths (c->device_path, dp)) -+ { -+ grub_memcpy (&hd, c->last_device_path, sizeof (hd)); -+ found = 1; -+ return 1; -+ } -+ return 0; -+ } -+ -+ dp = grub_efi_get_device_path (handle); -+ if (! dp) -+ return 0; -+ -+ dp1 = dp; -+ while (1) -+ { -+ grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp1); -+ grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE(dp1); -+ grub_efi_uint16_t len = GRUB_EFI_DEVICE_PATH_LENGTH (dp); -+ -+ if (type == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE && -+ subtype == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE) -+ { -+ dp1->type = GRUB_EFI_END_DEVICE_PATH_TYPE; -+ dp1->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; -+ dp1->length[0] = 4; -+ dp1->length[1] = 0; -+ } -+ -+ if (type == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE && -+ subtype == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE) -+ { -+ grub_efi_hard_drive_device_path_t temp_hd; -+ grub_memcpy (&temp_hd, dp1, len); -+ if (temp_hd.signature_type == 0 && temp_hd.mbr_type >= 0x10) { -+ /* -+ * Apple Parttion Map CDs appear as hard drives with non-spec -+ * partition type fields. Fix them up. -+ */ -+ dp1->type = GRUB_EFI_END_DEVICE_PATH_TYPE; -+ dp1->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; -+ dp1->length[0] = 4; -+ dp1->length[1] = 0; -+ } -+ } -+ -+ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp1)) -+ break; -+ -+ dp1 = GRUB_EFI_NEXT_DEVICE_PATH(dp1); -+ } -+ -+ drv = 0; -+ for (d = fd_devices; d; d = d->next, drv++) -+ { -+ if (! compare_device_paths (d->device_path, dp)) -+ { -+ *partition = 0xFFFFFF; -+ *drive = drv; -+ return 1; -+ } -+ } -+ -+ drv = cdrom_drive; -+ if (cd_devices && ! compare_device_paths (cd_devices->device_path, dp)) -+ { -+ *partition = 0xFFFFFF; -+ *drive = drv; -+ return 1; -+ } -+ -+ drv = 0x80; -+ for (d = hd_devices; d; d = d->next, drv++) -+ { -+ if (! compare_device_paths (d->device_path, dp)) -+ { -+ *partition = 0xFFFFFF; -+ *drive = drv; -+ return 1; -+ } -+ } -+ -+ devices = make_devices (); -+ -+ drv = 0x80; -+ found = 0; -+ for (d = hd_devices; d; d = d->next, drv++) -+ { -+ iterate_child_devices (devices, d, find_bdev); -+ if (found) -+ break; -+ } -+ -+ free_devices (devices); -+ -+ if (! found) -+ return 0; -+ -+ char buf[get_sector_size(drv)]; -+ part = 0xFFFFFF; -+ while (next_partition (drv, 0, &part, &part_type, -+ &partition_start, &partition_len, -+ &part_offset, &part_entry, -+ &part_extoffset, &gpt_offset, &gpt_count, -+ &gpt_size, buf)) -+ { -+ if (part_type -+ && partition_start == hd.partition_start) -+ { -+ *drive = drv; -+ *partition = part; -+ return 1; -+ } -+ } -+ -+ return 0; -+} -+ -+int -+check_device (const char *device) -+{ -+ grub_efi_device_path_t *dp; -+ -+ dp = device_path_from_utf8(device); -+ if (dp == NULL) -+ return 0; -+ -+ grub_free(dp); -+ return 1; -+} -+ -+static void -+swap_devices (struct grub_efidisk_data *d0, -+ struct grub_efidisk_data *d1) -+{ -+ struct grub_efidisk_data tmp; -+ -+ if (!d0 || !d1) -+ return; -+ -+ memcpy(&tmp, d1, sizeof(*d1)); -+ -+ memcpy(&d0->handle, &d1->handle, sizeof(d1->handle)); -+ d0->device_path = d1->device_path; -+ d0->last_device_path = d1->last_device_path; -+ d0->block_io = d1->block_io; -+ d0->disk_io = d1->disk_io; -+ -+ memcpy(d1->handle, tmp.handle, sizeof(tmp.handle)); -+ d1->device_path = tmp.device_path; -+ d1->last_device_path = tmp.last_device_path; -+ d1->block_io = tmp.block_io; -+ d1->disk_io = tmp.disk_io; -+} -+ -+static int -+compare_hd_device_paths(grub_efi_hard_drive_device_path_t *hd0, -+ grub_efi_hard_drive_device_path_t *hd1) -+{ -+ grub_efi_uint64_t x; -+ int sigsize; -+ -+ if ((x = hd1->partition_number - hd0->partition_number)) -+ return x; -+ -+ if ((x = hd1->partition_start - hd0->partition_start)) -+ return x; -+ -+ -+ if ((x = hd1->partition_size - hd0->partition_size)) -+ return x; -+ -+ if ((x = hd1->signature_type - hd0->signature_type)) -+ return x; -+ -+ switch (hd0->signature_type) -+ { -+ case 1: -+ sigsize = 4; -+ break; -+ case 2: -+ sigsize = 16; -+ break; -+ default: -+ sigsize = 0; -+ break; -+ } -+ x = grub_memcmp((char *)hd0->partition_signature, -+ (char *)hd1->partition_signature, sigsize); -+ return x; -+} -+ -+static grub_efi_device_path_t * -+get_parent_of_disk(grub_efi_device_path_t *hd) -+{ -+ grub_efi_uintn_t num_handles; -+ grub_efi_handle_t *handles; -+ grub_efi_handle_t *handle; -+ grub_efi_device_path_t *ret; -+ -+ handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, -+ &simple_file_system_guid, -+ 0, &num_handles); -+ for (handle = handles; num_handles--; handle++) -+ { -+ grub_efi_device_path_t *fsdp, *hddp; -+ -+ fsdp = grub_efi_get_device_path (*handle); -+ if (!fsdp) -+ continue; -+ hddp = find_last_device_path(fsdp); -+ -+ if (compare_hd_device_paths((grub_efi_hard_drive_device_path_t *)hddp, -+ (grub_efi_hard_drive_device_path_t *)hd) == 0) -+ { -+ grub_efi_device_path_t *p; -+ ret = duplicate_device_path((grub_efi_device_path_t *)fsdp); -+ if (!ret) -+ return NULL; -+ for (p = ret; ; p = GRUB_EFI_NEXT_DEVICE_PATH(p)) -+ { -+ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH(p)) -+ break; -+ if ((GRUB_EFI_DEVICE_PATH_TYPE(p) == -+ GRUB_EFI_MEDIA_DEVICE_PATH_TYPE) -+ && (GRUB_EFI_DEVICE_PATH_SUBTYPE(p) == -+ GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE)) -+ { -+ p->type = GRUB_EFI_END_DEVICE_PATH_TYPE; -+ p->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; -+ p->length[0] = 4; -+ p->length[1] = 0; -+ break; -+ } -+ } -+ return ret; -+ } -+ } -+ return NULL; -+} -+ -+void -+assign_device_name (int drive, const char *device) -+{ -+ grub_efi_device_path_t *dp0, *dp1; -+ struct grub_efidisk_data *devices; -+ struct grub_efidisk_data *d, *d0 = NULL, *d1 = NULL; -+ int n = -1; -+ -+ dp0 = device_path_from_utf8(device); -+ if (!dp0) -+ return; -+ -+ dp1 = get_parent_of_disk(dp0); -+ grub_free(dp0); -+ if (!dp1) -+ return; -+ -+ if (drive & 0x80) -+ { -+ drive -= 0x80; -+ devices = hd_devices; -+ } -+ else -+ { -+ devices = cd_devices; -+ drive -= 0x100; -+ } -+ -+ for (d = devices; d; d = d->next) -+ { -+ if (!d->device_path) -+ continue; -+ -+ if (++n == drive) -+ d0 = d; -+ -+ int x; -+ if (!(x = compare_device_paths(dp1, d->device_path))) -+ d1 = d; -+ -+ if (d0 && d1) -+ { -+ /* if they're the same node, that just means it's already at -+ * the right position. */ -+ if (d0 != d1) -+ { -+ swap_devices(d0, d1); -+ grub_free(dp1); -+ return; -+ } -+ } -+ } -+ grub_free(dp1); -+} -diff --git a/efi/efidp.c b/efi/efidp.c -new file mode 100644 -index 0000000..d8ca03d ---- /dev/null -+++ b/efi/efidp.c -@@ -0,0 +1,999 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2010 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. -+ */ -+ -+#include <grub/types.h> -+#include <grub/misc.h> -+#include <grub/efi/api.h> -+#include <grub/efi/efi.h> -+#include <grub/efi/misc.h> -+ -+#include <shared.h> -+ -+/* Duplicate a device path. */ -+grub_efi_device_path_t * -+duplicate_device_path (const grub_efi_device_path_t *dp) -+{ -+ grub_efi_device_path_t *p; -+ grub_size_t total_size = 0; -+ -+ for (p = (grub_efi_device_path_t *) dp; -+ ; -+ p = GRUB_EFI_NEXT_DEVICE_PATH (p)) -+ { -+ total_size += GRUB_EFI_DEVICE_PATH_LENGTH (p); -+ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (p)) -+ break; -+ } -+ -+ p = grub_malloc (total_size); -+ if (! p) -+ return 0; -+ -+ grub_memcpy (p, dp, total_size); -+ return p; -+} -+ -+/* Return the device path node right before the end node. */ -+grub_efi_device_path_t * -+find_last_device_path (const grub_efi_device_path_t *dp) -+{ -+ grub_efi_device_path_t *next, *p; -+ -+ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp)) -+ return 0; -+ -+ for (p = (grub_efi_device_path_t *) dp, next = GRUB_EFI_NEXT_DEVICE_PATH (p); -+ ! GRUB_EFI_END_ENTIRE_DEVICE_PATH (next); -+ p = next, next = GRUB_EFI_NEXT_DEVICE_PATH (next)) -+ ; -+ -+ return p; -+} -+ -+/* Return the parent device path node. Must be freed */ -+grub_efi_device_path_t * -+find_parent_device_path (const grub_efi_device_path_t *dp) -+{ -+ grub_efi_device_path_t *final, *dup; -+ -+ dup = duplicate_device_path(dp); -+ final = find_last_device_path(dup); -+ -+ final->type = GRUB_EFI_END_DEVICE_PATH_TYPE; -+ final->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; -+ -+ return dup; -+} -+ -+/* Compare device paths. */ -+int -+compare_device_paths (const grub_efi_device_path_t *dp1, -+ const grub_efi_device_path_t *dp2) -+{ -+ if (! dp1 || ! dp2) -+ /* Return non-zero. */ -+ return 1; -+ -+ while (1) -+ { -+ grub_efi_uint8_t type1, type2; -+ grub_efi_uint8_t subtype1, subtype2; -+ grub_efi_uint16_t len1, len2; -+ int ret; -+ -+ type1 = GRUB_EFI_DEVICE_PATH_TYPE (dp1); -+ type2 = GRUB_EFI_DEVICE_PATH_TYPE (dp2); -+ -+ if (type1 != type2) -+ return (int) type2 - (int) type1; -+ -+ subtype1 = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp1); -+ subtype2 = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp2); -+ -+ if (subtype1 != subtype2) -+ return (int) subtype1 - (int) subtype2; -+ -+ len1 = GRUB_EFI_DEVICE_PATH_LENGTH (dp1); -+ len2 = GRUB_EFI_DEVICE_PATH_LENGTH (dp2); -+ -+ if (len1 != len2) -+ return (int) len1 - (int) len2; -+ -+ ret = grub_memcmp ((char *)dp1, (char *)dp2, len1); -+ if (ret != 0) -+ return ret; -+ -+ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp1)) -+ break; -+ -+ dp1 = (grub_efi_device_path_t *) ((char *) dp1 + len1); -+ dp2 = (grub_efi_device_path_t *) ((char *) dp2 + len2); -+ } -+ -+ return 0; -+} -+ -+/* Print the chain of Device Path nodes. This is mainly for debugging. */ -+void -+grub_efi_print_device_path (grub_efi_device_path_t *dp) -+{ -+ while (1) -+ { -+ grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (dp); -+ grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (dp); -+ grub_efi_uint16_t len = GRUB_EFI_DEVICE_PATH_LENGTH (dp); -+ -+ switch (type) -+ { -+ case GRUB_EFI_END_DEVICE_PATH_TYPE: -+ switch (subtype) -+ { -+ case GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE: -+ grub_printf ("/EndEntire\n"); -+ //grub_putchar ('\n'); -+ break; -+ case GRUB_EFI_END_THIS_DEVICE_PATH_SUBTYPE: -+ grub_printf ("/EndThis\n"); -+ //grub_putchar ('\n'); -+ break; -+ default: -+ grub_printf ("/EndUnknown(%x)\n", (unsigned) subtype); -+ break; -+ } -+ break; -+ -+ case GRUB_EFI_HARDWARE_DEVICE_PATH_TYPE: -+ switch (subtype) -+ { -+ case GRUB_EFI_PCI_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_pci_device_path_t pci; -+ grub_memcpy (&pci, dp, len); -+ grub_printf ("/PCI(%x,%x)", -+ (unsigned) pci.function, (unsigned) pci.device); -+ } -+ break; -+ case GRUB_EFI_PCCARD_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_pccard_device_path_t pccard; -+ grub_memcpy (&pccard, dp, len); -+ grub_printf ("/PCCARD(%x)", -+ (unsigned) pccard.function); -+ } -+ break; -+ case GRUB_EFI_MEMORY_MAPPED_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_memory_mapped_device_path_t mmapped; -+ grub_memcpy (&mmapped, dp, len); -+ grub_printf ("/MMap(%x,%llx,%llx)", -+ (unsigned) mmapped.memory_type, -+ mmapped.start_address, -+ mmapped.end_address); -+ } -+ break; -+ case GRUB_EFI_VENDOR_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_vendor_device_path_t vendor; -+ grub_memcpy (&vendor, dp, sizeof (vendor)); -+ grub_printf ("/Vendor(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)", -+ (unsigned) vendor.vendor_guid.data1, -+ (unsigned) vendor.vendor_guid.data2, -+ (unsigned) vendor.vendor_guid.data3, -+ (unsigned) vendor.vendor_guid.data4[0], -+ (unsigned) vendor.vendor_guid.data4[1], -+ (unsigned) vendor.vendor_guid.data4[2], -+ (unsigned) vendor.vendor_guid.data4[3], -+ (unsigned) vendor.vendor_guid.data4[4], -+ (unsigned) vendor.vendor_guid.data4[5], -+ (unsigned) vendor.vendor_guid.data4[6], -+ (unsigned) vendor.vendor_guid.data4[7]); -+ } -+ break; -+ case GRUB_EFI_CONTROLLER_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_controller_device_path_t controller; -+ grub_memcpy (&controller, dp, len); -+ grub_printf ("/Ctrl(%x)", -+ (unsigned) controller.controller_number); -+ } -+ break; -+ default: -+ grub_printf ("/UnknownHW(%x)", (unsigned) subtype); -+ break; -+ } -+ break; -+ -+ case GRUB_EFI_ACPI_DEVICE_PATH_TYPE: -+ switch (subtype) -+ { -+ case GRUB_EFI_ACPI_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_acpi_device_path_t acpi; -+ grub_memcpy (&acpi, dp, len); -+ grub_printf ("/ACPI(%x,%x)", -+ (unsigned) acpi.hid, -+ (unsigned) acpi.uid); -+ } -+ break; -+ case GRUB_EFI_EXPANDED_ACPI_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_expanded_acpi_device_path_t eacpi; -+ grub_memcpy (&eacpi, dp, sizeof (eacpi)); -+ grub_printf ("/ACPI("); -+ -+ if (GRUB_EFI_EXPANDED_ACPI_HIDSTR (dp)[0] == '\0') -+ grub_printf ("%x,", (unsigned) eacpi.hid); -+ else -+ grub_printf ("%s,", GRUB_EFI_EXPANDED_ACPI_HIDSTR (dp)); -+ -+ if (GRUB_EFI_EXPANDED_ACPI_UIDSTR (dp)[0] == '\0') -+ grub_printf ("%x,", (unsigned) eacpi.uid); -+ else -+ grub_printf ("%s,", GRUB_EFI_EXPANDED_ACPI_UIDSTR (dp)); -+ -+ if (GRUB_EFI_EXPANDED_ACPI_CIDSTR (dp)[0] == '\0') -+ grub_printf ("%x)", (unsigned) eacpi.cid); -+ else -+ grub_printf ("%s)", GRUB_EFI_EXPANDED_ACPI_CIDSTR (dp)); -+ } -+ break; -+ default: -+ grub_printf ("/UnknownACPI(%x)", (unsigned) subtype); -+ break; -+ } -+ break; -+ -+ case GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE: -+ switch (subtype) -+ { -+ case GRUB_EFI_ATAPI_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_atapi_device_path_t atapi; -+ grub_memcpy (&atapi, dp, len); -+ grub_printf ("/ATAPI(%x,%x,%x)", -+ (unsigned) atapi.primary_secondary, -+ (unsigned) atapi.slave_master, -+ (unsigned) atapi.lun); -+ } -+ break; -+ case GRUB_EFI_SCSI_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_scsi_device_path_t scsi; -+ grub_memcpy (&scsi, dp, len); -+ grub_printf ("/SCSI(%x,%x)", -+ (unsigned) scsi.pun, -+ (unsigned) scsi.lun); -+ } -+ break; -+ case GRUB_EFI_FIBRE_CHANNEL_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_fibre_channel_device_path_t fc; -+ grub_memcpy (&fc, dp, len); -+ grub_printf ("/FibreChannel(%llx,%llx)", -+ fc.wwn, fc.lun); -+ } -+ break; -+ case GRUB_EFI_1394_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_1394_device_path_t firewire; -+ grub_memcpy (&firewire, dp, len); -+ grub_printf ("/1394(%llx)", firewire.guid); -+ } -+ break; -+ case GRUB_EFI_USB_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_usb_device_path_t usb; -+ grub_memcpy (&usb, dp, len); -+ grub_printf ("/USB(%x,%x)", -+ (unsigned) usb.parent_port_number, -+ (unsigned) usb.interface); -+ } -+ break; -+ case GRUB_EFI_USB_CLASS_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_usb_class_device_path_t usb_class; -+ grub_memcpy (&usb_class, dp, len); -+ grub_printf ("/USBClass(%x,%x,%x,%x,%x)", -+ (unsigned) usb_class.vendor_id, -+ (unsigned) usb_class.product_id, -+ (unsigned) usb_class.device_class, -+ (unsigned) usb_class.device_subclass, -+ (unsigned) usb_class.device_protocol); -+ } -+ break; -+ case GRUB_EFI_I2O_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_i2o_device_path_t i2o; -+ grub_memcpy (&i2o, dp, len); -+ grub_printf ("/I2O(%x)", (unsigned) i2o.tid); -+ } -+ break; -+ case GRUB_EFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_mac_address_device_path_t mac; -+ grub_memcpy (&mac, dp, len); -+ grub_printf ("/MacAddr(%x:%x:%x:%x:%x:%x,%x)", -+ (unsigned) mac.mac_address[0], -+ (unsigned) mac.mac_address[1], -+ (unsigned) mac.mac_address[2], -+ (unsigned) mac.mac_address[3], -+ (unsigned) mac.mac_address[4], -+ (unsigned) mac.mac_address[5], -+ (unsigned) mac.if_type); -+ } -+ break; -+ case GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_ipv4_device_path_t ipv4; -+ grub_memcpy (&ipv4, dp, len); -+ grub_printf ("/IPv4(%u.%u.%u.%u,%u.%u.%u.%u,%u,%u,%x,%x)", -+ (unsigned) ipv4.local_ip_address[0], -+ (unsigned) ipv4.local_ip_address[1], -+ (unsigned) ipv4.local_ip_address[2], -+ (unsigned) ipv4.local_ip_address[3], -+ (unsigned) ipv4.remote_ip_address[0], -+ (unsigned) ipv4.remote_ip_address[1], -+ (unsigned) ipv4.remote_ip_address[2], -+ (unsigned) ipv4.remote_ip_address[3], -+ (unsigned) ipv4.local_port, -+ (unsigned) ipv4.remote_port, -+ (unsigned) ipv4.protocol, -+ (unsigned) ipv4.static_ip_address); -+ } -+ break; -+ case GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_ipv6_device_path_t ipv6; -+ grub_memcpy (&ipv6, dp, len); -+ grub_printf ("/IPv6(%x:%x:%x:%x:%x:%x:%x:%x,%x:%x:%x:%x:%x:%x:%x:%x,%u,%u,%x,%x)", -+ (unsigned) ipv6.local_ip_address[0], -+ (unsigned) ipv6.local_ip_address[1], -+ (unsigned) ipv6.local_ip_address[2], -+ (unsigned) ipv6.local_ip_address[3], -+ (unsigned) ipv6.local_ip_address[4], -+ (unsigned) ipv6.local_ip_address[5], -+ (unsigned) ipv6.local_ip_address[6], -+ (unsigned) ipv6.local_ip_address[7], -+ (unsigned) ipv6.remote_ip_address[0], -+ (unsigned) ipv6.remote_ip_address[1], -+ (unsigned) ipv6.remote_ip_address[2], -+ (unsigned) ipv6.remote_ip_address[3], -+ (unsigned) ipv6.remote_ip_address[4], -+ (unsigned) ipv6.remote_ip_address[5], -+ (unsigned) ipv6.remote_ip_address[6], -+ (unsigned) ipv6.remote_ip_address[7], -+ (unsigned) ipv6.local_port, -+ (unsigned) ipv6.remote_port, -+ (unsigned) ipv6.protocol, -+ (unsigned) ipv6.static_ip_address); -+ } -+ break; -+ case GRUB_EFI_INFINIBAND_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_infiniband_device_path_t ib; -+ grub_memcpy (&ib, dp, len); -+ grub_printf ("/InfiniBand(%x,%llx,%llx,%llx)", -+ (unsigned) ib.port_gid[0], /* XXX */ -+ ib.remote_id, -+ ib.target_port_id, -+ ib.device_id); -+ } -+ break; -+ case GRUB_EFI_UART_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_uart_device_path_t uart; -+ grub_memcpy (&uart, dp, len); -+ grub_printf ("/UART(%llu,%u,%x,%x)", -+ uart.baud_rate, -+ uart.data_bits, -+ uart.parity, -+ uart.stop_bits); -+ } -+ break; -+ case GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_vendor_messaging_device_path_t vendor; -+ grub_memcpy (&vendor, dp, sizeof (vendor)); -+ grub_printf ("/Vendor(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)", -+ (unsigned) vendor.vendor_guid.data1, -+ (unsigned) vendor.vendor_guid.data2, -+ (unsigned) vendor.vendor_guid.data3, -+ (unsigned) vendor.vendor_guid.data4[0], -+ (unsigned) vendor.vendor_guid.data4[1], -+ (unsigned) vendor.vendor_guid.data4[2], -+ (unsigned) vendor.vendor_guid.data4[3], -+ (unsigned) vendor.vendor_guid.data4[4], -+ (unsigned) vendor.vendor_guid.data4[5], -+ (unsigned) vendor.vendor_guid.data4[6], -+ (unsigned) vendor.vendor_guid.data4[7]); -+ } -+ break; -+ default: -+ grub_printf ("/UnknownMessaging(%x)", (unsigned) subtype); -+ break; -+ } -+ break; -+ -+ case GRUB_EFI_MEDIA_DEVICE_PATH_TYPE: -+ switch (subtype) -+ { -+ case GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_hard_drive_device_path_t hd; -+ grub_memcpy (&hd, dp, len); -+ grub_printf ("/HD(%u,%llx,%llx,%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x)", -+ hd.partition_number, -+ hd.partition_start, -+ hd.partition_size, -+ (unsigned) hd.partition_signature[3], -+ (unsigned) hd.partition_signature[2], -+ (unsigned) hd.partition_signature[1], -+ (unsigned) hd.partition_signature[0], -+ (unsigned) hd.partition_signature[5], -+ (unsigned) hd.partition_signature[4], -+ (unsigned) hd.partition_signature[7], -+ (unsigned) hd.partition_signature[6], -+ (unsigned) hd.partition_signature[9], -+ (unsigned) hd.partition_signature[8], -+ (unsigned) hd.partition_signature[10], -+ (unsigned) hd.partition_signature[11], -+ (unsigned) hd.partition_signature[12], -+ (unsigned) hd.partition_signature[13], -+ (unsigned) hd.partition_signature[14], -+ (unsigned) hd.partition_signature[15]); -+ } -+ break; -+ case GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_cdrom_device_path_t cd; -+ grub_memcpy (&cd, dp, len); -+ grub_printf ("/CD(%u,%llx,%llx)", -+ cd.boot_entry, -+ cd.partition_start, -+ cd.partition_size); -+ } -+ break; -+ case GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_vendor_media_device_path_t vendor; -+ grub_memcpy (&vendor, dp, sizeof (vendor)); -+ grub_printf ("/Vendor(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)", -+ (unsigned) vendor.vendor_guid.data1, -+ (unsigned) vendor.vendor_guid.data2, -+ (unsigned) vendor.vendor_guid.data3, -+ (unsigned) vendor.vendor_guid.data4[0], -+ (unsigned) vendor.vendor_guid.data4[1], -+ (unsigned) vendor.vendor_guid.data4[2], -+ (unsigned) vendor.vendor_guid.data4[3], -+ (unsigned) vendor.vendor_guid.data4[4], -+ (unsigned) vendor.vendor_guid.data4[5], -+ (unsigned) vendor.vendor_guid.data4[6], -+ (unsigned) vendor.vendor_guid.data4[7]); -+ } -+ break; -+ case GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_file_path_device_path_t *fp; -+ grub_uint8_t buf[(len - 4) * 2 + 1]; -+ fp = (grub_efi_file_path_device_path_t *) dp; -+ *grub_utf16_to_utf8 (buf, fp->path_name, -+ (len - 4) / sizeof (grub_efi_char16_t)) -+ = '\0'; -+ grub_printf ("/File(%s)", buf); -+ } -+ break; -+ case GRUB_EFI_PROTOCOL_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_protocol_device_path_t proto; -+ grub_memcpy (&proto, dp, sizeof (proto)); -+ grub_printf ("/Protocol(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)", -+ (unsigned) proto.guid.data1, -+ (unsigned) proto.guid.data2, -+ (unsigned) proto.guid.data3, -+ (unsigned) proto.guid.data4[0], -+ (unsigned) proto.guid.data4[1], -+ (unsigned) proto.guid.data4[2], -+ (unsigned) proto.guid.data4[3], -+ (unsigned) proto.guid.data4[4], -+ (unsigned) proto.guid.data4[5], -+ (unsigned) proto.guid.data4[6], -+ (unsigned) proto.guid.data4[7]); -+ } -+ break; -+ default: -+ grub_printf ("/UnknownMedia(%x)", (unsigned) subtype); -+ break; -+ } -+ break; -+ -+ case GRUB_EFI_BIOS_DEVICE_PATH_TYPE: -+ switch (subtype) -+ { -+ case GRUB_EFI_BIOS_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_bios_device_path_t bios; -+ grub_memcpy (&bios, dp, sizeof (bios)); -+ grub_printf ("/BIOS(%x,%x,%s)", -+ (unsigned) bios.device_type, -+ (unsigned) bios.status_flags, -+ (char *) (dp + 1)); -+ } -+ break; -+ default: -+ grub_printf ("/UnknownBIOS(%x)", (unsigned) subtype); -+ break; -+ } -+ break; -+ -+ default: -+ grub_printf ("/UnknownType(%x,%x)\n", -+ (unsigned) type, -+ (unsigned) subtype); -+ return; -+ break; -+ } -+ -+ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (dp)) -+ break; -+ -+ dp = (grub_efi_device_path_t *) ((char *) dp + len); -+ } -+} -+ -+static inline int -+dpname_matches(char *str, char *candidate) -+{ -+ grub_size_t clen = grub_strlen(candidate); -+ char scratch[clen + 2]; -+ int rc; -+ -+ grub_strncpy(scratch, candidate, clen); -+ scratch[clen+1] = '\0'; -+ if (scratch[clen-1] == '$') -+ { -+ scratch[--clen] = '\0'; -+ rc = !grub_strncasecmp(str, scratch, clen); -+ return rc; -+ } -+ -+ grub_strncpy(scratch+clen, "(", 2); -+ clen = grub_strlen(scratch); -+ rc = !grub_strncasecmp(str, scratch, clen); -+ return rc; -+} -+ -+static void -+finish_param_parse(char *pos, char **end, char *tmp) -+{ -+ if (!pos || !end || !tmp) -+ return; -+ -+ if (*end) -+ **end = *tmp; -+} -+ -+static char * -+get_next_param(char *pos, char **end, char *tmp) -+{ -+ char *comma = NULL; -+ char *openparen = NULL; -+ char *closeparen = NULL; -+ -+ if (!pos || !end || !tmp) -+ return NULL; -+ -+ if (*end) -+ **end = *tmp; -+ -+ openparen = grub_strchr(pos, '('); -+ if (openparen && *openparen) -+ { -+ pos = grub_strnchr(openparen + 1, ' '); -+ comma = grub_strchr(pos, ','); -+ closeparen = grub_strchr(pos, ')'); -+ -+ if (comma && *comma) -+ { -+ *tmp = *comma; -+ *comma = '\0'; -+ *end = comma; -+ } -+ else if (closeparen && *closeparen) -+ { -+ *tmp = *closeparen; -+ *closeparen = '\0'; -+ *end = closeparen; -+ } -+ return pos; -+ } -+ -+ comma = grub_strchr(pos, ','); -+ if (comma && *comma) -+ { -+ pos = grub_strnchr(comma + 1, ' '); -+ comma = grub_strchr(pos, ','); -+ closeparen = grub_strchr(pos, ')'); -+ -+ if (comma && *comma) -+ { -+ *tmp = *comma; -+ *comma = '\0'; -+ *end = comma; -+ } -+ else if (closeparen && *closeparen) -+ { -+ *tmp = *closeparen; -+ *closeparen = '\0'; -+ *end = closeparen; -+ } -+ return pos; -+ } -+ -+ closeparen = grub_strchr(pos, ')'); -+ if (closeparen && *closeparen) -+ pos = grub_strnchr(closeparen + 1, ' '); -+ -+ return pos; -+} -+ -+struct generic_device_path -+ { -+ grub_efi_uint8_t type; -+ grub_efi_uint8_t subtype; -+ grub_efi_uint16_t length; -+ } __attribute__((packed)); -+ -+struct hd_media_device_path -+ { -+ grub_efi_uint8_t type; -+ grub_efi_uint8_t subtype; -+ grub_efi_uint16_t length; -+ grub_efi_uint32_t partition; -+ grub_efi_uint64_t startlba; -+ grub_efi_uint64_t size; -+ grub_efi_uint8_t signature[16]; -+ grub_efi_uint8_t mbr_type; -+ grub_efi_uint8_t signature_type; -+ } __attribute__((packed)); -+ -+static inline int -+parse_device_path_component(const char *orig_str, void *data) -+{ -+ int orig_str_len = strlen(orig_str) + 1; -+ char str[orig_str_len]; -+ char tmp; -+ char *pos = str; -+ int ret = 0; -+ -+ grub_strcpy(str, orig_str); -+ if (dpname_matches(str, "pci")) -+ { -+ } -+ else if (dpname_matches(str, "pccard")) -+ { -+ } -+ else if (dpname_matches(str, "mmap")) -+ { -+ } -+ else if (dpname_matches(str, "ctrl")) -+ { -+ } -+ else if (dpname_matches(str, "acpi")) -+ { -+ } -+ /* XXX what about _ADR? */ -+ /* messaging device paths */ -+ else if (dpname_matches(str, "atapi")) -+ { -+ } -+ else if (dpname_matches(str, "scsi")) -+ { -+ } -+ else if (dpname_matches(str, "fibrechannel")) -+ { -+ } -+ else if (dpname_matches(str, "1394")) -+ { -+ } -+ else if (dpname_matches(str, "usb")) -+ { -+ } -+ else if (dpname_matches(str, "sata")) -+ { -+ } -+ /* XXX what about usb-wwid */ -+ /* XXX what about lun */ -+ else if (dpname_matches(str, "usbclass")) -+ { -+ } -+ else if (dpname_matches(str, "i2o")) -+ { -+ } -+ else if (dpname_matches(str, "macaddr")) -+ { -+ } -+ else if (dpname_matches(str, "ipv4")) -+ { -+ } -+ else if (dpname_matches(str, "ipv6")) -+ { -+ } -+ /* XXX what about vlan */ -+ else if (dpname_matches(str, "infiniband")) -+ { -+ } -+ else if (dpname_matches(str, "uart")) -+ { -+ } -+ else if (dpname_matches(str, "uartflowctrl")) -+ { -+ } -+ else if (dpname_matches(str, "sas")) -+ { -+ } -+ else if (dpname_matches(str, "iscsi")) -+ { -+ } -+ /* media device paths */ -+ else if (dpname_matches(str, "hd")) -+ { -+ /* these look roughly like: -+ * HD(Partition,Type,Signature,Start, Size) -+ * but: -+ * - type may be optional. 1 or "MBR" means MBR. 2 or "GPT" means GPT. -+ * - start and size are optional -+ * - there can be random spaces -+ */ -+ struct hd_media_device_path hddp; -+ unsigned long tmpul; -+ char *end = NULL, c; -+ char tmps[19] = "0x"; -+ char *tmpsp; -+ -+ ret = 42; -+ -+ hddp.type = GRUB_EFI_MEDIA_DEVICE_PATH_TYPE; -+ hddp.subtype = GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE; -+ hddp.length = ret; -+ -+ //pos += grub_strcspn(pos, '('); -+ pos = get_next_param(pos, &end, &c); -+ if (!*pos) -+ { -+broken_hd: -+ finish_param_parse(pos, &end, &c); -+ return 0; -+ } -+ grub_strncpy(tmps+2, pos, 16); -+ tmps[18] = '\0'; -+ tmpsp = tmps; -+ safe_parse_maxulong(&tmpsp, &tmpul); -+ hddp.partition = tmpul; -+ -+ pos = get_next_param(pos, &end, &c); -+ if (!*pos) -+ goto broken_hd; -+ grub_strcpy(tmps+2, pos); -+ tmpsp = tmps; -+ safe_parse_maxulong(&tmpsp, &tmpul); -+ hddp.startlba = tmpul; -+ -+ pos = get_next_param(pos, &end, &c); -+ if (!*pos) -+ goto broken_hd; -+ grub_strcpy(tmps+2, pos); -+ tmpsp = tmps; -+ safe_parse_maxulong(&tmpsp, &tmpul); -+ hddp.size = tmpul; -+ -+ pos = get_next_param(pos, &end, &c); -+ if (!*pos) -+ goto broken_hd; -+ if (!grub_strcmp(pos, "None")) -+ { -+ hddp.signature_type = 0; -+ grub_memset(hddp.signature, '\0', sizeof(hddp.signature)); -+ } -+ else if (grub_strnlen(pos, 36) == 8) -+ { -+ grub_efi_uint32_t tmpu32; -+ grub_strncpy(tmps+2, pos, 8); -+ tmps[10] = '\0'; -+ tmpsp = tmps; -+ safe_parse_maxulong(&tmpsp, &tmpul); -+ tmpu32 = tmpul; -+ hddp.signature_type = 1; -+ grub_memcpy(hddp.signature, &tmpu32, sizeof(tmpu32)); -+ } -+ else if (grub_strnlen(pos, 36) == 36) -+ { -+ grub_efi_uint32_t tmpu32; -+ grub_efi_uint16_t tmpu16; -+ grub_efi_uint8_t tmpu8; -+ -+ grub_strncpy(tmps+2, pos, 8); -+ tmps[10] = '\0'; -+ tmpsp = tmps; -+ safe_parse_maxulong(&tmpsp, &tmpul); -+ tmpu32 = tmpul; -+ grub_memcpy(hddp.signature, &tmpu32, sizeof(tmpu32)); -+ -+ grub_strncpy(tmps+2, pos+9, 4); -+ tmps[6] = '\0'; -+ tmpsp = tmps; -+ safe_parse_maxulong(&tmpsp, &tmpul); -+ tmpu16 = tmpul; -+ grub_memcpy(hddp.signature + 4, &tmpu16, sizeof(tmpu16)); -+ -+ grub_strncpy(tmps+2, pos+14, 4); -+ tmps[6] = '\0'; -+ tmpsp = tmps; -+ safe_parse_maxulong(&tmpsp, &tmpul); -+ tmpu16 = tmpul; -+ grub_memcpy(hddp.signature + 6, &tmpu16, sizeof(tmpu16)); -+ -+ /* these are displayed like a u16, but they're a u8. thanks. */ -+ grub_strncpy(tmps+2, pos+19, 2); -+ tmps[4] = '\0'; -+ tmpsp = tmps; -+ safe_parse_maxulong(&tmpsp, &tmpul); -+ tmpu8 = tmpul; -+ grub_memcpy(hddp.signature + 8, &tmpu8, sizeof(tmpu8)); -+ grub_strncpy(tmps+2, pos+21, 2); -+ tmps[4] = '\0'; -+ tmpsp = tmps; -+ safe_parse_maxulong(&tmpsp, &tmpul); -+ tmpu8 = tmpul; -+ grub_memcpy(hddp.signature + 9, &tmpu8, sizeof(tmpu8)); -+ -+ grub_strncpy(tmps+2, pos+24, 2); -+ tmps[4] = '\0'; -+ tmpsp = tmps; -+ safe_parse_maxulong(&tmpsp, &tmpul); -+ tmpu8 = tmpul; -+ grub_memcpy(hddp.signature + 10, &tmpu8, sizeof(tmpu8)); -+ -+ grub_strncpy(tmps+2, pos+26, 2); -+ tmps[4] = '\0'; -+ tmpsp = tmps; -+ safe_parse_maxulong(&tmpsp, &tmpul); -+ tmpu8 = tmpul; -+ grub_memcpy(hddp.signature + 11, &tmpu8, sizeof(tmpu8)); -+ -+ grub_strncpy(tmps+2, pos+28, 2); -+ tmps[4] = '\0'; -+ tmpsp = tmps; -+ safe_parse_maxulong(&tmpsp, &tmpul); -+ tmpu8 = tmpul; -+ grub_memcpy(hddp.signature + 12, &tmpu8, sizeof(tmpu8)); -+ -+ grub_strncpy(tmps+2, pos+30, 2); -+ tmps[4] = '\0'; -+ tmpsp = tmps; -+ safe_parse_maxulong(&tmpsp, &tmpul); -+ tmpu8 = tmpul; -+ grub_memcpy(hddp.signature + 13, &tmpu8, sizeof(tmpu8)); -+ -+ grub_strncpy(tmps+2, pos+32, 2); -+ tmps[4] = '\0'; -+ tmpsp = tmps; -+ safe_parse_maxulong(&tmpsp, &tmpul); -+ tmpu8 = tmpul; -+ grub_memcpy(hddp.signature + 14, &tmpu8, sizeof(tmpu8)); -+ -+ grub_strncpy(tmps+2, pos+34, 2); -+ tmps[4] = '\0'; -+ tmpsp = tmps; -+ safe_parse_maxulong(&tmpsp, &tmpul); -+ tmpu8 = tmpul; -+ grub_memcpy(hddp.signature + 15, &tmpu8, sizeof(tmpu8)); -+ -+ hddp.signature_type = 2; -+ } -+ else -+ goto broken_hd; -+ -+ hddp.mbr_type = hddp.signature_type; -+ -+ if (data) -+ grub_memcpy(data, &hddp, sizeof(hddp)); -+ } -+ else if (dpname_matches(str, "cd")) -+ { -+ } -+ else if (dpname_matches(str, "file")) -+ { -+ } -+ else if (dpname_matches(str, "protocol")) -+ { -+ } -+ /* what about piwg firmware file? */ -+ /* what about piwg firmware volume? */ -+ /* what about relative offset media */ -+ else if (dpname_matches(str, "bios")) -+ { -+ } -+ /* This is the end beautiful friend */ -+ else if (dpname_matches(str, "EndEntire$")) -+ { -+ struct generic_device_path gdp = { -+ .type = GRUB_EFI_END_DEVICE_PATH_TYPE, -+ .subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE, -+ .length = 4 -+ }; -+ ret = 4; -+ if (data) -+ grub_memmove(data, &gdp, sizeof(gdp)); -+ } -+ else if (dpname_matches(str, "EndThis$")) -+ { -+ struct generic_device_path gdp = { -+ .type = GRUB_EFI_END_DEVICE_PATH_TYPE, -+ .subtype = GRUB_EFI_END_THIS_DEVICE_PATH_SUBTYPE, -+ .length = 4 -+ }; -+ ret = 4; -+ if (data) -+ grub_memmove(data, &gdp, sizeof(gdp)); -+ } -+ else if (dpname_matches(str, "EndUnknown$")) -+ { -+ struct generic_device_path gdp = { -+ .type = GRUB_EFI_END_DEVICE_PATH_TYPE, -+ .subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE, -+ .length = 4 -+ }; -+ ret = 4; -+ if (data) -+ grub_memmove(data, &gdp, sizeof(gdp)); -+ } -+ /* handle anything we didn't recognize */ -+ else if (dpname_matches(str, "vendor")) -+ { -+ /* needs to handle: -+ * 1) hw vendor -+ * 2) messaging vendor -+ * 3) media vendor -+ */ -+ } -+ else -+ { -+ } -+ -+ return ret; -+} -+ -+grub_efi_device_path_t * -+device_path_from_utf8 (const char *device) -+{ -+ grub_size_t device_len; -+ grub_efi_device_path_t *dp = NULL; -+ -+ device_len = parse_device_path_component(device, dp); -+ device_len += parse_device_path_component("EndEntire", dp); -+ dp = grub_malloc(device_len); -+ if (!dp) -+ return NULL; -+ device_len = parse_device_path_component(device, dp); -+ device_len += parse_device_path_component("EndEntire", -+ (void *)((unsigned long)dp + device_len)); -+ -+ -+ return dp; -+} -diff --git a/efi/efigraph.c b/efi/efigraph.c -new file mode 100644 -index 0000000..6905e07 ---- /dev/null -+++ b/efi/efigraph.c -@@ -0,0 +1,1501 @@ -+/* efigraph.c - EFI "graphics output" support for GRUB/EFI */ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright 2007 Red Hat, Inc. -+ * Copyright (C) 2007 Intel Corp. -+ * Copyright (C) 2001,2002 Red Hat, Inc. -+ * Portions copyright (C) 2000 Conectiva, 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. -+ */ -+ -+#ifdef SUPPORT_GRAPHICS -+ -+#include <grub/misc.h> -+#include <grub/types.h> -+#include <grub/cpu/linux.h> -+#include <grub/efi/api.h> -+#include <grub/efi/efi.h> -+#include <grub/efi/misc.h> -+ -+#include <term.h> -+#include <shared.h> -+#include <graphics.h> -+ -+#include "graphics.h" -+#include "xpm.h" -+ -+#define dbgdelay(_f, _l) ({\ -+ if (debug_graphics) { \ -+ do { \ -+ grub_efi_stall(1000); \ -+ } while (console_getkey() < 0); \ -+ } \ -+ }) -+ -+#define dprintf(format, args...) ({ \ -+ if (debug_graphics) { \ -+ struct term_entry *_tt = current_term; \ -+ current_term = term_table; \ -+ grub_printf(format, ##args); \ -+ current_term = _tt; \ -+ } \ -+ }) -+ -+struct grub_pixel_info -+{ -+ char depth_bits; -+ char depth_bytes; -+ unsigned char red_size; -+ unsigned char red_pos; -+ unsigned char green_size; -+ unsigned char green_pos; -+ unsigned char blue_size; -+ unsigned char blue_pos; -+ unsigned char reserved_size; -+ unsigned char reserved_pos; -+ int line_length; -+}; -+ -+typedef struct grub_pixel_info grub_pixel_info_t; -+ -+ -+static grub_efi_guid_t graphics_output_guid = GRUB_EFI_GRAPHICS_OUTPUT_GUID; -+static grub_efi_guid_t pci_io_guid = GRUB_EFI_PCI_IO_GUID; -+ -+#ifndef MIN -+#define MIN(x,y) ( ((x) < (y)) ? (x) : (y)) -+#endif -+#ifndef MAX -+#define MAX(x,y) ( ((x) < (y)) ? (y) : (x)) -+#endif -+ -+#define pixel_equal(x,y) ((x).bgrr.red == (y).bgrr.red && \ -+ (x).bgrr.green == (y).bgrr.green && \ -+ (x).bgrr.blue == (y).bgrr.blue && \ -+ (x).bgrr.reserved == (y).bgrr.reserved) -+ -+struct video_mode { -+ grub_efi_uint32_t number; -+ grub_efi_uintn_t size; -+ grub_efi_graphics_output_mode_information_t *info; -+}; -+ -+#define MAX_PALETTE 16 -+struct eg { -+ struct graphics_backend *backend; -+ grub_efi_graphics_output_t *output_intf; -+ struct video_mode **modes; -+ int max_mode; -+ grub_efi_uint32_t text_mode; -+ grub_efi_uint32_t graphics_mode; -+ grub_pixel_info_t pixel_info; -+ enum { TEXT, GRAPHICS } current_mode; -+ -+ position_t screen_size; -+ position_t screen_pos; -+ -+ struct bltbuf *background; -+ -+ grub_efi_graphics_output_pixel_t palette[MAX_PALETTE + 1]; -+}; -+ -+#define RGB(r,g,b) { .bgrr.red = r, .bgrr.green = g, .bgrr.blue = b } -+ -+static grub_efi_graphics_output_pixel_t cga_colors[] = { -+ RGB(0x00,0x00,0x00), // 0 Black -+ RGB(0x7f,0x00,0x00), // 1 Dark Red -+ RGB(0x00,0x7f,0x00), // 2 Dark Green -+ RGB(0x7f,0x7f,0x00), // 3 Dark Yellow -+ RGB(0x00,0x00,0x7f), // 4 Dark Blue -+ RGB(0x7f,0x00,0x7f), // 5 Dark Magenta -+ RGB(0x00,0x7f,0x7f), // 6 Dark Cyan -+ RGB(0xc0,0xc0,0xc0), // 7 Light Grey -+ RGB(0x7f,0x7f,0x7f), // 8 Dark Grey -+ RGB(0xff,0x00,0x00), // 9 Red -+ RGB(0x00,0xff,0x00), // 10 Green -+ RGB(0xff,0xff,0x00), // 11 Yellow -+ RGB(0x00,0x00,0xff), // 12 Blue -+ RGB(0xff,0x00,0xff), // 13 Magenta -+ RGB(0x00,0xff,0xff), // 14 Cyan -+ RGB(0xff,0xff,0xff), // 15 White -+ RGB(0xff,0xff,0xff), // 16 Also white ;) -+}; -+ -+static const int n_cga_colors = sizeof (cga_colors) / sizeof (cga_colors[0]); -+ -+static void -+find_bits (unsigned long mask, unsigned char *first, -+ unsigned char* len) -+{ -+ unsigned char bit_pos = 0, bit_len = 0; -+ *first =0; -+ *len = 0; -+ if (mask == 0) -+ return; -+ while (! (mask & 0x1)) { -+ mask = mask >> 1; -+ bit_pos++; -+ } -+ while (mask & 0x1) { -+ mask = mask >> 1; -+ bit_len++; -+ } -+ *first = bit_pos; -+ *len = bit_len; -+} -+ -+static grub_efi_graphics_output_mode_information_t * -+get_graphics_mode_info_for_mode(struct eg *eg, int mode) -+{ -+ int i; -+ -+ for (i = 0; i < eg->max_mode; i++) { -+ if (eg->modes[i] == NULL) -+ continue; -+ if (eg->modes[i]->number == mode) -+ return eg->modes[i]->info; -+ } -+ return NULL; -+} -+ -+static grub_efi_graphics_output_mode_information_t * -+get_graphics_mode_info(struct eg *eg) -+{ -+ return get_graphics_mode_info_for_mode(eg, eg->graphics_mode); -+} -+ -+static void -+print_mode_info(struct video_mode *mode) -+{ -+ grub_efi_graphics_output_mode_information_t *info = mode->info; -+ dprintf("mode %d (%dx%d, pitch %d, ", -+ mode->number, -+ info->horizontal_resolution, -+ info->vertical_resolution, -+ info->pixels_per_scan_line); -+ switch(info->pixel_format) { -+ case GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR: -+ dprintf("rgbr 8bpc"); -+ break; -+ case GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR: -+ dprintf("bgrr 8bpc"); -+ break; -+ case GRUB_EFI_PIXEL_BIT_MASK: -+ dprintf("bitmask color"); -+ break; -+ case GRUB_EFI_PIXEL_BLT_ONLY: -+ dprintf("blt only"); -+ break; -+ } -+ dprintf(")\n"); -+ if (info->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) { -+ dprintf("red: %08x green: %08x blue: %08x res: %08x\n", -+ info->pixel_information.red_mask, -+ info->pixel_information.green_mask, -+ info->pixel_information.blue_mask, -+ info->pixel_information.reserved_mask); -+ } -+} -+ -+static void -+set_kernel_params(struct graphics_backend *backend, -+ struct linux_kernel_params *params) -+{ -+ struct eg *eg; -+ -+ if (!backend || !backend->priv) -+ return; -+ -+ eg = backend->priv; -+ grub_efi_graphics_output_t *gop_intf = NULL; -+ grub_efi_graphics_output_mode_t *gop_mode = NULL; -+ grub_efi_status_t efi_status = GRUB_EFI_SUCCESS; -+ grub_efi_graphics_output_mode_information_t *gop_info = NULL; -+ grub_efi_uintn_t size; -+ -+ gop_intf = grub_efi_locate_protocol (&graphics_output_guid, NULL); -+ if (gop_intf == NULL) -+ return; -+ -+ gop_mode = gop_intf->mode; -+ -+ efi_status = Call_Service_4 (gop_intf->query_mode, -+ gop_intf, gop_mode->mode, &size, &gop_info); -+ -+ -+ if (efi_status == GRUB_EFI_SUCCESS) { -+ /* No VBE on EFI. */ -+ params->lfb_width = gop_info->horizontal_resolution; -+ params->lfb_height = gop_info->vertical_resolution; -+ params->lfb_base = gop_mode->frame_buffer_base; -+ params->lfb_size = gop_mode->frame_buffer_size; -+ params->lfb_pages = 1; -+ params->vesapm_segment = 0; -+ params->vesapm_offset = 0; -+ params->vesa_attrib = 0; -+ if (gop_info->pixel_format == GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR) { -+ params->lfb_depth = 32; -+ params->red_mask_size = 8; -+ params->red_field_pos = 0; -+ params->green_mask_size = 8; -+ params->green_field_pos = 8; -+ params->blue_mask_size = 8; -+ params->blue_field_pos = 16; -+ params->reserved_mask_size = 8; -+ params->reserved_field_pos = 24; -+ params->lfb_line_len = gop_info->pixels_per_scan_line * 4; -+ } else if (gop_info->pixel_format == -+ GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR) { -+ params->lfb_depth = 32; -+ params->red_mask_size = 8; -+ params->red_field_pos = 16; -+ params->green_mask_size = 8; -+ params->green_field_pos = 8; -+ params->blue_mask_size = 8; -+ params->blue_field_pos = 0; -+ params->reserved_mask_size = 8; -+ params->reserved_field_pos = 24; -+ params->lfb_line_len = gop_info->pixels_per_scan_line * 4; -+ } else if (gop_info->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) { -+ find_bits (gop_info->pixel_information.red_mask, -+ ¶ms->red_field_pos, ¶ms->red_mask_size); -+ find_bits (gop_info->pixel_information.green_mask, -+ ¶ms->green_field_pos, ¶ms->green_mask_size); -+ find_bits (gop_info->pixel_information.blue_mask, -+ ¶ms->blue_field_pos, ¶ms->blue_mask_size); -+ find_bits (gop_info->pixel_information.reserved_mask, -+ ¶ms->reserved_field_pos, ¶ms->reserved_mask_size); -+ params->lfb_depth = params->red_mask_size -+ + params->green_mask_size -+ + params->blue_mask_size -+ + params->reserved_mask_size; -+ params->lfb_line_len = -+ (gop_info->pixels_per_scan_line * params->lfb_depth) / 8; -+ } else { -+ params->lfb_depth = 4; -+ params->red_mask_size = 0; -+ params->red_field_pos = 0; -+ params->green_mask_size = 0; -+ params->green_field_pos = 0; -+ params->blue_mask_size = 0; -+ params->blue_field_pos = 0; -+ params->reserved_mask_size = 0; -+ params->reserved_field_pos = 0; -+ params->lfb_line_len = params->lfb_width / 2; -+ } -+#if 0 -+ params->video_cursor_x = 0; -+ params->video_cursor_y = 0; -+ params->video_page = 0; -+ params->video_mode = 0; -+ params->video_width = 0; -+ params->video_ega_bx = 0; -+ params->video_height = 0; -+ params->have_vga = 0x70; -+ params->font_size = 0; -+#else -+ params->video_cursor_x = grub_efi_system_table->con_out->mode->cursor_column; -+ params->video_cursor_y = grub_efi_system_table->con_out->mode->cursor_row; -+ params->video_page = 0; /* ??? */ -+ params->video_mode = grub_efi_system_table->con_out->mode->mode; -+ params->video_width = (grub_console_getwh () >> 8); -+ params->video_ega_bx = 0; -+ params->video_height = (grub_console_getwh () & 0xff); -+ params->have_vga = VIDEO_TYPE_EFI; -+ params->font_size = 16; /* XXX */ -+#endif -+ } -+} -+ -+static void -+pixel_to_rgb(grub_efi_graphics_output_pixel_t *pixel, -+ int *red, int *green, int *blue) -+{ -+ *red = pixel->bgrr.red; -+ *green = pixel->bgrr.green; -+ *blue = pixel->bgrr.blue; -+} -+ -+static void -+rgb_to_pixel(int red, int green, int blue, -+ grub_efi_graphics_output_pixel_t *pixel) -+{ -+ pixel->bgrr.red = red; -+ pixel->bgrr.green = green; -+ pixel->bgrr.blue = blue; -+} -+ -+static void -+position_to_phys(struct eg *eg, position_t *virt, position_t *phys) -+{ -+ phys->x = virt->x + eg->screen_pos.x; -+ phys->y = virt->y + eg->screen_pos.y; -+} -+ -+static int -+abs_paddr(struct eg *eg, position_t *virt) -+{ -+ position_t phys; -+ position_to_phys(eg, virt, &phys); -+ return phys.x + phys.y * eg->screen_size.x; -+} -+ -+struct bltbuf { -+ grub_efi_uintn_t width; -+ grub_efi_uintn_t height; -+ grub_efi_graphics_output_pixel_t pixbuf[]; -+}; -+ -+static struct bltbuf *alloc_bltbuf(grub_efi_uintn_t width, -+ grub_efi_uintn_t height) -+{ -+ struct bltbuf *buf = NULL; -+ grub_efi_uintn_t pixbuf_size = width * height * -+ sizeof (grub_efi_graphics_output_pixel_t); -+ -+ if (!(buf = grub_malloc(sizeof(buf->width) + sizeof(buf->height) + -+ pixbuf_size))) -+ return NULL; -+ -+ buf->width = width; -+ buf->height = height; -+ grub_memset(buf->pixbuf, '\0', pixbuf_size); -+ return buf; -+} -+ -+ -+static void -+hw_blt_pos_to_screen_pos(struct eg *eg, struct bltbuf *bltbuf, -+ position_t *bltpos, position_t *bltsz, position_t *pos) -+{ -+ position_t phys; -+ -+ position_to_phys(eg, pos, &phys); -+ -+ Call_Service_10(eg->output_intf->blt, eg->output_intf, (void *)bltbuf->pixbuf, -+ GRUB_EFI_BLT_BUFFER_TO_VIDEO, -+ bltpos->x, bltpos->y, -+ phys.x, phys.y, -+ bltsz->x, bltsz->y, -+ 0); -+} -+ -+static void -+blt_pos_to_screen_pos(struct eg *eg, struct bltbuf *bltbuf, -+ position_t *bltpos, position_t *bltsz, position_t *pos) -+{ -+ grub_efi_graphics_output_mode_information_t *info = get_graphics_mode_info(eg); -+ grub_efi_graphics_output_pixel_t *pixel; -+ position_t phys; -+ const int pxlstride = info->pixels_per_scan_line; -+ const int bytestride = pxlstride * sizeof (*pixel); -+ -+ position_to_phys(eg, pos, &phys); -+ -+ if (info->pixel_format == GRUB_EFI_PIXEL_BLT_ONLY || 1) { -+ hw_blt_pos_to_screen_pos(eg, bltbuf, bltpos, bltsz, pos); -+#if 0 -+ } else if (info->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) { -+ int y; -+ grub_pixel_info_t *pinfo = &eg->pixel_info; -+ const int maxpixels = -+ MIN(info->horizontal_resolution - pos->x, bltsz->x); -+ -+ for (y = bltpos->y; y < bltpos->y + bltsz->y; y++, phys.y++) { -+ char raw_pixels[maxpixels * pinfo->depth_bytes]; -+ char *fb = (char *)(unsigned long)eg->output_intf->mode->frame_buffer_base; -+ int x; -+ -+ pixel = (void *)&bltbuf->pixbuf[y * bltbuf->width + bltpos->x]; -+ fb += phys.y * pinfo->line_length + phys.x * pinfo->depth_bytes; -+ -+ for (x = 0; x < maxpixels; x++) { -+ char depth_bytes = pinfo->depth_bytes; -+ char *raw_pixel = raw_pixels + x * depth_bytes; -+ -+ int red, green, blue, color; -+ char *colorp; -+ -+#if 0 -+ red = pixel[x].bgrr.red & 0x3f; -+ green = pixel[x].bgrr.green & 0x3f; -+ blue = pixel[x].bgrr.blue & 0x3f; -+ red = red * ((1 << pinfo->red_size) - 1) / 0x3f; -+ green = green * ((1 << pinfo->green_size) - 1) / 0x3f; -+ blue = blue * ((1 << pinfo->blue_size) - 1) / 0x3f; -+#else -+ red = pixel[x].bgrr.red; -+ green = pixel[x].bgrr.green; -+ blue = pixel[x].bgrr.blue; -+ -+ red >>= 8 - pinfo->red_size; -+ green >>= 8 - pinfo->green_size; -+ blue >>= 8 - pinfo->blue_size; -+#endif -+ -+ color = (red << pinfo->red_pos) | -+ (green << pinfo->green_pos) | -+ (blue << pinfo->blue_pos); -+ colorp = (void *)&color; -+ while (depth_bytes--) -+ *raw_pixel++ = *colorp++; -+ } -+ memmove(fb, raw_pixels, maxpixels * pinfo->depth_bytes); -+ } -+#endif -+ } else { -+ int y; -+ grub_pixel_info_t *pinfo = &eg->pixel_info; -+ const int maxpixels = -+ MIN(info->horizontal_resolution - pos->x, bltsz->x); -+ -+ //char *line = &fb[phys.y * bytestride + phys.x * sizeof(*pixel)]; -+ for (y = bltpos->y; y < bltpos->y + bltsz->y; y++, phys.y++) { -+ char raw_pixels[maxpixels * sizeof(*pixel)]; -+ char *fb = (char *)(unsigned long)eg->output_intf->mode->frame_buffer_base; -+ int x; -+ -+ pixel = (void *)&bltbuf->pixbuf[y * bltbuf->width + bltpos->x]; -+ fb += phys.y * pinfo->line_length + phys.x * pinfo->depth_bytes; -+ -+ if (info->pixel_format == GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR) { -+ memmove(raw_pixels, pixel, maxpixels * sizeof (*pixel)); -+ continue; -+ } else if (info->pixel_format==GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR) { -+ grub_efi_graphics_output_pixel_t shadow[maxpixels]; -+ for (x = 0; x < maxpixels; x++) { -+ shadow[x].rgbr.red = pixel[x].bgrr.red; -+ shadow[x].rgbr.green = pixel[x].bgrr.green; -+ shadow[x].rgbr.blue = pixel[x].bgrr.blue; -+ } -+ -+ memmove(raw_pixels, shadow, maxpixels * sizeof (*pixel)); -+ } else if (info->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) { -+ for (x = 0; x < maxpixels; x++) { -+ char depth_bytes = pinfo->depth_bytes; -+ char *raw_pixel = raw_pixels + x * depth_bytes; -+ -+ int red, green, blue, color; -+ char *colorp; -+ -+#if 0 -+ red = pixel[x].bgrr.red & 0x3f; -+ green = pixel[x].bgrr.green & 0x3f; -+ blue = pixel[x].bgrr.blue & 0x3f; -+ red = red * ((1 << pinfo->red_size) - 1) / 0x3f; -+ green = green * ((1 << pinfo->green_size) - 1) / 0x3f; -+ blue = blue * ((1 << pinfo->blue_size) - 1) / 0x3f; -+#else -+ red = pixel[x].bgrr.red; -+ green = pixel[x].bgrr.green; -+ blue = pixel[x].bgrr.blue; -+ -+ red >>= 8 - pinfo->red_size; -+ green >>= 8 - pinfo->green_size; -+ blue >>= 8 - pinfo->blue_size; -+#endif -+ -+ color = (red << pinfo->red_pos) | -+ (green << pinfo->green_pos) | -+ (blue << pinfo->blue_pos); -+ colorp = (void *)&color; -+ while (depth_bytes--) -+ *raw_pixel++ = *colorp++; -+ } -+ } -+ memmove(fb, raw_pixels, maxpixels * pinfo->depth_bytes); -+ } -+ } -+} -+ -+static void -+blt_to_screen(struct eg *eg, struct bltbuf *bltbuf) -+{ -+#if 0 -+ position_t addr = {0, 0}; -+ -+ position_to_phys(eg, &addr, &addr); -+ -+ Call_Service_10(eg->output_intf->blt, eg->output_intf, bltbuf->pixbuf, -+ GRUB_EFI_BLT_BUFFER_TO_VIDEO, -+ 0, 0, -+ addr.x, addr.y, -+ bltbuf->width, bltbuf->height, -+ 0); -+#else -+ const int pxlstride = eg->output_intf->mode->info->pixels_per_scan_line; -+ position_t bltsz, bltpos = { 0, 0 }, pos = { 0, 0 }; -+ bltsz.x = MIN(bltbuf->width, pxlstride); -+ bltsz.y = MIN(bltbuf->height, eg->output_intf->mode->info->vertical_resolution); -+ -+ blt_pos_to_screen_pos(eg, bltbuf, &bltpos, &bltsz, &pos); -+#endif -+} -+ -+static void -+blt_to_screen_pos(struct eg *eg, struct bltbuf *bltbuf, position_t *pos) -+{ -+ position_t bltpos = {0, 0}; -+ position_t bltsz = { bltbuf->width, bltbuf->height }; -+ blt_pos_to_screen_pos(eg, bltbuf, &bltpos, &bltsz, pos); -+} -+ -+static int -+save_video_mode(struct eg *eg, struct video_mode *mode) -+{ -+ grub_efi_status_t status; -+ -+ -+ -+ status = Call_Service_4(eg->output_intf->query_mode, eg->output_intf, -+ mode->number, &mode->size, &mode->info); -+ return status == GRUB_EFI_SUCCESS; -+} -+ -+static void -+get_screen_size(struct graphics_backend *backend, position_t *size) -+{ -+ struct eg *eg = backend->priv; -+ grub_efi_graphics_output_mode_information_t *info; -+ -+ info = get_graphics_mode_info(eg); -+ -+ size->x = info->horizontal_resolution; -+ size->y = info->vertical_resolution; -+} -+ -+static void -+bltbuf_set_pixel(struct bltbuf *bltbuf, position_t *pos, -+ grub_efi_graphics_output_pixel_t *pixel) -+{ -+ if (pos->x < 0 || pos->x >= bltbuf->width) -+ return; -+ if (pos->x < 0 || pos->y >= bltbuf->height) -+ return; -+ grub_memmove(&bltbuf->pixbuf[pos->x + pos->y * bltbuf->width], pixel, -+ sizeof *pixel); -+} -+ -+static void -+bltbuf_get_pixel(struct bltbuf *bltbuf, position_t *pos, -+ grub_efi_graphics_output_pixel_t *pixel) -+{ -+ if (bltbuf && pos->x < bltbuf->width && pos->y < bltbuf->height) { -+ grub_memmove(pixel, &bltbuf->pixbuf[pos->x + pos->y * bltbuf->width], -+ sizeof *pixel); -+ } else { -+ pixel->bgrr.red = 0x00; -+ pixel->bgrr.green = 0x00; -+ pixel->bgrr.blue = 0x00; -+ } -+} -+ -+static void -+bltbuf_set_pixel_rgb(struct bltbuf *bltbuf, position_t *pos, -+ int red, int green, int blue) -+{ -+ grub_efi_graphics_output_pixel_t pixel; -+ rgb_to_pixel(red, green, blue, &pixel); -+ bltbuf_set_pixel(bltbuf, pos, &pixel); -+} -+ -+static void -+bltbuf_set_pixel_idx(struct eg *eg, struct bltbuf *bltbuf, -+ position_t *pos, int idx) -+{ -+ bltbuf_set_pixel(bltbuf, pos, &eg->palette[idx]); -+} -+ -+static void -+bltbuf_get_pixel_idx(struct bltbuf *bltbuf, position_t *pos, int *idx) -+{ -+ grub_efi_graphics_output_pixel_t pixel; -+ -+ rgb_to_pixel(0, 0, 0, &pixel); -+ bltbuf_get_pixel(bltbuf, pos, &pixel); -+ for (*idx = 0; *idx < 16; (*idx)++) { -+ if (pixel_equal(cga_colors[*idx], pixel)) -+ break; -+ } -+} -+ -+static struct bltbuf * -+xpm_to_bltbuf(struct xpm *xpm) -+{ -+ struct bltbuf *bltbuf = NULL; -+ position_t pos; -+ -+ if (!(bltbuf = alloc_bltbuf(xpm->width, xpm->height))) -+ return NULL; -+ -+ for (pos.y = 0; pos.y < xpm->height; pos.y++) { -+ for (pos.x = 0; pos.x < xpm->width; pos.x++) { -+ xpm_pixel_t xpl; -+ unsigned char idx; -+ -+ idx = xpm_get_pixel_idx(xpm, pos.x, pos.y); -+ xpm_get_idx(xpm, idx, &xpl); -+ -+ bltbuf_set_pixel_rgb(bltbuf, &pos, xpl.red, xpl.green, xpl.blue); -+ } -+ } -+ -+ return bltbuf; -+} -+ -+static void -+cursor(struct graphics_backend *backend, int set) -+{ -+ struct eg *eg; -+ int ch, invert; -+ unsigned short *text; -+ position_t fpos, screensz; -+ int offset; -+ -+ eg = backend->priv; -+ -+ if (set && !graphics_get_scroll()) -+ return; -+ -+ text = graphics_get_text_buf(); -+ graphics_get_font_position(&fpos); -+ graphics_get_screen_rowscols(&screensz); -+ -+ offset = fpos.y * screensz.x + fpos.x; -+ -+ if (set) -+ text[offset] |= 0x0200; -+ -+ graphics_clbl(fpos.x, fpos.y, 1, 1, 1); -+ -+ if (set) -+ text[offset] &= 0xfdff; -+} -+ -+static void blank(struct graphics_backend *backend); -+ -+static void -+reset_screen_geometry(struct graphics_backend *backend) -+{ -+ struct eg *eg = backend->priv; -+ struct xpm *xpm = graphics_get_splash_xpm(); -+ grub_efi_graphics_output_mode_information_t *info; -+ position_t screensz; -+ -+ info = get_graphics_mode_info(eg); -+ -+ if (xpm) { -+ eg->screen_pos.x = -+ (info->horizontal_resolution - xpm->width) / 2; -+ eg->screen_pos.y = -+ (info->vertical_resolution - xpm->height) / 2; -+ } else { -+ eg->screen_pos.x = 0; -+ eg->screen_pos.y = 0; -+ } -+ -+ blank(backend); -+ graphics_get_screen_rowscols(&screensz); -+ graphics_clbl(0, 0, screensz.x, screensz.y, 0); -+ graphics_clbl(0, 0, screensz.x, screensz.y, 1); -+} -+ -+static void -+setxy(struct graphics_backend *backend, position_t *pos) -+{ -+ position_t fpos; -+ -+ fpos.x = pos->x; -+ fpos.y = pos->y; -+ graphics_set_font_position(&fpos); -+} -+ -+static void -+eg_getxy(struct graphics_backend *backend, position_t *pos) -+{ -+ graphics_get_font_position(pos); -+} -+ -+static void -+draw_pixel(struct graphics_backend *backend, position_t *pos, pixel_t *pixel) -+{ -+ struct bltbuf *bltbuf = NULL; -+ grub_efi_graphics_output_pixel_t *eup = (grub_efi_graphics_output_pixel_t *)pixel; -+ -+ bltbuf = alloc_bltbuf(1,1); -+ if (!bltbuf) -+ return; -+ -+ grub_memmove(&bltbuf->pixbuf[0], eup, sizeof (*eup)); -+ -+ blt_to_screen_pos(backend->priv, bltbuf, pos); -+ -+ grub_free(bltbuf); -+} -+ -+static pixel_t * -+get_pixel_idx(struct graphics_backend *backend, int idx) -+{ -+ static grub_efi_graphics_output_pixel_t pixel; -+ struct eg *eg = backend->priv; -+ if (idx < 0 || idx > MAX_PALETTE) -+ return NULL; -+ pixel.bgrr.red = eg->palette[idx].bgrr.red; -+ pixel.bgrr.green = eg->palette[idx].bgrr.green; -+ pixel.bgrr.blue = eg->palette[idx].bgrr.blue; -+ return (pixel_t *)&pixel; -+} -+ -+static pixel_t * -+get_pixel_rgb(struct graphics_backend *backend, int red, int green, int blue) -+{ -+ static grub_efi_graphics_output_pixel_t pixel; -+ rgb_to_pixel(red, green, blue, &pixel); -+ return &pixel; -+} -+ -+static void -+set_palette(struct graphics_backend *backend, int idx, -+ int red, int green, int blue) -+{ -+ grub_efi_graphics_output_pixel_t pixel; -+ struct eg *eg = backend->priv; -+ -+ if (idx > MAX_PALETTE) -+ return; -+ rgb_to_pixel(red, green, blue, &pixel); -+ grub_memmove(&eg->palette[idx], &pixel, sizeof pixel); -+} -+ -+static void -+blank(struct graphics_backend *backend) -+{ -+ struct eg *eg = backend->priv; -+ struct bltbuf *bltbuf; -+ position_t pos = {0, 0}; -+ grub_efi_graphics_output_mode_information_t *info; -+ grub_efi_uintn_t x, y, i, j; -+ unsigned char r = 0 ,g = 0; -+ -+ info = get_graphics_mode_info(eg); -+ x = info->horizontal_resolution; -+ y = info->vertical_resolution; -+ -+ if (x == 0 || y == 0) -+ return; -+ -+ bltbuf = alloc_bltbuf(x, y); -+ for (j = 0; j < y; j++) { -+ if (debug_graphics && j % 16 == 0) { -+ g = g == 0 ? 7 : 0; -+ r = g == 0 ? 7 : 0; -+ } -+ for (i = 0; i < x; i++) { -+ if (debug_graphics && i % 16 == 0) { -+ g = g == 0 ? 7 : 0; -+ r = g == 0 ? 7 : 0; -+ } -+ pos.x = i; -+ pos.y = j; -+ bltbuf_set_pixel_rgb(bltbuf, &pos, r * 16, g * 16, 0x0); -+ } -+ } -+ -+ blt_to_screen(eg, bltbuf); -+ -+ grub_free(bltbuf); -+} -+ -+ -+static void -+draw_white_box(struct graphics_backend *backend) -+{ -+ struct eg *eg = backend->priv; -+ struct bltbuf *bltbuf; -+ position_t pos = {0, 0}, bltpos = {0, 0}, bltsz = {100,100}; -+ -+ bltbuf = alloc_bltbuf(bltsz.x, bltsz.y); -+ for (pos.y = 0; pos.y < bltsz.y; pos.y++) { -+ for (pos.x = 0; pos.x < bltsz.x; pos.x++) { -+ bltbuf_set_pixel_rgb(bltbuf, &pos, 0xff, 0xff, 0xff); -+ } -+ } -+ -+ blt_pos_to_screen_pos(eg, bltbuf, &bltpos, &bltsz, &pos); -+ -+#if 0 -+ Call_Service_10(eg->output_intf->blt, eg->output_intf, bltbuf->pixbuf, -+ GRUB_EFI_BLT_BUFFER_TO_VIDEO, 0, 0, 100, 100, x, y, 0); -+#endif -+ -+ grub_free(bltbuf); -+} -+ -+static void -+bltbuf_cp_bl(struct bltbuf *d, position_t dpos, -+ struct bltbuf *s, position_t spos) -+{ -+ grub_efi_graphics_output_pixel_t *dp, *sp; -+ -+ const int xavail = MAX(0, s ? s->width - spos.x : 0); -+ const int xtotal = MAX(0, d->width - dpos.x); -+ const int xcp = MAX(0, MIN(xtotal, xavail)); -+ const int xcl = MAX(0, xtotal - xcp); -+ -+ const int yavail = MAX(0, s ? s->height - spos.y : 0); -+ const int ytotal = MAX(0, d->height - dpos.y); -+ const int ycp = MAX(0, MIN(ytotal, yavail)); -+ const int ycl = MAX(0, ytotal - ycp); -+ -+ int y, x; -+ -+ for (y = 0; y < ytotal; y++) { -+ dp = &d->pixbuf[(dpos.y + y) * d->width + dpos.x]; -+ -+ if (y < yavail) { -+ sp = &s->pixbuf[(spos.y + y) * s->width + spos.x]; -+ memmove(dp, sp, xcp * sizeof (*dp)); -+ dp = &d->pixbuf[(dpos.y + y) * d->width + dpos.x + xcp]; -+ memset(dp, '\0', xcl * sizeof (*dp)); -+ } else { -+ memset(dp, '\0', xtotal * sizeof (*dp)); -+ } -+ } -+} -+ -+/* copy a region the size of bltbuf from the background into bltbuf, -+ * starting at offset bgpos -+ */ -+static void -+bltbuf_draw_bg(struct graphics_backend *backend, struct bltbuf *bltbuf, -+ position_t bgpos) -+{ -+ struct eg *eg = backend->priv; -+ position_t blpos = { 0, 0 }; -+ -+ bltbuf_cp_bl(bltbuf, blpos, eg->background, bgpos); -+} -+ -+static void -+dbg_dump_palette(struct graphics_backend *backend) -+{ -+ struct eg *eg; -+ int i; -+ if (!backend || !backend->priv) -+ return; -+ eg = backend->priv; -+ if (!eg->palette) -+ return; -+} -+ -+static int -+is_shadow_pixel(position_t screensz, position_t textpos, position_t bitpos, -+ position_t fontsz) -+{ -+ unsigned short *text = graphics_get_text_buf(); -+ const unsigned char *glyph; -+ position_t glyphpos = { textpos.x, textpos.y }; -+ position_t glyphbit = { bitpos.x, bitpos.y }; -+ unsigned short ch; -+ -+ if (glyphbit.x == 0) { -+ glyphbit.x = fontsz.x; -+ glyphpos.x--; -+ } -+ if (glyphbit.y == 0) { -+ glyphbit.y = fontsz.y; -+ glyphpos.y--; -+ } -+ glyphbit.x--; -+ glyphbit.y--; -+ -+ if (glyphpos.x < 0 || glyphpos.y < 0) -+ return 0; -+ -+ ch = text[glyphpos.y * screensz.x + glyphpos.x] & 0xff; -+ glyph = font8x16 + (ch << 4); -+ return glyph[glyphbit.y] & (1 << ((fontsz.x-1) - glyphbit.x)); -+} -+ -+static void -+bltbuf_draw_character(struct graphics_backend *backend, -+ struct bltbuf *bltbuf, /* the bltbuf to draw into */ -+ position_t target, /* the position in the bltbuf to draw to */ -+ position_t fontsz, /* the size of the font, in pixels */ -+ position_t charpos, /* the position of the character in the text -+ screen buffer */ -+ position_t screensz, /* the size of the screen in characters */ -+ unsigned short ch /* the character to draw, plus flags */ -+ ) -+{ -+ struct eg *eg = backend->priv; -+ position_t blpos; -+ position_t glyphpos; -+ -+ blpos.y = target.y; -+ for (glyphpos.y = 0; glyphpos.y < fontsz.y; glyphpos.y++, blpos.y++) { -+ blpos.x = target.x; -+ for (glyphpos.x = 0; glyphpos.x < fontsz.x; glyphpos.x++, blpos.x++) { -+ int invert = (ch & 0x0100) != 0; -+ int set = (ch & 0x0200) != 0; -+ const unsigned char *glyph = font8x16 + ((ch & 0xff) << 4); -+ int bit = glyph[glyphpos.y] & (1 << ((fontsz.x-1) - glyphpos.x)); -+ int idx = -1; -+ -+ if (!set) { -+ if (invert) -+ idx = bit ? 0 : 15; -+ else if (bit) -+ idx = 15; -+ -+ if (idx == -1) { -+ if (is_shadow_pixel(screensz, charpos, glyphpos, fontsz) || -+ !eg->background) -+ idx = invert ? 15 : 0; -+ } -+ } else { -+ idx = bit ? 0 : 15; -+ } -+ -+ if (idx != -1) -+ bltbuf_set_pixel_idx(eg, bltbuf, &blpos, idx); -+ } -+ } -+} -+ -+static void -+bltbuf_draw_text(struct graphics_backend *backend, -+ struct bltbuf *bltbuf, /* the buffer to draw into */ -+ position_t screensz, /* the size of the screen in characters */ -+ position_t fontsz, /* the size of the font in pixels */ -+ position_t txtpos, /* the position of the text on the screen -+ (in characters) */ -+ position_t txtsz /* the size of the block to fill in -+ (in characters) */ -+ ) -+{ -+ struct eg *eg = backend->priv; -+ unsigned short *text = graphics_get_text_buf(); -+ position_t charpos; -+ -+ for (charpos.y = txtpos.y; charpos.y < txtpos.y + txtsz.y; charpos.y++) { -+ for (charpos.x = txtpos.x; charpos.x < txtpos.x + txtsz.x; charpos.x++){ -+ int offset = charpos.y * screensz.x + charpos.x; -+ position_t blpos = { (charpos.x-txtpos.x)*fontsz.x, -+ (charpos.y-txtpos.y)*fontsz.y }; -+ -+ bltbuf_draw_character(backend, bltbuf, blpos, fontsz, charpos, -+ screensz, text[offset]); -+ } -+ } -+} -+ -+static void -+clbl(struct graphics_backend *backend, int col, int row, int width, int height, -+ int draw_text) -+{ -+ struct eg *eg = backend->priv; -+ struct xpm *xpm; -+ -+ struct bltbuf *bltbuf; -+ position_t fontsz, blpos, blsz, screensz; -+ unsigned short *text; -+ -+// blank(backend); -+// -+ xpm = graphics_get_splash_xpm(); -+ if (xpm && !eg->background) -+ eg->background = xpm_to_bltbuf(xpm); -+ -+ graphics_get_screen_rowscols(&screensz); -+ width = MIN(width, screensz.x - col); -+ height = MIN(height, screensz.y - row); -+ graphics_get_font_size(&fontsz); -+ -+ blsz.x = width * fontsz.x; -+ blsz.y = height * fontsz.y; -+ -+ bltbuf = alloc_bltbuf(blsz.x, blsz.y); -+ if (!bltbuf) -+ return; -+ -+ blsz.x = col * fontsz.x; -+ blsz.y = row * fontsz.y; -+ -+ text = graphics_get_text_buf(); -+ bltbuf_draw_bg(backend, bltbuf, blsz); -+ -+ if (draw_text) { -+ blsz.x = width; -+ blsz.y = height; -+ blpos.x = col; -+ blpos.y = row; -+ -+ bltbuf_draw_text(backend, bltbuf, screensz, fontsz, blpos, blsz); -+ } -+ -+ blpos.x = col * fontsz.x; -+ blpos.y = row * fontsz.y; -+ -+ blt_to_screen_pos(eg, bltbuf, &blpos); -+} -+ -+static void -+setup_cga_palette(struct eg *eg) -+{ -+ rgb_to_pixel(0x00,0x00,0x00, &eg->palette[0]); // 0 Black -+ rgb_to_pixel(0x7f,0x00,0x00, &eg->palette[1]); // 1 Dark Red -+ rgb_to_pixel(0x00,0x7f,0x00, &eg->palette[2]); // 2 Dark Green -+ rgb_to_pixel(0x7f,0x7f,0x00, &eg->palette[3]); // 3 Dark Yellow -+ rgb_to_pixel(0x00,0x00,0x7f, &eg->palette[4]); // 4 Dark Blue -+ rgb_to_pixel(0x7f,0x00,0x7f, &eg->palette[5]); // 5 Dark Magenta -+ rgb_to_pixel(0x00,0x7f,0x7f, &eg->palette[6]); // 6 Dark Cyan -+ rgb_to_pixel(0xc0,0xc0,0xc0, &eg->palette[7]); // 7 Light Grey -+ rgb_to_pixel(0x7f,0x7f,0x7f, &eg->palette[8]); // 8 Dark Grey -+ rgb_to_pixel(0xff,0x00,0x00, &eg->palette[9]); // 9 Red -+ rgb_to_pixel(0x00,0xff,0x00, &eg->palette[10]); // 10 Green -+ rgb_to_pixel(0xff,0xff,0x00, &eg->palette[11]); // 11 Yellow -+ rgb_to_pixel(0x00,0x00,0xff, &eg->palette[12]); // 12 Blue -+ rgb_to_pixel(0xff,0x00,0xff, &eg->palette[13]); // 13 Magenta -+ rgb_to_pixel(0x00,0xff,0xff, &eg->palette[14]); // 14 Cyan -+ rgb_to_pixel(0xff,0xff,0xff, &eg->palette[15]); // 15 White -+ rgb_to_pixel(0xff,0xff,0xff, &eg->palette[16]); // 16 Also white ;) -+} -+ -+static grub_efi_status_t -+set_video_mode(struct eg *eg, int mode) -+{ -+ grub_efi_status_t efi_status; -+ efi_status = Call_Service_2(eg->output_intf->set_mode, eg->output_intf, mode); -+ return efi_status; -+} -+ -+static void disable(struct graphics_backend *backend) -+{ -+ struct eg *eg; -+ -+ if (!backend) -+ return; -+ -+ eg = backend->priv; -+ if (!eg || eg->current_mode != GRAPHICS) -+ return; -+ -+#if 0 -+ blank(backend); -+ -+ set_video_mode(eg, eg->text_mode); -+ grub_efi_set_text_mode(1); -+#endif -+ eg->current_mode = TEXT; -+} -+ -+static int -+fill_pixel_info (grub_pixel_info_t *pixel_info, -+ grub_efi_graphics_output_mode_information_t *mode_info) -+{ -+ if (mode_info->pixel_format == GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR) -+ { -+ pixel_info->depth_bits = 32; -+ pixel_info->depth_bytes = 4; -+ pixel_info->red_size = 8; -+ pixel_info->red_pos = 0; -+ pixel_info->green_size = 8; -+ pixel_info->green_pos = 8; -+ pixel_info->blue_size = 8; -+ pixel_info->blue_pos = 16; -+ pixel_info->reserved_size = 8; -+ pixel_info->reserved_pos = 24; -+ pixel_info->line_length = mode_info->pixels_per_scan_line * 4; -+ } -+ else if (mode_info->pixel_format == GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR) -+ { -+ pixel_info->depth_bits = 32; -+ pixel_info->depth_bytes = 4; -+ pixel_info->red_size = 8; -+ pixel_info->red_pos = 16; -+ pixel_info->green_size = 8; -+ pixel_info->green_pos = 8; -+ pixel_info->blue_size = 8; -+ pixel_info->blue_pos = 0; -+ pixel_info->reserved_size = 8; -+ pixel_info->reserved_pos = 24; -+ pixel_info->line_length = mode_info->pixels_per_scan_line * 4; -+ } -+ else if (mode_info->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) -+ { -+ find_bits (mode_info->pixel_information.red_mask, -+ &pixel_info->red_pos, &pixel_info->red_size); -+ find_bits (mode_info->pixel_information.green_mask, -+ &pixel_info->green_pos, &pixel_info->green_size); -+ find_bits (mode_info->pixel_information.blue_mask, -+ &pixel_info->blue_pos, &pixel_info->blue_size); -+ find_bits (mode_info->pixel_information.reserved_mask, -+ &pixel_info->reserved_pos, &pixel_info->reserved_size); -+ pixel_info->depth_bits = pixel_info->red_size + pixel_info->green_size + -+ pixel_info->blue_size + pixel_info->reserved_size; -+ pixel_info->depth_bytes = (pixel_info->depth_bits + 7) / 8; -+ pixel_info->line_length = mode_info->pixels_per_scan_line * -+ pixel_info->depth_bytes; -+ } -+ else -+ return 0; -+ return 1; -+} -+ -+/* 1 = prefer a -+ * 0 = prefer neither -+ * -1 = prefer b -+ */ -+static int -+modecmp_helper(struct eg *eg, struct video_mode *amode, struct video_mode *bmode) -+{ -+ grub_efi_graphics_output_mode_information_t *a = amode->info; -+ grub_efi_graphics_output_mode_information_t *b = bmode->info; -+ -+ if (a != NULL && b == NULL) -+ return 1; -+ if (a == NULL && b == NULL) -+ return 0; -+ if (a == NULL && b != NULL) -+ return -1; -+ -+#if 0 -+ if (amode->number == eg->graphics_mode && bmode->number != eg->graphics_mode) -+ return 1; -+ if (amode->number == eg->graphics_mode && bmode->number == eg->graphics_mode) -+ return 0; -+ if (amode->number != eg->graphics_mode && bmode->number == eg->graphics_mode) -+ return -1; -+#endif -+ -+ -+ /* kernel doesn't deal with blt only modes, so prefer against them. */ -+ if (a->pixel_format != GRUB_EFI_PIXEL_BLT_ONLY && -+ b->pixel_format == GRUB_EFI_PIXEL_BLT_ONLY) -+ return 1; -+ if (b->pixel_format != GRUB_EFI_PIXEL_BLT_ONLY && -+ a->pixel_format == GRUB_EFI_PIXEL_BLT_ONLY) -+ return -1; -+ -+ /* XXX PJFIX there's something wrong with what we're passing to the -+ * kernel for stride in the bgrr/rgbr modes, and I haven't figured out -+ * just what yet, so for now, prefer bitmask modes. -+ */ -+ if (a->pixel_format == GRUB_EFI_PIXEL_BIT_MASK && -+ b->pixel_format != GRUB_EFI_PIXEL_BIT_MASK) -+ return 1; -+ if (a->pixel_format != GRUB_EFI_PIXEL_BIT_MASK && -+ b->pixel_format == GRUB_EFI_PIXEL_BIT_MASK) -+ return -1; -+ -+ if (a->pixel_format == GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR && -+ b->pixel_format != GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR) -+ return 1; -+ if (a->pixel_format != GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR && -+ b->pixel_format == GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR) -+ return -1; -+ -+ if (a->pixel_format == GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR && -+ b->pixel_format != GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR) -+ return 1; -+ if (a->pixel_format != GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR && -+ b->pixel_format == GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR) -+ return -1; -+ -+ if (a->horizontal_resolution > b->horizontal_resolution && -+ a->vertical_resolution > b->vertical_resolution) -+ return 1; -+ if (a->horizontal_resolution < b->horizontal_resolution && -+ a->vertical_resolution < b->vertical_resolution) -+ return -1; -+ return 0; -+} -+ -+static int -+modecmp(struct eg *eg, struct video_mode *amode, struct video_mode *bmode) -+{ -+ int rc; -+#if 0 -+ grub_efi_graphics_output_mode_information_t *a = amode->info; -+ grub_efi_graphics_output_mode_information_t *b = bmode->info; -+#endif -+ rc = modecmp_helper(eg, amode, bmode); -+#if 0 -+ grub_printf("comparing nodes:\n"); -+ print_mode_info(amode); -+ print_mode_info(bmode); -+ if (rc > 0) -+ grub_printf("result: a > b\n"); -+ else if (rc < 0) -+ grub_printf("result: a < b\n"); -+ else -+ grub_printf("result: a == b\n"); -+ -+ //dbgdelay(__FILE__, __LINE__); -+#endif -+ return rc; -+} -+ -+static void -+modeswap(struct video_mode *amode, struct video_mode *bmode) -+{ -+ struct video_mode tmp; -+ -+ memcpy(&tmp, amode, sizeof (tmp)); -+ memcpy(amode, bmode, sizeof (tmp)); -+ memcpy(bmode, &tmp, sizeof(tmp)); -+} -+ -+static void -+sort_modes(struct eg *eg, int p, int r) -+{ -+ struct video_mode **modes = eg->modes; -+ -+ int i, j; -+ for (i = 0; i < eg->max_mode; i++) { -+ for (j = i + 1; j < eg->max_mode; j++) { -+ if (modecmp(eg, modes[j], modes[i]) < 0) -+ modeswap(modes[j], modes[i]); -+ } -+ } -+} -+ -+static int -+try_enable(struct graphics_backend *backend) -+{ -+ struct eg *eg = backend->priv; -+ grub_efi_status_t efi_status = GRUB_EFI_UNSUPPORTED; -+ int i; -+ -+ if (eg->text_mode == 0xffffffff) { -+ grub_efi_set_text_mode(1); -+ eg->text_mode = eg->output_intf->mode->mode; -+ } -+ -+ if (eg->graphics_mode == 0xffffffff) { -+ grub_efi_graphics_output_mode_information_t *info; -+ -+ if (!graphics_alloc_text_buf()) -+ return 0; -+ -+ grub_efi_set_text_mode(0); -+ eg->graphics_mode = eg->output_intf->mode->mode; -+ grub_efi_set_text_mode(1); -+#if 0 -+ dprintf("graphics mode is %d\n", eg->graphics_mode); -+ /* this is okay here because we haven't sorted yet.*/ -+ print_mode_info(eg->modes[eg->graphics_mode]); -+ dprintf("text mode is %d\n", eg->text_mode); -+ print_mode_info(eg->modes[eg->text_mode]); -+#endif -+ -+ sort_modes(eg, 0, eg->max_mode-1); -+ -+#if 0 -+ for (i = eg->max_mode - 1; i >= 0; i--) -+ print_mode_info(eg->modes[i]); -+ dbgdelay(__FILE__, __LINE__); -+#endif -+ -+ efi_status = GRUB_EFI_UNSUPPORTED; -+ -+ for (i = eg->max_mode - 1; i >= 0; i--) { -+ if (!eg->modes[i]) -+ continue; -+ -+ info = eg->modes[i]->info; -+ -+#if 0 -+ if (info->pixel_format != GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR && -+ info->pixel_format != GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR && -+ info->pixel_format != GRUB_EFI_PIXEL_BIT_MASK) { -+ continue; -+ } -+#endif -+ -+ grub_efi_set_text_mode(0); -+ efi_status = set_video_mode(eg, eg->modes[i]->number); -+ if (efi_status == GRUB_EFI_SUCCESS) { -+#if 0 -+ grub_efi_set_text_mode(1); -+ dprintf("switched to mode %d successfully\n", -+ eg->modes[i]->number); -+ dbgdelay(__FILE__,__LINE__); -+ grub_efi_set_text_mode(0); -+#endif -+ eg->graphics_mode = eg->modes[i]->number; -+ fill_pixel_info(&eg->pixel_info, info); -+ break; -+ } else { -+#if 0 -+ set_video_mode(eg, eg->text_mode); -+ grub_efi_set_text_mode(1); -+ dprintf("return code was %d\n", efi_status); -+#endif -+ } -+ } -+ if (efi_status != GRUB_EFI_SUCCESS) { -+#if 1 -+ grub_efi_set_text_mode(1); -+ set_video_mode(eg, eg->text_mode); -+#endif -+ return 0; -+ } -+ -+ } -+ -+ eg->current_mode = GRAPHICS; -+ return 1; -+} -+ -+static int -+enable(struct graphics_backend *backend) -+{ -+ struct eg *eg = backend->priv; -+ int i; -+ -+ if (eg) { -+ if (eg->current_mode == GRAPHICS) { -+ return 1; -+ } -+ } else { -+ grub_efi_status_t efi_status; -+ grub_efi_handle_t *handle, *handles; -+ grub_efi_uintn_t num_handles; -+ grub_efi_pci_io_t *pci_proto; -+ -+ if (!(eg = grub_malloc(sizeof (*eg)))) -+ return 0; -+ -+ grub_memset(eg, '\0', sizeof (*eg)); -+ -+ eg->backend = backend; -+ eg->current_mode = TEXT; -+ -+ handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, -+ &graphics_output_guid, -+ NULL, &num_handles); -+ -+ if (!num_handles || !handles) -+ goto fail; -+ -+ for (handle = handles; num_handles--; handle++) -+ { -+ pci_proto = grub_efi_open_protocol (*handle, &pci_io_guid, -+ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+ -+ if (!pci_proto) -+ continue; -+ -+ eg->output_intf = grub_efi_open_protocol (*handle, -+ &graphics_output_guid, GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+ -+ if (eg->output_intf) -+ { -+ grub_efi_setup_gfx_pci(*handle); -+ break; -+ } -+ } -+ -+ grub_free(handles); -+ -+ if (!eg->output_intf) -+ eg->output_intf = grub_efi_locate_protocol(&graphics_output_guid, NULL); -+ -+ if (!eg->output_intf) -+ goto fail; -+ -+ eg->text_mode = eg->graphics_mode = 0xffffffff; -+ -+ eg->max_mode = eg->output_intf->mode->max_mode; -+ eg->modes = grub_malloc(eg->max_mode * sizeof (void *)); -+ if (!eg->modes) -+ goto fail; -+ memset(eg->modes, '\0', eg->max_mode * sizeof (void *)); -+ -+ for (i = 0; i < eg->max_mode; i++) { -+ eg->modes[i] = grub_malloc(sizeof *(eg->modes[0])); -+ if (!eg->modes[i]) -+ goto fail; -+ memset(eg->modes[i], '\0', sizeof *(eg->modes[0])); -+ eg->modes[i]->number = i; -+ -+ efi_status = Call_Service_4(eg->output_intf->query_mode, -+ eg->output_intf, i, &eg->modes[i]->size, -+ &eg->modes[i]->info); -+ if (efi_status == GRUB_EFI_NOT_STARTED) { -+ /* The firmware didn't turn on GRAPHICS_OUTPUT_PROTOCOL, so -+ * try to do so ourselves. Thanks, Intel. */ -+ set_video_mode(eg, eg->output_intf->mode->mode); -+ efi_status = Call_Service_4(eg->output_intf->query_mode, -+ eg->output_intf, i, &eg->modes[i]->size, -+ &eg->modes[i]->info); -+ } -+ if (efi_status != GRUB_EFI_SUCCESS) { -+ grub_free(eg->modes[i]); -+ eg->modes[i] = NULL; -+ //eg->max_mode = i; -+ break; -+ } -+ } -+ -+ backend->priv = eg; -+ setup_cga_palette(eg); -+ for (i = 0; i < n_cga_colors; i++) { -+ eg->palette[i].bgrr.red = cga_colors[i].bgrr.red; -+ eg->palette[i].bgrr.green = cga_colors[i].bgrr.green; -+ eg->palette[i].bgrr.blue = cga_colors[i].bgrr.blue; -+ } -+ } -+ -+ if (try_enable(backend)) { -+ reset_screen_geometry(backend); -+ return 1; -+ } -+ -+fail: -+ backend->priv = NULL; -+ if (eg->modes) { -+ for (i = 0; i < eg->max_mode; i++) { -+ if (eg->modes[i]) -+ grub_free(eg->modes[i]); -+ } -+ grub_free(eg->modes); -+ } -+ grub_free(eg); -+ return 0; -+} -+ -+struct graphics_backend eg_backend = { -+ .name = "eg", -+ .enable = enable, -+ .disable = disable, -+ .set_kernel_params = set_kernel_params, -+ .clbl = clbl, -+ .set_palette = set_palette, -+ .get_pixel_idx = get_pixel_idx, -+ .get_pixel_rgb = get_pixel_rgb, -+ .draw_pixel = draw_pixel, -+ .reset_screen_geometry = reset_screen_geometry, -+ .get_screen_size = get_screen_size, -+ .getxy = eg_getxy, -+ .setxy = setxy, -+ .gotoxy = NULL, -+ .cursor = cursor, -+}; -+ -+#endif /* SUPPORT_GRAPHICS */ -diff --git a/efi/efimain.c b/efi/efimain.c -new file mode 100644 -index 0000000..e1a1e66 ---- /dev/null -+++ b/efi/efimain.c -@@ -0,0 +1,129 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2007 Intel Corp. -+ * -+ * 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., 51 Franklin Street, Fifth Floor, Boston, -+ * MA 02110-1301, USA. -+ */ -+ -+#include <grub/efi/efi.h> -+#include <grub/efi/api.h> -+#include <grub/efi/misc.h> -+#include <grub/misc.h> -+ -+#include <shared.h> -+#include <efistubs.h> -+ -+#include "pxe.h" -+ -+#define GRUB_SCRATCH_MEM_PAGES (GRUB_SCRATCH_MEM_SIZE >> 12) -+ -+/* Emulation requirements. */ -+void *grub_scratch_mem = NULL; -+ -+#define LOW_STACK_SIZE 0x100000 -+#define LOW_STACK_PAGES (LOW_STACK_SIZE >> 12) -+static void *low_stack, *real_stack; -+ -+extern int grub_test_pxe(grub_efi_loaded_image_t *loaded_image); -+ -+static void -+real_main (void) -+{ -+ grub_efi_loaded_image_t *loaded_image; -+ char *path_name = NULL; -+ -+ loaded_image = grub_efi_get_loaded_image (grub_efi_image_handle); -+ -+ path_name = grub_efi_pxe_get_config_path(loaded_image); -+ -+ if (path_name) { -+ network_ready = 1; -+ -+ grub_set_config_file (path_name); -+ grub_free (path_name); -+ } else { -+ grub_get_drive_partition_from_bdev_handle (loaded_image->device_handle, -+ &boot_drive, -+ &install_partition); -+ path_name = grub_efi_file_path_to_path_name (loaded_image->file_path); -+ -+ if (path_name) -+ { -+ grub_set_config_file (path_name); -+ grub_free (path_name); -+ } -+ -+ grub_load_saved_default (loaded_image->device_handle); -+ } -+ -+ init_bios_info (); -+ while (console_getkey() < 0) -+ grub_efi_stall(1000); -+} -+ -+grub_efi_status_t -+efi_main (grub_efi_handle_t image_handle, grub_efi_system_table_t *sys_tab) -+{ -+ grub_efi_image_handle = image_handle; -+ grub_efi_system_table = sys_tab; -+ grub_efi_init (); -+ -+ grub_scratch_mem = grub_efi_allocate_pages (0, GRUB_SCRATCH_MEM_PAGES); -+ if (! grub_scratch_mem) -+ { -+ grub_printf ("Failed to allocate scratch mem!\n"); -+ return GRUB_EFI_OUT_OF_RESOURCES; -+ } -+ -+ /* If current stack reside in memory region > 2G, switch stack to a -+ memory region < 2G */ -+ if ((unsigned long)&image_handle >= 0x80000000UL) -+ { -+ low_stack = grub_efi_allocate_pages (0, LOW_STACK_PAGES); -+ if (! low_stack) -+ { -+ grub_printf("Failed to allocate low memory stack!\n"); -+ return GRUB_EFI_OUT_OF_RESOURCES; -+ } -+ -+#ifdef __x86_64__ -+ asm volatile ("movq %%rsp, %0\n\tmovq %1, %%rsp\n" -+ : "=&r" (real_stack) : "r" (low_stack+LOW_STACK_SIZE)); -+#else -+ asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n" -+ : "=&r" (real_stack) : "r" (low_stack+LOW_STACK_SIZE)); -+#endif -+ } -+ -+ real_main (); -+ -+ if (real_stack) { -+#ifdef __x86_64__ -+ asm volatile ("movq %0, %%rsp\n" : : "r" (real_stack)); -+#else -+ asm volatile ("movl %0, %%esp\n" : : "r" (real_stack)); -+#endif -+ -+ grub_efi_free_pages ((grub_efi_physical_address_t)(unsigned long) low_stack, -+ LOW_STACK_PAGES); -+ } -+ -+ grub_efi_free_pages ((grub_efi_physical_address_t)(unsigned long)grub_scratch_mem, -+ GRUB_SCRATCH_MEM_PAGES); -+ grub_efi_fini (); -+ -+ return GRUB_EFI_SUCCESS; -+} -diff --git a/efi/efimisc.c b/efi/efimisc.c -new file mode 100644 -index 0000000..480ba25 ---- /dev/null -+++ b/efi/efimisc.c -@@ -0,0 +1,665 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2006 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., 51 Franklin Street, Fifth Floor, Boston, -+ * MA 02110-1301, USA. -+ */ -+ -+#include <config.h> -+#include <grub/efi/efi.h> -+#include <grub/efi/time.h> -+#include <grub/efi/misc.h> -+#include <grub/misc.h> -+ -+#include <shared.h> -+ -+unsigned long install_partition = 0x20000; -+unsigned long boot_drive = 0x80; -+int saved_entryno = 0; -+char version_string[] = VERSION; -+char config_file[128] = "/boot/grub/menu.lst"; -+unsigned short io_map[IO_MAP_SIZE]; -+struct apm_info apm_bios_info; -+/* The key map. */ -+unsigned short bios_key_map[KEY_MAP_SIZE + 1]; -+unsigned short ascii_key_map[KEY_MAP_SIZE + 1]; -+ -+void -+grub_efi_init (void) -+{ -+ /* First of all, initialize the console so that GRUB can display -+ messages. */ -+ grub_console_init (); -+ /* Initialize the memory management system. */ -+ grub_efi_mm_init (); -+ grub_efidisk_init (); -+} -+ -+void -+grub_efi_fini (void) -+{ -+ grub_efidisk_fini (); -+ grub_efi_mm_fini (); -+ grub_console_fini (); -+} -+ -+void * -+grub_malloc (grub_size_t size) -+{ -+ return grub_efi_allocate_pool (size); -+} -+ -+void -+grub_free (void *p) -+{ -+ grub_efi_free_pool (p); -+} -+ -+char * -+grub_stpcpy (char *dest, const char *src) -+{ -+ char *d = dest; -+ const char *s = src; -+ -+ do -+ *d++ = *s; -+ while (*s++ != '\0'); -+ -+ return d - 1; -+} -+ -+void -+grub_fatal (const char *fmt, ...) -+{ -+ va_list ap; -+ -+ va_start (ap, fmt); -+ grub_vsprintf (NULL, fmt, ap); -+ va_end (ap); -+ -+ grub_exit (); -+} -+ -+void -+grub_real_dprintf (const char *file, const int line, const char *condition, -+ const char *fmt, ...) -+{ -+ va_list args; -+ -+ if (! debug) -+ return; -+ -+ grub_printf ("%s:%d: ", file, line); -+ va_start (args, fmt); -+ grub_vsprintf (0, fmt, args); -+ va_end (args); -+} -+ -+grub_size_t -+grub_utf8_char_len(grub_uint8_t ch) -+{ -+ return ((0xe5000000 >> ((ch >> 3) & 0x1e)) & 3) + 1; -+} -+ -+#define UTF8_SHIFT_AND_MASK(unicode, byte) (unicode)<<=6; (unicode) |= (0x3f & (byte)) -+ -+/* convert utf8 to utf32 */ -+grub_uint32_t -+grub_utf8_to_utf32(const grub_uint8_t *src, grub_size_t length) -+{ -+ grub_uint32_t unicode; -+ -+ switch (length) -+ { -+ case 1: -+ return src[0]; -+ case 2: -+ unicode = src[0] & 0x1f; -+ UTF8_SHIFT_AND_MASK(unicode, src[1]); -+ return unicode; -+ case 3: -+ unicode = src[0] & 0x0f; -+ UTF8_SHIFT_AND_MASK(unicode, src[1]); -+ UTF8_SHIFT_AND_MASK(unicode, src[2]); -+ return unicode; -+ case 4: -+ unicode = src[0] & 0x07; -+ UTF8_SHIFT_AND_MASK(unicode, src[1]); -+ UTF8_SHIFT_AND_MASK(unicode, src[2]); -+ UTF8_SHIFT_AND_MASK(unicode, src[3]); -+ return unicode; -+ default: -+ return 0xffff; -+ } -+} -+ -+/* convert utf8 to utf16 */ -+void -+grub_utf8_to_utf16(const grub_uint8_t *src, grub_size_t srclen, -+ grub_uint16_t *dst, grub_size_t dstlen) -+{ -+ const grub_uint8_t *end = src + srclen; -+ grub_efi_char16_t *dstend = dst + dstlen; -+ -+ while (src < end && dst < dstend) -+ { -+ grub_size_t len = grub_utf8_char_len(*src); -+ /* get the utf32 codepoint */ -+ grub_uint32_t codepoint = grub_utf8_to_utf32(src, len); -+ -+ /* convert that codepoint to utf16 codepoints */ -+ if (codepoint <= 0xffff) -+ { -+ /* it's a single utf16 character */ -+ *dst++ = (grub_efi_char16_t) codepoint; -+ } -+ else -+ { -+ /* it's multiple utf16 characters, with surrogate pairs */ -+ codepoint = codepoint - 0x10000; -+ *dst++ = (grub_efi_char16_t) ((codepoint >> 10) + 0xd800); -+ *dst++ = (grub_efi_char16_t) ((codepoint & 0x3ff) + 0xdc00); -+ } -+ -+ src += len; -+ } -+ -+ if (dst < dstend) -+ *dst = 0; -+} -+ -+/* Convert UTF-16 to UTF-8. */ -+grub_uint8_t * -+grub_utf16_to_utf8 (grub_uint8_t *dest, grub_uint16_t *src, -+ grub_size_t size) -+{ -+ grub_uint32_t code_high = 0; -+ -+ while (size--) -+ { -+ grub_uint32_t code = *src++; -+ -+ if (code_high) -+ { -+ if (code >= 0xDC00 && code <= 0xDFFF) -+ { -+ /* Surrogate pair. */ -+ code = ((code_high - 0xD800) << 12) + (code - 0xDC00) + 0x10000; -+ -+ *dest++ = (code >> 18) | 0xF0; -+ *dest++ = ((code >> 12) & 0x3F) | 0x80; -+ *dest++ = ((code >> 6) & 0x3F) | 0x80; -+ *dest++ = (code & 0x3F) | 0x80; -+ } -+ else -+ { -+ /* Error... */ -+ *dest++ = '?'; -+ } -+ -+ code_high = 0; -+ } -+ else -+ { -+ if (code <= 0x007F) -+ *dest++ = code; -+ else if (code <= 0x07FF) -+ { -+ *dest++ = (code >> 6) | 0xC0; -+ *dest++ = (code & 0x3F) | 0x80; -+ } -+ else if (code >= 0xD800 && code <= 0xDBFF) -+ { -+ code_high = code; -+ continue; -+ } -+ else if (code >= 0xDC00 && code <= 0xDFFF) -+ { -+ /* Error... */ -+ *dest++ = '?'; -+ } -+ else -+ { -+ *dest++ = (code >> 16) | 0xE0; -+ *dest++ = ((code >> 12) & 0x3F) | 0x80; -+ *dest++ = (code & 0x3F) | 0x80; -+ } -+ } -+ } -+ -+ return dest; -+} -+ -+/* low-level timing info */ -+int -+getrtsecs (void) -+{ -+ return grub_get_rtc() / GRUB_TICKS_PER_SECOND; -+} -+ -+void -+grub_reboot (void) -+{ -+ grub_efi_runtime_services_t *r; -+ -+ r = grub_efi_system_table->runtime_services; -+ Call_Service_4 (r->reset_system, GRUB_EFI_RESET_COLD, -+ GRUB_EFI_SUCCESS, 0, NULL); -+ for (;;); -+} -+ -+void -+grub_halt (int no_apm) -+{ -+ grub_efi_runtime_services_t *r; -+ -+ r = grub_efi_system_table->runtime_services; -+ Call_Service_4 (r->reset_system, GRUB_EFI_RESET_SHUTDOWN, -+ GRUB_EFI_SUCCESS, 0, NULL); -+ for (;;); -+} -+ -+void -+stop (void) -+{ -+ grub_exit (); -+} -+ -+/* booting a multiboot executable */ -+void -+multi_boot (int start, int mb_info) -+{ -+ stop (); -+} -+ -+/* sets it to linear or wired A20 operation */ -+void -+gateA20 (int linear) -+{ -+} -+ -+/* Set up the int15 handler. */ -+void -+set_int15_handler (void) -+{ -+} -+ -+/* Restore the original int15 handler. */ -+void -+unset_int15_handler (void) -+{ -+} -+ -+/* Copy MAP to the drive map and set up the int13 handler. */ -+void -+set_int13_handler (unsigned short *map) -+{ -+} -+ -+/* Get the ROM configuration table. */ -+unsigned long -+get_rom_config_table (void) -+{ -+ return 0; -+} -+ -+/* Get APM BIOS information. */ -+void -+get_apm_info (void) -+{ -+ /* Nothing to do in the simulator. */ -+} -+ -+void -+stop_floppy (void) -+{ -+ /* NOTUSED */ -+} -+ -+char * -+grub_strndup (const char *s, int n) -+{ -+ int l = grub_strnlen(s, n); -+ char *new = grub_malloc(l + 1); -+ -+ if (new == NULL) -+ return NULL; -+ -+ new[l] = '\0'; -+ return grub_strncpy(new, s, l); -+} -+ -+int -+safe_parse_maxulong (char **str_ptr, unsigned long *myulong_ptr) -+{ -+ char *ptr = *str_ptr; -+ unsigned long myulong = 0; -+ unsigned int mult = 10, found = 0; -+ -+ /* -+ * Is this a hex number? -+ */ -+ if (*ptr == '0' && tolower (*(ptr + 1)) == 'x') -+ { -+ ptr += 2; -+ mult = 16; -+ } -+ -+ while (1) -+ { -+ /* A bit tricky. This below makes use of the equivalence: -+ (A >= B && A <= C) <=> ((A - B) <= (C - B)) -+ when C > B and A is unsigned. */ -+ unsigned int digit; -+ -+ digit = tolower (*ptr) - '0'; -+ if (digit > 9) -+ { -+ digit -= 'a' - '0'; -+ if (mult == 10 || digit > 5) -+ break; -+ digit += 10; -+ } -+ -+ found = 1; -+ if (myulong > ((~0UL - digit) / mult)) -+ { -+ errnum = ERR_NUMBER_OVERFLOW; -+ return 0; -+ } -+ myulong = (myulong * mult) + digit; -+ ptr++; -+ } -+ -+ if (!found) -+ { -+ errnum = ERR_NUMBER_PARSING; -+ return 0; -+ } -+ -+ *str_ptr = ptr; -+ *myulong_ptr = myulong; -+ -+ return 1; -+} -+ -+int -+currticks (void) -+{ -+ return grub_get_rtc (); -+} -+ -+static char * -+fix_path_name (char *path_name) -+{ -+ char *p1, *p2; -+ -+ p1 = path_name; -+ p2 = p1 + 1; -+ if (*p1 == '\') -+ *p1 = '/'; -+ while (*p1) -+ { -+ switch (*p2) -+ { -+ case '\0': -+ *++p1 = *p2; -+ break; -+ case '.': -+ if (*p1 == '/' && *(p2+1) == '\') -+ p2 += 2; -+ else -+ *++p1=*p2++; -+ break; -+ case '\': -+ if (*p1 == '/') -+ p2++; -+ else -+ *++p1 = '/'; -+ break; -+ default: -+ *++p1=*p2++; -+ break; -+ } -+ } -+ return path_name; -+} -+ -+char * -+grub_efi_file_path_to_path_name (grub_efi_device_path_t *file_path) -+{ -+ char *str; -+ grub_efi_uint32_t str_len = 16; -+ grub_efi_uint32_t str_pos = 0; -+ -+ str = grub_malloc (str_len); -+ if (! str) -+ return NULL; -+ str[0] = '\0'; -+ -+ while (1) -+ { -+ grub_efi_uint8_t type = GRUB_EFI_DEVICE_PATH_TYPE (file_path); -+ grub_efi_uint8_t subtype = GRUB_EFI_DEVICE_PATH_SUBTYPE (file_path); -+ grub_efi_uint16_t len = GRUB_EFI_DEVICE_PATH_LENGTH (file_path); -+ -+ switch (type) -+ { -+ case GRUB_EFI_MEDIA_DEVICE_PATH_TYPE: -+ switch (subtype) -+ { -+ case GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE: -+ { -+ grub_efi_file_path_device_path_t *fp; -+ grub_uint8_t buf[(len - 4) * 2 + 2]; -+ grub_uint32_t path_name_len; -+ char *tmp_str; -+ -+ fp = (grub_efi_file_path_device_path_t *) file_path; -+ *grub_utf16_to_utf8 (buf, fp->path_name, -+ (len - 4) / sizeof (grub_efi_char16_t)) -+ = '\0'; -+ path_name_len = strlen ((char *)buf) + 1; -+ if ((str_len - str_pos) <= path_name_len) -+ { -+ do -+ str_len *= 2; -+ while ((str_len - str_pos) <= path_name_len); -+ tmp_str = grub_malloc (str_len); -+ if (tmp_str == NULL) -+ goto fail; -+ grub_memmove (tmp_str, str, str_pos); -+ grub_free (str); -+ str = tmp_str; -+ } -+ str[str_pos] = '\'; -+ strcpy (str + str_pos + 1, (char *)buf); -+ str_pos += path_name_len; -+ } -+ break; -+ default: -+ break; -+ } -+ break; -+ default: -+ break; -+ } -+ -+ if (GRUB_EFI_END_ENTIRE_DEVICE_PATH (file_path)) -+ break; -+ -+ file_path = (grub_efi_device_path_t *) ((char *) file_path + len); -+ } -+ return fix_path_name (str); -+ -+ fail: -+ grub_free (str); -+ return NULL; -+} -+ -+#define DEFAULT_SAVED_DEFAULT_FILE_NAME "grub.default" -+#define DEFAULT_CONFIG_FILE_NAME "grub.conf" -+ -+static char saved_default_file[128] = "/boot/grub/grub.default"; -+ -+void -+grub_set_config_file (char *path_name) -+{ -+ char *dir_end; -+ grub_uint32_t path_name_len; -+ -+ path_name_len = strlen (path_name); -+ if (path_name_len > 4 -+ && path_name[path_name_len - 4] == '.' -+ && grub_tolower (path_name[path_name_len - 3]) == 'e' -+ && grub_tolower (path_name[path_name_len - 2]) == 'f' -+ && grub_tolower (path_name[path_name_len - 1]) == 'i') -+ { -+ /* Bigger than buffer of config_file */ -+ if (path_name_len + 1 > 127) -+ return; -+ grub_memmove (config_file, path_name, path_name_len - 4); -+ grub_strcpy (config_file + path_name_len - 4, ".conf"); -+ /* Bigger than buffer of default file */ -+ if (path_name_len + 4 > 127) -+ return; -+ grub_memmove (saved_default_file, path_name, path_name_len - 4); -+ grub_strcpy (saved_default_file + path_name_len - 4, ".default"); -+ return; -+ } -+ dir_end = grub_strrchr (path_name, '/'); -+ if (! dir_end) -+ { -+ grub_strcpy (config_file, DEFAULT_CONFIG_FILE_NAME); -+ grub_strcpy (saved_default_file, DEFAULT_SAVED_DEFAULT_FILE_NAME); -+ return; -+ } -+ if (strlen(dir_end) == 1) { -+ path_name_len = dir_end + 1 - path_name; -+ if (path_name_len + sizeof (DEFAULT_CONFIG_FILE_NAME) > 128) -+ return; -+ grub_memmove (config_file, path_name, path_name_len); -+ grub_strcpy (config_file + path_name_len, DEFAULT_CONFIG_FILE_NAME); -+ } else { -+ grub_memmove (config_file, path_name, path_name_len+1); -+ } -+ if (path_name_len + sizeof (DEFAULT_SAVED_DEFAULT_FILE_NAME) > 128) -+ return; -+ path_name_len = dir_end + 1 - path_name; -+ grub_memmove (saved_default_file, path_name, path_name_len); -+ grub_strcpy (saved_default_file + path_name_len, -+ DEFAULT_SAVED_DEFAULT_FILE_NAME); -+} -+ -+grub_efi_guid_t simple_file_system_guid = GRUB_EFI_SIMPLE_FILE_SYSTEM_GUID; -+ -+static grub_efi_file_t * -+simple_open_file(grub_efi_handle_t dev_handle, -+ char *file_name, -+ int for_write) -+{ -+ grub_efi_simple_file_system_t *file_system; -+ grub_efi_file_t *root; -+ grub_efi_file_t *file = NULL; -+ grub_efi_status_t status; -+ grub_efi_char16_t *file_name_w = NULL; -+ grub_efi_char16_t *chp_w; -+ grub_efi_uint64_t open_mode; -+ -+ file_system = grub_efi_open_protocol (dev_handle, -+ &simple_file_system_guid, -+ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+ if (! file_system) -+ return NULL; -+ status = Call_Service_2 (file_system->open_volume, file_system, &root); -+ if (status != GRUB_EFI_SUCCESS) -+ return NULL; -+ file_name_w = grub_malloc (2 * strlen(file_name) + 2); -+ if (! file_name_w) -+ goto done; -+ for (chp_w = file_name_w; *file_name; chp_w++, file_name++) -+ if (*file_name == '/') -+ *chp_w = '\'; -+ else -+ *chp_w = *file_name; -+ *chp_w = '\0'; -+ open_mode = for_write ? GRUB_EFI_FILE_MODE_READ | GRUB_EFI_FILE_MODE_WRITE \ -+ | GRUB_EFI_FILE_MODE_CREATE : GRUB_EFI_FILE_MODE_READ; -+ status = Call_Service_5 (root->open, root, &file, file_name_w, -+ open_mode, 0); -+ done: -+ if (file_name_w) -+ grub_free (file_name_w); -+ Call_Service_1 (root->close, root); -+ return file; -+} -+ -+void -+grub_load_saved_default (grub_efi_handle_t dev_handle) -+{ -+ grub_efi_file_t *file; -+ char buf[16]; -+ char *ptr = buf; -+ grub_efi_status_t status; -+ int val; -+ grub_efi_uintn_t buf_size = sizeof(buf); -+ -+ file = simple_open_file (dev_handle, saved_default_file, 0); -+ if (! file) -+ return; -+ status = Call_Service_3 (file->read, file, &buf_size, buf); -+ if (status != GRUB_EFI_SUCCESS) -+ goto done; -+ if (buf_size >= sizeof(buf)) -+ buf_size = sizeof(buf) - 1; -+ buf[buf_size] = '\0'; -+ if (safe_parse_maxint (&ptr, &val)) -+ saved_entryno = val; -+ done: -+ Call_Service_1 (file->close, file); -+} -+ -+int -+grub_save_saved_default (int new_default) -+{ -+ grub_efi_loaded_image_t *loaded_image; -+ grub_efi_file_t *file; -+ char buf[16]; -+ grub_efi_status_t status; -+ grub_efi_uintn_t buf_size; -+ int ret = 0; -+ -+ loaded_image = grub_efi_get_loaded_image (grub_efi_image_handle); -+ file = simple_open_file (loaded_image->device_handle, -+ saved_default_file, 1); -+ if (! file) -+ { -+ errnum = ERR_FILE_NOT_FOUND; -+ return 1; -+ } -+ sprintf (buf, "%d", new_default); -+ buf_size = strlen (buf); -+ status = Call_Service_3 (file->write, file, &buf_size, buf); -+ if (status != GRUB_EFI_SUCCESS) -+ { -+ errnum = ERR_WRITE; -+ ret = 1; -+ goto done; -+ } -+ done: -+ Call_Service_1 (file->close, file); -+ return ret; -+} -diff --git a/efi/efimm.c b/efi/efimm.c -new file mode 100644 -index 0000000..836188d ---- /dev/null -+++ b/efi/efimm.c -@@ -0,0 +1,539 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2006 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., 51 Franklin Street, Fifth Floor, Boston, -+ * MA 02110-1301, USA. -+ */ -+ -+#include <config.h> -+#include <grub/misc.h> -+#include <grub/efi/api.h> -+#include <grub/efi/efi.h> -+#include <grub/efi/misc.h> -+ -+#include <shared.h> -+ -+#define NEXT_MEMORY_DESCRIPTOR(desc, size) \ -+ ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size))) -+ -+#define BYTES_TO_PAGES(bytes) ((bytes) >> 12) -+#define PAGES_TO_BYTES(pages) ((pages) << 12) -+ -+/* Global variables used to store memory map, its size, and the number of -+ * pages allocated for the buffer. */ -+void *mmap_buf; -+grub_efi_uintn_t mmap_size; -+grub_efi_uintn_t mmap_pages; -+ -+/* Maintain the list of allocated pages. */ -+struct allocated_page -+{ -+ grub_efi_physical_address_t addr; -+ grub_efi_uint64_t num_pages; -+}; -+ -+#define ALLOCATED_PAGES_SIZE 0x1000 -+#define MAX_ALLOCATED_PAGES \ -+ (ALLOCATED_PAGES_SIZE / sizeof (struct allocated_page)) -+ -+static struct allocated_page *allocated_pages = 0; -+ -+/* The minimum and maximum heap size for GRUB itself. */ -+#define MIN_HEAP_SIZE 0x100000 -+#define MAX_HEAP_SIZE (16 * 0x100000) -+ -+ -+void * -+grub_efi_allocate_pool (grub_efi_uintn_t size) -+{ -+ grub_efi_status_t status; -+ void *p; -+ grub_efi_boot_services_t *b; -+ -+ b = grub_efi_system_table->boot_services; -+ status = Call_Service_3(b->allocate_pool, GRUB_EFI_LOADER_DATA, size, &p); -+ if (status != GRUB_EFI_SUCCESS) -+ return NULL; -+ -+ return p; -+} -+ -+void -+grub_efi_free_pool (void *buffer) -+{ -+ grub_efi_boot_services_t *b; -+ -+ b = grub_efi_system_table->boot_services; -+ Call_Service_1(b->free_pool, buffer); -+} -+ -+void * -+grub_efi_allocate_anypages(grub_efi_uintn_t pages) -+{ -+ grub_efi_boot_services_t *b; -+ grub_efi_status_t status; -+ grub_efi_physical_address_t address; -+ -+ b = grub_efi_system_table->boot_services; -+ status = Call_Service_4 (b->allocate_pages, -+ GRUB_EFI_ALLOCATE_ANY_PAGES, -+ GRUB_EFI_LOADER_DATA, -+ pages, -+ &address); -+ if (status != GRUB_EFI_SUCCESS) -+ return 0; -+ -+ if (allocated_pages) -+ { -+ unsigned i; -+ -+ for (i = 0; i < MAX_ALLOCATED_PAGES; i++) -+ if (allocated_pages[i].addr == 0) -+ { -+ allocated_pages[i].addr = address; -+ allocated_pages[i].num_pages = pages; -+ break; -+ } -+ -+ if (i == MAX_ALLOCATED_PAGES) -+ { -+ grub_printf ("too many page allocations"); -+ return NULL; -+ } -+ } -+ -+ return (void *) ((grub_addr_t) address); -+ -+} -+ -+/* Allocate pages. Return the pointer to the first of allocated pages. */ -+static void * -+grub_efi_allocate_pages_real (grub_efi_physical_address_t address, -+ grub_efi_uintn_t pages, -+ grub_efi_memory_type_t memtype) -+{ -+ grub_efi_allocate_type_t type; -+ grub_efi_status_t status; -+ grub_efi_boot_services_t *b; -+ -+ /* Limit the memory access to less than 2GB to avoid 64bit -+ * compatible problem of grub */ -+ if (address > 0x7fffffff) -+ return 0; -+ -+ if (address == 0) -+ { -+ type = GRUB_EFI_ALLOCATE_MAX_ADDRESS; -+ address = 0x7fffffff; -+ } -+ else -+ type = GRUB_EFI_ALLOCATE_ADDRESS; -+ -+ b = grub_efi_system_table->boot_services; -+ status = Call_Service_4 (b->allocate_pages, type, -+ memtype, pages, &address); -+ -+ if (status != GRUB_EFI_SUCCESS) -+ { -+ /* EFI_NOT_FOUND means the region was unavailable, which means we can -+ probably just use it. This is only for hacks to start with */ -+ if (memtype == GRUB_EFI_RUNTIME_SERVICES_DATA && -+ status == GRUB_EFI_NOT_FOUND) -+ return (void *) ((grub_addr_t) address); -+ else -+ return 0; -+ } -+ -+ if (address == 0) -+ { -+ /* Uggh, the address 0 was allocated... This is too annoying, -+ so reallocate another one. */ -+ address = 0x7fffffff; -+ status = Call_Service_4 (b->allocate_pages, -+ type, GRUB_EFI_LOADER_DATA, pages, &address); -+ grub_efi_free_pages (0, pages); -+ if (status != GRUB_EFI_SUCCESS) -+ return 0; -+ } -+ -+ /* We don't want to free anything we've allocated for runtime */ -+ if (allocated_pages && memtype != GRUB_EFI_RUNTIME_SERVICES_DATA) -+ { -+ unsigned i; -+ -+ for (i = 0; i < MAX_ALLOCATED_PAGES; i++) -+ if (allocated_pages[i].addr == 0) -+ { -+ allocated_pages[i].addr = address; -+ allocated_pages[i].num_pages = pages; -+ break; -+ } -+ -+ if (i == MAX_ALLOCATED_PAGES) -+ { -+ grub_printf ("too many page allocations"); -+ return NULL; -+ } -+ } -+ -+ return (void *) ((grub_addr_t) address); -+} -+ -+void * -+grub_efi_allocate_pages (grub_efi_physical_address_t address, -+ grub_efi_uintn_t pages) -+ -+{ -+ return grub_efi_allocate_pages_real(address, pages, GRUB_EFI_LOADER_DATA); -+} -+ -+void * -+grub_efi_allocate_runtime_pages (grub_efi_physical_address_t address, -+ grub_efi_uintn_t pages) -+ -+{ -+ return grub_efi_allocate_pages_real(address, pages, -+ GRUB_EFI_RUNTIME_SERVICES_DATA); -+} -+/* Free pages starting from ADDRESS. */ -+void -+grub_efi_free_pages (grub_efi_physical_address_t address, -+ grub_efi_uintn_t pages) -+{ -+ grub_efi_boot_services_t *b; -+ -+ if (allocated_pages -+ && ((grub_efi_physical_address_t) ((grub_addr_t) allocated_pages) -+ != address)) -+ { -+ unsigned i; -+ -+ for (i = 0; i < MAX_ALLOCATED_PAGES; i++) -+ if (allocated_pages[i].addr == address) -+ { -+ allocated_pages[i].addr = 0; -+ break; -+ } -+ } -+ -+ b = grub_efi_system_table->boot_services; -+ Call_Service_2 (b->free_pages ,address, pages); -+} -+ -+/* Get the memory map as defined in the EFI spec. Return 1 if successful, -+ return 0 if partial, or return -1 if an error occurs. -+ -+ This function will allocate memory for (global) mmap_buf if there isn't -+ already a buffer allocated, and will free & reallocate if it needs to -+ be larger. */ -+ -+int -+grub_efi_get_memory_map (grub_efi_uintn_t *map_key, -+ grub_efi_uintn_t *descriptor_size, -+ grub_efi_uint32_t *descriptor_version) -+{ -+ grub_efi_status_t status; -+ grub_efi_boot_services_t *b; -+ grub_efi_uintn_t key; -+ grub_efi_uint32_t version; -+ grub_efi_uintn_t tmp_mmap_size; -+ -+ /* Allow some parameters to be missing. */ -+ if (! map_key) -+ map_key = &key; -+ if (! descriptor_version) -+ descriptor_version = &version; -+ -+ while (1) -+ { -+ b = grub_efi_system_table->boot_services; -+ tmp_mmap_size = PAGES_TO_BYTES(mmap_pages); -+ status = Call_Service_5 (b->get_memory_map, -+ &tmp_mmap_size, mmap_buf, map_key, -+ descriptor_size, descriptor_version); -+ if (status == GRUB_EFI_SUCCESS) -+ { -+ mmap_size = tmp_mmap_size; -+ return 1; -+ } -+ else if (status != GRUB_EFI_BUFFER_TOO_SMALL) -+ return -1; -+ -+ /* we need a larger buffer */ -+ if (mmap_buf) -+ grub_efi_free_pages ((grub_addr_t) mmap_buf, mmap_pages); -+ -+ /* get 1 more page than we need, just in case */ -+ mmap_pages = BYTES_TO_PAGES(tmp_mmap_size + 4095) + 1; -+ mmap_buf = grub_efi_allocate_pages (0, mmap_pages); -+ if (! mmap_buf) -+ { -+ mmap_pages = 0; -+ grub_printf ("cannot allocate memory for memory map"); -+ return -1; -+ } -+ } -+} -+ -+#define MMAR_DESC_LENGTH 20 -+ -+/* -+ * Add a memory region to the kernel e820 map. -+ * -+ * Convert EFI memory map to E820 map for the operating system -+ * This code is based on a Linux kernel patch submitted by Edgar Hucek -+ */ -+static void -+add_memory_region (struct e820_entry *e820_map, -+ int *e820_nr_map, -+ unsigned long long start, -+ unsigned long long size, -+ unsigned int type) -+{ -+ int x = *e820_nr_map; -+ static unsigned long long estart = 0ULL; -+ static unsigned long esize = 0L; -+ static unsigned int etype = -1; -+ static int merge = 0; -+ -+ /* merge adjacent regions of same type */ -+ if ((x > 0) && e820_map[x-1].addr + e820_map[x-1].size == start -+ && e820_map[x-1].type == type) -+ { -+ e820_map[x-1].size += size; -+ estart = e820_map[x-1].addr; -+ esize = e820_map[x-1].size; -+ etype = e820_map[x-1].type; -+ merge++; -+ return; -+ } -+ -+ /* fill up to E820_MAX */ -+ if ( x < E820_MAX ) -+ { -+ e820_map[x].addr = start; -+ e820_map[x].size = size; -+ e820_map[x].type = type; -+ (*e820_nr_map)++; -+ merge=0; -+ return; -+ } -+ -+ /* different type means another region didn't fit */ -+ /* or same type, but there's a hole */ -+ if (etype != type || (estart + esize) != start) -+ { -+ merge = 0; -+ estart = start; -+ esize = size; -+ etype = type; -+ return; -+ } -+ -+ /* same type and no hole, merge it */ -+ estart += esize; -+ esize += size; -+ merge++; -+} -+ -+/* -+ * Make a e820 memory map -+ */ -+void -+e820_map_from_efi_map (struct e820_entry *e820_map, -+ int *e820_nr_map, -+ grub_efi_memory_descriptor_t *memory_map, -+ grub_efi_uintn_t desc_size, -+ grub_efi_uintn_t memory_map_size) -+{ -+ grub_efi_memory_descriptor_t *desc; -+ unsigned long long start = 0; -+ unsigned long long end = 0; -+ unsigned long long size = 0; -+ grub_efi_memory_descriptor_t *memory_map_end; -+ -+ memory_map_end = NEXT_MEMORY_DESCRIPTOR (memory_map, memory_map_size); -+ *e820_nr_map = 0; -+ for (desc = memory_map; -+ desc < memory_map_end; -+ desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) -+ { -+ switch (desc->type) -+ { -+ case GRUB_EFI_ACPI_RECLAIM_MEMORY: -+ add_memory_region (e820_map, e820_nr_map, -+ desc->physical_start, desc->num_pages << 12, -+ E820_ACPI); -+ break; -+ case GRUB_EFI_RUNTIME_SERVICES_CODE: -+ case GRUB_EFI_RUNTIME_SERVICES_DATA: -+ case GRUB_EFI_RESERVED_MEMORY_TYPE: -+ case GRUB_EFI_MEMORY_MAPPED_IO: -+ case GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE: -+ case GRUB_EFI_UNUSABLE_MEMORY: -+ case GRUB_EFI_PAL_CODE: -+ add_memory_region (e820_map, e820_nr_map, -+ desc->physical_start, desc->num_pages << 12, -+ E820_RESERVED); -+ break; -+ case GRUB_EFI_LOADER_CODE: -+ case GRUB_EFI_LOADER_DATA: -+ case GRUB_EFI_BOOT_SERVICES_CODE: -+ case GRUB_EFI_BOOT_SERVICES_DATA: -+ case GRUB_EFI_CONVENTIONAL_MEMORY: -+ start = desc->physical_start; -+ size = desc->num_pages << 12; -+ end = start + size; -+ if (start < 0x100000ULL && end > 0xA0000ULL) -+ { -+ if (start < 0xA0000ULL) -+ add_memory_region (e820_map, e820_nr_map, -+ start, 0xA0000ULL-start, -+ E820_RAM); -+ if (end <= 0x100000ULL) -+ continue; -+ start = 0x100000ULL; -+ size = end - start; -+ } -+ add_memory_region (e820_map, e820_nr_map, -+ start, size, E820_RAM); -+ break; -+ case GRUB_EFI_ACPI_MEMORY_NVS: -+ add_memory_region (e820_map, e820_nr_map, -+ desc->physical_start, desc->num_pages << 12, -+ E820_NVS); -+ break; -+ } -+ } -+} -+ -+static void -+update_e820_map (struct e820_entry *e820_map, -+ int *e820_nr_map) -+{ -+ grub_efi_uintn_t desc_size; -+ -+ if (grub_efi_get_memory_map (0, &desc_size, 0) < 0) -+ { -+ grub_printf ("cannot get memory map"); -+ return; -+ } -+ -+ e820_map_from_efi_map (e820_map, e820_nr_map, -+ mmap_buf, desc_size, mmap_size); -+} -+ -+/* Simulated memory sizes. */ -+#define EXTENDED_MEMSIZE (3 * 1024 * 1024) /* 3MB */ -+#define CONVENTIONAL_MEMSIZE (640 * 1024) /* 640kB */ -+ -+int -+get_code_end (void) -+{ -+ /* Just return a little area for simulation. */ -+ return BOOTSEC_LOCATION + (60 * 1024); -+} -+ -+/* memory probe routines */ -+int -+get_memsize (int type) -+{ -+ if (! type) -+ return CONVENTIONAL_MEMSIZE >> 10; -+ else -+ return EXTENDED_MEMSIZE >> 10; -+} -+ -+/* get_eisamemsize() : return packed EISA memory map, lower 16 bits is -+ * memory between 1M and 16M in 1K parts, upper 16 bits is -+ * memory above 16M in 64K parts. If error, return -1. -+ */ -+int -+get_eisamemsize (void) -+{ -+ return (EXTENDED_MEMSIZE >> 10); -+} -+ -+static int grub_e820_nr_map; -+static struct e820_entry grub_e820_map[E820_MAX]; -+ -+/* Fetch the next entry in the memory map and return the continuation -+ value. DESC is a pointer to the descriptor buffer, and CONT is the -+ previous continuation value (0 to get the first entry in the -+ map). */ -+int -+get_mmap_entry (struct mmar_desc *desc, int cont) -+{ -+ if (cont < 0 || cont >= grub_e820_nr_map) -+ { -+ /* Should not happen. */ -+ desc->desc_len = 0; -+ } -+ else -+ { -+ struct e820_entry *entry; -+ /* Copy the entry. */ -+ desc->desc_len = MMAR_DESC_LENGTH; -+ entry = &grub_e820_map[cont++]; -+ desc->addr = entry->addr; -+ desc->length = entry->size; -+ desc->type = entry->type; -+ -+ /* If the next entry exists, return the index. */ -+ if (cont < grub_e820_nr_map) -+ return cont; -+ } -+ -+ return 0; -+} -+ -+void -+grub_efi_mm_init (void) -+{ -+ /* First of all, allocate pages to maintain allocations. */ -+ allocated_pages -+ = grub_efi_allocate_pages (0, BYTES_TO_PAGES (ALLOCATED_PAGES_SIZE)); -+ if (! allocated_pages) -+ { -+ grub_printf ("cannot allocate memory"); -+ return; -+ } -+ -+ grub_memset (allocated_pages, 0, ALLOCATED_PAGES_SIZE); -+ -+ update_e820_map (grub_e820_map, &grub_e820_nr_map); -+} -+ -+void -+grub_efi_mm_fini (void) -+{ -+ if (allocated_pages) -+ { -+ unsigned i; -+ -+ for (i = 0; i < MAX_ALLOCATED_PAGES; i++) -+ { -+ struct allocated_page *p; -+ -+ p = allocated_pages + i; -+ if (p->addr != 0) -+ grub_efi_free_pages ((grub_addr_t) p->addr, p->num_pages); -+ } -+ -+ grub_efi_free_pages ((grub_addr_t) allocated_pages, -+ BYTES_TO_PAGES (ALLOCATED_PAGES_SIZE)); -+ } -+} -diff --git a/efi/efinic.c b/efi/efinic.c -new file mode 100644 -index 0000000..e69de29 -diff --git a/efi/efiserial.c b/efi/efiserial.c -new file mode 100644 -index 0000000..32898a9 ---- /dev/null -+++ b/efi/efiserial.c -@@ -0,0 +1,265 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2007 Intel Corp. -+ * -+ * 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. -+ */ -+ -+#ifdef SUPPORT_SERIAL -+ -+#include <grub/types.h> -+#include <grub/misc.h> -+#include <grub/efi/api.h> -+#include <grub/efi/efi.h> -+#include <grub/efi/misc.h> -+ -+#include <shared.h> -+#include <serial.h> -+#include <term.h> -+ -+struct grub_efiserial_data -+{ -+ grub_efi_handle_t handle; -+ grub_efi_serial_io_t *serial_io; -+ struct grub_efiserial_data *next; -+}; -+ -+/* GUIDs. */ -+static grub_efi_guid_t serial_io_guid = GRUB_EFI_SERIAL_IO_GUID; -+ -+static grub_efi_serial_io_t *serial_device = NULL; -+ -+static struct grub_efiserial_data * -+make_devices (void) -+{ -+ grub_efi_uintn_t num_handles; -+ grub_efi_handle_t *handles; -+ grub_efi_handle_t *handle; -+ struct grub_efiserial_data *devices = 0; -+ -+ /* Find handles which support the serial io interface. */ -+ handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, &serial_io_guid, -+ 0, &num_handles); -+ if (! handles) -+ return 0; -+ -+ /* Make a linked list of devices. */ -+ for (handle = handles; num_handles--; handle++) -+ { -+ struct grub_efiserial_data *s; -+ grub_efi_serial_io_t *sio; -+ -+ sio = grub_efi_open_protocol (*handle, &serial_io_guid, -+ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+ if (! sio) -+ /* This should not happen... Why? */ -+ continue; -+ -+ s = grub_malloc (sizeof (*s)); -+ if (! s) -+ { -+ /* Uggh. */ -+ grub_free (handles); -+ return 0; -+ } -+ -+ s->handle = *handle; -+ s->serial_io = sio; -+ s->next = devices; -+ devices = s; -+ } -+ -+ grub_free (handles); -+ -+ return devices; -+} -+ -+static void -+free_devices (struct grub_efiserial_data *devices) -+{ -+ struct grub_efiserial_data *p, *q; -+ -+ for (p = devices; p; p = q) -+ { -+ q = p->next; -+ grub_free (p); -+ } -+} -+ -+static struct grub_efiserial_data * -+get_device (struct grub_efiserial_data *devices, int num) -+{ -+ struct grub_efiserial_data *s; -+ -+ for (s = devices; s && num; s = s->next, num--) -+ ; -+ -+ if (num == 0) -+ return s; -+ -+ return 0; -+} -+ -+/* Fetch a key from a serial device. */ -+int -+serial_hw_fetch (void) -+{ -+ grub_efi_status_t status; -+ char buf[1]; -+ grub_efi_uintn_t buf_siz = sizeof (buf); -+ grub_efi_uint32_t control; -+ -+ if (! serial_device) -+ return -1; -+ -+ status = Call_Service_2 (serial_device->get_control_bits, serial_device, &control); -+ if (status != GRUB_EFI_SUCCESS) -+ return -1; -+ if (control & GRUB_EFI_SERIAL_INPUT_BUFFER_EMPTY) -+ return -1; -+ status = Call_Service_3 (serial_device->read, serial_device, &buf_siz, buf); -+ if (status != GRUB_EFI_SUCCESS) -+ return -1; -+ -+ return buf[0]; -+} -+ -+/* Put a character to a serial device. */ -+void -+serial_hw_put (int c) -+{ -+ grub_efi_status_t status; -+ char ch = c; -+ grub_efi_uintn_t buf_size = sizeof (ch); -+ -+ if (! serial_device) -+ return; -+ -+ status = Call_Service_3 (serial_device->write, serial_device, &buf_size, &ch); -+} -+ -+void -+serial_hw_delay (void) -+{ -+} -+ -+/* Get the port number of the unit UNIT, the port number is same as -+ serial port unit number in EFI. */ -+unsigned short -+serial_hw_get_port (int unit) -+{ -+ return unit; -+} -+ -+static inline grub_efi_uint8_t -+efi_data_bits_from_8250_LCR (int word_len) -+{ -+ switch (word_len & 0x3) -+ { -+ case 0: -+ return 5; -+ case 1: -+ return 6; -+ case 2: -+ return 7; -+ case 3: -+ return 8; -+ default: -+ return 0; -+ } -+} -+ -+static inline grub_efi_stop_bits_t -+efi_stop_bits_from_8250_LCR (int stop_bit_len) -+{ -+ switch (stop_bit_len & 0x4) -+ { -+ case 0x0: -+ return GRUB_EFI_ONE_STOP_BIT; -+ case 0x4: -+ return GRUB_EFI_TWO_STOP_BITS; -+ default: -+ return GRUB_EFI_DEFAULT_STOP_BITS; -+ } -+} -+ -+static inline grub_efi_parity_t -+efi_parity_from_8250_LCR (int parity_8250) -+{ -+ if (! (parity_8250 & 0x8)) -+ return GRUB_EFI_NO_PARITY; -+ -+ switch (parity_8250 & 0x30) -+ { -+ case 0x00: -+ return GRUB_EFI_ODD_PARITY; -+ case 0x10: -+ return GRUB_EFI_EVEN_PARITY; -+ case 0x20: -+ return GRUB_EFI_MARK_PARITY; -+ case 0x30: -+ return GRUB_EFI_SPACE_PARITY; -+ default: -+ return GRUB_EFI_DEFAULT_PARITY; -+ } -+} -+ -+/* Initialize a serial device. In EFI, PORT is used to assign -+ serial port unit number. */ -+int -+serial_hw_init (unsigned short port, unsigned int speed, -+ int word_len, int parity, int stop_bit_len) -+{ -+ grub_efi_serial_io_t *sio; -+ struct grub_efiserial_data *devices, *s; -+ grub_efi_parity_t efi_parity; -+ grub_efi_stop_bits_t efi_stop_bits; -+ grub_efi_uint8_t efi_data_bits; -+ grub_efi_status_t status; -+ int i; -+ -+ devices = make_devices (); -+ s = get_device (devices, port); -+ if (!s) -+ return 0; -+ sio = s->serial_io; -+ free_devices (devices); -+ -+ efi_data_bits = efi_data_bits_from_8250_LCR (word_len); -+ efi_parity = efi_parity_from_8250_LCR (parity); -+ efi_stop_bits = efi_stop_bits_from_8250_LCR (stop_bit_len); -+ -+ status = Call_Service_1 (sio->reset, sio); -+ if (status != GRUB_EFI_SUCCESS) -+ return 0; -+ -+ status = Call_Service_7 (sio->set_attributes, sio, speed, 0, 0, -+ efi_parity, efi_data_bits, efi_stop_bits); -+ if (status != GRUB_EFI_SUCCESS) -+ return 0; -+ -+ serial_device = sio; -+ /* Get rid of TERM_NEED_INIT from the serial terminal. */ -+ for (i = 0; term_table[i].name; i++) -+ if (grub_strcmp (term_table[i].name, "serial") == 0) -+ { -+ term_table[i].flags &= ~TERM_NEED_INIT; -+ break; -+ } -+ -+ return 1; -+} -+ -+#endif /* SUPPORT_SERIAL */ -diff --git a/efi/efitftp.c b/efi/efitftp.c -new file mode 100644 -index 0000000..ba6918f ---- /dev/null -+++ b/efi/efitftp.c -@@ -0,0 +1,228 @@ -+#include <grub/efi/efi.h> -+#include <grub/efi/api.h> -+#include <grub/efi/misc.h> -+#include <grub/misc.h> -+ -+#include <shared.h> -+#include <filesys.h> -+#include "pxe.h" -+ -+struct tftp_info tftp_info = { -+ .LoadedImage = NULL, -+ .Pxe = NULL, -+ .ServerIp = NULL, -+ .BasePath = NULL -+}; -+ -+/* -+ * CLIENT MAC ADDR: 00 15 17 4C E6 74 -+ * CLIENT IP: 10.16.52.158 MASK: 255.255.255.0 DHCP IP: 10.16.52.16 -+ * GATEWAY IP: 10.16.52.254 -+ * -+ * TSize.Running LoadFile() -+ * -+ * TFTP.status: 5 -+ * got to grub_efi_pxe_get_config_path -+ * SiAddr: 10.16.52.16 -+ * BootpHwAddr: 00:15:17:4c:e6:74:00:00:00:00:00:00:00:00:00:00 -+ * BootpSrvName: -+ * BootpBootFile: X86PC/UNDI/pxelinux/bootx64.efi -+ */ -+ -+static grub_efi_status_t tftp_get_file_size_defective_buffer_fallback( -+ char *Filename, -+ grub_efi_uintn_t *Size) -+{ -+ EFI_PXE_BASE_CODE_TFTP_OPCODE OpCode = EFI_PXE_BASE_CODE_TFTP_READ_FILE; -+ char *Buffer = NULL; -+ grub_efi_boolean_t Overwrite = 0; -+ grub_efi_boolean_t DontUseBuffer = 0; -+ grub_efi_uint64_t BufferSize = 4096; -+ grub_efi_uintn_t BlockSize = 512; -+ grub_efi_status_t rc = GRUB_EFI_BUFFER_TOO_SMALL; -+ char *FullPath = NULL; -+ -+ while (rc == GRUB_EFI_BUFFER_TOO_SMALL) { -+ char *NewBuffer; -+ -+ if (Buffer) { -+ grub_free(Buffer); -+ Buffer = NULL; -+ } -+ BufferSize *= 2; -+ NewBuffer = grub_malloc(BufferSize); -+ if (!NewBuffer) -+ return GRUB_EFI_OUT_OF_RESOURCES; -+ Buffer = NewBuffer; -+ -+ if (tftp_info.BasePath) { -+ int PathSize = 0; -+ PathSize = strlen(tftp_info.BasePath) + 2 + -+ strlen(Filename); -+ FullPath = grub_malloc(PathSize); -+ grub_sprintf(FullPath, "%s/%s", tftp_info.BasePath, -+ Filename); -+ } else { -+ FullPath = grub_malloc(strlen(Filename)); -+ strcpy(FullPath, Filename); -+ } -+ -+ rc = Call_Service_10(tftp_info.Pxe->Mtftp, tftp_info.Pxe, -+ OpCode, Buffer, Overwrite, &BufferSize, &BlockSize, -+ tftp_info.ServerIp, FullPath, NULL, DontUseBuffer); -+ if (rc == GRUB_EFI_SUCCESS || rc == GRUB_EFI_BUFFER_TOO_SMALL) -+ *Size = BufferSize; -+ } -+ grub_free(FullPath); -+ grub_free(Buffer); -+ return rc; -+} -+ -+grub_efi_status_t tftp_get_file_size( -+ char *Filename, -+ grub_efi_uintn_t *Size) -+{ -+ EFI_PXE_BASE_CODE_TFTP_OPCODE OpCode = EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE; -+ char Buffer[8192]; -+ grub_efi_boolean_t Overwrite = 0; -+ grub_efi_boolean_t DontUseBuffer = 0; -+ grub_efi_uint64_t BufferSize = 8192; -+ grub_efi_uintn_t BlockSize = 512; -+ grub_efi_status_t rc; -+ char *FullPath = NULL; -+ -+ if (tftp_info.BasePath) { -+ int PathSize = 0; -+ PathSize = strlen(tftp_info.BasePath) + 2 + strlen(Filename); -+ FullPath = grub_malloc(PathSize); -+ grub_sprintf(FullPath, "%s/%s", tftp_info.BasePath, Filename); -+ } else { -+ FullPath = grub_malloc(strlen(Filename)); -+ strcpy(FullPath, Filename); -+ } -+ -+ rc = Call_Service_10(tftp_info.Pxe->Mtftp, tftp_info.Pxe, OpCode, -+ Buffer, Overwrite, &BufferSize, &BlockSize, tftp_info.ServerIp, -+ FullPath, NULL, DontUseBuffer); -+ if (rc == GRUB_EFI_BUFFER_TOO_SMALL) -+ rc = tftp_get_file_size_defective_buffer_fallback(Filename, Size); -+ if (rc == GRUB_EFI_SUCCESS) -+ *Size = BufferSize; -+ grub_free(FullPath); -+ return rc; -+} -+ -+static grub_efi_status_t tftp_read_file( -+ char *Filename, -+ char *Buffer, -+ grub_efi_uint64_t BufferSize) -+{ -+ EFI_PXE_BASE_CODE_TFTP_OPCODE OpCode = EFI_PXE_BASE_CODE_TFTP_READ_FILE; -+ grub_efi_boolean_t Overwrite = 0; -+ grub_efi_boolean_t DontUseBuffer = 0; -+ grub_efi_uintn_t BlockSize = 512; -+ grub_efi_status_t rc; -+ char *FullPath = NULL; -+ -+ if (tftp_info.BasePath) { -+ int PathSize = 0; -+ PathSize = strlen(tftp_info.BasePath) + 2 + strlen(Filename); -+ FullPath = grub_malloc(PathSize); -+ grub_sprintf(FullPath, "%s/%s", tftp_info.BasePath, Filename); -+ } else { -+ FullPath = grub_malloc(strlen(Filename)); -+ strcpy(FullPath, Filename); -+ } -+ -+ rc = Call_Service_10(tftp_info.Pxe->Mtftp, tftp_info.Pxe, OpCode, -+ Buffer, Overwrite, &BufferSize, &BlockSize, tftp_info.ServerIp, -+ FullPath, NULL, DontUseBuffer); -+ grub_free(FullPath); -+ return rc; -+} -+ -+int -+efi_tftp_mount (void) -+{ -+ if (current_drive != NETWORK_DRIVE) { -+ return 0; -+ } -+ return 1; -+} -+ -+int -+efi_tftp_read (char *addr, int size) -+{ -+ int rc; -+ -+ if (tftp_info.LastPath == NULL) { -+ grub_printf(" = 0 (no path known)\n"); -+ return 0; -+ } -+ if (tftp_info.Buffer == NULL) { -+ grub_printf(" = 0 (no file open)\n"); -+ return 0; -+ } -+ if (filemax == -1) { -+ grub_printf(" = 0 (file not found)\n"); -+ return 0; -+ } -+ if (filepos == 0) { -+ rc = tftp_read_file(tftp_info.LastPath, tftp_info.Buffer, -+ filemax); -+ } -+ -+ grub_memmove(addr, tftp_info.Buffer+filepos, size); -+ filepos += size; -+ -+ return size; -+} -+ -+int -+efi_tftp_dir (char *dirname) -+{ -+ int rc; -+ int ch; -+ grub_efi_uintn_t size; -+ int len; -+ char *name; -+ -+ ch = nul_terminate(dirname); -+ len = strlen(dirname); -+ -+ name = grub_malloc(len + 1); -+ grub_memmove(name, dirname, len); -+ name[len] = '\0'; -+ dirname[len] = ch; -+ -+#if 0 -+ if (print_possibilities) -+ return 1; -+#endif -+ -+ filemax = -1; -+ -+ rc = tftp_get_file_size(name, &size); -+ if (rc == GRUB_EFI_SUCCESS) { -+ tftp_info.LastPath = grub_malloc(strlen(name) + 1); -+ sprintf(tftp_info.LastPath, "%s", name); -+ filemax = size; -+ filepos = 0; -+ -+ tftp_info.Buffer = grub_malloc(filemax); -+ -+ return 1; -+ } -+ return 0; -+} -+ -+void -+efi_tftp_close (void) -+{ -+ filepos = 0; -+ filemax = -1; -+ grub_free(tftp_info.LastPath); -+ tftp_info.LastPath = NULL; -+ grub_free(tftp_info.Buffer); -+ tftp_info.Buffer = NULL; -+} -diff --git a/efi/efiuga.c b/efi/efiuga.c -new file mode 100644 -index 0000000..b27500b ---- /dev/null -+++ b/efi/efiuga.c -@@ -0,0 +1,982 @@ -+/* efiuga.c - "univeral graphics adapter" support for GRUB/EFI */ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright 2007 Red Hat, Inc. -+ * Copyright (C) 2007 Intel Corp. -+ * Copyright (C) 2001,2002 Red Hat, Inc. -+ * Portions copyright (C) 2000 Conectiva, 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. -+ */ -+ -+#ifdef SUPPORT_GRAPHICS -+ -+#include <grub/misc.h> -+#include <grub/types.h> -+#include <grub/cpu/linux.h> -+#include <grub/efi/api.h> -+#include <grub/efi/efi.h> -+#include <grub/misc.h> -+ -+#include <term.h> -+#include <shared.h> -+#include <graphics.h> -+ -+#include "graphics.h" -+#include "xpm.h" -+ -+static grub_efi_guid_t draw_guid = GRUB_EFI_UGA_DRAW_GUID; -+static grub_efi_guid_t pci_io_guid = GRUB_EFI_PCI_IO_GUID; -+ -+#if 0 -+#define UGA -+#include "ugadebug.h" -+#endif -+ -+#ifndef MIN -+#define MIN(x,y) ( ((x) < (y)) ? (x) : (y)) -+#endif -+#ifndef MAX -+#define MAX(x,y) ( ((x) < (y)) ? (y) : (x)) -+#endif -+ -+#define pixel_equal(x,y) ((x).red == (y).red && \ -+ (x).green == (y).green && \ -+ (x).blue == (y).blue) -+ -+struct video_mode { -+ grub_efi_uint32_t horizontal_resolution; -+ grub_efi_uint32_t vertical_resolution; -+ grub_efi_uint32_t color_depth; -+ grub_efi_uint32_t refresh_rate; -+}; -+ -+static void -+xpnd_6_to_8(grub_efi_uga_pixel_t *pixel) -+{ -+ if (!((pixel->red | pixel->green | pixel->blue) & 0xc0)) { -+ pixel->red <<= 2; -+ pixel->red |= ((pixel->red & 0xc0) >> 6); -+ pixel->red &= 0xff; -+ pixel->green <<= 2; -+ pixel->green |= ((pixel->green & 0xc0) >> 6); -+ pixel->green &= 0xff; -+ pixel->blue <<= 2; -+ pixel->blue |= ((pixel->blue & 0xc0) >> 6); -+ pixel->blue &= 0xff; -+ } -+} -+ -+ -+ -+#define MAX_PALETTE 16 -+struct uga { -+ grub_efi_uga_draw_t *draw_intf; -+ struct video_mode graphics_mode; -+ struct video_mode text_mode; -+ enum { TEXT, GRAPHICS } current_mode; -+ -+ position_t screen_size; -+ position_t screen_pos; -+ -+ struct bltbuf *background; -+ -+ grub_efi_uga_pixel_t palette[MAX_PALETTE + 1]; -+}; -+ -+#define RGB(r,g,b) { .red = r, .green = g, .blue = b } -+ -+static grub_efi_uga_pixel_t cga_colors[] = { -+ RGB(0x00,0x00,0x00), // 0 Black -+ RGB(0x7f,0x00,0x00), // 1 Dark Red -+ RGB(0x00,0x7f,0x00), // 2 Dark Green -+ RGB(0x7f,0x7f,0x00), // 3 Dark Yellow -+ RGB(0x00,0x00,0x7f), // 4 Dark Blue -+ RGB(0x7f,0x00,0x7f), // 5 Dark Magenta -+ RGB(0x00,0x7f,0x7f), // 6 Dark Cyan -+ RGB(0xc0,0xc0,0xc0), // 7 Light Grey -+ RGB(0x7f,0x7f,0x7f), // 8 Dark Grey -+ RGB(0xff,0x00,0x00), // 9 Red -+ RGB(0x00,0xff,0x00), // 10 Green -+ RGB(0xff,0xff,0x00), // 11 Yellow -+ RGB(0x00,0x00,0xff), // 12 Blue -+ RGB(0xff,0x00,0xff), // 13 Magenta -+ RGB(0x00,0xff,0xff), // 14 Cyan -+ RGB(0xff,0xff,0xff), // 15 White -+ RGB(0xff,0xff,0xff), // 16 Also white ;) -+}; -+ -+static const int n_cga_colors = sizeof (cga_colors) / sizeof (cga_colors[0]); -+ -+static void -+set_kernel_params(struct graphics_backend *backend, -+ struct linux_kernel_params *params) -+{ -+ struct uga *uga; -+ -+ if (!backend || !backend->priv) -+ return; -+ -+ uga = backend->priv; -+ -+ params->lfb_width = uga->graphics_mode.horizontal_resolution; -+ params->lfb_height = uga->graphics_mode.vertical_resolution; -+ params->lfb_depth = 32; -+ params->red_mask_size = 8; -+ params->red_field_pos = 16; -+ params->green_mask_size = 8; -+ params->green_field_pos = 8; -+ params->blue_mask_size = 8; -+ params->blue_field_pos = 0; -+ params->reserved_mask_size = 8; -+ params->reserved_field_pos = 24; -+ params->have_vga = VIDEO_TYPE_EFI; -+} -+ -+static void -+pixel_to_rgb(grub_efi_uga_pixel_t *pixel, int *red, int *green, int *blue) -+{ -+ *red = pixel->red; -+ *green = pixel->green; -+ *blue = pixel->blue; -+} -+ -+static void -+rgb_to_pixel(int red, int green, int blue, grub_efi_uga_pixel_t *pixel) -+{ -+ pixel->red = red; -+ pixel->green = green; -+ pixel->blue = blue; -+} -+ -+static void -+position_to_phys(struct uga *uga, position_t *virt, position_t *phys) -+{ -+ phys->x = virt->x + uga->screen_pos.x; -+ phys->y = virt->y + uga->screen_pos.y; -+} -+ -+static int -+abs_paddr(struct uga *uga, position_t *virt) -+{ -+ position_t phys; -+ position_to_phys(uga, virt, &phys); -+ return phys.x + phys.y * uga->screen_size.x; -+} -+ -+struct bltbuf { -+ grub_efi_uintn_t width; -+ grub_efi_uintn_t height; -+ grub_efi_uga_pixel_t pixbuf[]; -+}; -+ -+static struct bltbuf *alloc_bltbuf(grub_efi_uintn_t width, -+ grub_efi_uintn_t height) -+{ -+ struct bltbuf *buf = NULL; -+ grub_efi_uintn_t pixbuf_size = width * height * -+ sizeof (grub_efi_uga_pixel_t); -+ -+ if (!(buf = grub_malloc(sizeof(buf->width) + sizeof(buf->height) + -+ pixbuf_size))) -+ return NULL; -+ -+ buf->width = width; -+ buf->height = height; -+ grub_memset(buf->pixbuf, '\0', pixbuf_size); -+ return buf; -+} -+ -+static void -+blt_to_screen(struct uga *uga, struct bltbuf *bltbuf) -+{ -+ position_t addr = {0, 0}; -+ -+ position_to_phys(uga, &addr, &addr); -+ -+ Call_Service_10(uga->draw_intf->blt, uga->draw_intf, bltbuf->pixbuf, -+ EfiUgaBltBufferToVideo, -+ 0, 0, -+ addr.x, addr.y, -+ bltbuf->width, bltbuf->height, -+ 0); -+} -+ -+static void -+blt_pos_to_screen_pos(struct uga *uga, struct bltbuf *bltbuf, -+ position_t *bltpos, position_t *bltsz, position_t *pos) -+{ -+ position_t phys; -+ -+ position_to_phys(uga, pos, &phys); -+ -+ Call_Service_10(uga->draw_intf->blt, uga->draw_intf, bltbuf->pixbuf, -+ EfiUgaBltBufferToVideo, -+ bltpos->x, bltpos->y, -+ phys.x, phys.y, -+ bltsz->x, bltsz->y, -+ 0); -+} -+ -+static void -+blt_to_screen_pos(struct uga *uga, struct bltbuf *bltbuf, position_t *pos) -+{ -+ position_t bltpos = {0, 0}; -+ position_t bltsz = { bltbuf->width, bltbuf->height }; -+ blt_pos_to_screen_pos(uga, bltbuf, &bltpos, &bltsz, pos); -+} -+ -+static int -+blt_from_screen_pos(struct uga *uga, struct bltbuf **retbuf, -+ position_t *pos, position_t *size) -+{ -+ struct bltbuf *bltbuf = NULL; -+ position_t phys; -+ -+ if (!retbuf) -+ return 0; -+ -+ if (*retbuf) -+ grub_free(*retbuf); -+ -+ bltbuf = alloc_bltbuf(size->x, size->y); -+ if (!bltbuf) -+ return 0; -+ -+ position_to_phys(uga, pos, &phys); -+ -+ Call_Service_10(uga->draw_intf->blt, uga->draw_intf, bltbuf->pixbuf, -+ EfiUgaVideoToBltBuffer, -+ phys.x, phys.y, -+ 0, 0, -+ size->x, size->y, 0); -+ *retbuf = bltbuf; -+ return 1; -+} -+ -+static int -+save_video_mode(struct uga *uga, struct video_mode *mode) -+{ -+ grub_efi_status_t status; -+ -+ status = Call_Service_5(uga->draw_intf->get_mode, uga->draw_intf, -+ &mode->horizontal_resolution, &mode->vertical_resolution, -+ &mode->color_depth, &mode->refresh_rate); -+ return status == GRUB_EFI_SUCCESS; -+} -+ -+static grub_efi_status_t -+set_video_mode(struct uga *uga, struct video_mode *mode) -+{ -+ grub_efi_status_t status; -+ -+ status = Call_Service_5(uga->draw_intf->set_mode, uga->draw_intf, -+ mode->horizontal_resolution, -+ mode->vertical_resolution, -+ mode->color_depth, -+ mode->refresh_rate); -+ return status; -+} -+ -+static int -+cmp_video_modes(struct video_mode *vm0, struct video_mode *vm1) -+{ -+ if (vm0->horizontal_resolution == vm1->horizontal_resolution && -+ vm0->vertical_resolution == vm1->vertical_resolution) -+ return 0; -+ if (vm0->horizontal_resolution >= vm1->horizontal_resolution && -+ vm0->vertical_resolution >= vm1->vertical_resolution) -+ return 1; -+ return -1; -+} -+ -+static int -+blt_from_screen(struct uga *uga, struct bltbuf **retbuf) -+{ -+ struct bltbuf *bltbuf = NULL; -+ position_t pos = {0 ,0}; -+ position_t size = { -+ .x = uga->graphics_mode.horizontal_resolution, -+ .y = uga->graphics_mode.vertical_resolution -+ }; -+ -+ return blt_from_screen_pos(uga, retbuf, &pos, &size); -+} -+ -+static void -+bltbuf_set_pixel(struct bltbuf *bltbuf, position_t *pos, -+ grub_efi_uga_pixel_t *pixel) -+{ -+ if (pos->x < 0 || pos->x >= bltbuf->width) -+ return; -+ if (pos->x < 0 || pos->y >= bltbuf->height) -+ return; -+ grub_memmove(&bltbuf->pixbuf[pos->x + pos->y * bltbuf->width], pixel, -+ sizeof *pixel); -+} -+ -+static void -+bltbuf_get_pixel(struct bltbuf *bltbuf, position_t *pos, -+ grub_efi_uga_pixel_t *pixel) -+{ -+ if (bltbuf && pos->x < bltbuf->width && pos->y < bltbuf->height) { -+ grub_memmove(pixel, &bltbuf->pixbuf[pos->x + pos->y * bltbuf->width], -+ sizeof *pixel); -+ } else { -+ pixel->red = 0x00; -+ pixel->green = 0x00; -+ pixel->blue = 0x00; -+ } -+} -+ -+static void -+bltbuf_set_pixel_rgb(struct bltbuf *bltbuf, position_t *pos, -+ int red, int green, int blue) -+{ -+ grub_efi_uga_pixel_t pixel; -+ rgb_to_pixel(red, green, blue, &pixel); -+ bltbuf_set_pixel(bltbuf, pos, &pixel); -+} -+ -+static void -+bltbuf_set_pixel_idx(struct uga *uga, struct bltbuf *bltbuf, -+ position_t *pos, int idx) -+{ -+ bltbuf_set_pixel(bltbuf, pos, &uga->palette[idx]); -+} -+ -+static void -+bltbuf_get_pixel_idx(struct bltbuf *bltbuf, position_t *pos, int *idx) -+{ -+ grub_efi_uga_pixel_t pixel; -+ -+ rgb_to_pixel(0, 0, 0, &pixel); -+ bltbuf_get_pixel(bltbuf, pos, &pixel); -+ for (*idx = 0; *idx < 16; (*idx)++) { -+ if (pixel_equal(cga_colors[*idx], pixel)) -+ break; -+ } -+} -+ -+static struct bltbuf * -+xpm_to_bltbuf(struct xpm *xpm) -+{ -+ struct bltbuf *bltbuf = NULL; -+ position_t pos; -+ -+ if (!(bltbuf = alloc_bltbuf(xpm->width, xpm->height))) -+ return NULL; -+ -+ for (pos.y = 0; pos.y < xpm->height; pos.y++) { -+ for (pos.x = 0; pos.x < xpm->width; pos.x++) { -+ xpm_pixel_t xpl; -+ unsigned char idx; -+ -+ idx = xpm_get_pixel_idx(xpm, pos.x, pos.y); -+ xpm_get_idx(xpm, idx, &xpl); -+ -+ bltbuf_set_pixel_rgb(bltbuf, &pos, xpl.red, xpl.green, xpl.blue); -+ } -+ } -+ -+ return bltbuf; -+} -+ -+static void -+cursor(struct graphics_backend *backend, int set) -+{ -+ struct uga *uga; -+ int ch, invert; -+ unsigned short *text; -+ position_t fpos, screensz; -+ int offset; -+ -+ uga = backend->priv; -+ -+ if (set && !graphics_get_scroll()) -+ return; -+ -+ text = graphics_get_text_buf(); -+ graphics_get_font_position(&fpos); -+ graphics_get_screen_rowscols(&screensz); -+ -+ offset = fpos.y * screensz.x + fpos.x; -+ -+ if (set) -+ text[offset] |= 0x200; -+ -+ graphics_clbl(fpos.x, fpos.y, 1, 1, 1); -+ -+ if (set) -+ text[offset] &= 0xfdff; -+} -+ -+static void blank(struct graphics_backend *backend); -+ -+static void -+reset_screen_geometry(struct graphics_backend *backend) -+{ -+ struct uga *uga = backend->priv; -+ struct xpm *xpm = graphics_get_splash_xpm(); -+ position_t screensz = { .x = 640, .y = 480 }; -+ -+ if (xpm) { -+ screensz.x = xpm->width; -+ screensz.y = xpm->height; -+ } -+ -+ uga->screen_pos.x = -+ (uga->graphics_mode.horizontal_resolution - screensz.x) / 2; -+ uga->screen_pos.y = -+ (uga->graphics_mode.vertical_resolution - screensz.y) / 2; -+ -+ blank(backend); -+ graphics_get_screen_rowscols(&screensz); -+ graphics_clbl(0, 0, screensz.x, screensz.y, 0); -+ graphics_clbl(0, 0, screensz.x, screensz.y, 1); -+} -+ -+static void -+get_screen_size(struct graphics_backend *backend, position_t *size) -+{ -+ struct uga *uga = backend->priv; -+ size->x = uga->graphics_mode.horizontal_resolution; -+ size->y = uga->graphics_mode.vertical_resolution; -+} -+ -+static void -+setxy(struct graphics_backend *backend, position_t *pos) -+{ -+ position_t fpos; -+ -+ fpos.x = pos->x; -+ fpos.y = pos->y; -+ graphics_set_font_position(&fpos); -+} -+ -+static void -+uga_getxy(struct graphics_backend *backend, position_t *pos) -+{ -+ graphics_get_font_position(pos); -+} -+ -+static void -+draw_pixel(struct graphics_backend *backend, position_t *pos, pixel_t *pixel) -+{ -+ struct bltbuf *bltbuf = NULL; -+ grub_efi_uga_pixel_t *eup = (grub_efi_uga_pixel_t *)pixel; -+ -+ bltbuf = alloc_bltbuf(1,1); -+ if (!bltbuf) -+ return; -+ -+ grub_memmove(&bltbuf->pixbuf[0], eup, sizeof (*eup)); -+ -+ blt_to_screen_pos(backend->priv, bltbuf, pos); -+ -+ grub_free(bltbuf); -+} -+ -+static pixel_t * -+get_pixel_idx(struct graphics_backend *backend, int idx) -+{ -+ static grub_efi_uga_pixel_t pixel; -+ struct uga *uga = backend->priv; -+ if (idx < 0 || idx > MAX_PALETTE) -+ return NULL; -+ pixel.red = uga->palette[idx].red; -+ pixel.green = uga->palette[idx].green; -+ pixel.blue = uga->palette[idx].blue; -+ return (pixel_t *)&pixel; -+} -+ -+static pixel_t * -+get_pixel_rgb(struct graphics_backend *backend, int red, int green, int blue) -+{ -+ static grub_efi_uga_pixel_t pixel; -+ rgb_to_pixel(red, green, blue, &pixel); -+ return &pixel; -+} -+ -+static void -+set_palette(struct graphics_backend *backend, int idx, -+ int red, int green, int blue) -+{ -+ grub_efi_uga_pixel_t pixel; -+ struct uga *uga = backend->priv; -+ -+ if (idx > MAX_PALETTE) -+ return; -+ rgb_to_pixel(red, green, blue, &pixel); -+ grub_memmove(&uga->palette[idx], &pixel, sizeof pixel); -+} -+ -+static void -+blank(struct graphics_backend *backend) -+{ -+ struct uga *uga = backend->priv; -+ struct bltbuf *bltbuf; -+ position_t pos = {0, 0}; -+ grub_efi_uintn_t x, y, i, j; -+ unsigned char r = 0 ,g = 0; -+ -+ x = uga->graphics_mode.horizontal_resolution; -+ y = uga->graphics_mode.vertical_resolution; -+ -+ if (x == 0 || y == 0) -+ return; -+ -+ bltbuf = alloc_bltbuf(x, y); -+ for (j = 0; j < y; j++) { -+ if (debug_graphics && j % 16 == 0) { -+ g = g == 0 ? 7 : 0; -+ r = g == 0 ? 7 : 0; -+ } -+ for (i = 0; i < x; i++) { -+ if (debug_graphics && i % 16 == 0) { -+ g = g == 0 ? 7 : 0; -+ r = g == 0 ? 7 : 0; -+ } -+ pos.x = i; -+ pos.y = j; -+ bltbuf_set_pixel_rgb(bltbuf, &pos, r * 16, g * 16, 0x0); -+ } -+ } -+ -+ Call_Service_10(uga->draw_intf->blt, uga->draw_intf, bltbuf->pixbuf, -+ EfiUgaBltBufferToVideo, 0, 0, 0, 0, x, y, 0); -+ -+ grub_free(bltbuf); -+} -+ -+static void -+bltbuf_cp_bl(struct bltbuf *d, position_t dpos, -+ struct bltbuf *s, position_t spos) -+{ -+ grub_efi_uga_pixel_t *dp, *sp; -+ -+ const int xavail = MAX(0, s ? s->width - spos.x : 0); -+ const int xtotal = MAX(0, d->width - dpos.x); -+ const int xcp = MAX(0, MIN(xtotal, xavail)); -+ const int xcl = MAX(0, xtotal - xcp); -+ -+ const int yavail = MAX(0, s ? s->height - spos.y : 0); -+ const int ytotal = MAX(0, d->height - dpos.y); -+ const int ycp = MAX(0, MIN(ytotal, yavail)); -+ const int ycl = MAX(0, ytotal - ycp); -+ -+ int y, x; -+ -+ for (y = 0; y < ytotal; y++) { -+ dp = &d->pixbuf[(dpos.y + y) * d->width + dpos.x]; -+ -+ if (y < yavail) { -+ sp = &s->pixbuf[(spos.y + y) * s->width + spos.x]; -+ memmove(dp, sp, xcp * sizeof (*dp)); -+ dp = &d->pixbuf[(dpos.y + y) * d->width + dpos.x + xcp]; -+ memset(dp, '\0', xcl * sizeof (*dp)); -+ } else { -+ memset(dp, '\0', xtotal * sizeof (*dp)); -+ } -+ } -+} -+ -+/* copy a region the size of bltbuf from the background into bltbuf, -+ * starting at offset bgpos -+ */ -+static void -+bltbuf_draw_bg(struct graphics_backend *backend, struct bltbuf *bltbuf, -+ position_t bgpos) -+{ -+ struct uga *uga = backend->priv; -+ position_t blpos = { 0, 0 }; -+ -+ bltbuf_cp_bl(bltbuf, blpos, uga->background, bgpos); -+} -+ -+static void -+dbg_dump_palette(struct graphics_backend *backend) -+{ -+ struct uga *uga; -+ int i; -+ if (!backend || !backend->priv) -+ return; -+ uga = backend->priv; -+ if (!uga->palette) -+ return; -+} -+ -+static int -+is_shadow_pixel(position_t screensz, position_t textpos, position_t bitpos, -+ position_t fontsz) -+{ -+ unsigned short *text = graphics_get_text_buf(); -+ const unsigned char *glyph; -+ position_t glyphpos = { textpos.x, textpos.y }; -+ position_t glyphbit = { bitpos.x, bitpos.y }; -+ unsigned short ch; -+ -+ if (glyphbit.x == 0) { -+ glyphbit.x = fontsz.x; -+ glyphpos.x--; -+ } -+ if (glyphbit.y == 0) { -+ glyphbit.y = fontsz.y; -+ glyphpos.y--; -+ } -+ glyphbit.x--; -+ glyphbit.y--; -+ -+ if (glyphpos.x < 0 || glyphpos.y < 0) -+ return 0; -+ -+ ch = text[glyphpos.y * screensz.x + glyphpos.x] & 0xff; -+ glyph = font8x16 + (ch << 4); -+ return glyph[glyphbit.y] & (1 << ((fontsz.x-1) - glyphbit.x)); -+} -+ -+static void -+bltbuf_draw_character(struct graphics_backend *backend, -+ struct bltbuf *bltbuf, /* the bltbuf to draw into */ -+ position_t target, /* the position in the bltbuf to draw to */ -+ position_t fontsz, /* the size of the font, in pixels */ -+ position_t charpos, /* the position of the character in the text -+ screen buffer */ -+ position_t screensz, /* the size of the screen in characters */ -+ unsigned short ch /* the character to draw, plus flags */ -+ ) -+{ -+ struct uga *uga = backend->priv; -+ position_t blpos; -+ position_t glyphpos; -+ -+ blpos.y = target.y; -+ for (glyphpos.y = 0; glyphpos.y < fontsz.y; glyphpos.y++, blpos.y++) { -+ blpos.x = target.x; -+ for (glyphpos.x = 0; glyphpos.x < fontsz.x; glyphpos.x++, blpos.x++) { -+ int invert = (ch & 0x0100) != 0; -+ int set = (ch & 0x0200) != 0; -+ const unsigned char *glyph = font8x16 + ((ch & 0xff) << 4); -+ int bit = glyph[glyphpos.y] & (1 << ((fontsz.x-1) - glyphpos.x)); -+ int idx = -1; -+ -+ if (!set) { -+ if (invert) -+ idx = bit ? 0 : 15; -+ else if (bit) -+ idx = 15; -+ -+ if (idx == -1) { -+ if (is_shadow_pixel(screensz, charpos, glyphpos, fontsz) || -+ !uga->background) -+ idx = invert ? 15 : 0; -+ } -+ } else { -+ idx = bit ? 0 : 15; -+ } -+ -+ if (idx != -1) -+ bltbuf_set_pixel_idx(uga, bltbuf, &blpos, idx); -+ } -+ } -+} -+ -+static void -+bltbuf_draw_text(struct graphics_backend *backend, -+ struct bltbuf *bltbuf, /* the buffer to draw into */ -+ position_t screensz, /* the size of the screen in characters */ -+ position_t fontsz, /* the size of the font in pixels */ -+ position_t txtpos, /* the position of the text on the screen -+ (in characters) */ -+ position_t txtsz /* the size of the block to fill in -+ (in characters) */ -+ ) -+{ -+ struct uga *uga = backend->priv; -+ unsigned short *text = graphics_get_text_buf(); -+ position_t charpos; -+ -+ for (charpos.y = txtpos.y; charpos.y < txtpos.y + txtsz.y; charpos.y++) { -+ for (charpos.x = txtpos.x; charpos.x < txtpos.x + txtsz.x; charpos.x++){ -+ int offset = charpos.y * screensz.x + charpos.x; -+ position_t blpos = { (charpos.x-txtpos.x)*fontsz.x, -+ (charpos.y-txtpos.y)*fontsz.y }; -+ -+ bltbuf_draw_character(backend, bltbuf, blpos, fontsz, charpos, -+ screensz, text[offset]); -+ } -+ } -+} -+ -+static void -+clbl(struct graphics_backend *backend, int col, int row, int width, int height, -+ int draw_text) -+{ -+ struct uga *uga = backend->priv; -+ struct xpm *xpm; -+ -+ struct bltbuf *bltbuf; -+ position_t fontsz, blpos, blsz, screensz; -+ unsigned short *text; -+ -+// blank(backend); -+// -+ xpm = graphics_get_splash_xpm(); -+ if (xpm && !uga->background) -+ uga->background = xpm_to_bltbuf(xpm); -+ -+ graphics_get_screen_rowscols(&screensz); -+ width = MIN(width, screensz.x - col); -+ height = MIN(height, screensz.y - row); -+ graphics_get_font_size(&fontsz); -+ -+ blsz.x = width * fontsz.x; -+ blsz.y = height * fontsz.y; -+ -+ bltbuf = alloc_bltbuf(blsz.x, blsz.y); -+ if (!bltbuf) -+ return; -+ -+ blsz.x = col * fontsz.x; -+ blsz.y = row * fontsz.y; -+ -+ text = graphics_get_text_buf(); -+ bltbuf_draw_bg(backend, bltbuf, blsz); -+ -+ if (draw_text) { -+ blsz.x = width; -+ blsz.y = height; -+ blpos.x = col; -+ blpos.y = row; -+ -+ bltbuf_draw_text(backend, bltbuf, screensz, fontsz, blpos, blsz); -+ } -+ -+ blpos.x = col * fontsz.x; -+ blpos.y = row * fontsz.y; -+ -+ blt_to_screen_pos(uga, bltbuf, &blpos); -+} -+ -+static void -+setup_cga_palette(void) -+{ -+/* -+ * Nov 27 15:53:19 <pjones> ping? -+ * Nov 27 15:54:13 <ajax> pong? -+ * Nov 27 15:54:16 <pjones> say I've got a color channel in 6 bits, and it's -+ * stored in an 8-bit value. let's call it white. -+ * now let's say I've got hardware with 8 bits per -+ * channel that I'm blitting to. What's the right -+ * way to expand 0x3f to 0xff? -+ * Nov 27 15:55:17 <pjones> (my naive idea, which I haven't tried yet, is -+ * "x <<= 2; if (x) x |= 3;") -+ * Nov 27 15:55:35 <ajax> no. -+ * Nov 27 15:55:43 <pjones> yeah, figured I'd ask instead of doing that. -+ * Nov 27 15:56:15 <ajax> x <<= 2; x |= ((x & 0xc0) >> 6); -+ */ -+ int i; -+ for (i = 0; i < n_cga_colors; i++) { -+ grub_efi_uga_pixel_t *pixel = &cga_colors[i]; -+ -+ if ((pixel->red | pixel->green | pixel->blue) & 0xc0) -+ continue; -+ pixel->red <<= 2; -+ pixel->red |= ((pixel->red & 0xc0) >> 6); -+ pixel->red &= 0xff; -+ pixel->green <<= 2; -+ pixel->green |= ((pixel->green & 0xc0) >> 6); -+ pixel->green &= 0xff; -+ pixel->blue <<= 2; -+ pixel->blue |= ((pixel->blue & 0xc0) >> 6); -+ pixel->blue &= 0xff; -+ } -+} -+ -+static int -+try_enable(struct graphics_backend *backend) -+{ -+ struct uga *uga = backend->priv; -+ struct video_mode modes[] = { -+ { 1440, 900, 32, 60 }, -+ { 640, 480, 32, 60 }, -+ { 800, 600, 32, 60 }, -+ { 640, 480, 16, 60 }, -+ { 800, 600, 16, 60 }, -+ { 640, 480, 8, 60 }, -+ { 800, 600, 8, 60 } -+ }; -+ struct video_mode mode; -+ position_t font_size; -+ int i; -+ -+ if (uga->text_mode.horizontal_resolution == 0) { -+ grub_efi_set_text_mode(1); -+ save_video_mode(uga, &uga->text_mode); -+ } -+ -+ if (uga->graphics_mode.horizontal_resolution == 0) { -+ grub_efi_set_text_mode(0); -+ save_video_mode(uga, &uga->graphics_mode); -+ -+ if (cmp_video_modes(&uga->graphics_mode, &modes[0]) >= 0) { -+ uga->current_mode = GRAPHICS; -+ graphics_alloc_text_buf(); -+ return 1; -+ } -+ for (i = 0; i < sizeof (modes) / sizeof (modes[0]); i++) { -+ set_video_mode(uga, &modes[i]); -+ save_video_mode(uga, &mode); -+ if (!cmp_video_modes(&modes[i], &mode)) { -+ grub_memmove(&uga->graphics_mode, &mode, sizeof (mode)); -+ uga->current_mode = GRAPHICS; -+ graphics_alloc_text_buf(); -+ return 1; -+ } -+ } -+ set_video_mode(uga, &uga->graphics_mode); -+ save_video_mode(uga, &mode); -+ if (!cmp_video_modes(&uga->graphics_mode, &mode)) { -+ uga->current_mode = GRAPHICS; -+ graphics_alloc_text_buf(); -+ return 1; -+ } -+ grub_efi_set_text_mode(1); -+ return 0; -+ } -+ set_video_mode(uga, &uga->graphics_mode); -+ -+ uga->current_mode = GRAPHICS; -+ return 1; -+} -+ -+static int -+enable(struct graphics_backend *backend) -+{ -+ struct uga *uga = backend->priv; -+ grub_efi_handle_t *handle, *handles; -+ grub_efi_uintn_t num_handles; -+ grub_efi_pci_io_t *pci_proto; -+ int i; -+ -+ if (uga) { -+ if (uga->current_mode == GRAPHICS) { -+ return 1; -+ } -+ } else { -+ if (!(uga = grub_malloc(sizeof (*uga)))) { -+ return 0; -+ } -+ grub_memset(uga, '\0', sizeof (*uga)); -+ -+ uga->current_mode = TEXT; -+ -+ handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, -+ &draw_guid, NULL, &num_handles); -+ -+ if (!num_handles || !handles) -+ { -+ grub_free(uga); -+ return 0; -+ } -+ -+ for (handle = handles; num_handles--; handle++) -+ { -+ pci_proto = grub_efi_open_protocol (*handle, &pci_io_guid, -+ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+ -+ if (!pci_proto) -+ continue; -+ -+ uga->draw_intf = grub_efi_open_protocol (*handle, &draw_guid, -+ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+ -+ if (uga->draw_intf) -+ { -+ grub_efi_setup_gfx_pci(*handle); -+ break; -+ } -+ } -+ -+ grub_free(handles); -+ -+ if (!uga->draw_intf) -+ uga->draw_intf = grub_efi_locate_protocol(&draw_guid, NULL); -+ -+ if (!uga->draw_intf) { -+ grub_free(uga); -+ return 0; -+ } -+ grub_memset(&uga->graphics_mode, '\0', sizeof (uga->graphics_mode)); -+ grub_memset(&uga->text_mode, '\0', sizeof (uga->text_mode)); -+ backend->priv = uga; -+ -+ setup_cga_palette(); -+ for (i = 0; i < n_cga_colors; i++) { -+ uga->palette[i].red = cga_colors[i].red; -+ uga->palette[i].green = cga_colors[i].green; -+ uga->palette[i].blue = cga_colors[i].blue; -+ } -+ } -+ -+ if (try_enable(backend)) { -+ reset_screen_geometry(backend); -+ return 1; -+ } -+ -+ backend->priv = NULL; -+ grub_free(uga); -+ return 0; -+} -+ -+static void disable(struct graphics_backend *backend) -+{ -+ struct uga *uga; -+ -+ if (!backend) -+ return; -+ -+ uga = backend->priv; -+ if (!uga || uga->current_mode != GRAPHICS) -+ return; -+ -+#if 0 -+ blank(backend); -+ -+ set_video_mode(uga, &uga->text_mode); -+ grub_efi_set_text_mode(1); -+#endif -+ uga->current_mode = TEXT; -+} -+ -+struct graphics_backend uga_backend = { -+ .name = "uga", -+ .enable = enable, -+ .disable = disable, -+ .set_kernel_params = set_kernel_params, -+ .clbl = clbl, -+ .set_palette = set_palette, -+ .get_pixel_idx = get_pixel_idx, -+ .get_pixel_rgb = get_pixel_rgb, -+ .draw_pixel = draw_pixel, -+ .reset_screen_geometry = reset_screen_geometry, -+ .get_screen_size = get_screen_size, -+ .getxy = uga_getxy, -+ .setxy = setxy, -+ .gotoxy = NULL, -+ .cursor = cursor, -+}; -+ -+#endif /* SUPPORT_GRAPHICS */ -diff --git a/efi/font_8x16.c b/efi/font_8x16.c -new file mode 100644 -index 0000000..94829ec ---- /dev/null -+++ b/efi/font_8x16.c -@@ -0,0 +1,4638 @@ -+/* font_8x16.c - 8x16 font for GRUB/EFI */ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copied from Linux kernel drivers/video/console/font_8x16.c, -+ * which is generated by cpi2fnt. -+ * -+ * 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. -+ */ -+ -+#ifdef SUPPORT_GRAPHICS -+ -+#define FONTDATAMAX 4096 -+ -+const unsigned char font8x16[FONTDATAMAX] = { -+ -+ /* 0 0x00 '^@' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 1 0x01 '^A' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7e, /* 01111110 */ -+ 0x81, /* 10000001 */ -+ 0xa5, /* 10100101 */ -+ 0x81, /* 10000001 */ -+ 0x81, /* 10000001 */ -+ 0xbd, /* 10111101 */ -+ 0x99, /* 10011001 */ -+ 0x81, /* 10000001 */ -+ 0x81, /* 10000001 */ -+ 0x7e, /* 01111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 2 0x02 '^B' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7e, /* 01111110 */ -+ 0xff, /* 11111111 */ -+ 0xdb, /* 11011011 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xc3, /* 11000011 */ -+ 0xe7, /* 11100111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0x7e, /* 01111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 3 0x03 '^C' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x6c, /* 01101100 */ -+ 0xfe, /* 11111110 */ -+ 0xfe, /* 11111110 */ -+ 0xfe, /* 11111110 */ -+ 0xfe, /* 11111110 */ -+ 0x7c, /* 01111100 */ -+ 0x38, /* 00111000 */ -+ 0x10, /* 00010000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 4 0x04 '^D' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x10, /* 00010000 */ -+ 0x38, /* 00111000 */ -+ 0x7c, /* 01111100 */ -+ 0xfe, /* 11111110 */ -+ 0x7c, /* 01111100 */ -+ 0x38, /* 00111000 */ -+ 0x10, /* 00010000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 5 0x05 '^E' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x3c, /* 00111100 */ -+ 0xe7, /* 11100111 */ -+ 0xe7, /* 11100111 */ -+ 0xe7, /* 11100111 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 6 0x06 '^F' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x7e, /* 01111110 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0x7e, /* 01111110 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 7 0x07 '^G' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x3c, /* 00111100 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 8 0x08 '^H' */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xe7, /* 11100111 */ -+ 0xc3, /* 11000011 */ -+ 0xc3, /* 11000011 */ -+ 0xe7, /* 11100111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ -+ /* 9 0x09 '^I' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x3c, /* 00111100 */ -+ 0x66, /* 01100110 */ -+ 0x42, /* 01000010 */ -+ 0x42, /* 01000010 */ -+ 0x66, /* 01100110 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 10 0x0a '^J' */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xc3, /* 11000011 */ -+ 0x99, /* 10011001 */ -+ 0xbd, /* 10111101 */ -+ 0xbd, /* 10111101 */ -+ 0x99, /* 10011001 */ -+ 0xc3, /* 11000011 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ -+ /* 11 0x0b '^K' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x1e, /* 00011110 */ -+ 0x0e, /* 00001110 */ -+ 0x1a, /* 00011010 */ -+ 0x32, /* 00110010 */ -+ 0x78, /* 01111000 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x78, /* 01111000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 12 0x0c '^L' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x3c, /* 00111100 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x3c, /* 00111100 */ -+ 0x18, /* 00011000 */ -+ 0x7e, /* 01111110 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 13 0x0d '^M' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x3f, /* 00111111 */ -+ 0x33, /* 00110011 */ -+ 0x3f, /* 00111111 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x70, /* 01110000 */ -+ 0xf0, /* 11110000 */ -+ 0xe0, /* 11100000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 14 0x0e '^N' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7f, /* 01111111 */ -+ 0x63, /* 01100011 */ -+ 0x7f, /* 01111111 */ -+ 0x63, /* 01100011 */ -+ 0x63, /* 01100011 */ -+ 0x63, /* 01100011 */ -+ 0x63, /* 01100011 */ -+ 0x67, /* 01100111 */ -+ 0xe7, /* 11100111 */ -+ 0xe6, /* 11100110 */ -+ 0xc0, /* 11000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 15 0x0f '^O' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0xdb, /* 11011011 */ -+ 0x3c, /* 00111100 */ -+ 0xe7, /* 11100111 */ -+ 0x3c, /* 00111100 */ -+ 0xdb, /* 11011011 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 16 0x10 '^P' */ -+ 0x00, /* 00000000 */ -+ 0x80, /* 10000000 */ -+ 0xc0, /* 11000000 */ -+ 0xe0, /* 11100000 */ -+ 0xf0, /* 11110000 */ -+ 0xf8, /* 11111000 */ -+ 0xfe, /* 11111110 */ -+ 0xf8, /* 11111000 */ -+ 0xf0, /* 11110000 */ -+ 0xe0, /* 11100000 */ -+ 0xc0, /* 11000000 */ -+ 0x80, /* 10000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 17 0x11 '^Q' */ -+ 0x00, /* 00000000 */ -+ 0x02, /* 00000010 */ -+ 0x06, /* 00000110 */ -+ 0x0e, /* 00001110 */ -+ 0x1e, /* 00011110 */ -+ 0x3e, /* 00111110 */ -+ 0xfe, /* 11111110 */ -+ 0x3e, /* 00111110 */ -+ 0x1e, /* 00011110 */ -+ 0x0e, /* 00001110 */ -+ 0x06, /* 00000110 */ -+ 0x02, /* 00000010 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 18 0x12 '^R' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x7e, /* 01111110 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x7e, /* 01111110 */ -+ 0x3c, /* 00111100 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 19 0x13 '^S' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x00, /* 00000000 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 20 0x14 '^T' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7f, /* 01111111 */ -+ 0xdb, /* 11011011 */ -+ 0xdb, /* 11011011 */ -+ 0xdb, /* 11011011 */ -+ 0x7b, /* 01111011 */ -+ 0x1b, /* 00011011 */ -+ 0x1b, /* 00011011 */ -+ 0x1b, /* 00011011 */ -+ 0x1b, /* 00011011 */ -+ 0x1b, /* 00011011 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 21 0x15 '^U' */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0x60, /* 01100000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x6c, /* 01101100 */ -+ 0x38, /* 00111000 */ -+ 0x0c, /* 00001100 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 22 0x16 '^V' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0xfe, /* 11111110 */ -+ 0xfe, /* 11111110 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 23 0x17 '^W' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x7e, /* 01111110 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x7e, /* 01111110 */ -+ 0x3c, /* 00111100 */ -+ 0x18, /* 00011000 */ -+ 0x7e, /* 01111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 24 0x18 '^X' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x7e, /* 01111110 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 25 0x19 '^Y' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x7e, /* 01111110 */ -+ 0x3c, /* 00111100 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 26 0x1a '^Z' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x0c, /* 00001100 */ -+ 0xfe, /* 11111110 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 27 0x1b '^[' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0xfe, /* 11111110 */ -+ 0x60, /* 01100000 */ -+ 0x30, /* 00110000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 28 0x1c '^' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 29 0x1d '^]' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x28, /* 00101000 */ -+ 0x6c, /* 01101100 */ -+ 0xfe, /* 11111110 */ -+ 0x6c, /* 01101100 */ -+ 0x28, /* 00101000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 30 0x1e '^^' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x10, /* 00010000 */ -+ 0x38, /* 00111000 */ -+ 0x38, /* 00111000 */ -+ 0x7c, /* 01111100 */ -+ 0x7c, /* 01111100 */ -+ 0xfe, /* 11111110 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 31 0x1f '^_' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0xfe, /* 11111110 */ -+ 0x7c, /* 01111100 */ -+ 0x7c, /* 01111100 */ -+ 0x38, /* 00111000 */ -+ 0x38, /* 00111000 */ -+ 0x10, /* 00010000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 32 0x20 ' ' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 33 0x21 '!' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x3c, /* 00111100 */ -+ 0x3c, /* 00111100 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 34 0x22 '"' */ -+ 0x00, /* 00000000 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x24, /* 00100100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 35 0x23 '#' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0xfe, /* 11111110 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0xfe, /* 11111110 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 36 0x24 '$' */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc2, /* 11000010 */ -+ 0xc0, /* 11000000 */ -+ 0x7c, /* 01111100 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x86, /* 10000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 37 0x25 '%' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc2, /* 11000010 */ -+ 0xc6, /* 11000110 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0xc6, /* 11000110 */ -+ 0x86, /* 10000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 38 0x26 '&' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0x38, /* 00111000 */ -+ 0x76, /* 01110110 */ -+ 0xdc, /* 11011100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x76, /* 01110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 39 0x27 ''' */ -+ 0x00, /* 00000000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 40 0x28 '(' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x18, /* 00011000 */ -+ 0x0c, /* 00001100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 41 0x29 ')' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x30, /* 00110000 */ -+ 0x18, /* 00011000 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 42 0x2a '*' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x66, /* 01100110 */ -+ 0x3c, /* 00111100 */ -+ 0xff, /* 11111111 */ -+ 0x3c, /* 00111100 */ -+ 0x66, /* 01100110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 43 0x2b '+' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x7e, /* 01111110 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 44 0x2c ',' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 45 0x2d '-' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 46 0x2e '.' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 47 0x2f '/' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x02, /* 00000010 */ -+ 0x06, /* 00000110 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0xc0, /* 11000000 */ -+ 0x80, /* 10000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 48 0x30 '0' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xd6, /* 11010110 */ -+ 0xd6, /* 11010110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x6c, /* 01101100 */ -+ 0x38, /* 00111000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 49 0x31 '1' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x38, /* 00111000 */ -+ 0x78, /* 01111000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x7e, /* 01111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 50 0x32 '2' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0x06, /* 00000110 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0xc0, /* 11000000 */ -+ 0xc6, /* 11000110 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 51 0x33 '3' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x3c, /* 00111100 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 52 0x34 '4' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x0c, /* 00001100 */ -+ 0x1c, /* 00011100 */ -+ 0x3c, /* 00111100 */ -+ 0x6c, /* 01101100 */ -+ 0xcc, /* 11001100 */ -+ 0xfe, /* 11111110 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x1e, /* 00011110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 53 0x35 '5' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xfc, /* 11111100 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 54 0x36 '6' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x38, /* 00111000 */ -+ 0x60, /* 01100000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xfc, /* 11111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 55 0x37 '7' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0xc6, /* 11000110 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 56 0x38 '8' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 57 0x39 '9' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7e, /* 01111110 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x0c, /* 00001100 */ -+ 0x78, /* 01111000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 58 0x3a ':' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 59 0x3b ';' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 60 0x3c '<' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x06, /* 00000110 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0x30, /* 00110000 */ -+ 0x18, /* 00011000 */ -+ 0x0c, /* 00001100 */ -+ 0x06, /* 00000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 61 0x3d '=' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7e, /* 01111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7e, /* 01111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 62 0x3e '>' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x60, /* 01100000 */ -+ 0x30, /* 00110000 */ -+ 0x18, /* 00011000 */ -+ 0x0c, /* 00001100 */ -+ 0x06, /* 00000110 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 63 0x3f '?' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 64 0x40 '@' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xde, /* 11011110 */ -+ 0xde, /* 11011110 */ -+ 0xde, /* 11011110 */ -+ 0xdc, /* 11011100 */ -+ 0xc0, /* 11000000 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 65 0x41 'A' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x10, /* 00010000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xfe, /* 11111110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 66 0x42 'B' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfc, /* 11111100 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x7c, /* 01111100 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0xfc, /* 11111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 67 0x43 'C' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x3c, /* 00111100 */ -+ 0x66, /* 01100110 */ -+ 0xc2, /* 11000010 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc2, /* 11000010 */ -+ 0x66, /* 01100110 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 68 0x44 'D' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xf8, /* 11111000 */ -+ 0x6c, /* 01101100 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x6c, /* 01101100 */ -+ 0xf8, /* 11111000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 69 0x45 'E' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0x66, /* 01100110 */ -+ 0x62, /* 01100010 */ -+ 0x68, /* 01101000 */ -+ 0x78, /* 01111000 */ -+ 0x68, /* 01101000 */ -+ 0x60, /* 01100000 */ -+ 0x62, /* 01100010 */ -+ 0x66, /* 01100110 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 70 0x46 'F' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0x66, /* 01100110 */ -+ 0x62, /* 01100010 */ -+ 0x68, /* 01101000 */ -+ 0x78, /* 01111000 */ -+ 0x68, /* 01101000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0xf0, /* 11110000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 71 0x47 'G' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x3c, /* 00111100 */ -+ 0x66, /* 01100110 */ -+ 0xc2, /* 11000010 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xde, /* 11011110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x66, /* 01100110 */ -+ 0x3a, /* 00111010 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 72 0x48 'H' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xfe, /* 11111110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 73 0x49 'I' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x3c, /* 00111100 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 74 0x4a 'J' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x1e, /* 00011110 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x78, /* 01111000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 75 0x4b 'K' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xe6, /* 11100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x6c, /* 01101100 */ -+ 0x78, /* 01111000 */ -+ 0x78, /* 01111000 */ -+ 0x6c, /* 01101100 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0xe6, /* 11100110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 76 0x4c 'L' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xf0, /* 11110000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x62, /* 01100010 */ -+ 0x66, /* 01100110 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 77 0x4d 'M' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0xee, /* 11101110 */ -+ 0xfe, /* 11111110 */ -+ 0xfe, /* 11111110 */ -+ 0xd6, /* 11010110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 78 0x4e 'N' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0xe6, /* 11100110 */ -+ 0xf6, /* 11110110 */ -+ 0xfe, /* 11111110 */ -+ 0xde, /* 11011110 */ -+ 0xce, /* 11001110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 79 0x4f 'O' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 80 0x50 'P' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfc, /* 11111100 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x7c, /* 01111100 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0xf0, /* 11110000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 81 0x51 'Q' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xd6, /* 11010110 */ -+ 0xde, /* 11011110 */ -+ 0x7c, /* 01111100 */ -+ 0x0c, /* 00001100 */ -+ 0x0e, /* 00001110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 82 0x52 'R' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfc, /* 11111100 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x7c, /* 01111100 */ -+ 0x6c, /* 01101100 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0xe6, /* 11100110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 83 0x53 'S' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x60, /* 01100000 */ -+ 0x38, /* 00111000 */ -+ 0x0c, /* 00001100 */ -+ 0x06, /* 00000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 84 0x54 'T' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7e, /* 01111110 */ -+ 0x7e, /* 01111110 */ -+ 0x5a, /* 01011010 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 85 0x55 'U' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 86 0x56 'V' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x6c, /* 01101100 */ -+ 0x38, /* 00111000 */ -+ 0x10, /* 00010000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 87 0x57 'W' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xd6, /* 11010110 */ -+ 0xd6, /* 11010110 */ -+ 0xd6, /* 11010110 */ -+ 0xfe, /* 11111110 */ -+ 0xee, /* 11101110 */ -+ 0x6c, /* 01101100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 88 0x58 'X' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x6c, /* 01101100 */ -+ 0x7c, /* 01111100 */ -+ 0x38, /* 00111000 */ -+ 0x38, /* 00111000 */ -+ 0x7c, /* 01111100 */ -+ 0x6c, /* 01101100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 89 0x59 'Y' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x3c, /* 00111100 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 90 0x5a 'Z' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0xc6, /* 11000110 */ -+ 0x86, /* 10000110 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0xc2, /* 11000010 */ -+ 0xc6, /* 11000110 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 91 0x5b '[' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x3c, /* 00111100 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 92 0x5c '' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x80, /* 10000000 */ -+ 0xc0, /* 11000000 */ -+ 0xe0, /* 11100000 */ -+ 0x70, /* 01110000 */ -+ 0x38, /* 00111000 */ -+ 0x1c, /* 00011100 */ -+ 0x0e, /* 00001110 */ -+ 0x06, /* 00000110 */ -+ 0x02, /* 00000010 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 93 0x5d ']' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x3c, /* 00111100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 94 0x5e '^' */ -+ 0x10, /* 00010000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 95 0x5f '_' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xff, /* 11111111 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 96 0x60 '`' */ -+ 0x00, /* 00000000 */ -+ 0x30, /* 00110000 */ -+ 0x18, /* 00011000 */ -+ 0x0c, /* 00001100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 97 0x61 'a' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x78, /* 01111000 */ -+ 0x0c, /* 00001100 */ -+ 0x7c, /* 01111100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x76, /* 01110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 98 0x62 'b' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xe0, /* 11100000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x78, /* 01111000 */ -+ 0x6c, /* 01101100 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 99 0x63 'c' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 100 0x64 'd' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x1c, /* 00011100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x3c, /* 00111100 */ -+ 0x6c, /* 01101100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x76, /* 01110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 101 0x65 'e' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xfe, /* 11111110 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 102 0x66 'f' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x1c, /* 00011100 */ -+ 0x36, /* 00110110 */ -+ 0x32, /* 00110010 */ -+ 0x30, /* 00110000 */ -+ 0x78, /* 01111000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x78, /* 01111000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 103 0x67 'g' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x76, /* 01110110 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x7c, /* 01111100 */ -+ 0x0c, /* 00001100 */ -+ 0xcc, /* 11001100 */ -+ 0x78, /* 01111000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 104 0x68 'h' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xe0, /* 11100000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x6c, /* 01101100 */ -+ 0x76, /* 01110110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0xe6, /* 11100110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 105 0x69 'i' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x38, /* 00111000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 106 0x6a 'j' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x00, /* 00000000 */ -+ 0x0e, /* 00001110 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ -+ /* 107 0x6b 'k' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xe0, /* 11100000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x66, /* 01100110 */ -+ 0x6c, /* 01101100 */ -+ 0x78, /* 01111000 */ -+ 0x78, /* 01111000 */ -+ 0x6c, /* 01101100 */ -+ 0x66, /* 01100110 */ -+ 0xe6, /* 11100110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 108 0x6c 'l' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x38, /* 00111000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 109 0x6d 'm' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xec, /* 11101100 */ -+ 0xfe, /* 11111110 */ -+ 0xd6, /* 11010110 */ -+ 0xd6, /* 11010110 */ -+ 0xd6, /* 11010110 */ -+ 0xd6, /* 11010110 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 110 0x6e 'n' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xdc, /* 11011100 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 111 0x6f 'o' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 112 0x70 'p' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xdc, /* 11011100 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x7c, /* 01111100 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0xf0, /* 11110000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 113 0x71 'q' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x76, /* 01110110 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x7c, /* 01111100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x1e, /* 00011110 */ -+ 0x00, /* 00000000 */ -+ -+ /* 114 0x72 'r' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xdc, /* 11011100 */ -+ 0x76, /* 01110110 */ -+ 0x66, /* 01100110 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0xf0, /* 11110000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 115 0x73 's' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0x60, /* 01100000 */ -+ 0x38, /* 00111000 */ -+ 0x0c, /* 00001100 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 116 0x74 't' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x10, /* 00010000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0xfc, /* 11111100 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x36, /* 00110110 */ -+ 0x1c, /* 00011100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 117 0x75 'u' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x76, /* 01110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 118 0x76 'v' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x6c, /* 01101100 */ -+ 0x38, /* 00111000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 119 0x77 'w' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xd6, /* 11010110 */ -+ 0xd6, /* 11010110 */ -+ 0xd6, /* 11010110 */ -+ 0xfe, /* 11111110 */ -+ 0x6c, /* 01101100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 120 0x78 'x' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0x6c, /* 01101100 */ -+ 0x38, /* 00111000 */ -+ 0x38, /* 00111000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 121 0x79 'y' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7e, /* 01111110 */ -+ 0x06, /* 00000110 */ -+ 0x0c, /* 00001100 */ -+ 0xf8, /* 11111000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 122 0x7a 'z' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0xcc, /* 11001100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0xc6, /* 11000110 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 123 0x7b '{' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x0e, /* 00001110 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x70, /* 01110000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x0e, /* 00001110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 124 0x7c '|' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 125 0x7d '}' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x70, /* 01110000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x0e, /* 00001110 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x70, /* 01110000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 126 0x7e '~' */ -+ 0x00, /* 00000000 */ -+ 0x76, /* 01110110 */ -+ 0xdc, /* 11011100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 127 0x7f '' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x10, /* 00010000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 128 0x80 '' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x3c, /* 00111100 */ -+ 0x66, /* 01100110 */ -+ 0xc2, /* 11000010 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc2, /* 11000010 */ -+ 0x66, /* 01100110 */ -+ 0x3c, /* 00111100 */ -+ 0x18, /* 00011000 */ -+ 0x70, /* 01110000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 129 0x81 '' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xcc, /* 11001100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x76, /* 01110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 130 0x82 '' */ -+ 0x00, /* 00000000 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xfe, /* 11111110 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 131 0x83 '' */ -+ 0x00, /* 00000000 */ -+ 0x10, /* 00010000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0x00, /* 00000000 */ -+ 0x78, /* 01111000 */ -+ 0x0c, /* 00001100 */ -+ 0x7c, /* 01111100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x76, /* 01110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 132 0x84 '' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xcc, /* 11001100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x78, /* 01111000 */ -+ 0x0c, /* 00001100 */ -+ 0x7c, /* 01111100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x76, /* 01110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 133 0x85 ' ' */ -+ 0x00, /* 00000000 */ -+ 0x60, /* 01100000 */ -+ 0x30, /* 00110000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x78, /* 01111000 */ -+ 0x0c, /* 00001100 */ -+ 0x7c, /* 01111100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x76, /* 01110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 134 0x86 '' */ -+ 0x00, /* 00000000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0x38, /* 00111000 */ -+ 0x00, /* 00000000 */ -+ 0x78, /* 01111000 */ -+ 0x0c, /* 00001100 */ -+ 0x7c, /* 01111100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x76, /* 01110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 135 0x87 '' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x18, /* 00011000 */ -+ 0x70, /* 01110000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 136 0x88 '' */ -+ 0x00, /* 00000000 */ -+ 0x10, /* 00010000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xfe, /* 11111110 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 137 0x89 '' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xfe, /* 11111110 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 138 0x8a '' */ -+ 0x00, /* 00000000 */ -+ 0x60, /* 01100000 */ -+ 0x30, /* 00110000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xfe, /* 11111110 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 139 0x8b '' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x66, /* 01100110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x38, /* 00111000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 140 0x8c '' */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x66, /* 01100110 */ -+ 0x00, /* 00000000 */ -+ 0x38, /* 00111000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 141 0x8d '' */ -+ 0x00, /* 00000000 */ -+ 0x60, /* 01100000 */ -+ 0x30, /* 00110000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x38, /* 00111000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 142 0x8e '' */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x10, /* 00010000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xfe, /* 11111110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 143 0x8f '' */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0x38, /* 00111000 */ -+ 0x10, /* 00010000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0xc6, /* 11000110 */ -+ 0xfe, /* 11111110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 144 0x90 '' */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0x66, /* 01100110 */ -+ 0x62, /* 01100010 */ -+ 0x68, /* 01101000 */ -+ 0x78, /* 01111000 */ -+ 0x68, /* 01101000 */ -+ 0x62, /* 01100010 */ -+ 0x66, /* 01100110 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 145 0x91 '' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xec, /* 11101100 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x7e, /* 01111110 */ -+ 0xd8, /* 11011000 */ -+ 0xd8, /* 11011000 */ -+ 0x6e, /* 01101110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 146 0x92 '' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x3e, /* 00111110 */ -+ 0x6c, /* 01101100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xfe, /* 11111110 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xce, /* 11001110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 147 0x93 '' */ -+ 0x00, /* 00000000 */ -+ 0x10, /* 00010000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 148 0x94 '' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 149 0x95 '' */ -+ 0x00, /* 00000000 */ -+ 0x60, /* 01100000 */ -+ 0x30, /* 00110000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 150 0x96 '' */ -+ 0x00, /* 00000000 */ -+ 0x30, /* 00110000 */ -+ 0x78, /* 01111000 */ -+ 0xcc, /* 11001100 */ -+ 0x00, /* 00000000 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x76, /* 01110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 151 0x97 '' */ -+ 0x00, /* 00000000 */ -+ 0x60, /* 01100000 */ -+ 0x30, /* 00110000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x76, /* 01110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 152 0x98 '' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7e, /* 01111110 */ -+ 0x06, /* 00000110 */ -+ 0x0c, /* 00001100 */ -+ 0x78, /* 01111000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 153 0x99 '' */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 154 0x9a '' */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 155 0x9b '' */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 156 0x9c '' */ -+ 0x00, /* 00000000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0x64, /* 01100100 */ -+ 0x60, /* 01100000 */ -+ 0xf0, /* 11110000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0xe6, /* 11100110 */ -+ 0xfc, /* 11111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 157 0x9d '' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x3c, /* 00111100 */ -+ 0x18, /* 00011000 */ -+ 0x7e, /* 01111110 */ -+ 0x18, /* 00011000 */ -+ 0x7e, /* 01111110 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 158 0x9e '' */ -+ 0x00, /* 00000000 */ -+ 0xf8, /* 11111000 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xf8, /* 11111000 */ -+ 0xc4, /* 11000100 */ -+ 0xcc, /* 11001100 */ -+ 0xde, /* 11011110 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 159 0x9f '' */ -+ 0x00, /* 00000000 */ -+ 0x0e, /* 00001110 */ -+ 0x1b, /* 00011011 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x7e, /* 01111110 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0xd8, /* 11011000 */ -+ 0x70, /* 01110000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 160 0xa0 ' ' */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0x00, /* 00000000 */ -+ 0x78, /* 01111000 */ -+ 0x0c, /* 00001100 */ -+ 0x7c, /* 01111100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x76, /* 01110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 161 0xa1 '¡' */ -+ 0x00, /* 00000000 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x00, /* 00000000 */ -+ 0x38, /* 00111000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 162 0xa2 '¢' */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 163 0xa3 '£' */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0x00, /* 00000000 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0x76, /* 01110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 164 0xa4 '€' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x76, /* 01110110 */ -+ 0xdc, /* 11011100 */ -+ 0x00, /* 00000000 */ -+ 0xdc, /* 11011100 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 165 0xa5 '¥' */ -+ 0x76, /* 01110110 */ -+ 0xdc, /* 11011100 */ -+ 0x00, /* 00000000 */ -+ 0xc6, /* 11000110 */ -+ 0xe6, /* 11100110 */ -+ 0xf6, /* 11110110 */ -+ 0xfe, /* 11111110 */ -+ 0xde, /* 11011110 */ -+ 0xce, /* 11001110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 166 0xa6 'Š' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x3c, /* 00111100 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0x3e, /* 00111110 */ -+ 0x00, /* 00000000 */ -+ 0x7e, /* 01111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 167 0xa7 '§' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0x38, /* 00111000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 168 0xa8 'š' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x00, /* 00000000 */ -+ 0x30, /* 00110000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0xc0, /* 11000000 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x7c, /* 01111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 169 0xa9 '©' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 170 0xaa 'ª' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 171 0xab '«' */ -+ 0x00, /* 00000000 */ -+ 0x60, /* 01100000 */ -+ 0xe0, /* 11100000 */ -+ 0x62, /* 01100010 */ -+ 0x66, /* 01100110 */ -+ 0x6c, /* 01101100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0xdc, /* 11011100 */ -+ 0x86, /* 10000110 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x3e, /* 00111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 172 0xac '¬' */ -+ 0x00, /* 00000000 */ -+ 0x60, /* 01100000 */ -+ 0xe0, /* 11100000 */ -+ 0x62, /* 01100010 */ -+ 0x66, /* 01100110 */ -+ 0x6c, /* 01101100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x66, /* 01100110 */ -+ 0xce, /* 11001110 */ -+ 0x9a, /* 10011010 */ -+ 0x3f, /* 00111111 */ -+ 0x06, /* 00000110 */ -+ 0x06, /* 00000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 173 0xad '' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x3c, /* 00111100 */ -+ 0x3c, /* 00111100 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 174 0xae '®' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x36, /* 00110110 */ -+ 0x6c, /* 01101100 */ -+ 0xd8, /* 11011000 */ -+ 0x6c, /* 01101100 */ -+ 0x36, /* 00110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 175 0xaf '¯' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xd8, /* 11011000 */ -+ 0x6c, /* 01101100 */ -+ 0x36, /* 00110110 */ -+ 0x6c, /* 01101100 */ -+ 0xd8, /* 11011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 176 0xb0 '°' */ -+ 0x11, /* 00010001 */ -+ 0x44, /* 01000100 */ -+ 0x11, /* 00010001 */ -+ 0x44, /* 01000100 */ -+ 0x11, /* 00010001 */ -+ 0x44, /* 01000100 */ -+ 0x11, /* 00010001 */ -+ 0x44, /* 01000100 */ -+ 0x11, /* 00010001 */ -+ 0x44, /* 01000100 */ -+ 0x11, /* 00010001 */ -+ 0x44, /* 01000100 */ -+ 0x11, /* 00010001 */ -+ 0x44, /* 01000100 */ -+ 0x11, /* 00010001 */ -+ 0x44, /* 01000100 */ -+ -+ /* 177 0xb1 '±' */ -+ 0x55, /* 01010101 */ -+ 0xaa, /* 10101010 */ -+ 0x55, /* 01010101 */ -+ 0xaa, /* 10101010 */ -+ 0x55, /* 01010101 */ -+ 0xaa, /* 10101010 */ -+ 0x55, /* 01010101 */ -+ 0xaa, /* 10101010 */ -+ 0x55, /* 01010101 */ -+ 0xaa, /* 10101010 */ -+ 0x55, /* 01010101 */ -+ 0xaa, /* 10101010 */ -+ 0x55, /* 01010101 */ -+ 0xaa, /* 10101010 */ -+ 0x55, /* 01010101 */ -+ 0xaa, /* 10101010 */ -+ -+ /* 178 0xb2 '²' */ -+ 0xdd, /* 11011101 */ -+ 0x77, /* 01110111 */ -+ 0xdd, /* 11011101 */ -+ 0x77, /* 01110111 */ -+ 0xdd, /* 11011101 */ -+ 0x77, /* 01110111 */ -+ 0xdd, /* 11011101 */ -+ 0x77, /* 01110111 */ -+ 0xdd, /* 11011101 */ -+ 0x77, /* 01110111 */ -+ 0xdd, /* 11011101 */ -+ 0x77, /* 01110111 */ -+ 0xdd, /* 11011101 */ -+ 0x77, /* 01110111 */ -+ 0xdd, /* 11011101 */ -+ 0x77, /* 01110111 */ -+ -+ /* 179 0xb3 '³' */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ -+ /* 180 0xb4 'Ž' */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0xf8, /* 11111000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ -+ /* 181 0xb5 'µ' */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0xf8, /* 11111000 */ -+ 0x18, /* 00011000 */ -+ 0xf8, /* 11111000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ -+ /* 182 0xb6 '¶' */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0xf6, /* 11110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ -+ /* 183 0xb7 '·' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ -+ /* 184 0xb8 'ž' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xf8, /* 11111000 */ -+ 0x18, /* 00011000 */ -+ 0xf8, /* 11111000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ -+ /* 185 0xb9 '¹' */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0xf6, /* 11110110 */ -+ 0x06, /* 00000110 */ -+ 0xf6, /* 11110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ -+ /* 186 0xba 'º' */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ -+ /* 187 0xbb '»' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0x06, /* 00000110 */ -+ 0xf6, /* 11110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ -+ /* 188 0xbc 'Œ' */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0xf6, /* 11110110 */ -+ 0x06, /* 00000110 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 189 0xbd 'œ' */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 190 0xbe 'Ÿ' */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0xf8, /* 11111000 */ -+ 0x18, /* 00011000 */ -+ 0xf8, /* 11111000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 191 0xbf '¿' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xf8, /* 11111000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ -+ /* 192 0xc0 'À' */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x1f, /* 00011111 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 193 0xc1 'Á' */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0xff, /* 11111111 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 194 0xc2 'Â' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xff, /* 11111111 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ -+ /* 195 0xc3 'Ã' */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x1f, /* 00011111 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ -+ /* 196 0xc4 'Ä' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xff, /* 11111111 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 197 0xc5 'Å' */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0xff, /* 11111111 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ -+ /* 198 0xc6 'Æ' */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x1f, /* 00011111 */ -+ 0x18, /* 00011000 */ -+ 0x1f, /* 00011111 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ -+ /* 199 0xc7 'Ç' */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x37, /* 00110111 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ -+ /* 200 0xc8 'È' */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x37, /* 00110111 */ -+ 0x30, /* 00110000 */ -+ 0x3f, /* 00111111 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 201 0xc9 'É' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x3f, /* 00111111 */ -+ 0x30, /* 00110000 */ -+ 0x37, /* 00110111 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ -+ /* 202 0xca 'Ê' */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0xf7, /* 11110111 */ -+ 0x00, /* 00000000 */ -+ 0xff, /* 11111111 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 203 0xcb 'Ë' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xff, /* 11111111 */ -+ 0x00, /* 00000000 */ -+ 0xf7, /* 11110111 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ -+ /* 204 0xcc 'Ì' */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x37, /* 00110111 */ -+ 0x30, /* 00110000 */ -+ 0x37, /* 00110111 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ -+ /* 205 0xcd 'Í' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xff, /* 11111111 */ -+ 0x00, /* 00000000 */ -+ 0xff, /* 11111111 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 206 0xce 'Î' */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0xf7, /* 11110111 */ -+ 0x00, /* 00000000 */ -+ 0xf7, /* 11110111 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ -+ /* 207 0xcf 'Ï' */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0xff, /* 11111111 */ -+ 0x00, /* 00000000 */ -+ 0xff, /* 11111111 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 208 0xd0 'Ð' */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0xff, /* 11111111 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 209 0xd1 'Ñ' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xff, /* 11111111 */ -+ 0x00, /* 00000000 */ -+ 0xff, /* 11111111 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ -+ /* 210 0xd2 'Ò' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xff, /* 11111111 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ -+ /* 211 0xd3 'Ó' */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x3f, /* 00111111 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 212 0xd4 'Ô' */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x1f, /* 00011111 */ -+ 0x18, /* 00011000 */ -+ 0x1f, /* 00011111 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 213 0xd5 'Õ' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x1f, /* 00011111 */ -+ 0x18, /* 00011000 */ -+ 0x1f, /* 00011111 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ -+ /* 214 0xd6 'Ö' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x3f, /* 00111111 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ -+ /* 215 0xd7 '×' */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0xff, /* 11111111 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ -+ /* 216 0xd8 'Ø' */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0xff, /* 11111111 */ -+ 0x18, /* 00011000 */ -+ 0xff, /* 11111111 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ -+ /* 217 0xd9 'Ù' */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0xf8, /* 11111000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 218 0xda 'Ú' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x1f, /* 00011111 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ -+ /* 219 0xdb 'Û' */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ -+ /* 220 0xdc 'Ü' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ -+ /* 221 0xdd 'Ý' */ -+ 0xf0, /* 11110000 */ -+ 0xf0, /* 11110000 */ -+ 0xf0, /* 11110000 */ -+ 0xf0, /* 11110000 */ -+ 0xf0, /* 11110000 */ -+ 0xf0, /* 11110000 */ -+ 0xf0, /* 11110000 */ -+ 0xf0, /* 11110000 */ -+ 0xf0, /* 11110000 */ -+ 0xf0, /* 11110000 */ -+ 0xf0, /* 11110000 */ -+ 0xf0, /* 11110000 */ -+ 0xf0, /* 11110000 */ -+ 0xf0, /* 11110000 */ -+ 0xf0, /* 11110000 */ -+ 0xf0, /* 11110000 */ -+ -+ /* 222 0xde 'Þ' */ -+ 0x0f, /* 00001111 */ -+ 0x0f, /* 00001111 */ -+ 0x0f, /* 00001111 */ -+ 0x0f, /* 00001111 */ -+ 0x0f, /* 00001111 */ -+ 0x0f, /* 00001111 */ -+ 0x0f, /* 00001111 */ -+ 0x0f, /* 00001111 */ -+ 0x0f, /* 00001111 */ -+ 0x0f, /* 00001111 */ -+ 0x0f, /* 00001111 */ -+ 0x0f, /* 00001111 */ -+ 0x0f, /* 00001111 */ -+ 0x0f, /* 00001111 */ -+ 0x0f, /* 00001111 */ -+ 0x0f, /* 00001111 */ -+ -+ /* 223 0xdf 'ß' */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0xff, /* 11111111 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 224 0xe0 'à' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x76, /* 01110110 */ -+ 0xdc, /* 11011100 */ -+ 0xd8, /* 11011000 */ -+ 0xd8, /* 11011000 */ -+ 0xd8, /* 11011000 */ -+ 0xdc, /* 11011100 */ -+ 0x76, /* 01110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 225 0xe1 'á' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x78, /* 01111000 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xcc, /* 11001100 */ -+ 0xd8, /* 11011000 */ -+ 0xcc, /* 11001100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xcc, /* 11001100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 226 0xe2 'â' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0xc0, /* 11000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 227 0xe3 'ã' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 228 0xe4 'ä' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0xc6, /* 11000110 */ -+ 0x60, /* 01100000 */ -+ 0x30, /* 00110000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0xc6, /* 11000110 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 229 0xe5 'å' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7e, /* 01111110 */ -+ 0xd8, /* 11011000 */ -+ 0xd8, /* 11011000 */ -+ 0xd8, /* 11011000 */ -+ 0xd8, /* 11011000 */ -+ 0xd8, /* 11011000 */ -+ 0x70, /* 01110000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 230 0xe6 'æ' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x7c, /* 01111100 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0xc0, /* 11000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 231 0xe7 'ç' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x76, /* 01110110 */ -+ 0xdc, /* 11011100 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 232 0xe8 'è' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7e, /* 01111110 */ -+ 0x18, /* 00011000 */ -+ 0x3c, /* 00111100 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x3c, /* 00111100 */ -+ 0x18, /* 00011000 */ -+ 0x7e, /* 01111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 233 0xe9 'é' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xfe, /* 11111110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x6c, /* 01101100 */ -+ 0x38, /* 00111000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 234 0xea 'ê' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0xee, /* 11101110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 235 0xeb 'ë' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x1e, /* 00011110 */ -+ 0x30, /* 00110000 */ -+ 0x18, /* 00011000 */ -+ 0x0c, /* 00001100 */ -+ 0x3e, /* 00111110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x66, /* 01100110 */ -+ 0x3c, /* 00111100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 236 0xec 'ì' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7e, /* 01111110 */ -+ 0xdb, /* 11011011 */ -+ 0xdb, /* 11011011 */ -+ 0xdb, /* 11011011 */ -+ 0x7e, /* 01111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 237 0xed 'í' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x03, /* 00000011 */ -+ 0x06, /* 00000110 */ -+ 0x7e, /* 01111110 */ -+ 0xdb, /* 11011011 */ -+ 0xdb, /* 11011011 */ -+ 0xf3, /* 11110011 */ -+ 0x7e, /* 01111110 */ -+ 0x60, /* 01100000 */ -+ 0xc0, /* 11000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 238 0xee 'î' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x1c, /* 00011100 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x7c, /* 01111100 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x60, /* 01100000 */ -+ 0x30, /* 00110000 */ -+ 0x1c, /* 00011100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 239 0xef 'ï' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7c, /* 01111100 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0xc6, /* 11000110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 240 0xf0 'ð' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0xfe, /* 11111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 241 0xf1 'ñ' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x7e, /* 01111110 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7e, /* 01111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 242 0xf2 'ò' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x30, /* 00110000 */ -+ 0x18, /* 00011000 */ -+ 0x0c, /* 00001100 */ -+ 0x06, /* 00000110 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x00, /* 00000000 */ -+ 0x7e, /* 01111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 243 0xf3 'ó' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x30, /* 00110000 */ -+ 0x60, /* 01100000 */ -+ 0x30, /* 00110000 */ -+ 0x18, /* 00011000 */ -+ 0x0c, /* 00001100 */ -+ 0x00, /* 00000000 */ -+ 0x7e, /* 01111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 244 0xf4 'ô' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x0e, /* 00001110 */ -+ 0x1b, /* 00011011 */ -+ 0x1b, /* 00011011 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ -+ /* 245 0xf5 'õ' */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0xd8, /* 11011000 */ -+ 0xd8, /* 11011000 */ -+ 0xd8, /* 11011000 */ -+ 0x70, /* 01110000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 246 0xf6 'ö' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x7e, /* 01111110 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 247 0xf7 '÷' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x76, /* 01110110 */ -+ 0xdc, /* 11011100 */ -+ 0x00, /* 00000000 */ -+ 0x76, /* 01110110 */ -+ 0xdc, /* 11011100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 248 0xf8 'ø' */ -+ 0x00, /* 00000000 */ -+ 0x38, /* 00111000 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0x38, /* 00111000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 249 0xf9 'ù' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 250 0xfa 'ú' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x18, /* 00011000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 251 0xfb 'û' */ -+ 0x00, /* 00000000 */ -+ 0x0f, /* 00001111 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0x0c, /* 00001100 */ -+ 0xec, /* 11101100 */ -+ 0x6c, /* 01101100 */ -+ 0x6c, /* 01101100 */ -+ 0x3c, /* 00111100 */ -+ 0x1c, /* 00011100 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 252 0xfc 'ü' */ -+ 0x00, /* 00000000 */ -+ 0x6c, /* 01101100 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x36, /* 00110110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 253 0xfd 'ý' */ -+ 0x00, /* 00000000 */ -+ 0x3c, /* 00111100 */ -+ 0x66, /* 01100110 */ -+ 0x0c, /* 00001100 */ -+ 0x18, /* 00011000 */ -+ 0x32, /* 00110010 */ -+ 0x7e, /* 01111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 254 0xfe 'þ' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x7e, /* 01111110 */ -+ 0x7e, /* 01111110 */ -+ 0x7e, /* 01111110 */ -+ 0x7e, /* 01111110 */ -+ 0x7e, /* 01111110 */ -+ 0x7e, /* 01111110 */ -+ 0x7e, /* 01111110 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+ /* 255 0xff 'ÿ' */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ 0x00, /* 00000000 */ -+ -+}; -+ -+#endif -diff --git a/efi/graphics.c b/efi/graphics.c -new file mode 100644 -index 0000000..eb98d8a ---- /dev/null -+++ b/efi/graphics.c -@@ -0,0 +1,666 @@ -+#ifdef SUPPORT_GRAPHICS -+ -+#include <grub/misc.h> -+#include <grub/types.h> -+#include <grub/cpu/linux.h> -+#include <grub/efi/api.h> -+#include <grub/efi/efi.h> -+#include <grub/efi/misc.h> -+ -+#include <term.h> -+#include <shared.h> -+#include <graphics.h> -+ -+#include "graphics.h" -+ -+#if 0 -+#include "ugadebug.h" -+#endif -+ -+int foreground = 0x00ffffff, background = 0; -+int graphics_inited = 0; -+ -+/* Convert a character which is a hex digit to the appropriate integer */ -+int -+hex (int v) -+{ -+ if (v >= 'A' && v <= 'F') -+ return (v - 'A' + 10); -+ if (v >= 'a' && v <= 'f') -+ return (v - 'a' + 10); -+ return (v - '0'); -+} -+ -+grub_uint16_t -+grub_console_getwh (void) -+{ -+ grub_efi_simple_text_output_interface_t *o; -+ grub_efi_uintn_t columns, rows; -+ -+ o = grub_efi_system_table->con_out; -+ if (Call_Service_4 (o->query_mode , o, o->mode->mode, &columns, &rows) -+ != GRUB_EFI_SUCCESS) -+ { -+ /* Why does this fail? */ -+ columns = 80; -+ rows = 25; -+ } -+ -+ return ((columns << 8) | rows); -+} -+ -+extern struct graphics_backend uga_backend; -+extern struct graphics_backend eg_backend; -+ -+static struct graphics_backend *backends[] = { -+ &eg_backend, -+ &uga_backend, -+ NULL -+}; -+static struct graphics_backend *backend; -+ -+struct graphics { -+ int scroll; -+ int fontx; -+ int fonty; -+ -+ int standard_color; -+ int normal_color; -+ int highlight_color; -+ int current_color; -+ color_state color_state; -+ -+ char splashpath[64]; -+ struct xpm *splashimage; -+ -+ unsigned short *text; -+}; -+ -+static grub_efi_guid_t device_path_guid = GRUB_EFI_DEVICE_PATH_GUID; -+static grub_efi_guid_t pci_io_guid = GRUB_EFI_PCI_IO_GUID; -+static grub_efi_guid_t pci_root_io_guid = GRUB_EFI_PCI_ROOT_IO_GUID; -+ -+static void -+grub_efi_configure_pci(grub_efi_handle_t handle) -+{ -+ grub_efi_device_path_t *path, *parent; -+ grub_efi_handle_t parent_handle; -+ grub_efi_pci_io_t *pci_proto; -+ grub_efi_pci_root_io_t *pci_root_proto; -+ grub_efi_status_t status; -+ -+ path = grub_efi_get_device_path(handle); -+ parent = find_parent_device_path(path); -+ -+ if (!parent) -+ return; -+ -+ status = grub_efi_locate_device_path (&device_path_guid, &parent, -+ &parent_handle); -+ if (status != GRUB_EFI_SUCCESS) -+ return; -+ -+ pci_proto = grub_efi_open_protocol (parent_handle, &pci_io_guid, -+ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+ -+ pci_root_proto = grub_efi_open_protocol (parent_handle, &pci_root_io_guid, -+ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+ -+ -+ if (pci_proto || pci_root_proto) -+ { -+ if (pci_proto) -+ { -+ Call_Service_4 (pci_proto->attributes, pci_proto, -+ grub_efi_pci_io_attribute_operation_enable, -+ GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY | -+ GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_IO | -+ GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO, NULL); -+ -+ grub_efi_configure_pci (parent_handle); -+ } -+ else -+ { -+ grub_uint8_t value = 0x33; -+ grub_uint16_t vendor; -+ -+ Call_Service_5 (pci_root_proto->pci.read, pci_root_proto, -+ grub_efi_pci_io_width_uint16, 0x00, 1, &vendor); -+ -+ if (vendor == 0x8086) { -+ Call_Service_5 (pci_root_proto->pci.write, pci_root_proto, -+ grub_efi_pci_io_width_uint8, 0x91, 1, &value); -+ Call_Service_5 (pci_root_proto->pci.write, pci_root_proto, -+ grub_efi_pci_io_width_uint8, 0x92, 1, &value); -+ } -+ } -+ } -+ grub_free(parent); -+} -+ -+void -+grub_efi_setup_gfx_pci(grub_efi_handle_t handle) -+{ -+ grub_efi_uint64_t romsize; -+ grub_efi_uint16_t *header; -+ void *vrom; -+ grub_efi_pci_io_t *pci_proto; -+ -+ pci_proto = grub_efi_open_protocol (handle, &pci_io_guid, -+ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+ -+ if (!pci_proto) -+ return; -+ -+ romsize = pci_proto->rom_size; -+ -+ if (!romsize || romsize > 65536 || !pci_proto->rom_image) -+ return; -+ -+ /* Copy the ROM */ -+ vrom = grub_efi_allocate_runtime_pages(0xc0000, 16); -+ -+ if (!vrom) -+ return; -+ -+ header = vrom; -+ -+ if (*header == 0xaa55) -+ return; -+ -+ grub_efi_configure_pci(handle); -+ -+ grub_memcpy(vrom, pci_proto->rom_image, romsize); -+} -+ -+void -+graphics_set_kernel_params(struct linux_kernel_params *params) -+{ -+ params->video_cursor_x = grub_efi_system_table->con_out->mode->cursor_column; -+ params->video_cursor_y = grub_efi_system_table->con_out->mode->cursor_row; -+ params->video_page = 0; /* ??? */ -+ params->video_mode = grub_efi_system_table->con_out->mode->mode; -+ params->video_width = (grub_console_getwh () >> 8); -+ params->video_ega_bx = 0; -+ params->video_height = (grub_console_getwh () & 0xff); -+ params->have_vga = 0; -+ params->font_size = 16; /* XXX */ -+ -+ /* No VBE. */ -+ params->lfb_width = 0; -+ params->lfb_height = 0; -+ params->lfb_depth = 0; -+ params->lfb_base = 0; -+ params->lfb_size = 0; -+ params->lfb_line_len = 0; -+ params->red_mask_size = 0; -+ params->red_field_pos = 0; -+ params->green_mask_size = 0; -+ params->green_field_pos = 0; -+ params->blue_mask_size = 0; -+ params->blue_field_pos = 0; -+ params->reserved_mask_size = 0; -+ params->reserved_field_pos = 0; -+ params->vesapm_segment = 0; -+ params->vesapm_offset = 0; -+ params->lfb_pages = 0; -+ params->vesa_attrib = 0; -+ -+ if (backend && backend->set_kernel_params) -+ backend->set_kernel_params(backend, params); -+} -+ -+int -+graphics_alloc_text_buf(void) -+{ -+ if (backend) { -+ struct graphics *graphics = backend->graphics; -+ position_t screen_size; -+ -+ if (graphics->text) { -+ grub_free(graphics->text); -+ graphics->text = NULL; -+ } -+ graphics_get_screen_rowscols(&screen_size); -+ graphics->text = grub_malloc(screen_size.x -+ * screen_size.y -+ * sizeof (graphics->text[0])); -+ if (graphics->text) { -+ int x, y; -+ for (y = 0; y < screen_size.y; y++) -+ for (x = 0; x < screen_size.x; x++) -+ graphics->text[y * screen_size.x + x] = ' '; -+ return 1; -+ } -+ } -+ return 0; -+} -+ -+unsigned short * -+graphics_get_text_buf(void) -+{ -+ return backend ? backend->graphics->text : NULL; -+ return NULL; -+} -+ -+int -+graphics_get_screen_rowscols(position_t *size) -+{ -+#if 0 -+ if (backend && backend->get_screen_size) { -+ backend->get_screen_size(backend, size); -+ size->x >>= 3; -+ size->y >>= 4; -+ return 1; -+ } -+ size->x = -1; -+ size->y = -1; -+ return 0; -+#else -+ size->x = 80; -+ size->y = 30; -+ return 1; -+#endif -+} -+ -+int -+graphics_get_scroll(void) -+{ -+ return backend ? backend->graphics->scroll : 1; -+} -+ -+void -+graphics_set_palette(int idx, int red, int green, int blue) -+{ -+ if (backend && backend->set_palette) { -+ backend->set_palette(backend, idx, red, green, blue); -+ backend->set_palette(backend, 0, 0x00, 0x00, 0x00); -+ backend->set_palette(backend, 15, 0xff, 0xff, 0xff); -+ backend->set_palette(backend, 16, 0x00, 0x00, 0x00); -+ } -+} -+ -+static char splashpath[64] = ""; -+ -+static void -+graphics_set_splash_helper(void) -+{ -+ if (backend) { -+ struct xpm *xpm = NULL; -+ -+ if (backend->graphics->splashimage) -+ xpm_free(backend->graphics->splashimage); -+ -+ if (splashpath[0]) -+ xpm = xpm_open(splashpath); -+ -+ if (xpm) { -+ backend->graphics->splashimage = xpm; -+ grub_strcpy(backend->graphics->splashpath, splashpath); -+ } else { -+ backend->graphics->splashimage = NULL; -+ backend->graphics->splashpath[0] = '\0'; -+ } -+ backend->reset_screen_geometry(backend); -+ } -+} -+ -+void -+graphics_set_splash(char *s) -+{ -+ if (s && s[0] != '\0') -+ grub_strcpy(splashpath, s); -+ else -+ splashpath[0] = '\0'; -+ graphics_set_splash_helper(); -+} -+ -+char * -+graphics_get_splash(void) -+{ -+ if (backend) -+ return backend->graphics->splashpath; -+ if (splashpath[0] != '\0') -+ return splashpath; -+ return NULL; -+} -+ -+struct xpm * -+graphics_get_splash_xpm(void) -+{ -+ if (backend) -+ return backend->graphics->splashimage; -+ return NULL; -+} -+ -+void -+graphics_putchar(int ch) -+{ -+ struct graphics *graphics; -+ position_t screensz; -+ int offset; -+ -+ void *old_term = current_term; -+ -+ if (!backend) -+ return; -+ -+ graphics = backend->graphics; -+ graphics_get_screen_rowscols(&screensz); -+ -+ ch &= 0xff; -+ -+ graphics_cursor(0); -+ -+ if (ch == '\n') { -+ if (graphics->fonty + 1 < screensz.y) { -+ graphics_setxy(graphics->fontx, graphics->fonty + 1); -+ } else -+ graphics_scroll(); -+ graphics_cursor(1); -+ return; -+ } else if (ch == '\r') { -+ graphics_setxy(0, graphics->fonty); -+ graphics_cursor(1); -+ return; -+ } -+ -+ graphics_cursor(0); -+ -+ offset = graphics->fontx + graphics->fonty * screensz.x; -+ graphics->text[offset] = ch; -+ graphics->text[offset] &= 0x00ff; -+ if (graphics->current_color & 0xf0) -+ graphics->text[offset] |= 0x100; -+ -+ graphics_cursor(0); -+ -+ if ((graphics->fontx + 1) >= screensz.x) { -+ graphics_setxy(0, graphics->fonty); -+ if (graphics->fonty + 1 < screensz.y) -+ graphics_setxy(0, graphics->fonty + 1); -+ else -+ graphics_scroll(); -+ } else { -+ graphics_setxy(graphics->fontx + 1, graphics->fonty); -+ } -+ -+ graphics_cursor(1); -+} -+ -+void -+graphics_set_font_position(position_t *pos) -+{ -+ if (backend) { -+ backend->graphics->fontx = pos->x; -+ backend->graphics->fonty = pos->y; -+ } -+} -+ -+void -+graphics_get_font_position(position_t *pos) -+{ -+ if (backend) { -+ pos->x = backend->graphics->fontx; -+ pos->y = backend->graphics->fonty; -+ return; -+ } -+ pos->x = -1; -+ pos->y = -1; -+} -+ -+void -+graphics_get_font_size(position_t *size) -+{ -+ size->x = 8; -+ size->y = 16; -+} -+ -+void -+graphics_setxy(int x, int y) -+{ -+ if (!backend) -+ return; -+ -+ if (backend->setxy) { -+ position_t pos = {x, y}; -+ backend->setxy(backend, &pos); -+ return; -+ } -+} -+ -+int -+graphics_getxy(void) -+{ -+ int ret = 0; -+ if (backend) { -+ if (backend->getxy) { -+ position_t pos; -+ backend->getxy(backend, &pos); -+ ret = ((pos.x & 0xff) << 8) | (pos.y & 0xff); -+ } else { -+ ret = ((backend->graphics->fontx & 0xff) << 8) | (backend->graphics->fonty & 0xff); -+ } -+ } -+ return ret; -+} -+ -+void -+graphics_scroll (void) -+{ -+ struct graphics *graphics; -+ position_t screensz; -+ int i; -+ unsigned short *text; -+ int linesz; -+ -+ if (!backend) -+ return; -+ -+ graphics = backend->graphics; -+ -+ /* we don't want to scroll recursively... that would be bad */ -+ if (!graphics->scroll) -+ return; -+ graphics->scroll = 0; -+ graphics_get_screen_rowscols(&screensz); -+ -+ text = graphics_get_text_buf(); -+ linesz = screensz.x * sizeof (text[0]); -+ for (i = 1; i < screensz.y; i++) { -+ unsigned short *prev = &text[(i-1) * screensz.x]; -+ unsigned short *this = prev + screensz.x; -+ -+ memmove(prev, this, linesz); -+ prev = this; -+ this += screensz.x; -+ } -+ graphics_setxy(0, screensz.y - 1); -+ for (i = 0; i < screensz.x; i++) { -+ graphics_putchar(' '); -+ //text[(screensz.y-1) + i] = ' '; -+ } -+ -+ graphics_clbl(0, 0, screensz.x, screensz.y, 1); -+ graphics_setxy(0, screensz.y - 1); -+ graphics->scroll = 1; -+} -+ -+void -+graphics_cursor(int set) -+{ -+ if (backend && backend->cursor) -+ backend->cursor(backend, set); -+} -+ -+void -+graphics_gotoxy(int x, int y) -+{ -+ position_t pos = {x,y}; -+ if (backend) { -+ if (backend->gotoxy) { -+ backend->gotoxy(backend, &pos); -+ } else { -+ graphics_cursor(0); -+ graphics_setxy(x, y); -+ graphics_cursor(1); -+ } -+ } -+} -+ -+void -+graphics_cls(void) -+{ -+ int x = 0, y = 0, xy; -+ unsigned short *text; -+ position_t screensz; -+ -+ graphics_get_screen_rowscols(&screensz); -+ text = graphics_get_text_buf(); -+ for (y = 0; y < screensz.y; y++) -+ for (x = 0; x < screensz.x; x++) -+ text[x + y * screensz.x] = ' '; -+ -+ if (backend) { -+ //int xy = graphics_getxy(); -+ -+ graphics_clbl(0, 0, screensz.x, screensz.y, 0); -+ //graphics_gotoxy(xy & 0xf0 >> 8, xy & 0xf); -+ graphics_gotoxy(0, 0); -+ } -+} -+ -+void -+graphics_clbl(int col, int row, int width, int height, int draw_text) -+{ -+ if (backend) { -+ int x = 0, y = 0, xy; -+ unsigned short *text; -+ position_t screensz; -+ -+ graphics_get_screen_rowscols(&screensz); -+ -+#if 0 -+ xy = graphics_getxy(); -+#endif -+ if (backend->clbl) { -+ backend->clbl(backend, col, row, width, height, draw_text); -+ } else { -+ for (y = 0; y < screensz.y; y++) { -+ for (x = 0; x < screensz.x; x++) { -+ graphics_setxy(x, y); -+ graphics_cursor(0); -+ } -+ } -+ } -+#if 0 -+ graphics_gotoxy(xy >> 8, xy & 0xf); -+#endif -+ } -+} -+ -+void -+graphics_setcolorstate (color_state state) -+{ -+ struct graphics *graphics; -+ if (!backend) -+ return; -+ -+ graphics = backend->graphics; -+ -+ switch (state) { -+ case COLOR_STATE_STANDARD: -+ graphics->current_color = graphics->standard_color; -+ break; -+ case COLOR_STATE_NORMAL: -+ graphics->current_color = graphics->normal_color; -+ break; -+ case COLOR_STATE_HIGHLIGHT: -+ graphics->current_color = graphics->highlight_color; -+ break; -+ default: -+ graphics->current_color = graphics->standard_color; -+ break; -+ } -+ -+ graphics->color_state = state; -+} -+ -+void -+graphics_setcolor (int normal_color, int highlight_color) -+{ -+ backend->graphics->normal_color = normal_color; -+ backend->graphics->highlight_color = highlight_color; -+ -+ graphics_setcolorstate (backend->graphics->color_state); -+} -+ -+int -+graphics_setcursor(int on) -+{ -+ /* FIXME: we don't have a cursor in graphics */ -+ return 0; -+} -+ -+int -+graphics_init(void) -+{ -+ struct graphics *graphics; -+ int i; -+ -+ if (graphics_inited) -+ return 1; -+ -+ if (backend) { -+ if (backend->enable(backend)) { -+ graphics_inited = 1; -+ graphics_set_splash_helper(); -+ return 1; -+ } -+ return 0; -+ } -+ -+ graphics = grub_malloc(sizeof (*graphics)); -+ if (!graphics) -+ return 0; -+ -+ grub_memset(graphics, '\0', sizeof (*graphics)); -+ -+ graphics->scroll = 1; -+ graphics->fontx = 0; -+ graphics->fonty = 0; -+ -+ graphics->standard_color = A_NORMAL; -+ graphics->normal_color = A_NORMAL; -+ graphics->highlight_color = A_REVERSE; -+ graphics->current_color = A_NORMAL; -+ graphics->color_state = COLOR_STATE_STANDARD; -+ -+ grub_memset(graphics->splashpath, '\0', sizeof (graphics->splashpath)); -+ -+ for(i = 0; backends[i] != NULL; i++) { -+ backend = backends[i]; -+ backend->graphics = graphics; -+ if (backend->enable(backend)) { -+ graphics_inited = 1; -+ graphics_set_splash_helper(); -+ return 1; -+ } -+ backend->graphics = NULL; -+ } -+ current_term = term_table; -+ grub_free(graphics->text); -+ grub_free(graphics); -+ return 0; -+} -+ -+void -+graphics_end(void) -+{ -+ if (backend && graphics_inited) { -+ graphics_inited = 0; -+ backend->disable(backend); -+ } -+} -+ -+#endif /* SUPPORT_GRAPHICS */ -diff --git a/efi/graphics.h b/efi/graphics.h -new file mode 100644 -index 0000000..ecf9e0e ---- /dev/null -+++ b/efi/graphics.h -@@ -0,0 +1,81 @@ -+#ifndef GRUB_EFI_GRAPHICS_H -+#define GRUB_EFI_GRAPHICS_H -+ -+#ifdef SUPPORT_GRAPHICS -+ -+#include <term.h> -+#include "xpm.h" -+ -+#define VIDEO_TYPE_EFI 0x70 -+ -+typedef void pixel_t; -+struct graphics; -+ -+struct position { -+ int x; -+ int y; -+}; -+typedef struct position position_t; -+ -+extern void grub_efi_setup_gfx_pci (grub_efi_handle_t handle); -+ -+extern grub_uint16_t grub_console_getwh (void); -+extern void graphics_set_kernel_params(struct linux_kernel_params *params); -+extern void graphics_set_font_position(position_t *pos); -+extern void graphics_get_font_position(position_t *pos); -+extern void graphics_get_font_size(position_t *size); -+extern int graphics_get_screen_rowscols(position_t *size); -+extern int graphics_alloc_text_buf(void); -+extern unsigned short *graphics_get_text_buf(void); -+ -+extern int graphics_get_scroll(void); -+ -+extern char *graphics_get_splash(void); -+extern void graphics_setxy(int x, int y); -+extern void graphics_cls(void); -+extern void graphics_clbl(int x, int y, int width, int height, int draw_text); -+extern void graphics_setcolorstate (color_state state); -+extern void graphics_setcolor (int normal_color, int highlight_color); -+extern int graphics_setcursor(int on); -+extern int graphics_init(void); -+extern void graphics_end(void); -+extern struct xpm *graphics_get_splash_xpm(void); -+extern void graphics_cursor(int set); -+extern void graphics_scroll(void); -+ -+struct graphics_backend { -+ char *name; -+ struct graphics *graphics; -+ void *priv; -+ -+ int (*enable)(struct graphics_backend *backend); -+ void (*disable)(struct graphics_backend *backend); -+ -+ void (*set_kernel_params)(struct graphics_backend *backend, -+ struct linux_kernel_params *params); -+ -+ void (*clbl)(struct graphics_backend *backend, int col, int row, -+ int width, int height, -+ int draw_text); -+ -+ void (*set_palette)(struct graphics_backend *backend, -+ int idx, int red, int green, int blue); -+ pixel_t *(*get_pixel_idx)(struct graphics_backend *backend, int idx); -+ pixel_t *(*get_pixel_rgb)(struct graphics_backend *backend, -+ int red, int green, int blue); -+ void (*draw_pixel)(struct graphics_backend *backend, -+ position_t *pos, pixel_t *pixel); -+ -+ void (*reset_screen_geometry)(struct graphics_backend *backend); -+ void (*get_screen_size)(struct graphics_backend *backend, position_t *size); -+ void (*getxy)(struct graphics_backend *backend, position_t *pos); -+ void (*setxy)(struct graphics_backend *backend, position_t *pos); -+ void (*gotoxy)(struct graphics_backend *backend, position_t *pos); -+ void (*cursor)(struct graphics_backend *backend, int set); -+// void (*putchar)(struct graphics_backend *backend, int ch); -+}; -+ -+extern const unsigned char font8x16[]; -+ -+#endif /* SUPPORT_GRAPHCIS */ -+#endif /* GRUB_EFI_GRAPHICS_H */ -diff --git a/efi/grub/.gitignore b/efi/grub/.gitignore -new file mode 100644 -index 0000000..40a991e ---- /dev/null -+++ b/efi/grub/.gitignore -@@ -0,0 +1 @@ -+cpu -diff --git a/efi/grub/efi/api.h b/efi/grub/efi/api.h -new file mode 100644 -index 0000000..81a0b3f ---- /dev/null -+++ b/efi/grub/efi/api.h -@@ -0,0 +1,1716 @@ -+/* efi.h - declare EFI types and functions */ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2006 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_EFI_API_HEADER -+#define GRUB_EFI_API_HEADER 1 -+ -+#include <grub/types.h> -+#include <grub/efi/eficall.h> -+ -+/* For consistency and safety, we name the EFI-defined types differently. -+ All names are transformed into lower case, _t appended, and -+ grub_efi_ prepended. */ -+ -+/* Constants. */ -+#define GRUB_EFI_EVT_TIMER 0x80000000 -+#define GRUB_EFI_EVT_RUNTIME 0x40000000 -+#define GRUB_EFI_EVT_RUNTIME_CONTEXT 0x20000000 -+#define GRUB_EFI_EVT_NOTIFY_WAIT 0x00000100 -+#define GRUB_EFI_EVT_NOTIFY_SIGNAL 0x00000200 -+#define GRUB_EFI_EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201 -+#define GRUB_EFI_EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202 -+ -+#define GRUB_EFI_TPL_APPLICATION 4 -+#define GRUB_EFI_TPL_CALLBACK 8 -+#define GRUB_EFI_TPL_NOTIFY 16 -+#define GRUB_EFI_TPL_HIGH_LEVEL 31 -+ -+#define GRUB_EFI_MEMORY_UC 0x0000000000000001 -+#define GRUB_EFI_MEMORY_WC 0x0000000000000002 -+#define GRUB_EFI_MEMORY_WT 0x0000000000000004 -+#define GRUB_EFI_MEMORY_WB 0x0000000000000008 -+#define GRUB_EFI_MEMORY_UCE 0x0000000000000010 -+#define GRUB_EFI_MEMORY_WP 0x0000000000001000 -+#define GRUB_EFI_MEMORY_RP 0x0000000000002000 -+#define GRUB_EFI_MEMORY_XP 0x0000000000004000 -+#define GRUB_EFI_MEMORY_RUNTIME 0x8000000000000000 -+ -+#define GRUB_EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 -+#define GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 -+#define GRUB_EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 -+#define GRUB_EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 -+#define GRUB_EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 -+#define GRUB_EFI_OPEN_PROTOCOL_BY_EXCLUSIVE 0x00000020 -+ -+#define GRUB_EFI_VARIABLE_NON_VOLATILE 0x0000000000000001 -+#define GRUB_EFI_VARIABLE_BOOTSERVICE_ACCESS 0x0000000000000002 -+#define GRUB_EFI_VARIABLE_RUNTIME_ACCESS 0x0000000000000004 -+ -+#define GRUB_EFI_TIME_ADJUST_DAYLIGHT 0x01 -+#define GRUB_EFI_TIME_IN_DAYLIGHT 0x02 -+ -+#define GRUB_EFI_UNSPECIFIED_TIMEZONE 0x07FF -+ -+#define GRUB_EFI_OPTIONAL_PTR 0x00000001 -+ -+#define GRUB_EFI_PCI_IO_GUID \ -+ { 0x4cf5b200, 0x68b8, 0x4ca5, \ -+ { 0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x02, 0x9a } \ -+ } -+ -+#define GRUB_EFI_PCI_ROOT_IO_GUID \ -+ { 0x2F707EBB, 0x4A1A, 0x11d4, \ -+ { 0x9A, 0x38, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D } \ -+ } -+ -+#define GRUB_EFI_LOADED_IMAGE_GUID \ -+ { 0x5b1b31a1, 0x9562, 0x11d2, \ -+ { 0x8e, 0x3f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ -+ } -+ -+#define GRUB_EFI_DISK_IO_GUID \ -+ { 0xce345171, 0xba0b, 0x11d2, \ -+ { 0x8e, 0x4f, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ -+ } -+ -+#define GRUB_EFI_BLOCK_IO_GUID \ -+ { 0x964e5b21, 0x6459, 0x11d2, \ -+ { 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ -+ } -+ -+#define GRUB_EFI_DEVICE_PATH_GUID \ -+ { 0x09576e91, 0x6d3f, 0x11d2, \ -+ { 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ -+ } -+ -+#define GRUB_EFI_DEVICE_PATH_FROM_TEXT_GUID \ -+ { 0x05c99a21, 0xc70f, 0x4ad2, \ -+ { 0x8a, 0x5f, 0x35, 0xdf, 0x33, 0x43, 0xf5, 0x1e } \ -+ } -+ -+#define GRUB_EFI_GRAPHICS_OUTPUT_GUID \ -+ { 0x9042a9de, 0x23dc, 0x4a38, \ -+ { 0x96, 0xfb, 0x7a, 0xde, 0xd0, 0x80, 0x51, 0x6a } \ -+ } -+ -+#define GRUB_EFI_UGA_DRAW_GUID \ -+ { 0x982c298b, 0xf4fa, 0x41cb, \ -+ { 0xb8, 0x38, 0x77, 0xaa, 0x68, 0x8f, 0xb8, 0x39 } \ -+ } -+ -+#define GRUB_EFI_UGA_IO_GUID \ -+ { 0x61a4d49e, 0x6f68, 0x4f1b, \ -+ { 0xb9, 0x22, 0xa8, 0x6e, 0xed, 0xb, 0x7, 0xa2 } \ -+ } -+ -+#define GRUB_EFI_SIMPLE_FILE_SYSTEM_GUID \ -+ { 0x964e5b22, 0x6459, 0x11d2, \ -+ { 0x8e, 0x39, 0x00, 0xa0, 0xc9, 0x69, 0x72, 0x3b } \ -+ } -+ -+#define GRUB_EFI_SERIAL_IO_GUID \ -+ { 0xbb25cf6f, 0xf1d4, 0x11d2, \ -+ { 0x9a, 0x0c, 0x00, 0x90, 0x27, 0x3F, 0xc1, 0xfd } \ -+ } -+ -+/* Enumerations. */ -+enum grub_efi_timer_delay -+{ -+ GRUB_EFI_TIMER_CANCEL, -+ GRUB_EFI_TIMER_PERIODIC, -+ GRUB_EFI_TIMER_RELATIVE -+}; -+typedef enum grub_efi_timer_delay grub_efi_timer_delay_t; -+ -+enum grub_efi_allocate_type -+{ -+ GRUB_EFI_ALLOCATE_ANY_PAGES, -+ GRUB_EFI_ALLOCATE_MAX_ADDRESS, -+ GRUB_EFI_ALLOCATE_ADDRESS, -+ GRUB_EFI_MAX_ALLOCATION_TYPE -+}; -+typedef enum grub_efi_allocate_type grub_efi_allocate_type_t; -+ -+enum grub_efi_memory_type -+{ -+ GRUB_EFI_RESERVED_MEMORY_TYPE, -+ GRUB_EFI_LOADER_CODE, -+ GRUB_EFI_LOADER_DATA, -+ GRUB_EFI_BOOT_SERVICES_CODE, -+ GRUB_EFI_BOOT_SERVICES_DATA, -+ GRUB_EFI_RUNTIME_SERVICES_CODE, -+ GRUB_EFI_RUNTIME_SERVICES_DATA, -+ GRUB_EFI_CONVENTIONAL_MEMORY, -+ GRUB_EFI_UNUSABLE_MEMORY, -+ GRUB_EFI_ACPI_RECLAIM_MEMORY, -+ GRUB_EFI_ACPI_MEMORY_NVS, -+ GRUB_EFI_MEMORY_MAPPED_IO, -+ GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE, -+ GRUB_EFI_PAL_CODE, -+ GRUB_EFI_MAX_MEMORY_TYPE -+}; -+typedef enum grub_efi_memory_type grub_efi_memory_type_t; -+ -+enum grub_efi_interface_type -+{ -+ GRUB_EFI_NATIVE_INTERFACE -+}; -+typedef enum grub_efi_interface_type grub_efi_interface_type_t; -+ -+enum grub_efi_locate_search_type -+{ -+ GRUB_EFI_ALL_HANDLES, -+ GRUB_EFI_BY_REGISTER_NOTIFY, -+ GRUB_EFI_BY_PROTOCOL -+}; -+typedef enum grub_efi_locate_search_type grub_efi_locate_search_type_t; -+ -+enum grub_efi_reset_type -+{ -+ GRUB_EFI_RESET_COLD, -+ GRUB_EFI_RESET_WARM, -+ GRUB_EFI_RESET_SHUTDOWN -+}; -+typedef enum grub_efi_reset_type grub_efi_reset_type_t; -+ -+/* Types. */ -+typedef char grub_efi_boolean_t; -+typedef long grub_efi_intn_t; -+typedef unsigned long grub_efi_uintn_t; -+typedef grub_int8_t grub_efi_int8_t; -+typedef grub_uint8_t grub_efi_uint8_t; -+typedef grub_int16_t grub_efi_int16_t; -+typedef grub_uint16_t grub_efi_uint16_t; -+typedef grub_int32_t grub_efi_int32_t; -+typedef grub_uint32_t grub_efi_uint32_t; -+typedef grub_int64_t grub_efi_int64_t; -+typedef grub_uint64_t grub_efi_uint64_t; -+typedef grub_uint8_t grub_efi_char8_t; -+typedef grub_uint16_t grub_efi_char16_t; -+ -+typedef grub_efi_intn_t grub_efi_status_t; -+ -+#define GRUB_EFI_ERROR_CODE(value) \ -+ ((1L << (sizeof (grub_efi_status_t) * 8 - 1)) | (value)) -+ -+#define GRUB_EFI_WARNING_CODE(value) (value) -+ -+#define GRUB_EFI_SUCCESS 0 -+ -+#define GRUB_EFI_LOAD_ERROR GRUB_EFI_ERROR_CODE (1) -+#define GRUB_EFI_INVALID_PARAMETER GRUB_EFI_ERROR_CODE (2) -+#define GRUB_EFI_UNSUPPORTED GRUB_EFI_ERROR_CODE (3) -+#define GRUB_EFI_BAD_BUFFER_SIZE GRUB_EFI_ERROR_CODE (4) -+#define GRUB_EFI_BUFFER_TOO_SMALL GRUB_EFI_ERROR_CODE (5) -+#define GRUB_EFI_NOT_READY GRUB_EFI_ERROR_CODE (6) -+#define GRUB_EFI_DEVICE_ERROR GRUB_EFI_ERROR_CODE (7) -+#define GRUB_EFI_WRITE_PROTECTED GRUB_EFI_ERROR_CODE (8) -+#define GRUB_EFI_OUT_OF_RESOURCES GRUB_EFI_ERROR_CODE (9) -+#define GRUB_EFI_VOLUME_CORRUPTED GRUB_EFI_ERROR_CODE (10) -+#define GRUB_EFI_VOLUME_FULL GRUB_EFI_ERROR_CODE (11) -+#define GRUB_EFI_NO_MEDIA GRUB_EFI_ERROR_CODE (12) -+#define GRUB_EFI_MEDIA_CHANGED GRUB_EFI_ERROR_CODE (13) -+#define GRUB_EFI_NOT_FOUND GRUB_EFI_ERROR_CODE (14) -+#define GRUB_EFI_ACCESS_DENIED GRUB_EFI_ERROR_CODE (15) -+#define GRUB_EFI_NO_RESPONSE GRUB_EFI_ERROR_CODE (16) -+#define GRUB_EFI_NO_MAPPING GRUB_EFI_ERROR_CODE (17) -+#define GRUB_EFI_TIMEOUT GRUB_EFI_ERROR_CODE (18) -+#define GRUB_EFI_NOT_STARTED GRUB_EFI_ERROR_CODE (19) -+#define GRUB_EFI_ALREADY_STARTED GRUB_EFI_ERROR_CODE (20) -+#define GRUB_EFI_ABORTED GRUB_EFI_ERROR_CODE (21) -+#define GRUB_EFI_ICMP_ERROR GRUB_EFI_ERROR_CODE (22) -+#define GRUB_EFI_TFTP_ERROR GRUB_EFI_ERROR_CODE (23) -+#define GRUB_EFI_PROTOCOL_ERROR GRUB_EFI_ERROR_CODE (24) -+#define GRUB_EFI_INCOMPATIBLE_VERSION GRUB_EFI_ERROR_CODE (25) -+#define GRUB_EFI_SECURITY_VIOLATION GRUB_EFI_ERROR_CODE (26) -+#define GRUB_EFI_CRC_ERROR GRUB_EFI_ERROR_CODE (27) -+ -+#define GRUB_EFI_WARN_UNKNOWN_GLYPH GRUB_EFI_WARNING_CODE (1) -+#define GRUB_EFI_WARN_DELETE_FAILURE GRUB_EFI_WARNING_CODE (2) -+#define GRUB_EFI_WARN_WRITE_FAILURE GRUB_EFI_WARNING_CODE (3) -+#define GRUB_EFI_WARN_BUFFER_TOO_SMALL GRUB_EFI_WARNING_CODE (4) -+ -+typedef void *grub_efi_handle_t; -+typedef void *grub_efi_event_t; -+typedef grub_efi_uint64_t grub_efi_lba_t; -+typedef grub_efi_uintn_t grub_efi_tpl_t; -+typedef grub_uint8_t grub_efi_mac_address_t[32]; -+typedef grub_uint8_t grub_efi_ipv4_address_t[4]; -+typedef grub_uint16_t grub_efi_ipv6_address_t[8]; -+typedef grub_uint8_t grub_efi_ip_address_t[8] __attribute__ ((aligned (4))); -+typedef grub_efi_uint64_t grub_efi_physical_address_t; -+typedef grub_efi_uint64_t grub_efi_virtual_address_t; -+ -+struct grub_efi_guid -+{ -+ grub_uint32_t data1; -+ grub_uint16_t data2; -+ grub_uint16_t data3; -+ grub_uint8_t data4[8]; -+} __attribute__ ((aligned (8))); -+typedef struct grub_efi_guid grub_efi_guid_t; -+ -+/* XXX although the spec does not specify the padding, this actually -+ must have the padding! */ -+struct grub_efi_memory_descriptor -+{ -+ grub_efi_uint32_t type; -+ grub_efi_uint32_t padding; -+ grub_efi_physical_address_t physical_start; -+ grub_efi_virtual_address_t virtual_start; -+ grub_efi_uint64_t num_pages; -+ grub_efi_uint64_t attribute; -+}; -+typedef struct grub_efi_memory_descriptor grub_efi_memory_descriptor_t; -+ -+/* Device Path definitions. */ -+struct grub_efi_device_path -+{ -+ grub_efi_uint8_t type; -+ grub_efi_uint8_t subtype; -+ grub_efi_uint8_t length[2]; -+}; -+typedef struct grub_efi_device_path grub_efi_device_path_t; -+/* XXX EFI does not define EFI_DEVICE_PATH_PROTOCOL but uses it. -+ It seems to be identical to EFI_DEVICE_PATH. */ -+typedef struct grub_efi_device_path grub_efi_device_path_protocol_t; -+ -+#define GRUB_EFI_DEVICE_PATH_TYPE(dp) ((dp)->type & 0x7f) -+#define GRUB_EFI_DEVICE_PATH_SUBTYPE(dp) ((dp)->subtype) -+#define GRUB_EFI_DEVICE_PATH_LENGTH(dp) \ -+ ((dp)->length[0] | ((grub_efi_uint16_t) ((dp)->length[1]) << 8)) -+ -+/* The End of Device Path nodes. */ -+#define GRUB_EFI_END_DEVICE_PATH_TYPE (0xff & 0x7f) -+ -+#define GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE 0xff -+#define GRUB_EFI_END_THIS_DEVICE_PATH_SUBTYPE 0x01 -+ -+#define GRUB_EFI_END_ENTIRE_DEVICE_PATH(dp) \ -+ (GRUB_EFI_DEVICE_PATH_TYPE (dp) == GRUB_EFI_END_DEVICE_PATH_TYPE \ -+ && (GRUB_EFI_DEVICE_PATH_SUBTYPE (dp) \ -+ == GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE)) -+ -+#define GRUB_EFI_NEXT_DEVICE_PATH(dp) \ -+ ((grub_efi_device_path_t *) ((char *) (dp) \ -+ + GRUB_EFI_DEVICE_PATH_LENGTH (dp))) -+ -+/* Hardware Device Path. */ -+#define GRUB_EFI_HARDWARE_DEVICE_PATH_TYPE 1 -+ -+#define GRUB_EFI_PCI_DEVICE_PATH_SUBTYPE 1 -+ -+struct grub_efi_pci_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint8_t function; -+ grub_efi_uint8_t device; -+}; -+typedef struct grub_efi_pci_device_path grub_efi_pci_device_path_t; -+ -+#define GRUB_EFI_PCCARD_DEVICE_PATH_SUBTYPE 2 -+ -+struct grub_efi_pccard_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint8_t function; -+}; -+typedef struct grub_efi_pccard_device_path grub_efi_pccard_device_path_t; -+ -+#define GRUB_EFI_MEMORY_MAPPED_DEVICE_PATH_SUBTYPE 3 -+ -+struct grub_efi_memory_mapped_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_memory_type_t memory_type; -+ grub_efi_physical_address_t start_address; -+ grub_efi_physical_address_t end_address; -+}; -+typedef struct grub_efi_memory_mapped_device_path -+ grub_efi_memory_mapped_device_path_t; -+ -+#define GRUB_EFI_VENDOR_DEVICE_PATH_SUBTYPE 4 -+ -+struct grub_efi_vendor_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_guid_t vendor_guid; -+ grub_efi_uint8_t vendor_defined_data[0]; -+}; -+typedef struct grub_efi_vendor_device_path grub_efi_vendor_device_path_t; -+ -+#define GRUB_EFI_CONTROLLER_DEVICE_PATH_SUBTYPE 5 -+ -+struct grub_efi_controller_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint32_t controller_number; -+}; -+typedef struct grub_efi_controller_device_path -+ grub_efi_controller_device_path_t; -+ -+/* ACPI Device Path. */ -+#define GRUB_EFI_ACPI_DEVICE_PATH_TYPE 2 -+ -+#define GRUB_EFI_ACPI_DEVICE_PATH_SUBTYPE 1 -+ -+struct grub_efi_acpi_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint32_t hid; -+ grub_efi_uint32_t uid; -+}; -+typedef struct grub_efi_acpi_device_path grub_efi_acpi_device_path_t; -+ -+#define GRUB_EFI_EXPANDED_ACPI_DEVICE_PATH_SUBTYPE 2 -+ -+struct grub_efi_expanded_acpi_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint32_t hid; -+ grub_efi_uint32_t uid; -+ grub_efi_uint32_t cid; -+ char hidstr[1]; -+}; -+typedef struct grub_efi_expanded_acpi_device_path -+ grub_efi_expanded_acpi_device_path_t; -+ -+#define GRUB_EFI_EXPANDED_ACPI_HIDSTR(dp) \ -+ (((grub_efi_expanded_acpi_device_path_t *) dp)->hidstr) -+#define GRUB_EFI_EXPANDED_ACPI_UIDSTR(dp) \ -+ (GRUB_EFI_EXPANDED_ACPI_HIDSTR(dp) \ -+ + grub_strlen (GRUB_EFI_EXPANDED_ACPI_HIDSTR(dp)) + 1) -+#define GRUB_EFI_EXPANDED_ACPI_CIDSTR(dp) \ -+ (GRUB_EFI_EXPANDED_ACPI_UIDSTR(dp) \ -+ + grub_strlen (GRUB_EFI_EXPANDED_ACPI_UIDSTR(dp)) + 1) -+ -+/* Messaging Device Path. */ -+#define GRUB_EFI_MESSAGING_DEVICE_PATH_TYPE 3 -+ -+#define GRUB_EFI_ATAPI_DEVICE_PATH_SUBTYPE 1 -+ -+struct grub_efi_atapi_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint8_t primary_secondary; -+ grub_efi_uint8_t slave_master; -+ grub_efi_uint16_t lun; -+}; -+typedef struct grub_efi_atapi_device_path grub_efi_atapi_device_path_t; -+ -+#define GRUB_EFI_SCSI_DEVICE_PATH_SUBTYPE 2 -+ -+struct grub_efi_scsi_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint16_t pun; -+ grub_efi_uint16_t lun; -+}; -+typedef struct grub_efi_scsi_device_path grub_efi_scsi_device_path_t; -+ -+#define GRUB_EFI_FIBRE_CHANNEL_DEVICE_PATH_SUBTYPE 3 -+ -+struct grub_efi_fibre_channel_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint32_t reserved; -+ grub_efi_uint64_t wwn; -+ grub_efi_uint64_t lun; -+}; -+typedef struct grub_efi_fibre_channel_device_path -+ grub_efi_fibre_channel_device_path_t; -+ -+#define GRUB_EFI_1394_DEVICE_PATH_SUBTYPE 4 -+ -+struct grub_efi_1394_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint32_t reserved; -+ grub_efi_uint64_t guid; -+}; -+typedef struct grub_efi_1394_device_path grub_efi_1394_device_path_t; -+ -+#define GRUB_EFI_USB_DEVICE_PATH_SUBTYPE 5 -+ -+struct grub_efi_usb_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint8_t parent_port_number; -+ grub_efi_uint8_t interface; -+}; -+typedef struct grub_efi_usb_device_path grub_efi_usb_device_path_t; -+ -+#define GRUB_EFI_USB_CLASS_DEVICE_PATH_SUBTYPE 15 -+ -+struct grub_efi_usb_class_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint16_t vendor_id; -+ grub_efi_uint16_t product_id; -+ grub_efi_uint8_t device_class; -+ grub_efi_uint8_t device_subclass; -+ grub_efi_uint8_t device_protocol; -+}; -+typedef struct grub_efi_usb_class_device_path -+ grub_efi_usb_class_device_path_t; -+ -+#define GRUB_EFI_I2O_DEVICE_PATH_SUBTYPE 6 -+ -+struct grub_efi_i2o_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint32_t tid; -+}; -+typedef struct grub_efi_i2o_device_path grub_efi_i2o_device_path_t; -+ -+#define GRUB_EFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE 11 -+ -+struct grub_efi_mac_address_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_mac_address_t mac_address; -+ grub_efi_uint8_t if_type; -+}; -+typedef struct grub_efi_mac_address_device_path -+ grub_efi_mac_address_device_path_t; -+ -+#define GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE 12 -+ -+struct grub_efi_ipv4_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_ipv4_address_t local_ip_address; -+ grub_efi_ipv4_address_t remote_ip_address; -+ grub_efi_uint16_t local_port; -+ grub_efi_uint16_t remote_port; -+ grub_efi_uint16_t protocol; -+ grub_efi_uint8_t static_ip_address; -+}; -+typedef struct grub_efi_ipv4_device_path grub_efi_ipv4_device_path_t; -+ -+#define GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE 13 -+ -+struct grub_efi_ipv6_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_ipv6_address_t local_ip_address; -+ grub_efi_ipv6_address_t remote_ip_address; -+ grub_efi_uint16_t local_port; -+ grub_efi_uint16_t remote_port; -+ grub_efi_uint16_t protocol; -+ grub_efi_uint8_t static_ip_address; -+}; -+typedef struct grub_efi_ipv6_device_path grub_efi_ipv6_device_path_t; -+ -+#define GRUB_EFI_INFINIBAND_DEVICE_PATH_SUBTYPE 9 -+ -+struct grub_efi_infiniband_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint32_t resource_flags; -+ grub_efi_uint8_t port_gid[16]; -+ grub_efi_uint64_t remote_id; -+ grub_efi_uint64_t target_port_id; -+ grub_efi_uint64_t device_id; -+}; -+typedef struct grub_efi_infiniband_device_path -+ grub_efi_infiniband_device_path_t; -+ -+#define GRUB_EFI_UART_DEVICE_PATH_SUBTYPE 14 -+ -+struct grub_efi_uart_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint32_t reserved; -+ grub_efi_uint64_t baud_rate; -+ grub_efi_uint8_t data_bits; -+ grub_efi_uint8_t parity; -+ grub_efi_uint8_t stop_bits; -+}; -+typedef struct grub_efi_uart_device_path grub_efi_uart_device_path_t; -+ -+#define GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE 10 -+ -+struct grub_efi_vendor_messaging_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_guid_t vendor_guid; -+ grub_efi_uint8_t vendor_defined_data[0]; -+}; -+typedef struct grub_efi_vendor_messaging_device_path -+ grub_efi_vendor_messaging_device_path_t; -+ -+/* Media Device Path. */ -+#define GRUB_EFI_MEDIA_DEVICE_PATH_TYPE 4 -+ -+#define GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE 1 -+ -+struct grub_efi_hard_drive_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint32_t partition_number; -+ grub_efi_lba_t partition_start; -+ grub_efi_lba_t partition_size; -+ grub_efi_uint8_t partition_signature[16]; -+ grub_efi_uint8_t mbr_type; -+ grub_efi_uint8_t signature_type; -+}; -+typedef struct grub_efi_hard_drive_device_path -+ grub_efi_hard_drive_device_path_t; -+ -+#define GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE 2 -+ -+struct grub_efi_cdrom_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint32_t boot_entry; -+ grub_efi_lba_t partition_start; -+ grub_efi_lba_t partition_size; -+}; -+typedef struct grub_efi_cdrom_device_path grub_efi_cdrom_device_path_t; -+ -+#define GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE 3 -+ -+struct grub_efi_vendor_media_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_guid_t vendor_guid; -+ grub_efi_uint8_t vendor_defined_data[0]; -+}; -+typedef struct grub_efi_vendor_media_device_path -+ grub_efi_vendor_media_device_path_t; -+ -+#define GRUB_EFI_FILE_PATH_DEVICE_PATH_SUBTYPE 4 -+ -+struct grub_efi_file_path_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_char16_t path_name[0]; -+}; -+typedef struct grub_efi_file_path_device_path -+ grub_efi_file_path_device_path_t; -+ -+#define GRUB_EFI_PROTOCOL_DEVICE_PATH_SUBTYPE 5 -+ -+struct grub_efi_protocol_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_guid_t guid; -+}; -+typedef struct grub_efi_protocol_device_path grub_efi_protocol_device_path_t; -+ -+/* BIOS Boot Specification Device Path. */ -+#define GRUB_EFI_BIOS_DEVICE_PATH_TYPE 5 -+ -+#define GRUB_EFI_BIOS_DEVICE_PATH_SUBTYPE 1 -+ -+struct grub_efi_bios_device_path -+{ -+ grub_efi_device_path_t header; -+ grub_efi_uint16_t device_type; -+ grub_efi_uint16_t status_flags; -+ char description[0]; -+}; -+typedef struct grub_efi_bios_device_path grub_efi_bios_device_path_t; -+ -+struct grub_efi_device_path_from_text -+{ -+ grub_efi_device_path_t * (*convert_text_to_device_node) (const grub_efi_char16_t *text_device_node); -+ grub_efi_device_path_t * (*convert_text_to_device_path) (const grub_efi_char16_t *text_device_path); -+}; -+typedef struct grub_efi_device_path_from_text grub_efi_device_path_from_text_t; -+ -+struct grub_efi_open_protocol_information_entry -+{ -+ grub_efi_handle_t agent_handle; -+ grub_efi_handle_t controller_handle; -+ grub_efi_uint32_t attributes; -+ grub_efi_uint32_t open_count; -+}; -+typedef struct grub_efi_open_protocol_information_entry -+ grub_efi_open_protocol_information_entry_t; -+ -+struct grub_efi_time -+{ -+ grub_efi_uint16_t year; -+ grub_efi_uint8_t month; -+ grub_efi_uint8_t day; -+ grub_efi_uint8_t hour; -+ grub_efi_uint8_t minute; -+ grub_efi_uint8_t second; -+ grub_efi_uint8_t pad1; -+ grub_efi_uint32_t nanosecond; -+ grub_efi_int16_t time_zone; -+ grub_efi_uint8_t daylight; -+ grub_efi_uint8_t pad2; -+}; -+typedef struct grub_efi_time grub_efi_time_t; -+ -+struct grub_efi_time_capabilities -+{ -+ grub_efi_uint32_t resolution; -+ grub_efi_uint32_t accuracy; -+ grub_efi_boolean_t sets_to_zero; -+}; -+typedef struct grub_efi_time_capabilities grub_efi_time_capabilities_t; -+ -+struct grub_efi_input_key -+{ -+ grub_efi_uint16_t scan_code; -+ grub_efi_char16_t unicode_char; -+}; -+typedef struct grub_efi_input_key grub_efi_input_key_t; -+ -+struct grub_efi_simple_text_output_mode -+{ -+ grub_efi_int32_t max_mode; -+ grub_efi_int32_t mode; -+ grub_efi_int32_t attribute; -+ grub_efi_int32_t cursor_column; -+ grub_efi_int32_t cursor_row; -+ grub_efi_boolean_t cursor_visible; -+}; -+typedef struct grub_efi_simple_text_output_mode -+ grub_efi_simple_text_output_mode_t; -+ -+/* Tables. */ -+struct grub_efi_table_header -+{ -+ grub_efi_uint64_t signature; -+ grub_efi_uint32_t revision; -+ grub_efi_uint32_t header_size; -+ grub_efi_uint32_t crc32; -+ grub_efi_uint32_t reserved; -+}; -+typedef struct grub_efi_table_header grub_efi_table_header_t; -+ -+struct grub_efi_boot_services -+{ -+ grub_efi_table_header_t hdr; -+ -+ grub_efi_tpl_t (*raise_tpl) (grub_efi_tpl_t new_tpl); -+ -+ void (*restore_tpl) (grub_efi_tpl_t old_tpl); -+ -+ grub_efi_status_t -+ (*allocate_pages) (grub_efi_allocate_type_t type, -+ grub_efi_memory_type_t memory_type, -+ grub_efi_uintn_t pages, -+ grub_efi_physical_address_t * memory); -+ -+ grub_efi_status_t -+ (*free_pages) (grub_efi_physical_address_t memory, -+ grub_efi_uintn_t pages); -+ -+ grub_efi_status_t -+ (*get_memory_map) (grub_efi_uintn_t * memory_map_size, -+ grub_efi_memory_descriptor_t * memory_map, -+ grub_efi_uintn_t * map_key, -+ grub_efi_uintn_t * descriptor_size, -+ grub_efi_uint32_t * descriptor_version); -+ -+ grub_efi_status_t -+ (*allocate_pool) (grub_efi_memory_type_t pool_type, -+ grub_efi_uintn_t size, void **buffer); -+ -+ grub_efi_status_t (*free_pool) (void *buffer); -+ -+ grub_efi_status_t -+ (*create_event) (grub_efi_uint32_t type, -+ grub_efi_tpl_t notify_tpl, -+ void (*notify_function) (grub_efi_event_t event, -+ void *context), -+ void *notify_context, grub_efi_event_t * event); -+ -+ grub_efi_status_t -+ (*set_timer) (grub_efi_event_t event, -+ grub_efi_timer_delay_t type, -+ grub_efi_uint64_t trigger_time); -+ -+ grub_efi_status_t -+ (*wait_for_event) (grub_efi_uintn_t num_events, -+ grub_efi_event_t * event, grub_efi_uintn_t * index); -+ -+ grub_efi_status_t (*signal_event) (grub_efi_event_t event); -+ -+ grub_efi_status_t (*close_event) (grub_efi_event_t event); -+ -+ grub_efi_status_t (*check_event) (grub_efi_event_t event); -+ -+ grub_efi_status_t -+ (*install_protocol_interface) (grub_efi_handle_t * handle, -+ grub_efi_guid_t * protocol, -+ grub_efi_interface_type_t interface_type, -+ void *interface); -+ -+ grub_efi_status_t -+ (*reinstall_protocol_interface) (grub_efi_handle_t handle, -+ grub_efi_guid_t * protocol, -+ void *old_interface, void *new_inteface); -+ -+ grub_efi_status_t -+ (*uninstall_protocol_interface) (grub_efi_handle_t handle, -+ grub_efi_guid_t * protocol, -+ void *interface); -+ -+ grub_efi_status_t -+ (*handle_protocol) (grub_efi_handle_t handle, -+ grub_efi_guid_t * protocol, void **interface); -+ -+ void *reserved; -+ -+ grub_efi_status_t -+ (*register_protocol_notify) (grub_efi_guid_t * protocol, -+ grub_efi_event_t event, void **registration); -+ -+ grub_efi_status_t -+ (*locate_handle) (grub_efi_locate_search_type_t search_type, -+ grub_efi_guid_t * protocol, -+ void *search_key, -+ grub_efi_uintn_t * buffer_size, -+ grub_efi_handle_t * buffer); -+ -+ grub_efi_status_t -+ (*locate_device_path) (grub_efi_guid_t * protocol, -+ grub_efi_device_path_t ** device_path, -+ grub_efi_handle_t * device); -+ -+ grub_efi_status_t -+ (*install_configuration_table) (grub_efi_guid_t * guid, void *table); -+ -+ grub_efi_status_t -+ (*load_image) (grub_efi_boolean_t boot_policy, -+ grub_efi_handle_t parent_image_handle, -+ grub_efi_device_path_t * file_path, -+ void *source_buffer, -+ grub_efi_uintn_t source_size, -+ grub_efi_handle_t * image_handle); -+ -+ grub_efi_status_t -+ (*start_image) (grub_efi_handle_t image_handle, -+ grub_efi_uintn_t * exit_data_size, -+ grub_efi_char16_t ** exit_data); -+ -+ grub_efi_status_t -+ (*exit) (grub_efi_handle_t image_handle, -+ grub_efi_status_t exit_status, -+ grub_efi_uintn_t exit_data_size, -+ grub_efi_char16_t * exit_data) __attribute__ ((noreturn)); -+ -+ grub_efi_status_t (*unload_image) (grub_efi_handle_t image_handle); -+ -+ grub_efi_status_t -+ (*exit_boot_services) (grub_efi_handle_t image_handle, -+ grub_efi_uintn_t map_key); -+ -+ grub_efi_status_t (*get_next_monotonic_count) (grub_efi_uint64_t * count); -+ -+ grub_efi_status_t (*stall) (grub_efi_uintn_t microseconds); -+ -+ grub_efi_status_t -+ (*set_watchdog_timer) (grub_efi_uintn_t timeout, -+ grub_efi_uint64_t watchdog_code, -+ grub_efi_uintn_t data_size, -+ grub_efi_char16_t * watchdog_data); -+ -+ grub_efi_status_t -+ (*connect_controller) (grub_efi_handle_t controller_handle, -+ grub_efi_handle_t * driver_image_handle, -+ grub_efi_device_path_protocol_t * -+ remaining_device_path, -+ grub_efi_boolean_t recursive); -+ -+ grub_efi_status_t -+ (*disconnect_controller) (grub_efi_handle_t controller_handle, -+ grub_efi_handle_t driver_image_handle, -+ grub_efi_handle_t child_handle); -+ -+ grub_efi_status_t -+ (*open_protocol) (grub_efi_handle_t handle, -+ grub_efi_guid_t * protocol, -+ void **interface, -+ grub_efi_handle_t agent_handle, -+ grub_efi_handle_t controller_handle, -+ grub_efi_uint32_t attributes); -+ -+ grub_efi_status_t -+ (*close_protocol) (grub_efi_handle_t handle, -+ grub_efi_guid_t * protocol, -+ grub_efi_handle_t agent_handle, -+ grub_efi_handle_t controller_handle); -+ -+ grub_efi_status_t -+ (*open_protocol_information) (grub_efi_handle_t handle, -+ grub_efi_guid_t * protocol, -+ grub_efi_open_protocol_information_entry_t -+ ** entry_buffer, -+ grub_efi_uintn_t * entry_count); -+ -+ grub_efi_status_t -+ (*protocols_per_handle) (grub_efi_handle_t handle, -+ grub_efi_guid_t *** protocol_buffer, -+ grub_efi_uintn_t * protocol_buffer_count); -+ -+ grub_efi_status_t -+ (*locate_handle_buffer) (grub_efi_locate_search_type_t search_type, -+ grub_efi_guid_t * protocol, -+ void *search_key, -+ grub_efi_uintn_t * no_handles, -+ grub_efi_handle_t ** buffer); -+ -+ grub_efi_status_t -+ (*locate_protocol) (grub_efi_guid_t * protocol, -+ void *registration, void **interface); -+ -+ grub_efi_status_t -+ (*install_multiple_protocol_interfaces) (grub_efi_handle_t * handle, ...); -+ -+ grub_efi_status_t -+ (*uninstall_multiple_protocol_interfaces) (grub_efi_handle_t handle, ...); -+ -+ grub_efi_status_t -+ (*calculate_crc32) (void *data, -+ grub_efi_uintn_t data_size, -+ grub_efi_uint32_t * crc32); -+ -+ void (*copy_mem) (void *destination, void *source, grub_efi_uintn_t length); -+ -+ void -+ (*set_mem) (void *buffer, grub_efi_uintn_t size, grub_efi_uint8_t value); -+}; -+typedef struct grub_efi_boot_services grub_efi_boot_services_t; -+ -+struct grub_efi_runtime_services -+{ -+ grub_efi_table_header_t hdr; -+ -+ grub_efi_status_t -+ (*get_time) (grub_efi_time_t * time, -+ grub_efi_time_capabilities_t * capabilities); -+ -+ grub_efi_status_t (*set_time) (grub_efi_time_t * time); -+ -+ grub_efi_status_t -+ (*get_wakeup_time) (grub_efi_boolean_t * enabled, -+ grub_efi_boolean_t * pending, grub_efi_time_t * time); -+ -+ grub_efi_status_t -+ (*set_wakeup_time) (grub_efi_boolean_t enabled, grub_efi_time_t * time); -+ -+ grub_efi_status_t -+ (*set_virtual_address_map) (grub_efi_uintn_t memory_map_size, -+ grub_efi_uintn_t descriptor_size, -+ grub_efi_uint32_t descriptor_version, -+ grub_efi_memory_descriptor_t * virtual_map); -+ -+ grub_efi_status_t -+ (*convert_pointer) (grub_efi_uintn_t debug_disposition, void **address); -+ -+ grub_efi_status_t -+ (*get_variable) (grub_efi_char16_t * variable_name, -+ grub_efi_guid_t * vendor_guid, -+ grub_efi_uint32_t * attributes, -+ grub_efi_uintn_t * data_size, void *data); -+ -+ grub_efi_status_t -+ (*get_next_variable_name) (grub_efi_uintn_t * variable_name_size, -+ grub_efi_char16_t * variable_name, -+ grub_efi_guid_t * vendor_guid); -+ -+ grub_efi_status_t -+ (*set_variable) (grub_efi_char16_t * variable_name, -+ grub_efi_guid_t * vendor_guid, -+ grub_efi_uint32_t attributes, -+ grub_efi_uintn_t data_size, void *data); -+ -+ grub_efi_status_t -+ (*get_next_high_monotonic_count) (grub_efi_uint32_t * high_count); -+ -+ void -+ (*reset_system) (grub_efi_reset_type_t reset_type, -+ grub_efi_status_t reset_status, -+ grub_efi_uintn_t data_size, -+ grub_efi_char16_t * reset_data); -+}; -+typedef struct grub_efi_runtime_services grub_efi_runtime_services_t; -+ -+struct grub_efi_configuration_table -+{ -+ grub_efi_guid_t vendor_guid; -+ void *vendor_table; -+}; -+typedef struct grub_efi_configuration_table grub_efi_configuration_table_t; -+ -+struct grub_efi_simple_input_interface -+{ -+ grub_efi_status_t -+ (*reset) (struct grub_efi_simple_input_interface * this, -+ grub_efi_boolean_t extended_verification); -+ -+ grub_efi_status_t -+ (*read_key_stroke) (struct grub_efi_simple_input_interface * this, -+ grub_efi_input_key_t * key); -+ -+ grub_efi_event_t wait_for_key; -+}; -+typedef struct grub_efi_simple_input_interface -+ grub_efi_simple_input_interface_t; -+ -+struct grub_efi_simple_text_output_interface -+{ -+ grub_efi_status_t -+ (*reset) (struct grub_efi_simple_text_output_interface * this, -+ grub_efi_boolean_t extended_verification); -+ -+ grub_efi_status_t -+ (*output_string) (struct grub_efi_simple_text_output_interface * this, -+ grub_efi_char16_t * string); -+ -+ grub_efi_status_t -+ (*test_string) (struct grub_efi_simple_text_output_interface * this, -+ grub_efi_char16_t * string); -+ -+ grub_efi_status_t -+ (*query_mode) (struct grub_efi_simple_text_output_interface * this, -+ grub_efi_uintn_t mode_number, -+ grub_efi_uintn_t * columns, grub_efi_uintn_t * rows); -+ -+ grub_efi_status_t -+ (*set_mode) (struct grub_efi_simple_text_output_interface * this, -+ grub_efi_uintn_t mode_number); -+ -+ grub_efi_status_t -+ (*set_attributes) (struct grub_efi_simple_text_output_interface * this, -+ grub_efi_uintn_t attribute); -+ -+ grub_efi_status_t -+ (*clear_screen) (struct grub_efi_simple_text_output_interface * this); -+ -+ grub_efi_status_t -+ (*set_cursor_position) (struct grub_efi_simple_text_output_interface * -+ this, grub_efi_uintn_t column, -+ grub_efi_uintn_t row); -+ -+ grub_efi_status_t -+ (*enable_cursor) (struct grub_efi_simple_text_output_interface * this, -+ grub_efi_boolean_t visible); -+ -+ grub_efi_simple_text_output_mode_t *mode; -+}; -+typedef struct grub_efi_simple_text_output_interface -+ grub_efi_simple_text_output_interface_t; -+ -+#define GRUB_EFI_BLACK 0x00 -+#define GRUB_EFI_BLUE 0x01 -+#define GRUB_EFI_GREEN 0x02 -+#define GRUB_EFI_CYAN 0x03 -+#define GRUB_EFI_RED 0x04 -+#define GRUB_EFI_MAGENTA 0x05 -+#define GRUB_EFI_BROWN 0x06 -+#define GRUB_EFI_LIGHTGRAY 0x07 -+#define GRUB_EFI_BRIGHT 0x08 -+#define GRUB_EFI_DARKGRAY 0x08 -+#define GRUB_EFI_LIGHTBLUE 0x09 -+#define GRUB_EFI_LIGHTGREEN 0x0A -+#define GRUB_EFI_LIGHTCYAN 0x0B -+#define GRUB_EFI_LIGHTRED 0x0C -+#define GRUB_EFI_LIGHTMAGENTA 0x0D -+#define GRUB_EFI_YELLOW 0x0E -+#define GRUB_EFI_WHITE 0x0F -+ -+#define GRUB_EFI_BACKGROUND_BLACK 0x00 -+#define GRUB_EFI_BACKGROUND_BLUE 0x10 -+#define GRUB_EFI_BACKGROUND_GREEN 0x20 -+#define GRUB_EFI_BACKGROUND_CYAN 0x30 -+#define GRUB_EFI_BACKGROUND_RED 0x40 -+#define GRUB_EFI_BACKGROUND_MAGENTA 0x50 -+#define GRUB_EFI_BACKGROUND_BROWN 0x60 -+#define GRUB_EFI_BACKGROUND_LIGHTGRAY 0x70 -+ -+#define GRUB_EFI_TEXT_ATTR(fg, bg) ((fg) | ((bg))) -+ -+struct grub_efi_system_table -+{ -+ grub_efi_table_header_t hdr; -+ grub_efi_char16_t *firmware_vendor; -+ grub_efi_uint32_t firmware_revision; -+ grub_efi_handle_t console_in_handler; -+ grub_efi_simple_input_interface_t *con_in; -+ grub_efi_handle_t console_out_handler; -+ grub_efi_simple_text_output_interface_t *con_out; -+ grub_efi_handle_t standard_error_handle; -+ grub_efi_simple_text_output_interface_t *std_err; -+ grub_efi_runtime_services_t *runtime_services; -+ grub_efi_boot_services_t *boot_services; -+ grub_efi_uintn_t num_table_entries; -+ grub_efi_configuration_table_t *configuration_table; -+}; -+typedef struct grub_efi_system_table grub_efi_system_table_t; -+ -+struct grub_efi_loaded_image -+{ -+ grub_efi_uint32_t revision; -+ grub_efi_handle_t parent_handle; -+ grub_efi_system_table_t *system_table; -+ -+ grub_efi_handle_t device_handle; -+ grub_efi_device_path_t *file_path; -+ void *reserved; -+ -+ grub_efi_uint32_t load_options_size; -+ void *load_options; -+ -+ void *image_base; -+ grub_efi_uint64_t image_size; -+ grub_efi_memory_type_t image_code_type; -+ grub_efi_memory_type_t image_data_type; -+ -+ grub_efi_status_t (*unload) (grub_efi_handle_t image_handle); -+}; -+typedef struct grub_efi_loaded_image grub_efi_loaded_image_t; -+ -+struct grub_efi_disk_io -+{ -+ grub_efi_uint64_t revision; -+ grub_efi_status_t (*read) (struct grub_efi_disk_io * this, -+ grub_efi_uint32_t media_id, -+ grub_efi_uint64_t offset, -+ grub_efi_uintn_t buffer_size, void *buffer); -+ grub_efi_status_t (*write) (struct grub_efi_disk_io * this, -+ grub_efi_uint32_t media_id, -+ grub_efi_uint64_t offset, -+ grub_efi_uintn_t buffer_size, void *buffer); -+}; -+typedef struct grub_efi_disk_io grub_efi_disk_io_t; -+ -+struct grub_efi_block_io_media -+{ -+ grub_efi_uint32_t media_id; -+ grub_efi_boolean_t removable_media; -+ grub_efi_boolean_t media_present; -+ grub_efi_boolean_t logical_partition; -+ grub_efi_boolean_t read_only; -+ grub_efi_boolean_t write_caching; -+ grub_efi_uint8_t pad[3]; -+ grub_efi_uint32_t block_size; -+ grub_efi_uint32_t io_align; -+ grub_efi_uint8_t pad2[4]; -+ grub_efi_lba_t last_block; -+}; -+typedef struct grub_efi_block_io_media grub_efi_block_io_media_t; -+ -+struct grub_efi_block_io -+{ -+ grub_efi_uint64_t revision; -+ grub_efi_block_io_media_t *media; -+ grub_efi_status_t (*reset) (struct grub_efi_block_io * this, -+ grub_efi_boolean_t extended_verification); -+ grub_efi_status_t (*read_blocks) (struct grub_efi_block_io * this, -+ grub_efi_uint32_t media_id, -+ grub_efi_lba_t lba, -+ grub_efi_uintn_t buffer_size, -+ void *buffer); -+ grub_efi_status_t (*write_blocks) (struct grub_efi_block_io * this, -+ grub_efi_uint32_t media_id, -+ grub_efi_lba_t lba, -+ grub_efi_uintn_t buffer_size, -+ void *buffer); -+ grub_efi_status_t (*flush_blocks) (struct grub_efi_block_io * this); -+}; -+typedef struct grub_efi_block_io grub_efi_block_io_t; -+ -+struct grub_efi_pixel_bitmask -+{ -+ grub_efi_uint32_t red_mask; -+ grub_efi_uint32_t green_mask; -+ grub_efi_uint32_t blue_mask; -+ grub_efi_uint32_t reserved_mask; -+}; -+typedef struct grub_efi_pixel_bitmask grub_efi_pixel_bitmask_t; -+ -+enum grub_efi_graphics_pixel_format -+{ -+ GRUB_EFI_PIXEL_RGBR_8BIT_PER_COLOR, -+ GRUB_EFI_PIXEL_BGRR_8BIT_PER_COLOR, -+ GRUB_EFI_PIXEL_BIT_MASK, -+ GRUB_EFI_PIXEL_BLT_ONLY, -+}; -+typedef enum grub_efi_graphics_pixel_format grub_efi_graphics_pixel_format_t; -+ -+struct grub_efi_graphics_output_mode_information -+{ -+ grub_efi_uint32_t version; -+ grub_efi_uint32_t horizontal_resolution; -+ grub_efi_uint32_t vertical_resolution; -+ grub_efi_graphics_pixel_format_t pixel_format; -+ grub_efi_pixel_bitmask_t pixel_information; -+ grub_efi_uint32_t pixels_per_scan_line; -+}; -+typedef struct grub_efi_graphics_output_mode_information -+ grub_efi_graphics_output_mode_information_t; -+ -+struct grub_efi_graphics_output_bgrr_pixel -+{ -+ grub_efi_uint8_t blue; -+ grub_efi_uint8_t green; -+ grub_efi_uint8_t red; -+ grub_efi_uint8_t reserved; -+}; -+typedef struct grub_efi_graphics_output_bgrr_pixel -+ grub_efi_graphics_output_bgrr_pixel_t; -+typedef struct grub_efi_graphics_output_bgrr_pixel -+ grub_efi_graphics_output_blt_pixel_t; -+typedef struct grub_efi_graphics_output_bgrr_pixel -+ grub_efi_uga_pixel_t; -+ -+struct grub_efi_graphics_output_rgbr_pixel -+{ -+ grub_efi_uint8_t red; -+ grub_efi_uint8_t green; -+ grub_efi_uint8_t blue; -+ grub_efi_uint8_t reserved; -+}; -+typedef struct grub_efi_graphics_output_rgbr_pixel -+ grub_efi_graphics_output_rgbr_pixel_t; -+ -+union grub_efi_graphics_output_pixel -+{ -+ grub_efi_graphics_output_rgbr_pixel_t rgbr; -+ grub_efi_graphics_output_bgrr_pixel_t bgrr; -+ grub_efi_uint32_t raw; -+}; -+typedef union grub_efi_graphics_output_pixel -+ grub_efi_graphics_output_pixel_t; -+ -+enum grub_efi_graphics_output_blt_operation -+{ -+ GRUB_EFI_BLT_VIDEO_FILL, -+ GRUB_EFI_BLT_VIDEO_TO_BLT_BUFFER, -+ GRUB_EFI_BLT_BUFFER_TO_VIDEO, -+ GRUB_EFI_BLT_VIDEO_TO_VIDEO, -+}; -+typedef enum grub_efi_graphics_output_blt_operation -+ grub_efi_graphics_output_blt_operation_t; -+ -+struct grub_efi_graphics_output_mode -+{ -+ grub_efi_uint32_t max_mode; -+ grub_efi_uint32_t mode; -+ grub_efi_graphics_output_mode_information_t *info; -+ grub_efi_uintn_t size_of_info; -+ grub_efi_physical_address_t frame_buffer_base; -+ grub_efi_uintn_t frame_buffer_size; -+}; -+typedef struct grub_efi_graphics_output_mode grub_efi_graphics_output_mode_t; -+ -+struct grub_efi_graphics_output -+{ -+ grub_efi_status_t (*query_mode) (struct grub_efi_graphics_output * this, -+ grub_efi_uint32_t mode_number, -+ grub_efi_uintn_t * size_of_info, -+ grub_efi_graphics_output_mode_information_t -+ ** info); -+ grub_efi_status_t (*set_mode) (struct grub_efi_graphics_output * this, -+ grub_efi_uint32_t mode_number); -+ -+ grub_efi_status_t (*blt) (struct grub_efi_graphics_output * this, -+ grub_efi_graphics_output_blt_pixel_t * blt_buffer, -+ grub_efi_graphics_output_blt_operation_t -+ blt_operation, grub_efi_uintn_t src_x, -+ grub_efi_uintn_t src_y, grub_efi_uintn_t dest_x, -+ grub_efi_uintn_t dest_y, grub_efi_uintn_t width, -+ grub_efi_uintn_t height, grub_efi_uintn_t delta); -+ grub_efi_graphics_output_mode_t *mode; -+}; -+typedef struct grub_efi_graphics_output grub_efi_graphics_output_t; -+ -+typedef enum { -+ EfiUgaVideoFill, -+ EfiUgaVideoToBltBuffer, -+ EfiUgaBltBufferToVideo, -+ EfiUgaVideoToVideo, -+ EfiUgaBltMax -+} grub_efi_uga_blt_operation_t; -+ -+typedef enum { -+ grub_efi_pci_io_width_uint8, -+ grub_efi_pci_io_width_uint16, -+ grub_efi_pci_io_width_uint32, -+ grub_efi_pci_io_width_uint64, -+ grub_efi_pci_io_width_fifo_uint8, -+ grub_efi_pci_io_width_fifo_uint16, -+ grub_efi_pci_io_width_fifo_uint32, -+ grub_efi_pci_io_width_fifo_uint64, -+ grub_efi_pci_io_width_fill_uint8, -+ grub_efi_pci_io_width_fill_uint16, -+ grub_efi_pci_io_width_fill_uint32, -+ grub_efi_pci_io_width_fill_uint64, -+ grub_efi_pci_io_width_maximum -+} grub_efi_pci_io_width; -+ -+struct grub_efi_pci_io; -+ -+typedef struct -+{ -+ grub_efi_status_t(*read) (struct grub_efi_pci_io *this, -+ grub_efi_pci_io_width width, -+ grub_efi_uint8_t bar_index, -+ grub_efi_uint64_t offset, -+ grub_efi_uintn_t count, -+ void *buffer); -+ grub_efi_status_t(*write) (struct grub_efi_pci_io *this, -+ grub_efi_pci_io_width width, -+ grub_efi_uint8_t bar_index, -+ grub_efi_uint64_t offset, -+ grub_efi_uintn_t count, -+ void *buffer); -+} grub_efi_pci_io_access_t; -+ -+typedef struct -+{ -+ grub_efi_status_t( *read) (struct grub_efi_pci_io *this, -+ grub_efi_pci_io_width width, -+ grub_efi_uint32_t offset, -+ grub_efi_uintn_t count, -+ void *buffer); -+ grub_efi_status_t( *write) (struct grub_efi_pci_io *this, -+ grub_efi_pci_io_width width, -+ grub_efi_uint32_t offset, -+ grub_efi_uintn_t count, -+ void *buffer); -+} grub_efi_pci_io_config_access_t; -+ -+typedef enum { -+ grub_efi_pci_io_operation_bus_masterread, -+ grub_efi_pci_io_operation_bus_masterwrite, -+ grub_efi_pci_io_operation_bus_master_common_buffer, -+ grub_efi_pci_io_operation_maximum -+} grub_efi_pci_io_operation_t; -+ -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_ISA_IO 0x0002 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO 0x0004 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_MEMORY 0x0008 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_IO 0x0010 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_IDE_PRIMARY_IO 0x0020 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_IDE_SECONDARY_IO 0x0040 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY_WRITE_COMBINE 0x0080 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_IO 0x0100 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY 0x0200 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_BUS_MASTER 0x0400 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY_CACHED 0x0800 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_MEMORY_DISABLE 0x1000 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_EMBEDDED_DEVICE 0x2000 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_EMBEDDED_ROM 0x4000 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE 0x8000 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_ISA_IO_16 0x10000 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_PALETTE_IO_16 0x20000 -+#define GRUB_EFI_PCI_IO_ATTRIBUTE_VGA_IO_16 0x40000 -+ -+typedef enum { -+ grub_efi_pci_io_attribute_operation_get, -+ grub_efi_pci_io_attribute_operation_set, -+ grub_efi_pci_io_attribute_operation_enable, -+ grub_efi_pci_io_attribute_operation_disable, -+ grub_efi_pci_io_attribute_operation_supported, -+ grub_efi_pci_io_attribute_operation_maximum -+} grub_efi_pci_io_attribute_operation_t; -+ -+struct grub_efi_pci_io { -+ grub_efi_status_t (*poll_mem) (struct grub_efi_pci_io *this, -+ grub_efi_pci_io_width width, -+ grub_efi_uint8_t bar_ndex, -+ grub_efi_uint64_t offset, -+ grub_efi_uint64_t mask, -+ grub_efi_uint64_t value, -+ grub_efi_uint64_t delay, -+ grub_efi_uint64_t *result); -+ grub_efi_status_t (*poll_io) (struct grub_efi_pci_io *this, -+ grub_efi_pci_io_width Width, -+ grub_efi_uint8_t bar_index, -+ grub_efi_uint64_t offset, -+ grub_efi_uint64_t mask, -+ grub_efi_uint64_t value, -+ grub_efi_uint64_t delay, -+ grub_efi_uint64_t *result); -+ grub_efi_pci_io_access_t mem; -+ grub_efi_pci_io_access_t io; -+ grub_efi_pci_io_config_access_t pci; -+ grub_efi_status_t (*copy_mem) (struct grub_efi_pci_io *this, -+ grub_efi_pci_io_width width, -+ grub_efi_uint8_t dest_bar_index, -+ grub_efi_uint64_t dest_offset, -+ grub_efi_uint8_t src_bar_index, -+ grub_efi_uint64_t src_offset, -+ grub_efi_uintn_t count); -+ grub_efi_status_t (*map) ( struct grub_efi_pci_io *this, -+ grub_efi_pci_io_operation_t operation, -+ void *host_address, -+ grub_efi_uintn_t *number_of_bytes, -+ grub_efi_uint64_t *device_address, -+ void **mapping); -+ grub_efi_status_t (*unmap) (struct grub_efi_pci_io *this, -+ void *mapping); -+ grub_efi_status_t (*allocate_buffer) (struct grub_efi_pci_io *this, -+ grub_efi_allocate_type_t type, -+ grub_efi_memory_type_t memory_type, -+ grub_efi_uintn_t pages, -+ void **host_address, -+ grub_efi_uint64_t attributes); -+ grub_efi_status_t (*free_buffer) (struct grub_efi_pci_io *this, -+ grub_efi_allocate_type_t type, -+ grub_efi_memory_type_t memory_type, -+ grub_efi_uintn_t pages, -+ void **host_address, -+ grub_efi_uint64_t attributes); -+ grub_efi_status_t (*flush) (struct grub_efi_pci_io *this); -+ grub_efi_status_t (*get_location) (struct grub_efi_pci_io *this, -+ grub_efi_uintn_t *segment_number, -+ grub_efi_uintn_t *bus_number, -+ grub_efi_uintn_t *device_number, -+ grub_efi_uintn_t *function_number); -+ grub_efi_status_t (*attributes) (struct grub_efi_pci_io *this, -+ grub_efi_pci_io_attribute_operation_t operation, -+ grub_efi_uint64_t attributes, -+ grub_efi_uint64_t *result); -+ grub_efi_status_t (*get_bar_attributes) (struct grub_efi_pci_io *this, -+ grub_efi_uint8_t bar_index, -+ grub_efi_uint64_t *supports, -+ void **resources); -+ grub_efi_status_t (*set_bar_attributes) (struct grub_efi_pci_io *this, -+ grub_efi_uint64_t attributes, -+ grub_efi_uint8_t bar_index, -+ grub_efi_uint64_t *offset, -+ grub_efi_uint64_t *length); -+ grub_efi_uint64_t rom_size; -+ void *rom_image; -+}; -+typedef struct grub_efi_pci_io grub_efi_pci_io_t; -+ -+struct grub_efi_pci_root_io; -+ -+typedef struct -+{ -+ grub_efi_status_t(*read) (struct grub_efi_pci_root_io *this, -+ grub_efi_pci_io_width width, -+ grub_efi_uint64_t address, -+ grub_efi_uintn_t count, -+ void *buffer); -+ grub_efi_status_t(*write) (struct grub_efi_pci_root_io *this, -+ grub_efi_pci_io_width width, -+ grub_efi_uint64_t address, -+ grub_efi_uintn_t count, -+ void *buffer); -+} grub_efi_pci_root_io_access_t; -+ -+typedef enum { -+ grub_efi_pci_root_io_operation_bus_master_read, -+ grub_efi_pci_root_io_operation_bus_master_write, -+ grub_efi_pci_root_io_operation_bus_master_common_buffer, -+ grub_efi_pci_root_io_operation_bus_master_read_64, -+ grub_efi_pci_root_io_operation_bus_master_write_64, -+ grub_efi_pci_root_io_operation_bus_master_common_buffer_64, -+ grub_efi_pci_root_io_operation_maximum -+} grub_efi_pci_root_io_operation_t; -+ -+struct grub_efi_pci_root_io { -+ grub_efi_handle_t parent; -+ grub_efi_status_t (*poll_mem) (struct grub_efi_pci_root_io *this, -+ grub_efi_pci_io_width width, -+ grub_efi_uint64_t address, -+ grub_efi_uint64_t mask, -+ grub_efi_uint64_t value, -+ grub_efi_uint64_t delay, -+ grub_efi_uint64_t *result); -+ grub_efi_status_t (*poll_io) (struct grub_efi_pci_root_io *this, -+ grub_efi_pci_io_width Width, -+ grub_efi_uint64_t address, -+ grub_efi_uint64_t mask, -+ grub_efi_uint64_t value, -+ grub_efi_uint64_t delay, -+ grub_efi_uint64_t *result); -+ grub_efi_pci_root_io_access_t mem; -+ grub_efi_pci_root_io_access_t io; -+ grub_efi_pci_root_io_access_t pci; -+ grub_efi_status_t (*copy_mem) (struct grub_efi_pci_root_io *this, -+ grub_efi_pci_io_width width, -+ grub_efi_uint64_t dest_offset, -+ grub_efi_uint64_t src_offset, -+ grub_efi_uintn_t count); -+ grub_efi_status_t (*map) ( struct grub_efi_pci_root_io *this, -+ grub_efi_pci_root_io_operation_t operation, -+ void *host_address, -+ grub_efi_uintn_t *number_of_bytes, -+ grub_efi_uint64_t *device_address, -+ void **mapping); -+ grub_efi_status_t (*unmap) (struct grub_efi_pci_root_io *this, -+ void *mapping); -+ grub_efi_status_t (*allocate_buffer) (struct grub_efi_pci_root_io *this, -+ grub_efi_allocate_type_t type, -+ grub_efi_memory_type_t memory_type, -+ grub_efi_uintn_t pages, -+ void **host_address, -+ grub_efi_uint64_t attributes); -+ grub_efi_status_t (*free_buffer) (struct grub_efi_pci_root_io *this, -+ grub_efi_uintn_t pages, -+ void **host_address); -+ grub_efi_status_t (*flush) (struct grub_efi_pci_root_io *this); -+ grub_efi_status_t (*get_attributes) (struct grub_efi_pci_root_io *this, -+ grub_efi_uint64_t *supports, -+ void **resources); -+ grub_efi_status_t (*set_attributes) (struct grub_efi_pci_root_io *this, -+ grub_efi_uint64_t attributes, -+ grub_efi_uint64_t *offset, -+ grub_efi_uint64_t *length); -+ grub_efi_status_t (*configuration) (struct grub_efi_pci_root_io *this, -+ void **resources); -+}; -+ -+typedef struct grub_efi_pci_root_io grub_efi_pci_root_io_t; -+ -+struct grub_efi_uga_draw -+{ -+ grub_efi_status_t (*get_mode) (struct grub_efi_uga_draw * this, -+ grub_efi_uint32_t *horizontal_resolution, -+ grub_efi_uint32_t *vertical_resolution, -+ grub_efi_uint32_t *color_depth, -+ grub_efi_uint32_t *refresh_rate); -+ grub_efi_status_t (*set_mode) (struct grub_efi_uga_draw * this, -+ grub_efi_uint32_t horizontal_resolution, -+ grub_efi_uint32_t vertical_resolution, -+ grub_efi_uint32_t color_depth, -+ grub_efi_uint32_t refresh_rate); -+ grub_efi_status_t (*blt) (struct grub_efi_uga_draw * this, -+ grub_efi_uga_pixel_t *blt_buffer, -+ grub_efi_uga_blt_operation_t blt_operation, -+ grub_efi_uintn_t source_x, -+ grub_efi_uintn_t source_y, -+ grub_efi_uintn_t destination_x, -+ grub_efi_uintn_t destination_y, -+ grub_efi_uintn_t width, -+ grub_efi_uintn_t height, -+ grub_efi_uintn_t delta); -+}; -+typedef struct grub_efi_uga_draw grub_efi_uga_draw_t; -+ -+typedef grub_uint32_t grub_uga_status_t; -+ -+typedef enum { -+ UgaDtParentBus = 1, -+ UgaDtGraphicsController, -+ UgaDtOutputController, -+ UgaDtOutputPort, -+ UgaDtOther -+} grub_uga_device_type_t; -+ -+typedef grub_efi_uint32_t grub_uga_device_id_t; -+ -+struct grub_uga_device_data { -+ grub_uga_device_type_t device_type; -+ grub_uga_device_id_t device_id; -+ grub_efi_uint32_t device_context_size; -+ grub_efi_uint32_t shared_context_size; -+}; -+typedef struct grub_uga_device_data grub_uga_device_data_t; -+ -+struct grub_uga_device { -+ void *device_context; -+ void *shared_context; -+ void *runtime_context; -+ struct grub_uga_device *parent_device; -+ void *bus_io_services; -+ void *stdio_services; -+ grub_uga_device_data_t device_data; -+}; -+typedef struct grub_uga_device grub_uga_device_t; -+ -+typedef enum { -+ UgaIoGetVersion = 1, -+ UgaIoGetChildDevice, -+ UgaIoStartDevice, -+ UgaIoStopDevice, -+ UgaIoFlushDevice, -+ UgaIoResetDevice, -+ UgaIoGetDeviceState, -+ UgaIoSetDeviceState, -+ UgaIoSetPowerState, -+ UgaIoGetMemoryConfiguration, -+ UgaIoSetVideoMode, -+ UgaIoCopyRectangle, -+ UgaIoGetEdidSegment, -+ UgaIoDeviceChannelOpen, -+ UgaIoDeviceChannelClose, -+ UgaIoDeviceChannelRead, -+ UgaIoDeviceChannelWrite, -+ UgaIoGetPersistentDataSize, -+ UgaIoGetPersistentData, -+ UgaIoSetPersistentData, -+ UgaIoGetDevicePropertySize, -+ UgaIoGetDeviceProperty, -+ UgaIoBtPrivateInterface -+} grub_uga_io_request_code_t; -+ -+struct grub_uga_io_request { -+ grub_uga_io_request_code_t io_request_code; -+ void *in_buffer; -+ grub_efi_uint64_t in_buffer_size; -+ grub_efi_uint64_t bytes_returned; -+}; -+typedef struct grub_uga_io_request grub_uga_io_request_t; -+ -+struct grub_efi_uga_io -+{ -+ grub_efi_status_t (*create_device) (struct grub_efi_uga_io * this, -+ grub_uga_device_t *parent_device, -+ grub_uga_device_data_t *device_data, -+ void *runtime_context, -+ grub_uga_device_t **device); -+ grub_efi_status_t (*delete_device) (struct grub_efi_uga_io * this, -+ grub_uga_device_t *device); -+ grub_uga_status_t (*dispatch_service) (grub_uga_device_t *device, -+ grub_uga_io_request_t *io_request); -+}; -+typedef struct grub_efi_uga_io grub_efi_uga_io_t; -+ -+/* XXX PJFIX add uga driver handoff stuff */ -+ -+// File Open Modes -+#define GRUB_EFI_FILE_MODE_READ 0x0000000000000001ULL -+#define GRUB_EFI_FILE_MODE_WRITE 0x0000000000000002ULL -+#define GRUB_EFI_FILE_MODE_CREATE 0x8000000000000000ULL -+ -+// File Attributes -+#define GRUB_EFI_FILE_READ_ONLY 0x0000000000000001ULL -+#define GRUB_EFI_FILE_HIDDEN 0x0000000000000002ULL -+#define GRUB_EFI_FILE_SYSTEM 0x0000000000000004ULL -+#define GRUB_EFI_FILE_RESERVED 0x0000000000000008ULL -+#define GRUB_EFI_FILE_DIRECTORY 0x0000000000000010ULL -+#define GRUB_EFI_FILE_ARCHIVE 0x0000000000000020ULL -+#define GRUB_EFI_FILE_VALID_ATTR 0x0000000000000037ULL -+ -+struct grub_efi_file -+{ -+ grub_efi_uint64_t revision; -+ grub_efi_status_t (*open) (struct grub_efi_file * this, -+ struct grub_efi_file ** new_handle, -+ grub_efi_char16_t * file_name, -+ grub_efi_uint64_t open_mode, -+ grub_efi_uint64_t attributes); -+ grub_efi_status_t (*close) (struct grub_efi_file * this); -+ grub_efi_status_t (*delete) (struct grub_efi_file * this); -+ grub_efi_status_t (*read) (struct grub_efi_file * this, -+ grub_efi_uintn_t * buffer_size, -+ void * buffer); -+ grub_efi_status_t (*write) (struct grub_efi_file * this, -+ grub_efi_uintn_t * buffer_size, -+ void * buffer); -+ grub_efi_status_t (*get_position) (struct grub_efi_file * this, -+ grub_efi_uint64_t * position); -+ grub_efi_status_t (*set_position) (struct grub_efi_file * this, -+ grub_efi_uint64_t position); -+ grub_efi_status_t (*get_info) (struct grub_efi_file * this, -+ grub_efi_guid_t * information_type, -+ grub_efi_uintn_t * buffer_size, -+ void * buffer); -+ grub_efi_status_t (*set_info) (struct grub_efi_file * this, -+ grub_efi_guid_t * information_type, -+ grub_efi_uintn_t buffer_size, -+ void * buffer); -+ grub_efi_status_t (*flush) (struct grub_efi_file * this); -+}; -+typedef struct grub_efi_file grub_efi_file_t; -+ -+struct grub_efi_simple_file_system -+{ -+ grub_efi_uint64_t revision; -+ grub_efi_status_t (*open_volume) (struct grub_efi_simple_file_system * this, -+ grub_efi_file_t ** root); -+}; -+typedef struct grub_efi_simple_file_system grub_efi_simple_file_system_t; -+ -+struct grub_efi_serial_io_mode -+{ -+ grub_efi_uint32_t control_mask; -+ grub_efi_uint32_t timeout; -+ grub_efi_uint64_t baud_rate; -+ grub_efi_uint32_t receive_fifo_depth; -+ grub_efi_uint32_t data_bits; -+ grub_efi_uint32_t parity; -+ grub_efi_uint32_t stop_bits; -+}; -+typedef struct grub_efi_serial_io_mode grub_efi_serial_io_mode_t; -+ -+enum grub_efi_parity -+{ -+ GRUB_EFI_DEFAULT_PARITY, -+ GRUB_EFI_NO_PARITY, -+ GRUB_EFI_EVEN_PARITY, -+ GRUB_EFI_ODD_PARITY, -+ GRUB_EFI_MARK_PARITY, -+ GRUB_EFI_SPACE_PARITY -+}; -+typedef enum grub_efi_parity grub_efi_parity_t; -+ -+enum grub_efi_stop_bits -+{ -+ GRUB_EFI_DEFAULT_STOP_BITS, -+ GRUB_EFI_ONE_STOP_BIT, -+ GRUB_EFI_ONE_FIVE_STOP_BITS, -+ GRUB_EFI_TWO_STOP_BITS -+}; -+typedef enum grub_efi_stop_bits grub_efi_stop_bits_t; -+ -+#define GRUB_EFI_SERIAL_CLEAR_TO_SEND 0x0010 -+#define GRUB_EFI_SERIAL_DATA_SET_READY 0x0020 -+#define GRUB_EFI_SERIAL_RING_INDICATE 0x0040 -+#define GRUB_EFI_SERIAL_CARRIER_DETECT 0x0080 -+#define GRUB_EFI_SERIAL_REQUEST_TO_SEND 0x0002 -+#define GRUB_EFI_SERIAL_DATA_TERMINAL_READY 0x0001 -+#define GRUB_EFI_SERIAL_INPUT_BUFFER_EMPTY 0x0100 -+#define GRUB_EFI_SERIAL_OUTPUT_BUFFER_EMPTY 0x0200 -+#define GRUB_EFI_SERIAL_HARDWARE_LOOPBACK_ENABLE 0x1000 -+#define GRUB_EFI_SERIAL_SOFTWARE_LOOPBACK_ENABLE 0x2000 -+#define GRUB_EFI_SERIAL_HARDWARE_FLOW_CONTROL_ENABLE 0x4000 -+ -+struct grub_efi_serial_io -+{ -+ grub_efi_uint32_t revision; -+ grub_efi_status_t (*reset) (struct grub_efi_serial_io * this); -+ grub_efi_status_t (*set_attributes) (struct grub_efi_serial_io * this, -+ grub_efi_uint64_t baud_rate, -+ grub_efi_uint32_t receive_fifo_depth, -+ grub_efi_uint32_t timeout, -+ grub_efi_parity_t parity, -+ grub_efi_uint8_t data_bits, -+ grub_efi_stop_bits_t stop_bits); -+ grub_efi_status_t (*set_control_bits) (struct grub_efi_serial_io * this, -+ grub_efi_uint32_t control); -+ grub_efi_status_t (*get_control_bits) (struct grub_efi_serial_io * this, -+ grub_efi_uint32_t * control); -+ grub_efi_status_t (*write) (struct grub_efi_serial_io * this, -+ grub_efi_uintn_t * buffer_size, -+ void * buffer); -+ grub_efi_status_t (*read) (struct grub_efi_serial_io * this, -+ grub_efi_uintn_t * buffer_size, -+ void * buffer); -+ grub_efi_serial_io_mode_t *mode; -+}; -+typedef struct grub_efi_serial_io grub_efi_serial_io_t; -+ -+#endif /* ! GRUB_EFI_API_HEADER */ -diff --git a/efi/grub/efi/console_control.h b/efi/grub/efi/console_control.h -new file mode 100644 -index 0000000..ffc4305 ---- /dev/null -+++ b/efi/grub/efi/console_control.h -@@ -0,0 +1,59 @@ -+/* console_control.h - definitions of the console control protocol */ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2006 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. -+ */ -+ -+/* The console control protocol is not a part of the EFI spec, -+ but defined in Intel's Sample Implementation. */ -+ -+#ifndef GRUB_EFI_CONSOLE_CONTROL_HEADER -+#define GRUB_EFI_CONSOLE_CONTROL_HEADER 1 -+ -+#define GRUB_EFI_CONSOLE_CONTROL_GUID \ -+ { 0xf42f7782, 0x12e, 0x4c12, \ -+ { 0x99, 0x56, 0x49, 0xf9, 0x43, 0x4, 0xf7, 0x21 } \ -+ } -+ -+enum grub_efi_screen_mode -+{ -+ GRUB_EFI_SCREEN_TEXT, -+ GRUB_EFI_SCREEN_GRAPHICS, -+ GRUB_EFI_SCREEN_TEXT_MAX_VALUE -+}; -+typedef enum grub_efi_screen_mode grub_efi_screen_mode_t; -+ -+struct grub_efi_console_control_protocol -+{ -+ grub_efi_status_t -+ (*get_mode) (struct grub_efi_console_control_protocol * this, -+ grub_efi_screen_mode_t * mode, -+ grub_efi_boolean_t * uga_exists, -+ grub_efi_boolean_t * std_in_locked); -+ -+ grub_efi_status_t -+ (*set_mode) (struct grub_efi_console_control_protocol * this, -+ grub_efi_screen_mode_t mode); -+ -+ grub_efi_status_t -+ (*lock_std_in) (struct grub_efi_console_control_protocol * this, -+ grub_efi_char16_t * password); -+}; -+typedef struct grub_efi_console_control_protocol -+ grub_efi_console_control_protocol_t; -+ -+#endif /* ! GRUB_EFI_CONSOLE_CONTROL_HEADER */ -diff --git a/efi/grub/efi/efi.h b/efi/grub/efi/efi.h -new file mode 100644 -index 0000000..301f9d9 ---- /dev/null -+++ b/efi/grub/efi/efi.h -@@ -0,0 +1,85 @@ -+/* efi.h - declare variables and functions for EFI support */ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2006 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_EFI_EFI_HEADER -+#define GRUB_EFI_EFI_HEADER 1 -+ -+#include <grub/types.h> -+#include <grub/efi/api.h> -+ -+/* Functions. */ -+grub_efi_status_t -+grub_efi_locate_device_path (grub_efi_guid_t *protocol, -+ grub_efi_device_path_t **dp, -+ grub_efi_handle_t *handle); -+grub_efi_status_t -+grub_efi_locate_handle_buffer (grub_efi_locate_search_type_t search_type, -+ grub_efi_guid_t *protocol, -+ void *search_key, -+ grub_efi_uintn_t *no_handles, -+ grub_efi_handle_t **buffer); -+void *grub_efi_locate_protocol (grub_efi_guid_t * protocol, -+ void *registration); -+grub_efi_handle_t *grub_efi_locate_handle (grub_efi_locate_search_type_t -+ search_type, -+ grub_efi_guid_t * protocol, -+ void *search_key, -+ grub_efi_uintn_t * num_handles); -+void *grub_efi_open_protocol (grub_efi_handle_t handle, -+ grub_efi_guid_t * protocol, -+ grub_efi_uint32_t attributes); -+int grub_efi_set_text_mode (int on); -+void grub_efi_stall (grub_efi_uintn_t microseconds); -+void *grub_efi_allocate_pool (grub_efi_uintn_t size); -+void grub_efi_free_pool (void *buffer); -+void *grub_efi_allocate_anypages (grub_efi_uintn_t pages); -+void *grub_efi_allocate_pages (grub_efi_physical_address_t address, -+ grub_efi_uintn_t pages); -+void *grub_efi_allocate_runtime_pages (grub_efi_physical_address_t address, -+ grub_efi_uintn_t pages); -+void -+grub_efi_free_pages (grub_efi_physical_address_t address, -+ grub_efi_uintn_t pages); -+int -+grub_efi_get_memory_map (grub_efi_uintn_t * map_key, -+ grub_efi_uintn_t * descriptor_size, -+ grub_efi_uint32_t * descriptor_version); -+grub_efi_loaded_image_t *grub_efi_get_loaded_image (grub_efi_handle_t -+ image_handle); -+void grub_efi_print_device_path (grub_efi_device_path_t * dp); -+char *grub_efi_get_filename (grub_efi_device_path_t * dp); -+grub_efi_device_path_t *grub_efi_get_device_path (grub_efi_handle_t handle); -+int grub_efi_exit_boot_services (grub_efi_uintn_t map_key); -+ -+void grub_efi_mm_init (void); -+void grub_efi_mm_fini (void); -+void grub_efi_init (void); -+void grub_efi_fini (void); -+void grub_efi_set_prefix (void); -+ -+/* Variables. */ -+extern void *mmap_buf; -+extern grub_efi_uintn_t mmap_size; -+extern grub_efi_uintn_t mmap_pages; -+ -+extern grub_efi_system_table_t *grub_efi_system_table; -+extern grub_efi_handle_t grub_efi_image_handle; -+ -+#endif /* ! GRUB_EFI_EFI_HEADER */ -diff --git a/efi/grub/efi/eficall.h b/efi/grub/efi/eficall.h -new file mode 100644 -index 0000000..2e79e04 ---- /dev/null -+++ b/efi/grub/efi/eficall.h -@@ -0,0 +1,162 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2006 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 _EFI_CALL_INCLUDE_ -+#define _EFI_CALL_INCLUDE_ 1 -+ -+#include <grub/types.h> -+ -+#ifndef __x86_64__ -+#ifdef EFI_FUNCTION_WRAPPER -+#undef EFI_FUNCTION_WRAPPER -+#endif -+#endif -+ -+#ifdef EFI_FUNCTION_WRAPPER -+typedef long EFI_STATUS; -+ -+EFI_STATUS x64_call0 (unsigned long func); -+EFI_STATUS x64_call1 (unsigned long func, unsigned long a); -+EFI_STATUS x64_call2 (unsigned long func, unsigned long a, unsigned long b); -+EFI_STATUS x64_call3 (unsigned long func, unsigned long a, -+ unsigned long b, unsigned long c); -+EFI_STATUS x64_call4 (unsigned long func, unsigned long a, -+ unsigned long b, unsigned long c, unsigned long d); -+EFI_STATUS x64_call5 (unsigned long func, unsigned long a, -+ unsigned long b, unsigned long c, -+ unsigned long d, unsigned long e); -+EFI_STATUS x64_call6 (unsigned long func, unsigned long a, -+ unsigned long b, unsigned long c, -+ unsigned long d, unsigned long e, unsigned long f); -+EFI_STATUS x64_call7 (unsigned long func, unsigned long a, -+ unsigned long b, unsigned long c, -+ unsigned long d, unsigned long e, -+ unsigned long f, unsigned long g); -+EFI_STATUS x64_call8 (unsigned long func, unsigned long a, -+ unsigned long b, unsigned long c, -+ unsigned long d, unsigned long e, -+ unsigned long f, unsigned long g, -+ unsigned long h); -+EFI_STATUS x64_call9 (unsigned long func, unsigned long a, -+ unsigned long b, unsigned long c, -+ unsigned long d, unsigned long e, -+ unsigned long f, unsigned long g, -+ unsigned long h, unsigned long i); -+EFI_STATUS x64_call10(unsigned long func, unsigned long a, -+ unsigned long b, unsigned long c, -+ unsigned long d, unsigned long e, -+ unsigned long f, unsigned long g, -+ unsigned long h, unsigned long i, -+ unsigned long j); -+ -+#define Call_Service(func) x64_call0((unsigned long)func) -+ -+#define Call_Service_1(func,a) x64_call1((unsigned long)func, \ -+ (unsigned long)a) -+ -+#define Call_Service_2(func,a,b) x64_call2((unsigned long)func, \ -+ (unsigned long)a, \ -+ (unsigned long)b) -+ -+#define Call_Service_3(func,a,b,c) x64_call3((unsigned long)func, \ -+ (unsigned long)a, \ -+ (unsigned long)b, \ -+ (unsigned long)c) -+ -+#define Call_Service_4(func,a,b,c,d) x64_call4((unsigned long)func, \ -+ (unsigned long)a, \ -+ (unsigned long)b, \ -+ (unsigned long)c, \ -+ (unsigned long)d) -+ -+#define Call_Service_5(func,a,b,c,d,e) x64_call5((unsigned long)func, \ -+ (unsigned long)a, \ -+ (unsigned long)b, \ -+ (unsigned long)c, \ -+ (unsigned long)d, \ -+ (unsigned long)e) -+ -+#define Call_Service_6(func,a,b,c,d,e,f) x64_call6((unsigned long)func, \ -+ (unsigned long)a, \ -+ (unsigned long)b, \ -+ (unsigned long)c, \ -+ (unsigned long)d, \ -+ (unsigned long)e, \ -+ (unsigned long)f) -+ -+#define Call_Service_7(func,a,b,c,d,e,f,g) x64_call7((unsigned long)func, \ -+ (unsigned long)a, \ -+ (unsigned long)b, \ -+ (unsigned long)c, \ -+ (unsigned long)d, \ -+ (unsigned long)e, \ -+ (unsigned long)f, \ -+ (unsigned long)g) -+ -+#define Call_Service_8(func,a,b,c,d,e,f,g,h) x64_call8((unsigned long)func, \ -+ (unsigned long)a, \ -+ (unsigned long)b, \ -+ (unsigned long)c, \ -+ (unsigned long)d, \ -+ (unsigned long)e, \ -+ (unsigned long)f, \ -+ (unsigned long)g, \ -+ (unsigned long)h) -+ -+#define Call_Service_9(func,a,b,c,d,e,f,g,h,i) x64_call9((unsigned long)func, \ -+ (unsigned long)a, \ -+ (unsigned long)b, \ -+ (unsigned long)c, \ -+ (unsigned long)d, \ -+ (unsigned long)e, \ -+ (unsigned long)f, \ -+ (unsigned long)g, \ -+ (unsigned long)h, \ -+ (unsigned long)i) -+ -+#define Call_Service_10(func,a,b,c,d,e,f,g,h,i,j) \ -+ x64_call10((unsigned long)func, \ -+ (unsigned long)a, \ -+ (unsigned long)b, \ -+ (unsigned long)c, \ -+ (unsigned long)d, \ -+ (unsigned long)e, \ -+ (unsigned long)f, \ -+ (unsigned long)g, \ -+ (unsigned long)h, \ -+ (unsigned long)i, \ -+ (unsigned long)j) -+ -+#else -+ -+typedef long EFI_STATUS; -+#define Call_Service(func) func() -+#define Call_Service_1(func,a) func(a) -+#define Call_Service_2(func,a,b) func(a,b) -+#define Call_Service_3(func,a,b,c) func(a,b,c) -+#define Call_Service_4(func,a,b,c,d) func(a,b,c,d) -+#define Call_Service_5(func,a,b,c,d,e) func(a,b,c,d,e) -+#define Call_Service_6(func,a,b,c,d,e,f) func(a,b,c,d,e,f) -+#define Call_Service_7(func,a,b,c,d,e,f,g) func(a,b,c,d,e,f,g) -+#define Call_Service_8(func,a,b,c,d,e,f,g,h) func(a,b,c,d,e,f,g,h) -+#define Call_Service_9(func,a,b,c,d,e,f,g,h,i) func(a,b,c,d,e,f,g,h,i) -+#define Call_Service_10(func,a,b,c,d,e,f,g,h,i,j) func(a,b,c,d,e,f,g,h,i,j) -+#endif -+ -+#endif -diff --git a/efi/grub/efi/misc.h b/efi/grub/efi/misc.h -new file mode 100644 -index 0000000..e06a2fb ---- /dev/null -+++ b/efi/grub/efi/misc.h -@@ -0,0 +1,60 @@ -+/* misc.h - prototypes for misc EFI functions */ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2002,2003,2005,2006 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_EFI_MISC_HEADER -+#define GRUB_EFI_MISC_HEADER 1 -+ -+struct e820_entry; -+void e820_map_from_efi_map (struct e820_entry *e820_map, -+ int *e820_nr_map, -+ grub_efi_memory_descriptor_t *memory_map, -+ grub_efi_uintn_t desc_size, -+ grub_efi_uintn_t memory_map_size); -+ -+/* Initialize the console system. */ -+void grub_console_init (void); -+/* Finish the console system. */ -+void grub_console_fini (void); -+ -+void grub_efidisk_init (void); -+void grub_efidisk_fini (void); -+grub_efi_handle_t grub_efidisk_get_current_bdev_handle (void); -+int grub_get_drive_partition_from_bdev_handle (grub_efi_handle_t handle, -+ unsigned long *drive, -+ unsigned long *partition); -+ -+char *grub_efi_file_path_to_path_name (grub_efi_device_path_t *file_path); -+void grub_load_saved_default (grub_efi_handle_t dev_handle); -+ -+grub_efi_device_path_t * -+find_last_device_path (const grub_efi_device_path_t *dp); -+grub_efi_device_path_t * -+find_parent_device_path (const grub_efi_device_path_t *dp); -+grub_efi_device_path_t * -+duplicate_device_path (const grub_efi_device_path_t *dp); -+int -+compare_device_paths (const grub_efi_device_path_t *dp1, -+ const grub_efi_device_path_t *dp2); -+grub_efi_device_path_t * -+device_path_from_utf8 (const char *device); -+ -+extern grub_efi_guid_t simple_file_system_guid; -+ -+#endif /* ! GRUB_EFI_MISC_HEADER */ -diff --git a/efi/grub/efi/net.h b/efi/grub/efi/net.h -new file mode 100644 -index 0000000..e69de29 -diff --git a/efi/grub/efi/time.h b/efi/grub/efi/time.h -new file mode 100644 -index 0000000..55bfe68 ---- /dev/null -+++ b/efi/grub/efi/time.h -@@ -0,0 +1,31 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2006 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., 51 Franklin Street, Fifth Floor, Boston, -+ * MA 02110-1301, USA. -+ */ -+ -+#ifndef GRUB_EFI_TIME_HEADER -+#define GRUB_EFI_TIME_HEADER 1 -+ -+#include <grub/symbol.h> -+ -+#define GRUB_TICKS_PER_SECOND 18 -+ -+/* Return the real time in ticks. */ -+grub_uint32_t grub_get_rtc (void); -+ -+#endif /* ! GRUB_EFI_TIME_HEADER */ -diff --git a/efi/grub/i386/linux.h b/efi/grub/i386/linux.h -new file mode 100644 -index 0000000..1545a7a ---- /dev/null -+++ b/efi/grub/i386/linux.h -@@ -0,0 +1,226 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 1999,2000,2001,2002,2003,2004 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_LINUX_MACHINE_HEADER -+#define GRUB_LINUX_MACHINE_HEADER 1 -+ -+#define GRUB_LINUX_MAGIC_SIGNATURE 0x53726448 /* "HdrS" */ -+#define GRUB_LINUX_DEFAULT_SETUP_SECTS 4 -+#define GRUB_LINUX_FLAG_CAN_USE_HEAP 0x80 -+#define GRUB_LINUX_INITRD_MAX_ADDRESS 0x37FFFFFF -+#define GRUB_LINUX_MAX_SETUP_SECTS 64 -+#define GRUB_LINUX_BOOT_LOADER_TYPE 0x72 -+#define GRUB_LINUX_HEAP_END_OFFSET (0x9000 - 0x200) -+ -+#define GRUB_LINUX_BZIMAGE_ADDR 0x100000 -+#define GRUB_LINUX_ZIMAGE_ADDR 0x10000 -+#define GRUB_LINUX_OLD_REAL_MODE_ADDR 0x90000 -+#define GRUB_LINUX_SETUP_STACK 0x9000 -+ -+#define GRUB_LINUX_FLAG_BIG_KERNEL 0x1 -+ -+/* Linux's video mode selection support. Actually I hate it! */ -+#define GRUB_LINUX_VID_MODE_NORMAL 0xFFFF -+#define GRUB_LINUX_VID_MODE_EXTENDED 0xFFFE -+#define GRUB_LINUX_VID_MODE_ASK 0xFFFD -+ -+#define GRUB_LINUX_CL_OFFSET 0x9000 -+#define GRUB_LINUX_CL_END_OFFSET 0x90FF -+#define GRUB_LINUX_SETUP_MOVE_SIZE 0x9100 -+#define GRUB_LINUX_CL_MAGIC 0xA33F -+ -+#if 0 -+#define GRUB_LINUX_EFI_SIGNATURE_X64 \ -+ ('4' << 24 | '6' << 16 | 'L' << 8 | 'E') -+#else -+#define GRUB_LINUX_EFI_SIGNATURE_X64 \ -+ ('L' << 24 | 'I' << 16 | 'F' << 8 | 'E') -+#endif -+ -+#ifndef ASM_FILE -+ -+/* For the Linux/i386 boot protocol version 2.07. */ -+struct grub_linux_kernel_header -+{ -+ grub_uint8_t setup_sects; /* The size of the setup in sectors */ -+ grub_uint16_t root_flags; /* If the root is mounted readonly */ -+ grub_uint32_t syssize; /* obsolete */ -+ grub_uint16_t ram_size; /* obsolete */ -+ grub_uint16_t vid_mode; /* Video mode control */ -+ grub_uint16_t root_dev; /* Default root device number */ -+ grub_uint16_t boot_flag; /* 0xAA55 magic number */ -+ grub_uint8_t jump_ins; /* Jump instruction */ -+ grub_uint8_t jump_off; /* Jump offset */ -+ grub_uint32_t header; /* Magic signature "HdrS" */ -+ grub_uint16_t version; /* Boot protocol version supported */ -+ grub_uint32_t realmode_swtch; /* Boot loader hook */ -+ grub_uint16_t start_sys; /* The load-low segment (obsolete) */ -+ grub_uint16_t kernel_version; /* Points to kernel version string */ -+ grub_uint8_t type_of_loader; /* Boot loader identifier */ -+ grub_uint8_t loadflags; /* Boot protocol option flags */ -+ grub_uint16_t setup_move_size;/* Move to high memory size */ -+ grub_uint32_t code32_start; /* Boot loader hook */ -+ grub_uint32_t ramdisk_image; /* initrd load address */ -+ grub_uint32_t ramdisk_size; /* initrd size */ -+ grub_uint32_t bootsect_kludge;/* obsolete */ -+ grub_uint16_t heap_end_ptr; /* Free memory after setup end */ -+ grub_uint16_t pad1; /* Unused */ -+ grub_uint32_t cmd_line_ptr; /* Points to the kernel command line */ -+ grub_uint32_t initrd_addr_max;/* Highest address for initrd */ -+ grub_uint32_t kernel_alignment; -+ grub_uint8_t relocatable_kernel; -+ grub_uint8_t pad2[3]; -+ grub_uint32_t hardware_subarch; -+ grub_uint64_t hardware_subarch_data; -+} __attribute__ ((packed)); -+ -+/* Boot parameters for Linux based on 2.6.12. This is used by the setup -+ sectors of Linux, and must be simulated by GRUB on EFI, because -+ the setup sectors depend on BIOS. */ -+struct linux_kernel_params -+{ -+ grub_uint8_t video_cursor_x; /* 0 */ -+ grub_uint8_t video_cursor_y; -+ -+ grub_uint16_t ext_mem; /* 2 */ -+ -+ grub_uint16_t video_page; /* 4 */ -+ grub_uint8_t video_mode; /* 6 */ -+ grub_uint8_t video_width; /* 7 */ -+ -+ grub_uint8_t padding1[0xa - 0x8]; -+ -+ grub_uint16_t video_ega_bx; /* a */ -+ -+ grub_uint8_t padding2[0xe - 0xc]; -+ -+ grub_uint8_t video_height; /* e */ -+ grub_uint8_t have_vga; /* f */ -+ grub_uint16_t font_size; /* 10 */ -+ -+ grub_uint16_t lfb_width; /* 12 */ -+ grub_uint16_t lfb_height; /* 14 */ -+ grub_uint16_t lfb_depth; /* 16 */ -+ grub_uint32_t lfb_base; /* 18 */ -+ grub_uint32_t lfb_size; /* 1c */ -+ -+ grub_uint16_t cl_magic; /* 20 */ -+ grub_uint16_t cl_offset; -+ -+ grub_uint16_t lfb_line_len; /* 24 */ -+ grub_uint8_t red_mask_size; /* 26 */ -+ grub_uint8_t red_field_pos; -+ grub_uint8_t green_mask_size; -+ grub_uint8_t green_field_pos; -+ grub_uint8_t blue_mask_size; -+ grub_uint8_t blue_field_pos; -+ grub_uint8_t reserved_mask_size; -+ grub_uint8_t reserved_field_pos; -+ grub_uint16_t vesapm_segment; /* 2e */ -+ grub_uint16_t vesapm_offset; /* 30 */ -+ grub_uint16_t lfb_pages; /* 32 */ -+ grub_uint16_t vesa_attrib; /* 34 */ -+ -+ grub_uint8_t padding3[0x40 - 0x36]; -+ -+ grub_uint16_t apm_version; /* 40 */ -+ grub_uint16_t apm_code_segment; /* 42 */ -+ grub_uint32_t apm_entry; /* 44 */ -+ grub_uint16_t apm_16bit_code_segment; /* 48 */ -+ grub_uint16_t apm_data_segment; /* 4a */ -+ grub_uint16_t apm_flags; /* 4c */ -+ grub_uint32_t apm_code_len; /* 4e */ -+ grub_uint16_t apm_data_len; /* 52 */ -+ -+ grub_uint8_t padding4[0x60 - 0x54]; -+ -+ grub_uint32_t ist_signature; /* 60 */ -+ grub_uint32_t ist_command; /* 64 */ -+ grub_uint32_t ist_event; /* 68 */ -+ grub_uint32_t ist_perf_level; /* 6c */ -+ -+ grub_uint8_t padding5[0x80 - 0x70]; -+ -+ grub_uint8_t hd0_drive_info[0x10]; /* 80 */ -+ grub_uint8_t hd1_drive_info[0x10]; /* 90 */ -+ grub_uint16_t rom_config_len; /* a0 */ -+ -+ grub_uint8_t padding6[0x1b8 - 0xa2]; -+ -+ union { -+ struct { -+ grub_uint32_t padding7_1; /* 0x1b8 */ -+ grub_uint32_t padding7_2; /* 0x1bc */ -+ -+ grub_uint32_t efi_signature; /* 1c0 */ -+ grub_uint32_t efi_system_table; /* 1c4 */ -+ grub_uint32_t efi_mem_desc_size; /* 1c8 */ -+ grub_uint32_t efi_mem_desc_version; /* 1cc */ -+ grub_uint32_t efi_mmap; /* 1d0 */ -+ grub_uint32_t efi_mmap_size; /* 1d4 */ -+ grub_uint32_t efi_system_table_hi; /* 1d8 */ -+ grub_uint32_t efi_mmap_hi; /* 1dc */ -+ } dunno; -+ struct { -+ grub_uint32_t efi_system_table; /* 1b8 */ -+ -+ grub_uint32_t padding7_1; /* 0x1bc */ -+ -+ grub_uint32_t efi_signature; /* 1c0 */ -+ grub_uint32_t efi_mem_desc_size; /* 1c4 */ -+ grub_uint32_t efi_mem_desc_version; /* 1c8 */ -+ grub_uint32_t efi_mmap_size; /* 1cc */ -+ grub_uint32_t efi_mmap; /* 1d0 */ -+ -+ grub_uint8_t padding7_2[0x1e0 - 0x1d4]; /* 1d4 */ -+ } version_0204; -+ struct { -+ grub_uint32_t padding7_1; /* 0x1b8 */ -+ grub_uint32_t padding7_2; /* 0x1bc */ -+ grub_uint32_t padding7_3; /* 0x1c0 */ -+ grub_uint32_t efi_system_table; /* 0x1c4 */ -+ grub_uint32_t efi_mem_desc_size; /* 0x1c8 */ -+ grub_uint32_t efi_mem_desc_version; /* 0x1cc */ -+ grub_uint32_t efi_mmap; /* 0x1d0 */ -+ grub_uint32_t efi_mmap_size; /* 0x1d4 */ -+ grub_uint8_t padding7_4[0x1e0 - 0x1d8]; /* 0x1d8 */ -+ } version_0206; -+ }; -+ -+ grub_uint32_t alt_mem; /* 1e0 */ -+ -+ grub_uint8_t padding8[0x1e8 - 0x1e4]; /* 1e4 */ -+ -+ grub_uint8_t e820_nr_map; /* 1e8 */ -+ grub_uint8_t eddbuf_entries; /* 1e9 */ -+ grub_uint8_t edd_mbr_sig_buf_entries; /* 1ea */ -+ -+ grub_uint8_t padding9[0x1f1 - 0x1eb]; -+ -+ struct grub_linux_kernel_header hdr; /* 0x1f1 */ -+ -+ grub_uint8_t padding10[0x2d0-0x1f1-sizeof(struct grub_linux_kernel_header)]; -+ -+ grub_uint8_t e820_map[2560]; /* 0x2d0 */ -+ -+ grub_uint8_t padding11[0x1000 - 0xcd0]; -+} __attribute__ ((packed)); -+#endif /* ! ASM_FILE */ -+ -+#endif /* ! GRUB_LINUX_MACHINE_HEADER */ -diff --git a/efi/grub/i386/types.h b/efi/grub/i386/types.h -new file mode 100644 -index 0000000..ec4174e ---- /dev/null -+++ b/efi/grub/i386/types.h -@@ -0,0 +1,32 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2002,2006 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_TARGET_SIZEOF_VOID_P 4 -+ -+/* The size of long. */ -+#define GRUB_TARGET_SIZEOF_LONG 4 -+ -+/* x64_64 is little-endian. */ -+#undef GRUB_TARGET_WORDS_BIGENDIAN -+ -+#endif /* ! GRUB_TYPES_CPU_HEADER */ -diff --git a/efi/grub/misc.h b/efi/grub/misc.h -new file mode 100644 -index 0000000..5ef2226 ---- /dev/null -+++ b/efi/grub/misc.h -@@ -0,0 +1,71 @@ -+/* misc.h - prototypes for misc functions */ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2002,2003,2005,2006 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_MISC_HEADER -+#define GRUB_MISC_HEADER 1 -+ -+#include <stdarg.h> -+#include <grub/types.h> -+ -+#define grub_dprintf(condition, fmt, args...) \ -+ grub_real_dprintf(__FILE__, __LINE__, condition, fmt, ## args) -+ -+char *grub_stpcpy (char *dest, const char *src); -+void grub_real_dprintf (const char *file, -+ const int line, -+ const char *condition, -+ const char *fmt, ...) -+ __attribute__ ((format (printf, 4, 5))); -+void grub_exit (void) __attribute__ ((noreturn)); -+void grub_abort (void) __attribute__ ((noreturn)); -+void grub_fatal (const char *fmt, ...) __attribute__ ((noreturn)); -+grub_size_t grub_utf8_char_len(grub_uint8_t ch); -+grub_uint32_t grub_utf8_to_utf32(const grub_uint8_t *src, grub_size_t length); -+void grub_utf8_to_utf16(const grub_uint8_t *src, grub_size_t srclen, -+ grub_uint16_t *dst, grub_size_t dstlen); -+grub_uint8_t *grub_utf16_to_utf8 (grub_uint8_t * dest, -+ grub_uint16_t * src, grub_size_t size); -+ -+void *grub_malloc (grub_size_t size); -+void grub_free (void *ptr); -+ -+char *grub_strndup (const char *s, int n); -+#define strndup grub_strndup -+ -+int safe_parse_maxulong (char **str_ptr, unsigned long *myulong_ptr); -+ -+#define E820_RAM 1 -+#define E820_RESERVED 2 -+#define E820_ACPI 3 -+#define E820_NVS 4 -+#define E820_EXEC_CODE 5 -+#define E820_MAX 128 -+ -+struct e820_entry -+{ -+ grub_uint64_t addr; /* start of memory segment */ -+ grub_uint64_t size; /* size of memory segment */ -+ grub_uint32_t type; /* type of memory segment */ -+} __attribute__ ((packed)); -+ -+int grub_load_linux (char *kernel, char *arg); -+int grub_load_initrd (char *initrd); -+ -+#endif /* ! GRUB_MISC_HEADER */ -diff --git a/efi/grub/symbol.h b/efi/grub/symbol.h -new file mode 100644 -index 0000000..5204c54 ---- /dev/null -+++ b/efi/grub/symbol.h -@@ -0,0 +1,34 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 1999,2000,2001,2002,2006 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_SYMBOL_HEADER -+#define GRUB_SYMBOL_HEADER 1 -+ -+#include <config.h> -+ -+/* Add an underscore to a C symbol in assembler code if needed. */ -+#ifdef HAVE_ASM_USCORE -+# define EXT_C(sym) _ ## sym -+#else -+# define EXT_C(sym) sym -+#endif -+ -+#define FUNCTION(x) .globl EXT_C(x) ; .type EXT_C(x), "function" ; EXT_C(x): -+ -+#endif /* ! GRUB_SYMBOL_HEADER */ -diff --git a/efi/grub/types.h b/efi/grub/types.h -new file mode 100644 -index 0000000..173adb4 ---- /dev/null -+++ b/efi/grub/types.h -@@ -0,0 +1,158 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2002,2005,2006 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_TYPES_HEADER -+#define GRUB_TYPES_HEADER 1 -+ -+#include <config.h> -+#include <grub/cpu/types.h> -+ -+#define UNUSED __attribute__ ((unused)) -+ -+#ifdef GRUB_UTIL -+# define GRUB_CPU_SIZEOF_VOID_P SIZEOF_VOID_P -+# define GRUB_CPU_SIZEOF_LONG SIZEOF_LONG -+# ifdef WORDS_BIGENDIAN -+# define GRUB_CPU_WORDS_BIGENDIAN 1 -+# else -+# undef GRUB_CPU_WORDS_BIGENDIAN -+# endif -+#else /* ! GRUB_UTIL */ -+# define GRUB_CPU_SIZEOF_VOID_P GRUB_TARGET_SIZEOF_VOID_P -+# define GRUB_CPU_SIZEOF_LONG GRUB_TARGET_SIZEOF_LONG -+# ifdef GRUB_TARGET_WORDS_BIGENDIAN -+# define GRUB_CPU_WORDS_BIGENDIAN 1 -+# else -+# undef GRUB_CPU_WORDS_BIGENDIAN -+# endif -+#endif /* ! GRUB_UTIL */ -+ -+#if GRUB_CPU_SIZEOF_VOID_P != GRUB_CPU_SIZEOF_LONG -+# error "This architecture is not supported because sizeof(void *) != sizeof(long)" -+#endif -+ -+#if GRUB_CPU_SIZEOF_VOID_P != 4 && GRUB_CPU_SIZEOF_VOID_P != 8 -+# error "This architecture is not supported because sizeof(void *) != 4 and sizeof(void *) != 8" -+#endif -+ -+/* Define various wide integers. */ -+typedef signed char grub_int8_t; -+typedef short grub_int16_t; -+typedef int grub_int32_t; -+#if GRUB_CPU_SIZEOF_VOID_P == 8 -+typedef long grub_int64_t; -+#else -+typedef long long grub_int64_t; -+#endif -+ -+typedef unsigned char grub_uint8_t; -+typedef unsigned short grub_uint16_t; -+typedef unsigned grub_uint32_t; -+#if GRUB_CPU_SIZEOF_VOID_P == 8 -+typedef unsigned long grub_uint64_t; -+#else -+typedef unsigned long long grub_uint64_t; -+#endif -+ -+/* Misc types. */ -+#if GRUB_TARGET_SIZEOF_VOID_P == 8 -+typedef grub_uint64_t grub_target_addr_t; -+typedef grub_uint64_t grub_target_off_t; -+typedef grub_uint64_t grub_target_size_t; -+typedef grub_int64_t grub_target_ssize_t; -+#else -+typedef grub_uint32_t grub_target_addr_t; -+typedef grub_uint32_t grub_target_off_t; -+typedef grub_uint32_t grub_target_size_t; -+typedef grub_int32_t grub_target_ssize_t; -+#endif -+ -+typedef unsigned long grub_addr_t; -+#if GRUB_CPU_SIZEOF_VOID_P == 8 -+typedef grub_uint64_t grub_size_t; -+typedef grub_int64_t grub_ssize_t; -+#else -+typedef grub_uint32_t grub_size_t; -+typedef grub_int32_t grub_ssize_t; -+#endif -+ -+/* The type for representing a file offset. */ -+typedef grub_uint64_t grub_off_t; -+ -+/* The type for representing a disk block address. */ -+typedef grub_uint64_t grub_disk_addr_t; -+ -+/* Byte-orders. */ -+#define grub_swap_bytes16(x) \ -+({ \ -+ grub_uint16_t _x = (x); \ -+ (grub_uint16_t) ((_x << 8) | (_x >> 8)); \ -+}) -+ -+#define grub_swap_bytes32(x) \ -+({ \ -+ grub_uint32_t _x = (x); \ -+ (grub_uint32_t) ((_x << 24) \ -+ | ((_x & (grub_uint32_t) 0xFF00UL) << 8) \ -+ | ((_x & (grub_uint32_t) 0xFF0000UL) >> 8) \ -+ | (_x >> 24)); \ -+}) -+ -+#define grub_swap_bytes64(x) \ -+({ \ -+ grub_uint64_t _x = (x); \ -+ (grub_uint64_t) ((_x << 56) \ -+ | ((_x & (grub_uint64_t) 0xFF00ULL) << 40) \ -+ | ((_x & (grub_uint64_t) 0xFF0000ULL) << 24) \ -+ | ((_x & (grub_uint64_t) 0xFF000000ULL) << 8) \ -+ | ((_x & (grub_uint64_t) 0xFF00000000ULL) >> 8) \ -+ | ((_x & (grub_uint64_t) 0xFF0000000000ULL) >> 24) \ -+ | ((_x & (grub_uint64_t) 0xFF000000000000ULL) >> 40) \ -+ | (_x >> 56)); \ -+}) -+ -+#ifdef GRUB_CPU_WORDS_BIGENDIAN -+# define grub_cpu_to_le16(x) grub_swap_bytes16(x) -+# define grub_cpu_to_le32(x) grub_swap_bytes32(x) -+# define grub_cpu_to_le64(x) grub_swap_bytes64(x) -+# define grub_le_to_cpu16(x) grub_swap_bytes16(x) -+# define grub_le_to_cpu32(x) grub_swap_bytes32(x) -+# define grub_le_to_cpu64(x) grub_swap_bytes64(x) -+# define grub_cpu_to_be16(x) ((grub_uint16_t) (x)) -+# define grub_cpu_to_be32(x) ((grub_uint32_t) (x)) -+# define grub_cpu_to_be64(x) ((grub_uint64_t) (x)) -+# define grub_be_to_cpu16(x) ((grub_uint16_t) (x)) -+# define grub_be_to_cpu32(x) ((grub_uint32_t) (x)) -+# define grub_be_to_cpu64(x) ((grub_uint64_t) (x)) -+#else /* ! WORDS_BIGENDIAN */ -+# define grub_cpu_to_le16(x) ((grub_uint16_t) (x)) -+# define grub_cpu_to_le32(x) ((grub_uint32_t) (x)) -+# define grub_cpu_to_le64(x) ((grub_uint64_t) (x)) -+# define grub_le_to_cpu16(x) ((grub_uint16_t) (x)) -+# define grub_le_to_cpu32(x) ((grub_uint32_t) (x)) -+# define grub_le_to_cpu64(x) ((grub_uint64_t) (x)) -+# define grub_cpu_to_be16(x) grub_swap_bytes16(x) -+# define grub_cpu_to_be32(x) grub_swap_bytes32(x) -+# define grub_cpu_to_be64(x) grub_swap_bytes64(x) -+# define grub_be_to_cpu16(x) grub_swap_bytes16(x) -+# define grub_be_to_cpu32(x) grub_swap_bytes32(x) -+# define grub_be_to_cpu64(x) grub_swap_bytes64(x) -+#endif /* ! WORDS_BIGENDIAN */ -+ -+#endif /* ! GRUB_TYPES_HEADER */ -diff --git a/efi/grub/x86_64/linux.h b/efi/grub/x86_64/linux.h -new file mode 100644 -index 0000000..4e81ca6 ---- /dev/null -+++ b/efi/grub/x86_64/linux.h -@@ -0,0 +1,234 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 1999,2000,2001,2002,2003,2004 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_LINUX_MACHINE_HEADER -+#define GRUB_LINUX_MACHINE_HEADER 1 -+ -+#define GRUB_LINUX_MAGIC_SIGNATURE 0x53726448 /* "HdrS" */ -+#define GRUB_LINUX_DEFAULT_SETUP_SECTS 4 -+#define GRUB_LINUX_FLAG_CAN_USE_HEAP 0x80 -+#define GRUB_LINUX_INITRD_MAX_ADDRESS 0x37FFFFFF -+#define GRUB_LINUX_MAX_SETUP_SECTS 64 -+#define GRUB_LINUX_BOOT_LOADER_TYPE 0x72 -+#define GRUB_LINUX_HEAP_END_OFFSET (0x9000 - 0x200) -+ -+#define GRUB_LINUX_BZIMAGE_ADDR 0x100000 -+#define GRUB_LINUX_ZIMAGE_ADDR 0x10000 -+#define GRUB_LINUX_OLD_REAL_MODE_ADDR 0x90000 -+#define GRUB_LINUX_SETUP_STACK 0x9000 -+ -+#define GRUB_LINUX_FLAG_BIG_KERNEL 0x1 -+ -+/* Linux's video mode selection support. Actually I hate it! */ -+#define GRUB_LINUX_VID_MODE_NORMAL 0xFFFF -+#define GRUB_LINUX_VID_MODE_EXTENDED 0xFFFE -+#define GRUB_LINUX_VID_MODE_ASK 0xFFFD -+ -+#define GRUB_LINUX_CL_OFFSET 0x9000 -+#define GRUB_LINUX_CL_END_OFFSET 0x90FF -+#define GRUB_LINUX_SETUP_MOVE_SIZE 0x9100 -+#define GRUB_LINUX_CL_MAGIC 0xA33F -+ -+#if 0 -+#define GRUB_LINUX_EFI_SIGNATURE_X64 \ -+ ('4' << 24 | '6' << 16 | 'L' << 8 | 'E') -+#else -+#define GRUB_LINUX_EFI_SIGNATURE_X64 \ -+ ('L' << 24 | 'I' << 16 | 'F' << 8 | 'E') -+#endif -+ -+#ifndef ASM_FILE -+ -+/* For the Linux/i386 boot protocol version 2.07. */ -+struct grub_linux_kernel_header -+{ -+ grub_uint8_t setup_sects; /* The size of the setup in sectors */ -+ grub_uint16_t root_flags; /* If the root is mounted readonly */ -+ grub_uint32_t syssize; /* obsolete */ -+ grub_uint16_t ram_size; /* obsolete */ -+ grub_uint16_t vid_mode; /* Video mode control */ -+ grub_uint16_t root_dev; /* Default root device number */ -+ grub_uint16_t boot_flag; /* 0xAA55 magic number */ -+ grub_uint8_t jump_ins; /* Jump instruction */ -+ grub_uint8_t jump_off; /* Jump offset */ -+ grub_uint32_t header; /* Magic signature "HdrS" */ -+ grub_uint16_t version; /* Boot protocol version supported */ -+ grub_uint32_t realmode_swtch; /* Boot loader hook */ -+ grub_uint16_t start_sys; /* The load-low segment (obsolete) */ -+ grub_uint16_t kernel_version; /* Points to kernel version string */ -+ grub_uint8_t type_of_loader; /* Boot loader identifier */ -+ grub_uint8_t loadflags; /* Boot protocol option flags */ -+ grub_uint16_t setup_move_size;/* Move to high memory size */ -+ grub_uint32_t code32_start; /* Boot loader hook */ -+ grub_uint32_t ramdisk_image; /* initrd load address */ -+ grub_uint32_t ramdisk_size; /* initrd size */ -+ grub_uint32_t bootsect_kludge;/* obsolete */ -+ grub_uint16_t heap_end_ptr; /* Free memory after setup end */ -+ grub_uint16_t pad1; /* Unused */ -+ grub_uint32_t cmd_line_ptr; /* Points to the kernel command line */ -+ grub_uint32_t initrd_addr_max;/* Highest address for initrd */ -+ grub_uint32_t kernel_alignment; -+ grub_uint8_t relocatable_kernel; -+ grub_uint8_t min_alignment; -+ grub_uint8_t pad2[2]; -+ grub_uint32_t cmdline_size; -+ grub_uint32_t hardware_subarch; -+ grub_uint64_t hardware_subarch_data; -+ grub_uint32_t payload_offset; -+ grub_uint32_t payload_length; -+ grub_uint64_t setup_data; -+ grub_uint64_t pref_address; -+ grub_uint32_t init_size; -+} __attribute__ ((packed)); -+ -+/* Boot parameters for Linux based on 2.6.12. This is used by the setup -+ sectors of Linux, and must be simulated by GRUB on EFI, because -+ the setup sectors depend on BIOS. */ -+struct linux_kernel_params -+{ -+ grub_uint8_t video_cursor_x; /* 0 */ -+ grub_uint8_t video_cursor_y; -+ -+ grub_uint16_t ext_mem; /* 2 */ -+ -+ grub_uint16_t video_page; /* 4 */ -+ grub_uint8_t video_mode; /* 6 */ -+ grub_uint8_t video_width; /* 7 */ -+ -+ grub_uint8_t padding1[0xa - 0x8]; -+ -+ grub_uint16_t video_ega_bx; /* a */ -+ -+ grub_uint8_t padding2[0xe - 0xc]; -+ -+ grub_uint8_t video_height; /* e */ -+ grub_uint8_t have_vga; /* f */ -+ grub_uint16_t font_size; /* 10 */ -+ -+ grub_uint16_t lfb_width; /* 12 */ -+ grub_uint16_t lfb_height; /* 14 */ -+ grub_uint16_t lfb_depth; /* 16 */ -+ grub_uint32_t lfb_base; /* 18 */ -+ grub_uint32_t lfb_size; /* 1c */ -+ -+ grub_uint16_t cl_magic; /* 20 */ -+ grub_uint16_t cl_offset; -+ -+ grub_uint16_t lfb_line_len; /* 24 */ -+ grub_uint8_t red_mask_size; /* 26 */ -+ grub_uint8_t red_field_pos; -+ grub_uint8_t green_mask_size; -+ grub_uint8_t green_field_pos; -+ grub_uint8_t blue_mask_size; -+ grub_uint8_t blue_field_pos; -+ grub_uint8_t reserved_mask_size; -+ grub_uint8_t reserved_field_pos; -+ grub_uint16_t vesapm_segment; /* 2e */ -+ grub_uint16_t vesapm_offset; /* 30 */ -+ grub_uint16_t lfb_pages; /* 32 */ -+ grub_uint16_t vesa_attrib; /* 34 */ -+ grub_uint32_t capabilities; /* 36 */ -+ -+ grub_uint8_t padding3[0x40 - 0x3a]; -+ -+ grub_uint16_t apm_version; /* 40 */ -+ grub_uint16_t apm_code_segment; /* 42 */ -+ grub_uint32_t apm_entry; /* 44 */ -+ grub_uint16_t apm_16bit_code_segment; /* 48 */ -+ grub_uint16_t apm_data_segment; /* 4a */ -+ grub_uint16_t apm_flags; /* 4c */ -+ grub_uint32_t apm_code_len; /* 4e */ -+ grub_uint16_t apm_data_len; /* 52 */ -+ -+ grub_uint8_t padding4[0x60 - 0x54]; -+ -+ grub_uint32_t ist_signature; /* 60 */ -+ grub_uint32_t ist_command; /* 64 */ -+ grub_uint32_t ist_event; /* 68 */ -+ grub_uint32_t ist_perf_level; /* 6c */ -+ -+ grub_uint8_t padding5[0x80 - 0x70]; -+ -+ grub_uint8_t hd0_drive_info[0x10]; /* 80 */ -+ grub_uint8_t hd1_drive_info[0x10]; /* 90 */ -+ grub_uint16_t rom_config_len; /* a0 */ -+ -+ grub_uint8_t padding6[0x1b8 - 0xa2]; -+ -+ union { -+ struct { -+ grub_uint32_t padding7_1; /* 0x1b8 */ -+ grub_uint32_t padding7_2; /* 0x1bc */ -+ -+ grub_uint32_t efi_signature; /* 1c0 */ -+ grub_uint32_t efi_system_table; /* 1c4 */ -+ grub_uint32_t efi_mem_desc_size; /* 1c8 */ -+ grub_uint32_t efi_mem_desc_version; /* 1cc */ -+ grub_uint32_t efi_mmap; /* 1d0 */ -+ grub_uint32_t efi_mmap_size; /* 1d4 */ -+ grub_uint32_t efi_system_table_hi; /* 1d8 */ -+ grub_uint32_t efi_mmap_hi; /* 1dc */ -+ } dunno; -+ struct { -+ grub_uint32_t efi_system_table; /* 1b8 */ -+ -+ grub_uint32_t padding7_1; /* 0x1bc */ -+ -+ grub_uint32_t efi_signature; /* 1c0 */ -+ grub_uint32_t efi_mem_desc_size; /* 1c4 */ -+ grub_uint32_t efi_mem_desc_version; /* 1c8 */ -+ grub_uint32_t efi_mmap_size; /* 1cc */ -+ grub_uint32_t efi_mmap; /* 1d0 */ -+ -+ grub_uint8_t padding7_2[0x1e0 - 0x1d4]; /* 1d4 */ -+ } version_0204; -+ struct { -+ grub_uint32_t padding7_1; /* 0x1b8 */ -+ grub_uint32_t padding7_2; /* 0x1bc */ -+ grub_uint32_t padding7_3; /* 0x1c0 */ -+ grub_uint32_t efi_system_table; /* 0x1c4 */ -+ grub_uint32_t efi_mem_desc_size; /* 0x1c8 */ -+ grub_uint32_t efi_mem_desc_version; /* 0x1cc */ -+ grub_uint32_t efi_mmap; /* 0x1d0 */ -+ grub_uint32_t efi_mmap_size; /* 0x1d4 */ -+ grub_uint8_t padding7_4[0x1e0 - 0x1d8]; /* 0x1d8 */ -+ } version_0206; -+ }; -+ -+ grub_uint32_t alt_mem; /* 1e0 */ -+ -+ grub_uint8_t padding8[0x1e8 - 0x1e4]; /* 1e4 */ -+ -+ grub_uint8_t e820_nr_map; /* 1e8 */ -+ grub_uint8_t eddbuf_entries; /* 1e9 */ -+ grub_uint8_t edd_mbr_sig_buf_entries; /* 1ea */ -+ -+ grub_uint8_t padding9[0x1f1 - 0x1eb]; -+ -+ struct grub_linux_kernel_header hdr; /* 0x1f1 */ -+ -+ grub_uint8_t padding10[0x2d0-0x1f1-sizeof(struct grub_linux_kernel_header)]; -+ -+ grub_uint8_t e820_map[2560]; /* 0x2d0 */ -+ -+ grub_uint8_t padding11[0x1000 - 0xcd0]; -+} __attribute__ ((packed)); -+#endif /* ! ASM_FILE */ -+ -+#endif /* ! GRUB_LINUX_MACHINE_HEADER */ -diff --git a/efi/grub/x86_64/types.h b/efi/grub/x86_64/types.h -new file mode 100644 -index 0000000..0c077f6 ---- /dev/null -+++ b/efi/grub/x86_64/types.h -@@ -0,0 +1,32 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2002,2006 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_TARGET_SIZEOF_VOID_P 8 -+ -+/* The size of long. */ -+#define GRUB_TARGET_SIZEOF_LONG 8 -+ -+/* x64_64 is little-endian. */ -+#undef GRUB_TARGET_WORDS_BIGENDIAN -+ -+#endif /* ! GRUB_TYPES_CPU_HEADER */ -diff --git a/efi/ia32/callwrap.S b/efi/ia32/callwrap.S -new file mode 100644 -index 0000000..50d737f ---- /dev/null -+++ b/efi/ia32/callwrap.S -@@ -0,0 +1 @@ -+/* This file is a stub for ia32 building */ -diff --git a/efi/ia32/callwrap.c b/efi/ia32/callwrap.c -new file mode 100644 -index 0000000..56df899 ---- /dev/null -+++ b/efi/ia32/callwrap.c -@@ -0,0 +1,131 @@ -+ -+#define ENTRY(name) \ -+ ".globl " #name ";" \ -+ ".align 16;" \ -+ #name ":" -+ -+asm( -+ENTRY(i386_call0) -+ "pushl %ebp \n" -+ "movl %esp,%ebp \n" -+ "subl $8, %esp \n" -+ "call *8(%ebp) \n" -+ "leave \n" -+ "ret \n" -+ ); -+ -+asm( -+ENTRY(i386_call1) -+ "pushl %ebp \n" -+ "movl %esp,%ebp \n" -+ "subl $20, %esp \n" -+ "pushl 12(%ebp) \n" -+ "call *8(%ebp) \n" -+ "leave \n" -+ "ret \n" -+ ); -+ -+asm( -+ENTRY(i386_call2) -+ "pushl %ebp \n" -+ "movl %esp,%ebp \n" -+ "subl $16, %esp \n" -+ "pushl 16(%ebp) \n" -+ "pushl 12(%ebp) \n" -+ "call *8(%ebp) \n" -+ "leave \n" -+ "ret \n" -+ ); -+ -+asm( -+ENTRY(i386_call3) -+ "pushl %ebp \n" -+ "movl %esp,%ebp \n" -+ "subl $12, %esp \n" -+ "pushl 20(%ebp) \n" -+ "pushl 16(%ebp) \n" -+ "pushl 12(%ebp) \n" -+ "call *8(%ebp) \n" -+ "leave \n" -+ "ret \n" -+ ); -+ -+asm( -+ENTRY(i386_call4) -+ "pushl %ebp \n" -+ "movl %esp,%ebp \n" -+ "subl $8, %esp \n" -+ "pushl 24(%ebp) \n" -+ "pushl 20(%ebp) \n" -+ "pushl 16(%ebp) \n" -+ "pushl 12(%ebp) \n" -+ "call *8(%ebp) \n" -+ "leave \n" -+ "ret \n" -+ ); -+ -+asm( -+ENTRY(i386_call5) -+ "pushl %ebp \n" -+ "movl %esp,%ebp \n" -+ "subl $20, %esp \n" -+ "pushl 28(%ebp) \n" -+ "pushl 24(%ebp) \n" -+ "pushl 20(%ebp) \n" -+ "pushl 16(%ebp) \n" -+ "pushl 12(%ebp) \n" -+ "call *8(%ebp) \n" -+ "leave \n" -+ "ret \n" -+ ); -+ -+asm( -+ENTRY(i386_64_call5) -+ "pushl %ebp \n" -+ "movl %esp,%ebp \n" -+ "subl $12, %esp \n" -+ "pushl 36(%ebp) \n" -+ "pushl 32(%ebp) \n" -+ "pushl 28(%ebp) \n" -+ "pushl 24(%ebp) \n" -+ "pushl 20(%ebp) \n" -+ "pushl 16(%ebp) \n" -+ "pushl 12(%ebp) \n" -+ "call *8(%ebp) \n" -+ "leave \n" -+ "ret \n" -+ ); -+ -+ -+asm( -+ENTRY(i386_call6) -+ "pushl %ebp \n" -+ "movl %esp,%ebp \n" -+ "subl $16, %esp \n" -+ "pushl 32(%ebp) \n" -+ "pushl 28(%ebp) \n" -+ "pushl 24(%ebp) \n" -+ "pushl 20(%ebp) \n" -+ "pushl 16(%ebp) \n" -+ "pushl 12(%ebp) \n" -+ "call *8(%ebp) \n" -+ "leave \n" -+ "ret \n" -+ ); -+ -+asm( -+ENTRY(i386_call7) -+ "pushl %ebp \n" -+ "movl %esp,%ebp \n" -+ "subl $12, %esp \n" -+ "pushl 36(%ebp) \n" -+ "pushl 32(%ebp) \n" -+ "pushl 28(%ebp) \n" -+ "pushl 24(%ebp) \n" -+ "pushl 20(%ebp) \n" -+ "pushl 16(%ebp) \n" -+ "pushl 12(%ebp) \n" -+ "call *8(%ebp) \n" -+ "leave \n" -+ "ret \n" -+ ); -diff --git a/efi/ia32/loader/bin_to_h.c b/efi/ia32/loader/bin_to_h.c -new file mode 100644 -index 0000000..4cff104 ---- /dev/null -+++ b/efi/ia32/loader/bin_to_h.c -@@ -0,0 +1,29 @@ -+#include <stdio.h> -+#include <stdlib.h> -+ -+int -+main (void) -+{ -+ unsigned n = 0; -+ int c; -+ -+ printf ("unsigned char switch_image[] = {\n"); -+ -+ while ((c = getchar ()) != EOF) -+ { -+ printf("0x%02x,%s", -+ c & 0xFF, -+ (++n & 0x07) ? " " : "\n"); -+ } -+ -+ if (n & 0x07) -+ { -+ printf("\n"); -+ } -+ -+ printf("};\n" -+ "int switch_size = sizeof switch_image;\n"); -+ -+ return 0; -+} -+ -diff --git a/efi/ia32/loader/linux.c b/efi/ia32/loader/linux.c -new file mode 100644 -index 0000000..d795d28 ---- /dev/null -+++ b/efi/ia32/loader/linux.c -@@ -0,0 +1,648 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2006 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/misc.h> -+#include <grub/types.h> -+#include <grub/cpu/linux.h> -+#include <grub/efi/api.h> -+#include <grub/efi/efi.h> -+#include <grub/efi/misc.h> -+ -+#include "switch.h" -+ -+#include <shared.h> -+ -+#include "graphics.h" -+ -+#define grub_file_size() filemax -+ -+#define NEXT_MEMORY_DESCRIPTOR(desc, size) \ -+ ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size))) -+ -+#define PTR_HI(x) ((grub_uint32_t) ((unsigned long long)((unsigned long)(x)) >> 32)) -+ -+#ifndef SECTOR_SIZE -+#define SECTOR_SIZE 0x200 -+#endif /* defined(SECTOR_SIZE) */ -+#ifndef SECTOR_BITS -+#define SECTOR_BITS 9 -+#endif /* defined(SECTOR_BITS) */ -+ -+static unsigned long linux_mem_size; -+static int loaded; -+static void *real_mode_mem; -+static void *prot_mode_mem; -+static void *initrd_mem; -+static grub_efi_uintn_t real_mode_pages; -+static grub_efi_uintn_t prot_mode_pages; -+static grub_efi_uintn_t initrd_pages; -+static grub_efi_guid_t graphics_output_guid = GRUB_EFI_GRAPHICS_OUTPUT_GUID; -+ -+static inline grub_size_t -+page_align (grub_size_t size) -+{ -+ return (size + (1 << 12) - 1) & (~((1 << 12) - 1)); -+} -+ -+static void -+free_pages (void) -+{ -+ if (real_mode_mem) -+ { -+ grub_efi_free_pages ((grub_addr_t) real_mode_mem, real_mode_pages); -+ real_mode_mem = 0; -+ } -+ -+ if (prot_mode_mem) -+ { -+ grub_efi_free_pages ((grub_addr_t) prot_mode_mem, prot_mode_pages); -+ prot_mode_mem = 0; -+ } -+ -+ if (initrd_mem) -+ { -+ grub_efi_free_pages ((grub_addr_t) initrd_mem, initrd_pages); -+ initrd_mem = 0; -+ } -+ -+ if (mmap_buf) -+ { -+ grub_efi_free_pages ((grub_addr_t) mmap_buf, mmap_pages); -+ mmap_buf = 0; -+ } -+} -+ -+/* Allocate pages for the real mode code and the protected mode code -+ for linux as well as a memory map buffer. */ -+static int -+allocate_pages (grub_size_t real_size, grub_size_t prot_size) -+{ -+ grub_efi_uintn_t desc_size; -+ grub_efi_memory_descriptor_t *mmap_end; -+ grub_efi_memory_descriptor_t *desc; -+ grub_efi_physical_address_t addr; -+ -+ /* Make sure that each size is aligned to a page boundary. */ -+ real_size = page_align (real_size + SECTOR_SIZE); -+ prot_size = page_align (prot_size); -+ -+ grub_dprintf ("linux", "real_size = %x, prot_size = %x, mmap_size = %x\n", -+ (unsigned int) real_size, (unsigned int) prot_size, -+ (unsigned int) mmap_size); -+ -+ /* Calculate the number of pages; Combine the real mode code with -+ the memory map buffer for simplicity. */ -+ real_mode_pages = (real_size >> 12); -+ prot_mode_pages = (prot_size >> 12); -+ -+ /* Initialize the memory pointers with NULL for convenience. */ -+ real_mode_mem = 0; -+ prot_mode_mem = 0; -+ -+ if (grub_efi_get_memory_map (0, &desc_size, 0) <= 0) -+ grub_fatal ("cannot get memory map"); -+ -+ addr = 0; -+ mmap_end = NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size); -+ /* First, find free pages for the real mode code -+ and the memory map buffer. */ -+ for (desc = mmap_buf; -+ desc < mmap_end; -+ desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) -+ { -+ if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY -+ && desc->num_pages >= real_mode_pages) -+ { -+ grub_efi_physical_address_t physical_end; -+ -+ physical_end = desc->physical_start + (desc->num_pages << 12); -+ -+ grub_dprintf ("linux", "physical_start = %x, physical_end = %x\n", -+ (unsigned) desc->physical_start, -+ (unsigned) physical_end); -+ addr = physical_end - real_size; -+ if (addr < 0x10000) -+ continue; -+ -+ grub_dprintf ("linux", "trying to allocate %u pages at %x\n", -+ (unsigned) real_mode_pages, (unsigned) addr); -+ real_mode_mem = grub_efi_allocate_pages (addr, real_mode_pages); -+ if (! real_mode_mem) -+ grub_fatal ("cannot allocate pages"); -+ -+ desc->num_pages -= real_mode_pages; -+ break; -+ } -+ } -+ -+ if (! real_mode_mem) -+ { -+ grub_printf ("cannot allocate real mode pages"); -+ errnum = ERR_WONT_FIT; -+ goto fail; -+ } -+ -+ /* Next, find free pages for the protected mode code. */ -+ /* XXX what happens if anything is using this address? */ -+ prot_mode_mem = grub_efi_allocate_pages (0x100000, prot_mode_pages); -+ if (! prot_mode_mem) -+ grub_fatal("Cannot allocate pages for VMLINUZ"); -+ -+ return 1; -+ -+ fail: -+ free_pages (); -+ return 0; -+} -+ -+/* do some funky stuff, then boot linux */ -+void -+linux_boot (void) -+{ -+ grub_printf ("zImage is not supported under EFI.\n"); -+ for (;;); -+} -+ -+#ifndef __x86_64__ -+struct { -+ unsigned short limit; -+ unsigned int base; -+} __attribute__ ((packed)) -+ gdt_addr = { 0x800, 0x94000 }, -+ idt_addr = { 0, 0 }; -+ -+unsigned short init_gdt[] = { -+ /* gdt[0]: dummy */ -+ 0, 0, 0, 0, -+ -+ /* gdt[1]: unused */ -+ 0, 0, 0, 0, -+ -+ /* gdt[2]: code */ -+ 0xFFFF, /* 4Gb - (0x100000*0x1000 = 4Gb) */ -+ 0x0000, /* base address=0 */ -+ 0x9A00, /* code read/exec */ -+ 0x00CF, /* granularity=4096, 386 (+5th nibble of limit) */ -+ -+ /* gdt[3]: data */ -+ 0xFFFF, /* 4Gb - (0x100000*0x1000 = 4Gb) */ -+ 0x0000, /* base address=0 */ -+ 0x9200, /* data read/write */ -+ 0x00CF, /* granularity=4096, 386 (+5th nibble of limit) */ -+}; -+#endif -+ -+void -+big_linux_boot (void) -+{ -+ struct linux_kernel_params *params; -+ struct grub_linux_kernel_header *lh; -+ grub_efi_uintn_t map_key; -+ grub_efi_uintn_t desc_size; -+ grub_efi_uint32_t desc_version; -+ int e820_nr_map; -+ int i; -+ -+ params = real_mode_mem; -+ -+ graphics_set_kernel_params (params); -+ -+ if (grub_efi_get_memory_map (&map_key, &desc_size, &desc_version) <= 0) -+ grub_fatal ("cannot get memory map"); -+ -+ /* Pass e820 memmap. */ -+ e820_map_from_efi_map ((struct e820_entry *) params->e820_map, &e820_nr_map, -+ mmap_buf, desc_size, mmap_size); -+ params->e820_nr_map = e820_nr_map; -+ -+ grub_dprintf(__func__,"got to ExitBootServices...\n"); -+ if (! grub_efi_exit_boot_services (map_key)) -+ grub_fatal ("cannot exit boot services"); -+ /* Note that no boot services are available from here. */ -+ -+ lh = ¶ms->hdr; -+ /* Pass EFI parameters. */ -+ if (grub_le_to_cpu16 (lh->version) >= 0x0206) { -+ params->version_0206.efi_mem_desc_size = desc_size; -+ params->version_0206.efi_mem_desc_version = desc_version; -+ params->version_0206.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf; -+ params->version_0206.efi_mmap_size = mmap_size; -+ } else if (grub_le_to_cpu16 (lh->version) >= 0x0204) { -+ params->version_0204.efi_mem_desc_size = desc_size; -+ params->version_0204.efi_mem_desc_version = desc_version; -+ params->version_0204.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf; -+ params->version_0204.efi_mmap_size = mmap_size; -+ } else /* dunno */ { -+ params->dunno.efi_mem_desc_size = desc_size; -+ params->dunno.efi_mem_desc_version = desc_version; -+ params->dunno.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf; -+ params->dunno.efi_mmap_size = mmap_size; -+ params->dunno.efi_mmap_hi = PTR_HI(mmap_buf); -+ } -+ -+#ifdef __x86_64__ -+ /* copy our real mode transition code to 0x700 */ -+ memcpy ((void *) 0x700, switch_image, switch_size); -+ asm volatile ( "mov $0x700, %%rdi" : :); -+ -+ /* Pass parameters. */ -+ asm volatile ("mov %0, %%rsi" : : "m" (real_mode_mem)); -+ asm volatile ("movl %0, %%ebx" : : "m" (params->hdr.code32_start)); -+ -+ /* Enter Linux, switch from 64-bit long mode -+ * to 32-bit protect mode, this code end address -+ * must not exceed 0x1000, because linux kernel bootstrap -+ * code will flush this area -+ */ -+ asm volatile ( "jmp *%%rdi" : :); -+#else -+ -+ asm volatile ( "cli" : : ); -+ -+ grub_memset((void *)gdt_addr.base, gdt_addr.limit, 0); -+ grub_memcpy((void *)gdt_addr.base, init_gdt, sizeof (init_gdt)); -+ -+ if (0) { -+ /* copy our real mode transition code to 0x7C00 */ -+ memcpy ((void *) 0x7C00, switch_image, switch_size); -+ asm volatile ( "mov $0x7C00, %%ebx" : : ); -+ asm volatile ( "jmp *%%ebx" : : ); -+ } else { -+ -+ /* load descriptor table pointers */ -+ // asm volatile ( "lidt %0" : : "m" (idt_addr) ); -+ asm volatile ( "lgdt %0" : : "m" (gdt_addr) ); -+ -+ /* -+ * ebx := 0 (%%TBD - do not know why, yet) -+ * ecx := kernel entry point -+ * esi := address of boot sector and setup data -+ */ -+ -+ asm volatile ( "movl %0, %%esi" : : "m" (real_mode_mem) ); -+ asm volatile ( "movl %0, %%ecx" : : "m" (params->hdr.code32_start) ); -+ asm volatile ( "xorl %%ebx, %%ebx" : : ); -+ -+ /* -+ * Jump to kernel entry point. -+ */ -+ -+ asm volatile ( "jmp *%%ecx" : : ); -+ } -+#endif -+ -+ /* Never reach here. */ -+ for (;;); -+} -+ -+int -+grub_load_linux (char *kernel, char *arg) -+{ -+ struct grub_linux_kernel_header *lh; -+ struct linux_kernel_params *params; -+ static struct linux_kernel_params params_buf; -+ grub_uint8_t setup_sects; -+ grub_size_t real_size, prot_size; -+ grub_ssize_t len; -+ char *dest; -+ -+ if (kernel == NULL) -+ { -+ errnum = ERR_BAD_FILENAME; -+ grub_printf ("no kernel specified"); -+ goto fail1; -+ } -+ -+ if (! grub_open (kernel)) -+ goto fail1; -+ -+ if (grub_read ((char *) ¶ms_buf, sizeof (params_buf)) -+ != sizeof (params_buf)) -+ { -+ errnum = ERR_EXEC_FORMAT; -+ grub_close(); -+ grub_printf ("cannot read the linux header"); -+ goto fail; -+ } -+ -+ lh = ¶ms_buf.hdr; -+ -+ if (lh->boot_flag != grub_cpu_to_le16 (0xaa55)) -+ { -+ errnum = ERR_EXEC_FORMAT; -+ grub_close(); -+ grub_printf ("invalid magic number: %x", lh->boot_flag); -+ goto fail; -+ } -+ -+ /* EFI support is quite new, so reject old versions. */ -+ if (lh->header != grub_cpu_to_le32 (GRUB_LINUX_MAGIC_SIGNATURE) -+ || grub_le_to_cpu16 (lh->version) < 0x0203) -+ { -+ grub_close(); -+ errnum = ERR_EXEC_FORMAT; -+ grub_printf ("too old version"); -+ goto fail; -+ } -+ -+ /* I'm not sure how to support zImage on EFI. */ -+ if (! (lh->loadflags & GRUB_LINUX_FLAG_BIG_KERNEL)) -+ { -+ errnum = ERR_EXEC_FORMAT; -+ grub_printf ("zImage is not supported"); -+ goto fail; -+ } -+ -+ setup_sects = lh->setup_sects; -+ -+ real_size = 0x1000 + grub_strlen(arg); -+ prot_size = grub_file_size () - (setup_sects << SECTOR_BITS) - SECTOR_SIZE; -+ -+ if (! allocate_pages (real_size, prot_size)) -+ goto fail; -+ -+ /* XXX Linux assumes that only elilo can boot Linux on EFI!!! */ -+ lh->type_of_loader = 0x50; -+ -+ lh->cmd_line_ptr = (grub_uint32_t) (unsigned long) real_mode_mem + 0x1000; -+ -+ lh->heap_end_ptr = LINUX_HEAP_END_OFFSET; -+ lh->loadflags |= LINUX_FLAG_CAN_USE_HEAP; -+ -+ lh->ramdisk_image = 0; -+ lh->ramdisk_size = 0; -+ -+ grub_memset(real_mode_mem, 0, real_size); -+ -+ params = (struct linux_kernel_params *) real_mode_mem; -+ -+ grub_memmove(¶ms->hdr, lh, 0x202 + lh->jump_off - 0x1f1); -+ -+ params->cl_magic = GRUB_LINUX_CL_MAGIC; -+ params->cl_offset = 0x1000; -+ -+ /* These are not needed to be precise, because Linux uses these values -+ only to raise an error when the decompression code cannot find good -+ space. */ -+ params->ext_mem = ((32 * 0x100000) >> 10); -+ params->alt_mem = ((32 * 0x100000) >> 10); -+ -+ /* No APM on EFI. */ -+ params->apm_version = 0; -+ params->apm_code_segment = 0; -+ params->apm_entry = 0; -+ params->apm_16bit_code_segment = 0; -+ params->apm_data_segment = 0; -+ params->apm_flags = 0; -+ params->apm_code_len = 0; -+ params->apm_data_len = 0; -+ -+ /* XXX is there any way to use SpeedStep on EFI? */ -+ params->ist_signature = 0; -+ params->ist_command = 0; -+ params->ist_event = 0; -+ params->ist_perf_level = 0; -+ -+ /* Let the kernel probe the information. */ -+ grub_memset (params->hd0_drive_info, 0, sizeof (params->hd0_drive_info)); -+ grub_memset (params->hd1_drive_info, 0, sizeof (params->hd1_drive_info)); -+ -+ /* No MCA on EFI. */ -+ params->rom_config_len = 0; -+ -+ if (grub_le_to_cpu16 (lh->version) >= 0x0206) { -+ grub_memcpy(¶ms->version_0204.efi_signature, "EL32", 4); -+ params->version_0206.efi_system_table = \ -+ (grub_uint32_t) (unsigned long) grub_efi_system_table; -+ } else if (grub_le_to_cpu16 (lh->version) >= 0x0204) { -+ grub_memcpy(¶ms->version_0204.efi_signature, "EFIL", 4); -+ params->version_0204.efi_system_table = \ -+ (grub_uint32_t) (unsigned long) grub_efi_system_table; -+ } else /* dunno */ { -+ params->dunno.efi_signature = GRUB_LINUX_EFI_SIGNATURE_X64; -+ params->dunno.efi_system_table = \ -+ (grub_uint32_t) (unsigned long) grub_efi_system_table; -+ params->dunno.efi_system_table_hi = PTR_HI(grub_efi_system_table); -+ } -+ /* The other EFI parameters are filled when booting. */ -+ -+ /* No EDD */ -+ params->eddbuf_entries = 0; -+ params->edd_mbr_sig_buf_entries = 0; -+ -+ /* XXX there is no way to know if the kernel really supports EFI. */ -+ grub_printf ("[Linux-EFI, setup=0x%x, size=0x%x]\n", (unsigned int)real_size, -+ (unsigned int)prot_size); -+ -+ /* Check the mem= option to limit memory used for initrd. */ -+ { -+ char *mem; -+ -+ mem = grub_strstr (arg, "mem="); -+ if (mem) -+ { -+ char *value = mem + 4; -+ -+ safe_parse_maxulong (&value, &linux_mem_size); -+ switch (errnum) -+ { -+ case ERR_NUMBER_OVERFLOW: -+ /* If an overflow occurs, use the maximum address for -+ initrd instead. This is good, because MAXINT is -+ greater than LINUX_INITRD_MAX_ADDRESS. */ -+ linux_mem_size = LINUX_INITRD_MAX_ADDRESS; -+ errnum = ERR_NONE; -+ break; -+ -+ case ERR_NONE: -+ { -+ int shift = 0; -+ -+ switch (grub_tolower (*value)) -+ { -+ case 'g': -+ shift += 10; -+ case 'm': -+ shift += 10; -+ case 'k': -+ shift += 10; -+ default: -+ break; -+ } -+ -+ /* Check an overflow. */ -+ if (linux_mem_size > (~0UL >> shift)) -+ linux_mem_size = 0; -+ else -+ linux_mem_size <<= shift; -+ } -+ break; -+ -+ default: -+ linux_mem_size = 0; -+ errnum = ERR_NONE; -+ break; -+ } -+ } -+ else -+ linux_mem_size = 0; -+ } -+ -+ dest = grub_stpcpy ((char *) real_mode_mem + 0x1000, skip_to(0, arg)); -+ -+ grub_seek ((setup_sects << SECTOR_BITS) + SECTOR_SIZE); -+ len = prot_size; -+ if (grub_read ((char *) GRUB_LINUX_BZIMAGE_ADDR, len) != len) -+ grub_printf ("Couldn't read file"); -+ -+ if (errnum == ERR_NONE) -+ { -+ loaded = 1; -+ } -+ -+ fail: -+ -+ grub_close (); -+ -+ fail1: -+ -+ if (errnum != ERR_NONE) -+ { -+ loaded = 0; -+ } -+ return errnum ? KERNEL_TYPE_NONE : KERNEL_TYPE_BIG_LINUX; -+} -+ -+int -+grub_load_initrd (char *initrd) -+{ -+ grub_ssize_t size; -+ grub_addr_t addr_min, addr_max; -+ grub_addr_t addr; -+ grub_efi_uintn_t map_key; -+ grub_efi_memory_descriptor_t *mmap_end; -+ grub_efi_memory_descriptor_t *desc; -+ grub_efi_memory_descriptor_t tdesc; -+ grub_efi_uintn_t desc_size; -+ grub_efi_uint32_t desc_version; -+ struct linux_kernel_params *params; -+ -+ if (initrd == NULL) -+ { -+ errnum = ERR_BAD_FILENAME; -+ grub_printf ("No module specified"); -+ goto fail1; -+ } -+ -+ if (! loaded) -+ { -+ errnum = ERR_UNRECOGNIZED; -+ grub_printf ("You need to load the kernel first."); -+ goto fail1; -+ } -+ -+ if (! grub_open (initrd)) -+ goto fail1; -+ -+ size = grub_file_size (); -+ initrd_pages = (page_align (size) >> 12); -+ -+ params = (struct linux_kernel_params *) real_mode_mem; -+ grub_dprintf(__func__, "initrd_pages: %lu\n", initrd_pages); -+ -+ addr_max = grub_cpu_to_le32 (params->hdr.initrd_addr_max); -+ if (linux_mem_size != 0 && linux_mem_size < addr_max) -+ addr_max = linux_mem_size; -+ addr_max &= ~((1 << 12)-1); -+ -+ /* Linux 2.3.xx has a bug in the memory range check, so avoid -+ the last page. -+ Linux 2.2.xx has a bug in the memory range check, which is -+ worse than that of Linux 2.3.xx, so avoid the last 64kb. */ -+ //addr_max -= 0x10000; -+ -+ /* Usually, the compression ratio is about 50%. */ -+ addr_min = (grub_addr_t) prot_mode_mem + ((prot_mode_pages * 3) << 12); -+ grub_dprintf(__func__, "prot_mode_mem=%p prot_mode_pages=%lu\n", prot_mode_mem, prot_mode_pages); -+ -+ /* Find the highest address to put the initrd. */ -+ if (grub_efi_get_memory_map (&map_key, &desc_size, &desc_version) <= 0) -+ grub_fatal ("cannot get memory map"); -+ -+ mmap_end = NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size); -+ addr = 0; -+ for (desc = mmap_buf; -+ desc < mmap_end; -+ desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) -+ { -+ if (desc->type != GRUB_EFI_CONVENTIONAL_MEMORY) -+ continue; -+ memcpy(&tdesc, desc, sizeof (tdesc)); -+ if (tdesc.physical_start < addr_min -+ && tdesc.num_pages > ((addr_min - tdesc.physical_start) >> 12)) -+ { -+ tdesc.num_pages -= ((addr_min - tdesc.physical_start) >> 12); -+ tdesc.physical_start = addr_min; -+ } -+ -+ grub_dprintf(__func__, "desc = {type=%d,ps=0x%llx,vs=0x%llx,sz=%llu,attr=%llu}\n", desc->type, (unsigned long long)desc->physical_start, (unsigned long long)desc->virtual_start, (unsigned long long)desc->num_pages, (unsigned long long)desc->attribute); -+ if (tdesc.physical_start >= addr_min -+ && tdesc.physical_start + page_align (size) <= addr_max -+ && tdesc.num_pages >= initrd_pages) -+ { -+ grub_efi_physical_address_t physical_end; -+ -+ physical_end = tdesc.physical_start + (tdesc.num_pages << 12); -+ if (physical_end > addr_max) -+ physical_end = addr_max; -+ -+ if (physical_end <= 0x7fffffffUL && physical_end > addr) -+ addr = physical_end - page_align (size); -+ } -+ } -+ -+ if (addr == 0) -+ { -+ errnum = ERR_UNRECOGNIZED; -+ grub_printf ("no free pages available"); -+ goto fail; -+ } -+ -+ initrd_mem = grub_efi_allocate_pages (addr, initrd_pages); -+ if (! initrd_mem) -+ grub_fatal ("cannot allocate pages: %x@%x", (unsigned)initrd_pages, -+ (unsigned)addr); -+ -+ if (grub_read (initrd_mem, size) != size) -+ { -+ grub_printf ("Couldn't read file"); -+ goto fail; -+ } -+ -+ grub_printf (" [Initrd, addr=0x%x, size=0x%x]\n", (unsigned int) addr, -+ (unsigned int) size); -+ -+ params->hdr.ramdisk_image = addr; -+ params->hdr.ramdisk_size = size; -+ -+ fail: -+ grub_close (); -+ fail1: -+ return !errnum; -+} -diff --git a/efi/ia32/loader/switch.S b/efi/ia32/loader/switch.S -new file mode 100644 -index 0000000..14142e9 ---- /dev/null -+++ b/efi/ia32/loader/switch.S -@@ -0,0 +1,118 @@ -+# -+# Switch from protected mode to real mode and jump to setup.S -+# image located at %cx:0. -+# -+# This module must be placed into physical memory at 0:7C00h. -+# EFI has some real mode thunking code at 2000:0h. -+# -+# Processor and non-maskable interrupts should be disabled -+# before control is passed to this module. -+# -+ -+.global _start -+ -+.code32 -+.text -+_start: -+ # -+ # Load identity mapped GDT & real mode IDT. -+ # Add 7C00h to the addresses since this is linked to start -+ # at 0h and it is being placed at 7C00h. -+ # -+ -+ lgdt %cs:gdt_48 + 0x7C00 -+ lidt %cs:idt_48 + 0x7C00 -+ -+ # -+ # Turn off PG bit in CR0 and set CR3 to zero. -+ # -+ -+ movl %cr0, %eax -+ andl $0x7FFFFFFF, %eax -+ movl %eax, %cr0 -+ -+ xorl %eax, %eax -+ movl %eax, %cr3 -+ -+ # -+ # Reload CS. -+ # Now we add 7B00h because we need to force the segment -+ # address and selector to be the same. -+ # -+ -+ .byte 0xEA -+ .long pm_reload + 0x7B00 -+ .word 0x10 -+ -+pm_reload: -+ -+.code16 -+ -+ # -+ # Reload DS, ES, FS, GS & SS. -+ # -+ -+ movw $0x18, %ax -+ movw %ax, %ds -+ movw %ax, %es -+ movw %ax, %fs -+ movw %ax, %gs -+ movw %ax, %ss -+ -+ # -+ # Switch to real mode. Clear PE bit in CR0. -+ # -+ -+ movl %cr0, %eax -+ andl $0xFFFFFFFE, %eax -+ movl %eax, %cr0 -+ -+ # -+ # Reload CS. -+ # -+ -+ .byte 0xEA -+ .word rm_reload + 0x7C00 -+ .word 0 -+ -+rm_reload: -+ -+ # -+ # Reload SS & SP. -+ # -+ -+ xorw %ax, %ax -+ movw %ax, %ss -+ movw $0x7BFE, %sp -+ -+ # -+ # Start running setup.S -+ # -+ -+ .byte 0xEA -+ .word 0 -+ .word 0x9020 -+ -+ # -+ # GDT & IDT stuff for switching into real mode. -+ # -+ -+gdt: .word 0, 0, 0, 0 # unused (00h) -+ .word 0, 0, 0, 0 # dummy (08h) -+ .word 0xFFFF, 0x100 # code (10h) -+ .word 0x9A00, 0 -+ .word 0xFFFF, 0x180 # data (18h) -+ .word 0x9200, 0 -+ -+gdt_48: .word 0x08 * 0x400 -+ .long gdt + 0x7C00 -+ -+idt_48: .word 0x400 -+ .long 0 -+ -+ # -+ # Be careful not to exceed 1F0h or the the bootsect.S -+ # parameters will be lost! -+ # -+ -+.end -diff --git a/efi/ia32/loader/switch.h b/efi/ia32/loader/switch.h -new file mode 100644 -index 0000000..4e18dde ---- /dev/null -+++ b/efi/ia32/loader/switch.h -@@ -0,0 +1,19 @@ -+unsigned char switch_image[] = { -+0x2e, 0x0f, 0x01, 0x15, 0x6f, 0x7c, 0x00, 0x00, -+0x2e, 0x0f, 0x01, 0x1d, 0x75, 0x7c, 0x00, 0x00, -+0x0f, 0x20, 0xc0, 0x25, 0xff, 0xff, 0xff, 0x7f, -+0x0f, 0x22, 0xc0, 0x31, 0xc0, 0x0f, 0x22, 0xd8, -+0xea, 0x27, 0x7b, 0x00, 0x00, 0x10, 0x00, 0xb8, -+0x18, 0x00, 0x8e, 0xd8, 0x8e, 0xc0, 0x8e, 0xe0, -+0x8e, 0xe8, 0x8e, 0xd0, 0x0f, 0x20, 0xc0, 0x66, -+0x83, 0xe0, 0xfe, 0x0f, 0x22, 0xc0, 0xea, 0x43, -+0x7c, 0x00, 0x00, 0x31, 0xc0, 0x8e, 0xd0, 0xbc, -+0xfe, 0x7b, 0xea, 0x00, 0x00, 0x20, 0x90, 0x00, -+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, -+0xff, 0x00, 0x01, 0x00, 0x9a, 0x00, 0x00, 0xff, -+0xff, 0x80, 0x01, 0x00, 0x92, 0x00, 0x00, 0x00, -+0x20, 0x4f, 0x7c, 0x00, 0x00, 0x00, 0x04, 0x00, -+0x00, 0x00, 0x00, -+}; -+int switch_size = sizeof switch_image; -diff --git a/efi/ia32/reloc.c b/efi/ia32/reloc.c -new file mode 100644 -index 0000000..72db0f6 ---- /dev/null -+++ b/efi/ia32/reloc.c -@@ -0,0 +1,79 @@ -+/* reloc_x86_64.c - position independent x86_64 ELF shared object relocator -+ Copyright (C) 1999 Hewlett-Packard Co. -+ Contributed by David Mosberger davidm@hpl.hp.com. -+ Copyright (C) 2005 Intel Co. -+ Contributed by Fenghua Yu fenghua.yu@intel.com. -+ -+ This file is part of GNU-EFI, the GNU EFI development environment. -+ -+ GNU EFI 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, or (at your option) -+ any later version. -+ -+ GNU EFI 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 GNU EFI; see the file COPYING. If not, write to the Free -+ Software Foundation, 59 Temple Place - Suite 330, Boston, MA -+ 02111-1307, USA. */ -+ -+#include <grub/efi/efi.h> -+#include <grub/efi/api.h> -+#include <link.h> -+ -+grub_efi_status_t _relocate (long ldbase, ElfW(Dyn) *dyn, -+ grub_efi_handle_t image_handle, -+ grub_efi_system_table_t *sys_tab) -+{ -+ //extern EFI_STATUS efi_main (EFI_HANDLE, EFI_SYSTEM_TABLE *); -+ long relsz = 0, relent = 0; -+ ElfW(Rel) *rel = 0; -+ unsigned long *addr; -+ int i; -+ -+ for (i = 0; dyn[i].d_tag != DT_NULL; ++i) { -+ switch (dyn[i].d_tag) { -+ case DT_REL: -+ rel = (ElfW(Rel)*) ((long) dyn[i].d_un.d_ptr + ldbase); -+ break; -+ -+ case DT_RELSZ: -+ relsz = dyn[i].d_un.d_val; -+ break; -+ -+ case DT_RELENT: -+ relent = dyn[i].d_un.d_val; -+ break; -+ -+ default: -+ continue; -+ } -+ } -+ -+ if (!rel || relent == 0){ -+ return GRUB_EFI_LOAD_ERROR; -+ } -+ while (relsz > 0) { -+ /* apply the relocs */ -+ switch (ELF64_R_TYPE (rel->r_info)) { -+ case R_386_NONE: -+ break; -+ -+ case R_386_RELATIVE: -+ addr = (unsigned long *) (ldbase + rel->r_offset); -+ *addr += ldbase; -+ break; -+ -+ default: -+ break; -+ } -+ rel = (ElfW(Rel)*) ((char *) rel + relent); -+ relsz -= relent; -+ } -+ return GRUB_EFI_SUCCESS; -+} -+ -diff --git a/efi/ia32/setjmp.S b/efi/ia32/setjmp.S -new file mode 100644 -index 0000000..38c33af ---- /dev/null -+++ b/efi/ia32/setjmp.S -@@ -0,0 +1,86 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2000 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. -+ */ -+ -+/* This is stolen from libc/x86/setjmp.S in the OSKit */ -+/* -+ * Mach Operating System -+ * Copyright (c) 1991,1990,1989 Carnegie Mellon University -+ * All Rights Reserved. -+ * -+ * Permission to use, copy, modify and distribute this software and its -+ * documentation is hereby granted, provided that both the copyright -+ * notice and this permission notice appear in all copies of the -+ * software, derivative works or modified versions, and any portions -+ * thereof, and that both notices appear in supporting documentation. -+ * -+ * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS" -+ * CONDITION. CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR -+ * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE. -+ * -+ * Carnegie Mellon requests users of this software to return to -+ * -+ * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU -+ * School of Computer Science -+ * Carnegie Mellon University -+ * Pittsburgh PA 15213-3890 -+ * -+ * any improvements or extensions that they make and grant Carnegie Mellon -+ * the rights to redistribute these changes. -+ */ -+/* -+ * C library -- _setjmp, _longjmp -+ * -+ * _longjmp(a,v) -+ * will generate a "return(v)" from -+ * the last call to -+ * _setjmp(a) -+ * by restoring registers from the stack, -+ * The previous signal state is NOT restored. -+ * -+ */ -+#include <grub/symbol.h> -+ -+ .file "setjmp.S" -+ -+ .text -+ -+FUNCTION(grub_setjmp) -+ movl 4(%esp), %ecx /* fetch buffer */ -+ movl %ebx, 0(%ecx) -+ movl %esi, 4(%ecx) -+ movl %edi, 8(%ecx) -+ movl %ebp, 12(%ecx) /* save frame pointer of caller */ -+ popl %edx -+ movl %esp, 16(%ecx) /* save stack pointer of caller */ -+ movl %edx, 20(%ecx) /* save pc of caller */ -+ xorl %eax, %eax -+ jmp *%edx -+ -+FUNCTION(grub_longjmp) -+ movl 8(%esp), %eax /* return(v) */ -+ movl 4(%esp), %ecx /* fetch buffer */ -+ movl 0(%ecx), %ebx -+ movl 4(%ecx), %esi -+ movl 8(%ecx), %edi -+ movl 12(%ecx), %ebp -+ movl 16(%ecx), %esp -+ orl %eax, %eax -+ jnz 0f -+ incl %eax -+0: jmp *20(%ecx) /* done, return.... */ -diff --git a/efi/pxe.c b/efi/pxe.c -new file mode 100644 -index 0000000..59f0d0d ---- /dev/null -+++ b/efi/pxe.c -@@ -0,0 +1,460 @@ -+ -+#include <grub/efi/efi.h> -+#include <grub/efi/api.h> -+#include <grub/efi/misc.h> -+#include <grub/misc.h> -+ -+#include <shared.h> -+#include <stddef.h> -+ -+#include "pxe.h" -+#include "dhcp.h" -+ -+/* Search path is: -+ * -+ * X86PC/UNDI/pxelinux/pxelinux.cfg/1902dcf5-7190-d811-bbd6-6ef21c690030 -+ * X86PC/UNDI/pxelinux/pxelinux.cfg/01-00-30-6e-f2-1c-69 -+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A103437 -+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A10343 -+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A1034 -+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A103 -+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A10 -+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A1 -+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0A -+ * X86PC/UNDI/pxelinux/pxelinux.cfg/0 -+ * X86PC/UNDI/pxelinux/pxelinux.cfg/default -+ * -+ * The paths we get from uefi are like: -+ * .BootBootFile: X86PC/UNDI/pxelinux/bootx64.efi -+ * .BootCiAddr: 0.0.0.0 -+ * .BootYiAddr: 10.16.52.158 -+ * .BootSiAddr: 10.16.52.16 -+ */ -+ -+typedef struct { -+ char *options; -+ EFI_DHCP4_PACKET_OPTION *current_option; -+} dhcp_option_parser; -+ -+static void dhcp_option_parser_reset(dhcp_option_parser *parser, -+ EFI_PXE_BASE_CODE_PACKET *packet) -+{ -+ char *addr; -+ -+ addr = (char *)packet; -+ addr += offsetof(EFI_PXE_BASE_CODE_DHCPV4_PACKET, DhcpOptions); -+ parser->current_option = (void *)addr; -+ parser->options = (void *)addr; -+} -+ -+static int dhcp_option_parser_next(dhcp_option_parser *parser, -+ EFI_DHCP4_PACKET_OPTION **option) -+{ -+ char *current_option; -+ if (parser->current_option->OpCode == 255) { -+ *option = NULL; -+ return 0; -+ } -+ current_option = (char *)parser->current_option; -+ current_option += 2 + parser->current_option->Length; -+ parser->current_option = (EFI_DHCP4_PACKET_OPTION *)current_option; -+ -+ *option = parser->current_option; -+ return 1; -+} -+ -+#define DHCPMAGIK "\x63\x82\x53\x63" -+ -+static int get_dhcp_client_id(EFI_PXE_BASE_CODE_PACKET *packet, uuid_t *uuid) -+{ -+ dhcp_option_parser parser; -+ EFI_DHCP4_PACKET_OPTION *option; -+ -+ dhcp_option_parser_reset(&parser, packet); -+ -+ if (memcmp((char *)&packet->Dhcpv4.DhcpMagik, DHCPMAGIK, 4)) -+ return 0; -+ -+ while (dhcp_option_parser_next(&parser, &option)) { -+ int i; -+ char data[option->Length]; -+ -+ if (option->OpCode != 97) -+ continue; -+ -+ if (option->Length != 17) -+ continue; -+ -+ memcpy(data, option->Data, option->Length); -+ if (data[0] != 0) -+ continue; -+ -+ /* 97[17]: 009cfe245ed0c8bd45a79f54ea5fbd3d97 -+ * ^^^^^^^^^^^^ uint8_t[] -+ * ^^ uint8_t -+ * ^^ uint8_t -+ * ^^^^ BE uint16_t -+ * ^^^^ BE uint16_t -+ * ^^^^^^^^ BE uint32_t -+ * ^^ "type". 0 means UUID. -+ */ -+ memcpy(uuid, data+1, 16); -+ uuid->time_low = htonl(uuid->time_low); -+ uuid->time_mid = htons(uuid->time_mid); -+ uuid->time_hi_ver = htons(uuid->time_hi_ver); -+ -+ return 1; -+ } -+ return 0; -+} -+ -+#if 0 -+static void grub_dump_dhcp_options(EFI_PXE_BASE_CODE_PACKET *packet) -+{ -+ dhcp_option_parser parser; -+ EFI_DHCP4_PACKET_OPTION *option; -+ char hex[] = "0123456789abcdef"; -+ int i; -+ int j = 0; -+ -+ dhcp_option_parser_reset(&parser, packet); -+ -+ if (memcmp((char *)&packet->Dhcpv4.DhcpMagik, DHCPMAGIK, 4)) -+ return; -+ -+ /* 54[4]: a0014301 -+ * 51[4]: 00004506 -+ * 1[4]: ffffff00 -+ * 3[4]: a00143ef -+ * 6[8]: a001ff20a001ff30 -+ * 15[48]: 96e6374716c6c6e226f637e2275646861647e236f6d60226f637e2275646861647e236f6d602275646861647e236f6d6 -+ * 28[4]: a00143ff -+ * 40[10]: 275646861647e236f6d6 -+ * 41[8]: a001ff20a001ff30 -+ * 58[4]: 0000a203 -+ * 59[4]: 0000944d -+ * this is the one we want: -+ * 97[17]: 009cfe245ed0c8bd45a79f54ea5fbd3d97 -+ * ^^^^^^^^^^^^ in order -+ * ^^ -+ * ^^ -+ * ^^^^ out of order -+ * ^^^^ out of order -+ * ^^^^^^^^ out of order -+ * ^^ "type". 0 means UUID. -+ * 255[0]: -+ */ -+ while (dhcp_option_parser_next(&parser, &option)) { -+ char data[option->Length + 1]; -+ -+ memcpy(data, option->Data, option->Length); -+ data[option->Length] = '\0'; -+ -+ grub_printf("%d[%d]: ", option->OpCode, option->Length); -+ for (i = 0; i < option->Length; i++) { -+ grub_printf("%c%c", hex[data[i] & 0xf], -+ hex[(data[i] & 0xf0) >> 4]); -+ } -+ printf("\n"); -+ } -+ -+} -+ -+void grub_print_dhcp_info(grub_efi_loaded_image_t *loaded_image) -+{ -+ EFI_PXE_BASE_CODE *pxe = NULL; -+ EFI_PXE_BASE_CODE_PACKET *packet; -+ -+ grub_printf("got to %s\n", __func__); -+ -+ pxe = grub_efi_locate_protocol(&PxeBaseCodeProtocol, NULL); -+ if (pxe == NULL) -+ return; -+ -+ printf("DhcpDiscover options:\n"); -+ packet = (EFI_PXE_BASE_CODE_PACKET *)&pxe->Mode->DhcpDiscover.Dhcpv4; -+ grub_dump_dhcp_options(packet); -+ -+ printf("DhcpAck options:\n"); -+ packet = (EFI_PXE_BASE_CODE_PACKET *)&pxe->Mode->DhcpAck.Dhcpv4; -+ grub_dump_dhcp_options(packet); -+ -+ printf("PxeDiscover options:\n"); -+ packet = (EFI_PXE_BASE_CODE_PACKET *)&pxe->Mode->PxeDiscover.Dhcpv4; -+ grub_dump_dhcp_options(packet); -+ -+ printf("PxeReply options:\n"); -+ packet = (EFI_PXE_BASE_CODE_PACKET *)&pxe->Mode->PxeReply.Dhcpv4; -+ grub_dump_dhcp_options(packet); -+ -+#if 0 -+ printf("pxe->Mode->DhcpAck.Dhcpv4: \n"); -+ printf("\t.BootSrvName: %s\n", pxe->Mode->DhcpAck.Dhcpv4.BootpSrvName); -+ printf("\t.BootBootFile: %s\n", pxe->Mode->DhcpAck.Dhcpv4.BootpBootFile); -+ printf("\t.BootCiAddr: %d.%d.%d.%d\n", -+ pxe->Mode->DhcpAck.Dhcpv4.BootpCiAddr[0], -+ pxe->Mode->DhcpAck.Dhcpv4.BootpCiAddr[1], -+ pxe->Mode->DhcpAck.Dhcpv4.BootpCiAddr[2], -+ pxe->Mode->DhcpAck.Dhcpv4.BootpCiAddr[3]); -+ printf("\t.BootYiAddr: %d.%d.%d.%d\n", -+ pxe->Mode->DhcpAck.Dhcpv4.BootpYiAddr[0], -+ pxe->Mode->DhcpAck.Dhcpv4.BootpYiAddr[1], -+ pxe->Mode->DhcpAck.Dhcpv4.BootpYiAddr[2], -+ pxe->Mode->DhcpAck.Dhcpv4.BootpYiAddr[3]); -+ printf("\t.BootSiAddr: %d.%d.%d.%d\n", -+ pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr[0], -+ pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr[1], -+ pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr[2], -+ pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr[3]); -+ printf("\t.BootGiAddr: %d.%d.%d.%d\n", -+ pxe->Mode->DhcpAck.Dhcpv4.BootpGiAddr[0], -+ pxe->Mode->DhcpAck.Dhcpv4.BootpGiAddr[1], -+ pxe->Mode->DhcpAck.Dhcpv4.BootpGiAddr[2], -+ pxe->Mode->DhcpAck.Dhcpv4.BootpGiAddr[3]); -+ } -+ printf("\n"); -+#endif -+ -+ -+} -+#endif -+ -+static void icmp_print_error(EFI_PXE_BASE_CODE *pxe) -+{ -+ EFI_PXE_BASE_CODE_ICMP_ERROR *err = &pxe->Mode->IcmpError; -+ int i; -+ //char hex[] = "0123456789abcdef"; -+ -+ printf("icmp error\n"); -+ printf("type: %d code: %d\n", err->Type, err->Code); -+ printf("data: \n"); -+ for(i = 0; i < 464; i+=16) { -+ int x; -+ for (x = i; x < i+4; x++) -+ printf("%02x ", err->Data[x]); -+ printf(" "); -+ for (x = i+4; x < i+8; x++) -+ printf("%02x ", err->Data[x]); -+ printf(" "); -+ printf(" "); -+ for (x = i+8; x < i+12; x++) -+ printf("%02x ", err->Data[x]); -+ printf(" "); -+ for (x = i+12; x < i+16; x++) -+ printf("%02x ", err->Data[x]); -+ printf("\n"); -+ } -+} -+ -+static int grub_efi_pxe_check_for_file( -+ EFI_PXE_BASE_CODE *pxe, -+ EFI_IP_ADDRESS *ServerIp, -+ char *BootpBootFile, -+ char *configname, -+ char **returnpath) -+{ -+ size_t bplen = strlen(BootpBootFile); -+ char *Filename = grub_malloc(24 + bplen + 40); -+ char *lastslash = Filename + bplen; -+ grub_efi_uintn_t size; -+ int i; -+ EFI_STATUS rc; -+ char Buffer[8192]; -+ -+ memcpy(Filename, BootpBootFile, bplen); -+ -+ for (i = 0; i < bplen; i++) { -+ if (Filename[i] == '/') -+ lastslash = Filename + i; -+ } -+ if (*lastslash) { -+ *lastslash++ = '/'; -+ *lastslash = '\0'; -+ } -+ -+ sprintf(lastslash, configname); -+ -+ printf("tftp://%d.%d.%d.%d/%s\n", -+ ServerIp->v4.Addr[0], ServerIp->v4.Addr[1], -+ ServerIp->v4.Addr[2], ServerIp->v4.Addr[3], -+ Filename); -+ -+ rc = tftp_get_file_size(Filename, &size); -+ if (rc == GRUB_EFI_ICMP_ERROR) -+ icmp_print_error(pxe); -+ -+ if (rc == GRUB_EFI_SUCCESS) { -+ *returnpath = Filename; -+ return size; -+ } -+ grub_free(Filename); -+ return 0; -+} -+ -+static void get_pxe_server(EFI_PXE_BASE_CODE *pxe, EFI_IP_ADDRESS **Address) -+{ -+ EFI_IP_ADDRESS *tmp = grub_malloc(sizeof *tmp); -+ if (tmp) { -+ memset(tmp, '\0', sizeof (*tmp)); -+ memcpy(&tmp->Addr[0], pxe->Mode->DhcpAck.Dhcpv4.BootpSiAddr, 4); -+ *Address = tmp; -+ } -+} -+ -+static char *get_pxe_file_dir(EFI_PXE_BASE_CODE *pxe) -+{ -+ char *FileDir = NULL; -+ char *DirEnd = NULL; -+ char *BootpBootFile; -+ size_t bplen; -+ -+ BootpBootFile = pxe->Mode->DhcpAck.Dhcpv4.BootpBootFile; -+ bplen = strlen(BootpBootFile); -+ FileDir = grub_malloc(bplen + 1); -+ memcpy(FileDir, BootpBootFile, bplen); -+ FileDir[bplen] = '\0'; -+ -+ DirEnd = grub_strrchr(FileDir, '/'); -+ if (!DirEnd) -+ DirEnd = FileDir; -+ -+ *DirEnd = '\0'; -+ -+ return FileDir; -+} -+ -+static void set_pxe_info(grub_efi_loaded_image_t *LoadedImage, -+ EFI_PXE_BASE_CODE *pxe) -+{ -+ tftp_info.LoadedImage = LoadedImage; -+ tftp_info.Pxe = pxe; -+ get_pxe_server(pxe, &tftp_info.ServerIp); -+ tftp_info.BasePath = get_pxe_file_dir(pxe); -+} -+ -+char *grub_efi_pxe_get_config_path(grub_efi_loaded_image_t *LoadedImage) -+{ -+ EFI_PXE_BASE_CODE *pxe = NULL; -+ EFI_IP_ADDRESS ServerIp; -+ char *FileName = NULL; -+ EFI_PXE_BASE_CODE_DHCPV4_PACKET *packet; -+ uuid_t uuid; -+ grub_efi_uintn_t FileSize = 0; -+ grub_efi_status_t rc = GRUB_EFI_SUCCESS; -+ char *ConfigPath = NULL; -+ char hex[] = "0123456789ABCDEF"; -+ char hexip[9]; -+ int hexiplen; -+ -+ grub_efi_handle_t *handle, *handles; -+ grub_efi_uintn_t num_handles; -+ -+ handles = grub_efi_locate_handle(GRUB_EFI_BY_PROTOCOL, -+ &PxeBaseCodeProtocol, -+ NULL, &num_handles); -+ -+ if (!handles) -+ return NULL; -+ -+ for (handle = handles; num_handles--; handle++) { -+ pxe = grub_efi_open_protocol(*handle, &PxeBaseCodeProtocol, -+ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+ if (!pxe || !pxe->Mode) -+ continue; -+ if (pxe->Mode->Started && pxe->Mode->DhcpAckReceived) -+ break; -+ } -+ grub_free(handles); -+ -+ if (!pxe) -+ return NULL; -+ -+ set_pxe_info(LoadedImage, pxe); -+ -+ FileName = grub_malloc(strlen("1902dcf5-7190-d811-bbd6-6ef21c690030")); -+ -+ packet = &pxe->Mode->DhcpDiscover.Dhcpv4; -+ -+ if (get_dhcp_client_id((EFI_PXE_BASE_CODE_PACKET *)packet, &uuid)) { -+ -+ uuid.time_mid = 0x0011; -+ sprintf(FileName, -+ "%08X-%04X-%04X-%02X%02X-%02X%02X%02X%02X%02X%02X", -+ uuid.time_low, uuid.time_mid, uuid.time_hi_ver, -+ uuid.clock_seq_hi, uuid.clock_seq_low, -+ uuid.node[0], uuid.node[1], uuid.node[2], -+ uuid.node[3], uuid.node[4], uuid.node[5]); -+ -+ rc = tftp_get_file_size(FileName, &FileSize); -+ if (rc == GRUB_EFI_SUCCESS) { -+ char *ReturnFile = grub_malloc(strlen("(nd)/") + -+ strlen(FileName) + 1); -+ sprintf(ReturnFile, "(nd)/%s", FileName); -+ grub_free(FileName); -+ //sprintf(tftp_info.LastPath, FileName); -+ return ReturnFile; -+ } -+ } -+ -+ packet = &pxe->Mode->DhcpAck.Dhcpv4; -+ -+ if (!memcmp(packet->BootpHwAddr + 6, "\x00\x00\x00\x00\x00" -+ "\x00\x00\x00\x00\x00", 10) && -+ memcmp(packet->BootpHwAddr, "\x00\x00\x00\x00\x00\x00", -+ 6)) { -+ char mac[21]; -+ sprintf(mac, "01-%c%c-%c%c-%c%c-%c%c-%c%c-%c%c", -+ hex[(packet->BootpHwAddr[0] & 0xf0) >> 4], -+ hex[packet->BootpHwAddr[0] & 0xf], -+ hex[(packet->BootpHwAddr[1] & 0xf0) >> 4], -+ hex[packet->BootpHwAddr[1] & 0xf], -+ hex[(packet->BootpHwAddr[2] & 0xf0) >> 4], -+ hex[packet->BootpHwAddr[2] & 0xf], -+ hex[(packet->BootpHwAddr[3] & 0xf0) >> 4], -+ hex[packet->BootpHwAddr[3] & 0xf], -+ hex[(packet->BootpHwAddr[4] & 0xf0) >> 4], -+ hex[packet->BootpHwAddr[4] & 0xf], -+ hex[(packet->BootpHwAddr[5] & 0xf0) >> 4], -+ hex[packet->BootpHwAddr[5] & 0xf]); -+ -+ rc = tftp_get_file_size(mac, &FileSize); -+ if (rc == GRUB_EFI_SUCCESS) { -+ char *ReturnFile = grub_malloc(strlen("(nd)/") + -+ strlen(mac) + 1); -+ sprintf(ReturnFile, "(nd)/%s", mac); -+ return ReturnFile; -+ } -+ -+ } -+ -+ sprintf(hexip, "%c%c%c%c%c%c%c%c", -+ hex[(packet->BootpYiAddr[0] & 0xf0) >> 4], -+ hex[packet->BootpYiAddr[0] & 0xf], -+ hex[(packet->BootpYiAddr[1] & 0xf0) >> 4], -+ hex[packet->BootpYiAddr[1] & 0xf], -+ hex[(packet->BootpYiAddr[2] & 0xf0) >> 4], -+ hex[packet->BootpYiAddr[2] & 0xf], -+ hex[(packet->BootpYiAddr[3] & 0xf0) >> 4], -+ hex[packet->BootpYiAddr[3] & 0xf]); -+ -+ for (hexiplen = strlen(hexip); hexiplen > 0; hexiplen--) -+ { -+ hexip[hexiplen] = '\0'; -+ rc = tftp_get_file_size(hexip, &FileSize); -+ if (rc == GRUB_EFI_SUCCESS) { -+ char *ReturnFile = grub_malloc(strlen("(nd)/") + -+ strlen(hexip) + 1); -+ sprintf(ReturnFile, "(nd)/%s", hexip); -+ return ReturnFile; -+ } -+ } -+ -+ rc = tftp_get_file_size("efidefault", &FileSize); -+ if (rc == GRUB_EFI_SUCCESS) { -+ char *ReturnFile = grub_malloc(strlen("(nd)/efidefault")+1); -+ sprintf(ReturnFile, "(nd)/efidefault"); -+ return ReturnFile; -+ } -+ -+ return NULL; -+} -diff --git a/efi/pxe.h b/efi/pxe.h -new file mode 100644 -index 0000000..0a68007 ---- /dev/null -+++ b/efi/pxe.h -@@ -0,0 +1,237 @@ -+#ifndef PXE_H -+#define PXE_H 1 -+ -+#include "byteswap.h" -+ -+extern char *grub_efi_pxe_get_config_path(grub_efi_loaded_image_t *LoadedImage); -+extern void grub_print_dhcp_info(grub_efi_loaded_image_t *loaded_image); -+extern char *grub_efi_pxe_path_to_path_name(void); -+ -+ -+#define EFI_PXE_BASE_CODE_PROTOCOL \ -+ { 0x03c4e603, 0xac28, 0x11d3, {0x9a, 0x2d, 0x00, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } -+static grub_efi_guid_t PxeBaseCodeProtocol = EFI_PXE_BASE_CODE_PROTOCOL; -+ -+struct _EFI_PXE_BASE_CODE; -+ -+typedef enum { -+ EFI_PXE_BASE_CODE_TFTP_FIRST, -+ EFI_PXE_BASE_CODE_TFTP_GET_FILE_SIZE, -+ EFI_PXE_BASE_CODE_TFTP_READ_FILE, -+ EFI_PXE_BASE_CODE_TFTP_WRITE_FILE, -+ EFI_PXE_BASE_CODE_TFTP_READ_DIRECTORY, -+ EFI_PXE_BASE_CODE_MTFTP_GET_FILE_SIZE, -+ EFI_PXE_BASE_CODE_MTFTP_READ_FILE, -+ EFI_PXE_BASE_CODE_MTFTP_READ_DIRECTORY, -+ EFI_PXE_BASE_CODE_MTFTP_LAST -+} EFI_PXE_BASE_CODE_TFTP_OPCODE; -+ -+typedef struct { -+ grub_efi_uint8_t Addr[4]; -+} EFI_IPv4_ADDRESS; -+ -+typedef struct { -+ grub_efi_uint8_t Addr[16]; -+} EFI_IPv6_ADDRESS; -+ -+typedef struct { -+ grub_efi_uint8_t Addr[32]; -+} EFI_MAC_ADDRESS; -+ -+typedef union { -+ grub_efi_uint32_t Addr[4]; -+ EFI_IPv4_ADDRESS v4; -+ EFI_IPv6_ADDRESS v6; -+} EFI_IP_ADDRESS; -+ -+typedef grub_efi_uint16_t EFI_PXE_BASE_CODE_UDP_PORT; -+ -+typedef struct { -+ EFI_IP_ADDRESS MCastIp; -+ EFI_PXE_BASE_CODE_UDP_PORT CPort; -+ EFI_PXE_BASE_CODE_UDP_PORT SPort; -+ grub_efi_uint16_t ListenTimeout; -+ grub_efi_uint16_t TransmitTimeout; -+} EFI_PXE_BASE_CODE_MTFTP_INFO; -+ -+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_MTFTP)( -+ struct _EFI_PXE_BASE_CODE *This, -+ EFI_PXE_BASE_CODE_TFTP_OPCODE Operation, -+ void *BufferPtr, -+ grub_efi_boolean_t Overwrite, -+ grub_efi_uint64_t *BufferSize, -+ grub_efi_uintn_t *BlockSize, -+ EFI_IP_ADDRESS *ServerIp, -+ grub_efi_uint8_t *Filename, -+ EFI_PXE_BASE_CODE_MTFTP_INFO *Info, -+ grub_efi_boolean_t DontUseBuffer); -+ -+typedef struct { -+ grub_efi_uint8_t BootpOpcode; -+ grub_efi_uint8_t BootpHwType; -+ grub_efi_uint8_t BootpHwAddrLen; -+ grub_efi_uint8_t BootpGateHops; -+ grub_efi_uint32_t BootpIdent; -+ grub_efi_uint16_t BootpSeconds; -+ grub_efi_uint16_t BootpFlags; -+ grub_efi_uint8_t BootpCiAddr[4]; -+ grub_efi_uint8_t BootpYiAddr[4]; -+ grub_efi_uint8_t BootpSiAddr[4]; -+ grub_efi_uint8_t BootpGiAddr[4]; -+ grub_efi_uint8_t BootpHwAddr[16]; -+ grub_efi_uint8_t BootpSrvName[64]; -+ grub_efi_uint8_t BootpBootFile[128]; -+ grub_efi_uint32_t DhcpMagik; -+ grub_efi_uint8_t DhcpOptions[56]; -+} EFI_PXE_BASE_CODE_DHCPV4_PACKET; -+ -+// TBD in EFI v1.1 -+//typedef struct { -+// grub_efi_uint8_t reserved; -+//} EFI_PXE_BASE_CODE_DHCPV6_PACKET; -+ -+typedef union { -+ grub_efi_uint8_t Raw[1472]; -+ EFI_PXE_BASE_CODE_DHCPV4_PACKET Dhcpv4; -+// EFI_PXE_BASE_CODE_DHCPV6_PACKET Dhcpv6; -+} EFI_PXE_BASE_CODE_PACKET; -+ -+typedef struct { -+ grub_efi_uint8_t Type; -+ grub_efi_uint8_t Code; -+ grub_efi_uint16_t Checksum; -+ union { -+ grub_efi_uint32_t reserved; -+ grub_efi_uint32_t Mtu; -+ grub_efi_uint32_t Pointer; -+ struct { -+ grub_efi_uint16_t Identifier; -+ grub_efi_uint16_t Sequence; -+ } Echo; -+ } u; -+ grub_efi_uint8_t Data[494]; -+} EFI_PXE_BASE_CODE_ICMP_ERROR; -+ -+typedef struct { -+ grub_efi_uint8_t ErrorCode; -+ grub_efi_char8_t ErrorString[127]; -+} EFI_PXE_BASE_CODE_TFTP_ERROR; -+ -+ -+#define EFI_PXE_BASE_CODE_MAX_IPCNT 8 -+typedef struct { -+ grub_efi_uint8_t Filters; -+ grub_efi_uint8_t IpCnt; -+ grub_efi_uint16_t reserved; -+ EFI_IP_ADDRESS IpList[EFI_PXE_BASE_CODE_MAX_IPCNT]; -+} EFI_PXE_BASE_CODE_IP_FILTER; -+ -+#define EFI_PXE_BASE_CODE_IP_FILTER_STATION_IP 0x0001 -+#define EFI_PXE_BASE_CODE_IP_FILTER_BROADCAST 0x0002 -+#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS 0x0004 -+#define EFI_PXE_BASE_CODE_IP_FILTER_PROMISCUOUS_MULTICAST 0x0008 -+ -+typedef struct { -+ EFI_IP_ADDRESS IpAddr; -+ EFI_MAC_ADDRESS MacAddr; -+} EFI_PXE_BASE_CODE_ARP_ENTRY; -+ -+typedef struct { -+ EFI_IP_ADDRESS IpAddr; -+ EFI_IP_ADDRESS SubnetMask; -+ EFI_IP_ADDRESS GwAddr; -+} EFI_PXE_BASE_CODE_ROUTE_ENTRY; -+ -+#define EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES 8 -+#define EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES 8 -+ -+typedef struct { -+ grub_efi_boolean_t Started; -+ grub_efi_boolean_t Ipv6Available; -+ grub_efi_boolean_t Ipv6Supported; -+ grub_efi_boolean_t UsingIpv6; -+ grub_efi_boolean_t BisSupported; -+ grub_efi_boolean_t BisDetected; -+ grub_efi_boolean_t AutoArp; -+ grub_efi_boolean_t SendGUID; -+ grub_efi_boolean_t DhcpDiscoverValid; -+ grub_efi_boolean_t DhcpAckReceived; -+ grub_efi_boolean_t ProxyOfferReceived; -+ grub_efi_boolean_t PxeDiscoverValid; -+ grub_efi_boolean_t PxeReplyReceived; -+ grub_efi_boolean_t PxeBisReplyReceived; -+ grub_efi_boolean_t IcmpErrorReceived; -+ grub_efi_boolean_t TftpErrorReceived; -+ grub_efi_boolean_t MakeCallbacks; -+ grub_efi_uint8_t TTL; -+ grub_efi_uint8_t ToS; -+ EFI_IP_ADDRESS StationIp; -+ EFI_IP_ADDRESS SubnetMask; -+ EFI_PXE_BASE_CODE_PACKET DhcpDiscover; -+ EFI_PXE_BASE_CODE_PACKET DhcpAck; -+ EFI_PXE_BASE_CODE_PACKET ProxyOffer; -+ EFI_PXE_BASE_CODE_PACKET PxeDiscover; -+ EFI_PXE_BASE_CODE_PACKET PxeReply; -+ EFI_PXE_BASE_CODE_PACKET PxeBisReply; -+ EFI_PXE_BASE_CODE_IP_FILTER IpFilter; -+ grub_efi_uint32_t ArpCacheEntries; -+ EFI_PXE_BASE_CODE_ARP_ENTRY ArpCache[EFI_PXE_BASE_CODE_MAX_ARP_ENTRIES]; -+ grub_efi_uint32_t RouteTableEntries; -+ EFI_PXE_BASE_CODE_ROUTE_ENTRY RouteTable[EFI_PXE_BASE_CODE_MAX_ROUTE_ENTRIES]; -+ EFI_PXE_BASE_CODE_ICMP_ERROR IcmpError; -+ EFI_PXE_BASE_CODE_TFTP_ERROR TftpError; -+} EFI_PXE_BASE_CODE_MODE; -+ -+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_START)(); -+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_STOP)(); -+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_DHCP)(); -+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_DISCOVER)(); -+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_UDP_WRITE)(); -+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_UDP_READ)(); -+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_SET_IP_FILTER)(); -+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_ARP)(); -+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_SET_PARAMETERS)(); -+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_SET_STATION_IP)(); -+typedef EFI_STATUS (*EFI_PXE_BASE_CODE_SET_PACKETS)(); -+ -+typedef struct _EFI_PXE_BASE_CODE{ -+ grub_efi_uint64_t Revision; -+ EFI_PXE_BASE_CODE_START Start; -+ EFI_PXE_BASE_CODE_STOP Stop; -+ EFI_PXE_BASE_CODE_DHCP Dhcp; -+ EFI_PXE_BASE_CODE_DISCOVER Discover; -+ EFI_PXE_BASE_CODE_MTFTP Mtftp; -+ EFI_PXE_BASE_CODE_UDP_WRITE UdpWrite; -+ EFI_PXE_BASE_CODE_UDP_READ UdpRead; -+ EFI_PXE_BASE_CODE_SET_IP_FILTER SetIpFilter; -+ EFI_PXE_BASE_CODE_ARP Arp; -+ EFI_PXE_BASE_CODE_SET_PARAMETERS SetParameters; -+ EFI_PXE_BASE_CODE_SET_STATION_IP SetStationIp; -+ EFI_PXE_BASE_CODE_SET_PACKETS SetPackets; -+ EFI_PXE_BASE_CODE_MODE *Mode; -+} EFI_PXE_BASE_CODE; -+ -+typedef struct { -+ grub_efi_uint32_t time_low; -+ grub_efi_uint16_t time_mid; -+ grub_efi_uint16_t time_hi_ver; -+ grub_efi_uint8_t clock_seq_hi; -+ grub_efi_uint8_t clock_seq_low; -+ grub_efi_uint8_t node[6]; -+} uuid_t; -+ -+struct tftp_info { -+ grub_efi_loaded_image_t *LoadedImage; -+ EFI_PXE_BASE_CODE *Pxe; -+ EFI_IP_ADDRESS *ServerIp; -+ char *BasePath; -+ char *LastPath; -+ char *Buffer; -+}; -+ -+extern struct tftp_info tftp_info; -+extern grub_efi_status_t tftp_get_file_size( -+ char *Filename, -+ grub_efi_uintn_t *Size); -+ -+#endif /* PXE_H */ -diff --git a/efi/ugadebug.h b/efi/ugadebug.h -new file mode 100644 -index 0000000..f461c8b ---- /dev/null -+++ b/efi/ugadebug.h -@@ -0,0 +1,201 @@ -+#ifndef UGA_DEBUG_H -+#define UGA_DEBUG_H -+ -+extern void dc(char *file, int line); -+extern void gm(char *file, int line, char *fmt, ...); -+ -+#ifdef UGA -+ -+extern const unsigned char font8x16[]; -+ -+extern grub_efi_guid_t draw_guid; -+ -+static void *tmp_term; -+ -+#define SCREEN_WIDTH 80 -+ -+#define LINE_SIZE_X ( 8 * 100 ) -+#define LINE_START_X(x) (1280 + (x)) -+#define LINE_END_X(x) (LINE_START_X(0) + LINE_SIZE_X - 1) -+ -+#define POS_X(x) (LINE_START_X(x) + (8 * (x))) -+ -+#define LINE_SIZE_Y 16 -+#define LINE_START_Y(y) ((y) * LINE_SIZE_Y) -+#define LINE_END_Y(y) ( (((y)+1) * LINE_SIZE_Y ) - 1) -+ -+#define POS_Y(y) LINE_START_Y(y) -+ -+#define FIRST_LINE 0 -+#define LAST_LINE 75 -+ -+#define format_ascii(buf, val, is_hex, is_cap) ({ \ -+ int _n = sizeof ((buf)) - 2; \ -+ typeof(val) _nval = (val); \ -+ int _negative = 0; \ -+ int _mult = is_hex ? 16 : 10; \ -+ char _a = is_cap ? 'A' : 'a'; \ -+ grub_memset((buf), '\0', sizeof ((buf))); \ -+ if (!(_nval > 0LL)) \ -+ _negative = 1; \ -+ if (_nval == 0LL) \ -+ _negative = 0; \ -+ if (_negative) \ -+ _nval = (_nval ^ -1); \ -+ do { \ -+ int _dig = _nval % _mult; \ -+ (buf)[_n--] = ((_dig > 9) ? _dig + _a - 10 : '0'+_dig); \ -+ } while (_nval /= _mult); \ -+ if (_negative) \ -+ (buf)[_n--] = '-'; \ -+ _mult = 0; \ -+ _n++; \ -+ while (_n < sizeof ((buf))) \ -+ (buf)[_mult++] = (buf)[_n++]; \ -+ if (_negative && _mult > 1) \ -+ ((buf)[_mult-2])++; \ -+ }) -+ -+static grub_efi_uga_draw_t *debug_draw_intf; -+static void debug_putchar(int i, int j, int ch) -+{ -+ grub_efi_uga_pixel_t pixbuf[8 * 16]; -+ grub_efi_uga_pixel_t black = { .red = 0x00, .green = 0x00, .blue = 0x00 }, -+ white = { .red = 0xff, .green = 0xff, .blue = 0xff }; -+ const unsigned char *pat; -+ int x, y; -+ -+ if (!debug_draw_intf) -+ debug_draw_intf = grub_efi_locate_protocol(&draw_guid, NULL); -+ if (!debug_draw_intf) -+ return; -+ -+ pat = font8x16 + (ch << 4); -+ -+ for (y = 0; y < 16; y++) { -+ for (x = 0; x < 8; x++) { -+ int bit = pat[y] & (1 << (7 - x)); -+ -+ grub_memmove(&pixbuf[x + y * 8], bit ? &white : &black, -+ sizeof (pixbuf[0])); -+ } -+ } -+ -+ Call_Service_10(debug_draw_intf->blt, debug_draw_intf, pixbuf, -+ EfiUgaBltBufferToVideo, -+ 0, 0, -+ POS_X(i), POS_Y(j), -+ 8, 16, -+ 0); -+ -+} -+ -+static void dputs(const char *s) -+{ -+ static int row = -1; -+ int col = 89; -+ return; -+ -+ if (s && *s) { -+ do { -+ if (col > 190) { -+ row++; -+ col = 89; -+ } -+ if (row > 50) { -+ row = 0; -+ col = 89; -+ } -+ col++; -+ -+ if (*s == '\n') { -+ col = 1; -+ row++; -+ } else { -+ debug_putchar(col, row, *s); -+ } -+ } while (*(++s)); -+ } -+ row++; -+} -+ -+static int dbg_row = 0; -+static int dbg_col = 0; -+ -+static void dbg_scroll(int new_dbg_col) -+{ -+ grub_efi_uga_pixel_t black[1] ={{.red = 0x00, .green = 0x00, .blue = 0x00}}; -+ -+ if (dbg_row == LAST_LINE) { -+ dbg_col = new_dbg_col; -+ Call_Service_10(debug_draw_intf->blt, debug_draw_intf, NULL, -+ EfiUgaVideoToVideo, -+ 640, LINE_START_Y(1), -+ 640, LINE_START_Y(0), -+ LINE_SIZE_X, LINE_END_Y(LAST_LINE)+1, -+ 0); -+ Call_Service_10(debug_draw_intf->blt, debug_draw_intf, black, -+ EfiUgaVideoFill, -+ 0, 0, -+ 640, LINE_START_Y(LAST_LINE), -+ LINE_END_X(SCREEN_WIDTH)+1, LINE_END_Y(LAST_LINE)+1, -+ 0); -+ } else { -+ dbg_row++; -+ dbg_col = new_dbg_col; -+ } -+// grub_efi_stall(1000000); -+} -+ -+static void dc_backend(char *file, int line) -+{ -+ char linebuf[9] = " "; -+ int pos; -+ -+ linebuf[8] = '\0'; -+ -+ format_ascii(linebuf, line, 0, 0); -+ for (dbg_col=0, pos=0; linebuf[pos]; dbg_col++, pos++) -+ debug_putchar(dbg_col, dbg_row, linebuf[pos]); -+ -+ for (dbg_col=5, pos=0; file[pos]; dbg_col++, pos++) { -+ if (dbg_col > 15) -+ dbg_scroll(0); -+ -+ debug_putchar(dbg_col, dbg_row, file[pos]); -+ } -+} -+ -+void dc(char *file, int line) -+{ -+ dc_backend(file, line); -+ dbg_scroll(0); -+} -+ -+void -+gm(char *file, int line, char *fmt, ...) -+{ -+ va_list ap; -+ char buf[1024]=""; -+ int pos; -+ -+ va_start(ap, fmt); -+ grub_vsprintf(buf, fmt, ap); -+ va_end(ap); -+ -+ dc_backend(file, line); -+ for (dbg_col=16, pos=0; buf[pos]; dbg_col++, pos++) { -+ if (buf[pos] == '\n') -+ continue; -+ if (dbg_col > SCREEN_WIDTH-1) -+ dbg_scroll(16); -+ debug_putchar(dbg_col, dbg_row, buf[pos]); -+ } -+ dbg_scroll(0); -+} -+ -+#define dm() ({ tmp_term = current_term; current_term = term_table; grub_dprintf(__func__, "got here\n"); current_term = tmp_term; }) -+ -+#endif -+ -+#endif /* UGA_DEBUG_H */ -diff --git a/efi/x86_64/callwrap.S b/efi/x86_64/callwrap.S -new file mode 100644 -index 0000000..f574ad0 ---- /dev/null -+++ b/efi/x86_64/callwrap.S -@@ -0,0 +1,274 @@ -+/* -+ * Function calling ABI conversion from Linux to EFI for x86_64 -+ * -+ * Copyright (C) 2007 Intel Corp -+ * Bibo Mao bibo.mao@intel.com -+ * Huang Ying ying.huang@intel.com -+ */ -+ -+/* -+ * EFI calling conventions are documented at: -+ * http://msdn.microsoft.com/en-us/library/ms235286%28v=vs.80%29.aspx -+ * ELF calling conventions are documented at: -+ * http://www.x86-64.org/documentation/abi.pdf -+ * -+ * Basically here are the conversion rules: -+ * a) our function pointer is in %rdi -+ * b) ELF gives us 8-byte aligned %rsp, so we need to pad out to 16-byte -+ * alignment. -+ * c) inside each call thunker, we can only adjust the stack by -+ * multiples of 16 bytes. "offset" below refers to however much -+ * we allocate inside a thunker. -+ * d) rsi through r8 (elf) aka rcx through r9 (ms) require stack space -+ * on the MS side even though it's not getting used at all. -+ * e) arguments are as follows: (elf -> ms) -+ * 1) rdi -> rcx (32 saved) -+ * 2) rsi -> rdx (32 saved) -+ * 3) rdx -> r8 ( 32 saved) -+ * 4) rcx -> r9 (32 saved) -+ * 5) r8 -> 32(%rsp) (48 saved) -+ * 6) r9 -> 40(%rsp) (48 saved) -+ * 7) pad+offset+0(%rsp) -> 48(%rsp) (64 saved) -+ * 8) pad+offset+8(%rsp) -> 56(%rsp) (64 saved) -+ * 9) pad+offset+16(%rsp) -> 64(%rsp) (80 saved) -+ * 10) pad+offset+24(%rsp) -> 72(%rsp) (80 saved) -+ * 11) pad+offset+32(%rsp) -> 80(%rsp) (96 saved) -+ * 12) pad+offset+40(%rsp) -> 88(%rsp) (96 saved) -+ * f) because the first argument we recieve in a thunker is actually the -+ * function to be called, arguments are offset as such: -+ * 0) rdi -> caller -+ * 1) rsi -> rcx (32 saved) -+ * 2) rdx -> rdx (32 saved) -+ * 3) rcx -> r8 (32 saved) -+ * 4) r8 -> r9 (32 saved) -+ * 5) r9 -> 32(%rsp) (48 saved) -+ * 6) pad+offset+0(%rsp) -> 40(%rsp) (48 saved) -+ * 7) pad+offset+8(%rsp) -> 48(%rsp) (64 saved) -+ * 8) pad+offset+16(%rsp) -> 56(%rsp) (64 saved) -+ * 9) pad+offset+24(%rsp) -> 64(%rsp) (80 saved) -+ * 10) pad+offset+32(%rsp) -> 72(%rsp) (80 saved) -+ * 11) pad+offset+40(%rsp) -> 80(%rsp) (96 saved) -+ * 12) pad+offset+48(%rsp) -> 88(%rsp) (96 saved) -+ * e) arguments need to be moved in opposite order to avoid clobbering -+ * f) pad_stack leaves the amount of padding it added in %r11 for functions -+ * to use -+ * g) efi -> elf calls don't need to pad the stack, because the 16-byte -+ * alignment is also always 8-byte aligned. -+ */ -+ -+#define ENTRY(name) \ -+ .globl name; \ -+ name: -+ -+#define out(val) \ -+ push %rax ; \ -+ mov val, %rax ; \ -+ out %al, $128 ; \ -+ pop %rax -+ -+#define pad_stack \ -+ subq $8, %rsp ; /* must be a multiple of 16 - sizeof(%rip) */ \ -+ /* stash some handy integers */ \ -+ mov $0x8, %rax ; \ -+ mov $0x10, %r10 ; \ -+ /* see if we need padding */ \ -+ and %rsp, %rax ; \ -+ /* store the pad amount in %r11 */ \ -+ cmovnz %rax, %r11 ; \ -+ cmovz %r10, %r11 ; \ -+ /* insert the padding */ \ -+ subq %r11, %rsp ; \ -+ /* add the $8 we saved above in %r11 */ \ -+ addq $8, %r11 ; \ -+ /* store the pad amount */ \ -+ mov %r11, (%rsp) ; \ -+ /* compensate for %rip being stored on the stack by call */ \ -+ addq $8, %r11 -+ -+#define unpad_stack \ -+ /* fetch the pad amount we saved (%r11 has been clobbered) */ \ -+ mov (%rsp), %r11 ; \ -+ /* remove the padding */ \ -+ addq %r11, %rsp -+ -+ENTRY(x64_call0) -+ pad_stack -+ subq $32, %rsp -+ call *%rdi -+ addq $32, %rsp -+ unpad_stack -+ ret -+ -+ENTRY(x64_call1) -+ pad_stack -+ subq $32, %rsp -+ mov %rsi, %rcx -+ call *%rdi -+ addq $32, %rsp -+ unpad_stack -+ ret -+ -+ENTRY(x64_call2) -+ pad_stack -+ subq $32, %rsp -+ /* mov %rdx, %rdx */ -+ mov %rsi, %rcx -+ call *%rdi -+ addq $32, %rsp -+ unpad_stack -+ ret -+ -+ENTRY(x64_call3) -+ pad_stack -+ subq $32, %rsp -+ mov %rcx, %r8 -+ /* mov %rdx, %rdx */ -+ mov %rsi, %rcx -+ call *%rdi -+ addq $32, %rsp -+ unpad_stack -+ ret -+ -+ENTRY(x64_call4) -+ pad_stack -+ subq $32, %rsp -+ mov %r8, %r9 -+ mov %rcx, %r8 -+ /* mov %rdx, %rdx */ -+ mov %rsi, %rcx -+ call *%rdi -+ addq $32, %rsp -+ unpad_stack -+ ret -+ -+ENTRY(x64_call5) -+ pad_stack -+ subq $48, %rsp -+ mov %r9, 32(%rsp) -+ mov %r8, %r9 -+ mov %rcx, %r8 -+ /* mov %rdx, %rdx */ -+ mov %rsi, %rcx -+ call *%rdi -+ addq $48, %rsp -+ unpad_stack -+ ret -+ -+ENTRY(x64_call6) -+ pad_stack -+ subq $48, %rsp -+ addq $48, %r11 -+ addq %rsp, %r11 -+ mov (%r11), %rax -+ mov %rax, 40(%rsp) -+ mov %r9, 32(%rsp) -+ mov %r8, %r9 -+ mov %rcx, %r8 -+ /* mov %rdx, %rdx */ -+ mov %rsi, %rcx -+ call *%rdi -+ addq $48, %rsp -+ unpad_stack -+ ret -+ -+ENTRY(x64_call7) -+ pad_stack -+ subq $64, %rsp -+ addq $64, %r11 -+ addq $8, %r11 -+ addq %rsp, %r11 -+ mov (%r11), %rax -+ mov %rax, 48(%rsp) -+ subq $8, %r11 -+ mov (%r11), %rax -+ mov %rax, 40(%rsp) -+ mov %r9, 32(%rsp) -+ mov %r8, %r9 -+ mov %rcx, %r8 -+ /* mov %rdx, %rdx */ -+ mov %rsi, %rcx -+ call *%rdi -+ addq $64, %rsp -+ unpad_stack -+ ret -+ -+ENTRY(x64_call8) -+ pad_stack -+ subq $64, %rsp -+ addq $64, %r11 -+ addq $16, %r11 -+ addq %rsp, %r11 -+ mov (%r11), %rax -+ mov %rax, 56(%rsp) -+ subq $8, %r11 -+ mov (%r11), %rax -+ mov %rax, 48(%rsp) -+ subq $8, %r11 -+ mov (%r11), %rax -+ mov %rax, 40(%rsp) -+ mov %r9, 32(%rsp) -+ mov %r8, %r9 -+ mov %rcx, %r8 -+ /* mov %rdx, %rdx */ -+ mov %rsi, %rcx -+ call *%rdi -+ addq $64, %rsp -+ unpad_stack -+ ret -+ -+ENTRY(x64_call9) -+ pad_stack -+ subq $80, %rsp -+ addq $80, %r11 -+ addq $24, %r11 -+ addq %rsp, %r11 -+ mov (%r11), %rax -+ mov %rax, 64(%rsp) -+ subq $8, %r11 -+ mov (%r11), %rax -+ mov %rax, 56(%rsp) -+ subq $8, %r11 -+ mov (%r11), %rax -+ mov %rax, 48(%rsp) -+ subq $8, %r11 -+ mov (%r11), %rax -+ mov %rax, 40(%rsp) -+ mov %r9, 32(%rsp) -+ mov %r8, %r9 -+ mov %rcx, %r8 -+ /* mov %rdx, %rdx */ -+ mov %rsi, %rcx -+ call *%rdi -+ addq $80, %rsp -+ unpad_stack -+ ret -+ -+ENTRY(x64_call10) -+ pad_stack -+ subq $80, %rsp -+ addq $80, %r11 -+ addq $32, %r11 -+ addq %rsp, %r11 -+ mov (%r11), %rax -+ mov %rax, 72(%rsp) -+ subq $8, %r11 -+ mov (%r11), %rax -+ mov %rax, 64(%rsp) -+ subq $8, %r11 -+ mov (%r11), %rax -+ mov %rax, 56(%rsp) -+ subq $8, %r11 -+ mov (%r11), %rax -+ mov %rax, 48(%rsp) -+ subq $8, %r11 -+ mov (%r11), %rax -+ mov %rax, 40(%rsp) -+ mov %r9, 32(%rsp) -+ mov %r8, %r9 -+ mov %rcx, %r8 -+ /* mov %rdx, %rdx */ -+ mov %rsi, %rcx -+ call *%rdi -+ addq $80, %rsp -+ unpad_stack -+ ret -diff --git a/efi/x86_64/crt0-efi.S b/efi/x86_64/crt0-efi.S -new file mode 100644 -index 0000000..8667694 ---- /dev/null -+++ b/efi/x86_64/crt0-efi.S -@@ -0,0 +1,63 @@ -+/* crt0-efi-x86_64.S - x86_64 EFI startup code. -+ Copyright (C) 1999 Hewlett-Packard Co. -+ Contributed by David Mosberger davidm@hpl.hp.com. -+ Copyright (C) 2005 Intel Co. -+ Contributed by Fenghua Yu fenghua.yu@intel.com. -+ -+ This file is part of GNU-EFI, the GNU EFI development environment. -+ -+ GNU EFI 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, or (at your option) -+ any later version. -+ -+ GNU EFI 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 GNU EFI; see the file COPYING. If not, write to the Free -+ Software Foundation, 59 Temple Place - Suite 330, Boston, MA -+ 02111-1307, USA. */ -+ -+ .text -+ .align 4 -+ -+ .globl _start -+_start: -+ subq $8, %rsp -+ pushq %rcx -+ pushq %rdx -+ -+0: -+ lea ImageBase(%rip), %rdi -+ lea _DYNAMIC(%rip), %rsi -+ -+ popq %rcx -+ popq %rdx -+ pushq %rcx -+ pushq %rdx -+ call _relocate -+ -+ popq %rdi -+ popq %rsi -+ -+ call efi_main -+ addq $8, %rsp -+ -+.exit: -+ ret -+ -+ // hand-craft a dummy .reloc section so EFI knows it's a relocatable executable: -+ -+ .data -+dummy: .long 0 -+ -+#define IMAGE_REL_ABSOLUTE 0 -+ .section .reloc, "a" -+label1: -+ .long dummy-label1 // Page RVA -+ .long 10 // Block Size (2*4+2) -+ .word (IMAGE_REL_ABSOLUTE<<12) + 0 // reloc for dummy -+ -diff --git a/efi/x86_64/elf_efi.lds b/efi/x86_64/elf_efi.lds -new file mode 100644 -index 0000000..18a9ab9 ---- /dev/null -+++ b/efi/x86_64/elf_efi.lds -@@ -0,0 +1,58 @@ -+OUTPUT_FORMAT("elf64-x86-64", "elf64-x86-64", "elf64-x86-64") -+OUTPUT_ARCH(i386:x86-64) -+ENTRY(_start) -+SECTIONS -+{ -+ . = 0; -+ ImageBase = .; -+ .hash : { *(.hash) } /* this MUST come first! */ -+ . = ALIGN(4096); -+ .eh_frame : -+ { -+ *(.eh_frame) -+ } -+ . = ALIGN(4096); -+ .text : -+ { -+ *(.text) -+ } -+ .reloc : -+ { -+ *(.reloc) -+ } -+ . = ALIGN(4096); -+ .data : -+ { -+ *(.rodata*) -+ *(.got.plt) -+ *(.got) -+ *(.data*) -+ *(.sdata) -+ /* the EFI loader doesn't seem to like a .bss section, so we stick -+ it all into .data: */ -+ *(.sbss) -+ *(.scommon) -+ *(.dynbss) -+ *(.bss) -+ *(COMMON) -+ *(.rel.local) -+ } -+ . = ALIGN(4096); -+ .dynamic : { *(.dynamic) } -+ . = ALIGN(4096); -+ .rela : -+ { -+ *(.rela.data*) -+ *(.rela.got) -+ *(.rela.stab) -+ } -+ . = ALIGN(4096); -+ .dynsym : { *(.dynsym) } -+ . = ALIGN(4096); -+ .dynstr : { *(.dynstr) } -+ . = ALIGN(4096); -+ .ignored.reloc : -+ { -+ *(.rela.reloc) -+ } -+} -diff --git a/efi/x86_64/loader/Makefile b/efi/x86_64/loader/Makefile -new file mode 100644 -index 0000000..0d8b888 ---- /dev/null -+++ b/efi/x86_64/loader/Makefile -@@ -0,0 +1,20 @@ -+ -+all : switch.h -+ -+bin_to_h: bin_to_h.c -+ $(CC) $(CFLAGS) -o $@ $< -+ -+switch.h : switch.bin bin_to_h -+ ./bin_to_h < $< > $@ -+ -+switch.bin : switch -+ objcopy -O binary $< $@ -+ -+switch : switch.o -+ ld.bfd -Ttext-segment=0x688 --init _start -o $@ $< -+ -+switch.o : switch.S -+ as -march=generic64 -defsym _start=0 -o $@ $< -+ -+clean : -+ @rm -vf switch.o switch switch.bin switch.h bin_to_h -diff --git a/efi/x86_64/loader/bin_to_h.c b/efi/x86_64/loader/bin_to_h.c -new file mode 100644 -index 0000000..4cff104 ---- /dev/null -+++ b/efi/x86_64/loader/bin_to_h.c -@@ -0,0 +1,29 @@ -+#include <stdio.h> -+#include <stdlib.h> -+ -+int -+main (void) -+{ -+ unsigned n = 0; -+ int c; -+ -+ printf ("unsigned char switch_image[] = {\n"); -+ -+ while ((c = getchar ()) != EOF) -+ { -+ printf("0x%02x,%s", -+ c & 0xFF, -+ (++n & 0x07) ? " " : "\n"); -+ } -+ -+ if (n & 0x07) -+ { -+ printf("\n"); -+ } -+ -+ printf("};\n" -+ "int switch_size = sizeof switch_image;\n"); -+ -+ return 0; -+} -+ -diff --git a/efi/x86_64/loader/linux.c b/efi/x86_64/loader/linux.c -new file mode 100644 -index 0000000..49a668e ---- /dev/null -+++ b/efi/x86_64/loader/linux.c -@@ -0,0 +1,760 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2006 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/misc.h> -+#include <grub/types.h> -+#include <grub/cpu/linux.h> -+#include <grub/efi/api.h> -+#include <grub/efi/efi.h> -+#include <grub/efi/misc.h> -+ -+#include "switch.h" -+ -+#include <shared.h> -+ -+#include "graphics.h" -+ -+#define grub_file_size() filemax -+ -+#define NEXT_MEMORY_DESCRIPTOR(desc, size) \ -+ ((grub_efi_memory_descriptor_t *) ((char *) (desc) + (size))) -+ -+#define PTR_HI(x) ((grub_uint32_t) ((unsigned long long)((unsigned long)(x)) >> 32)) -+ -+#ifndef SECTOR_SIZE -+#define SECTOR_SIZE 0x200 -+#endif /* defined(SECTOR_SIZE) */ -+#ifndef SECTOR_BITS -+#define SECTOR_BITS 9 -+#endif /* defined(SECTOR_BITS) */ -+ -+static unsigned long linux_mem_size; -+static int loaded; -+static void *real_mode_mem; -+static void *prot_mode_mem; -+static grub_size_t prot_kernel_size; -+static void *initrd_mem; -+static grub_efi_uintn_t real_mode_pages; -+static grub_efi_uintn_t prot_mode_pages; -+static grub_efi_uintn_t initrd_pages; -+static grub_efi_guid_t graphics_output_guid = GRUB_EFI_GRAPHICS_OUTPUT_GUID; -+ -+static inline grub_size_t -+page_align (grub_size_t size) -+{ -+ return (size + (1 << 12) - 1) & (~((1 << 12) - 1)); -+} -+ -+static void -+free_pages (void) -+{ -+ if (real_mode_mem) -+ { -+ grub_efi_free_pages ((grub_addr_t) real_mode_mem, real_mode_pages); -+ real_mode_mem = 0; -+ } -+ -+ if (initrd_mem) -+ { -+ grub_efi_free_pages ((grub_addr_t) initrd_mem, initrd_pages); -+ initrd_mem = 0; -+ } -+ -+ if (mmap_buf) -+ { -+ grub_efi_free_pages ((grub_addr_t) mmap_buf, mmap_pages); -+ mmap_buf = 0; -+ } -+} -+ -+/* Allocate pages for the real mode code and the protected mode code -+ for linux as well as a memory map buffer. */ -+static int -+allocate_pages (grub_size_t real_size, grub_size_t prot_size) -+{ -+ grub_efi_uintn_t desc_size; -+ grub_efi_memory_descriptor_t *mmap_end; -+ grub_efi_memory_descriptor_t *desc; -+ grub_efi_physical_address_t addr; -+ -+ /* Make sure that each size is aligned to a page boundary. */ -+ real_size = page_align (real_size + SECTOR_SIZE); -+ prot_size = page_align (prot_size); -+ -+ grub_dprintf ("linux", "real_size = %x, prot_size = %x, mmap_size = %x\n", -+ (unsigned int) real_size, (unsigned int) prot_size, -+ (unsigned int) mmap_size); -+ -+ /* Calculate the number of pages; Combine the real mode code with -+ the memory map buffer for simplicity. */ -+ real_mode_pages = (real_size >> 12); -+ prot_mode_pages = (prot_size >> 12); -+ -+ /* Initialize the memory pointers with NULL for convenience. */ -+ real_mode_mem = 0; -+ prot_mode_mem = 0; -+ -+ if (grub_efi_get_memory_map (0, &desc_size, 0) <= 0) -+ grub_fatal ("cannot get memory map"); -+ -+ addr = 0; -+ mmap_end = NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size); -+ /* First, find free pages for the real mode code -+ and the memory map buffer. */ -+ for (desc = mmap_buf; -+ desc < mmap_end; -+ desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) -+ { -+ if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY -+ && desc->num_pages >= real_mode_pages) -+ { -+ grub_efi_physical_address_t physical_end; -+ -+ physical_end = desc->physical_start + (desc->num_pages << 12); -+ -+ grub_dprintf ("linux", "physical_start = %x, physical_end = %x\n", -+ (unsigned) desc->physical_start, -+ (unsigned) physical_end); -+ addr = physical_end - real_size; -+ if (addr < 0x100000) -+ continue; -+ -+ /* the kernel wants this address to be under 1 gig.*/ -+ if (desc->physical_start > 0x40000000 - real_size) -+ continue; -+ -+ if (addr > 0x40000000 - real_size) -+ addr = 0x40000000 - real_size; -+ -+ grub_dprintf ("linux", "trying to allocate %u pages at %x\n", -+ (unsigned) real_mode_pages, (unsigned) addr); -+ real_mode_mem = grub_efi_allocate_pages (addr, real_mode_pages); -+ if (! real_mode_mem) -+ grub_fatal ("cannot allocate pages"); -+ -+ desc->num_pages -= real_mode_pages; -+ break; -+ } -+ } -+ -+ if (! real_mode_mem) -+ { -+ grub_printf ("cannot allocate real mode pages"); -+ errnum = ERR_WONT_FIT; -+ goto fail; -+ } -+ -+ grub_printf("Trying to allocate %u pages for VMLINUZ\n", -+ (unsigned) prot_mode_pages); -+ prot_mode_mem = grub_efi_allocate_anypages(prot_mode_pages); -+ -+ if (!prot_mode_mem) -+ grub_fatal("Cannot allocate pages for VMLINUZ"); -+ grub_printf("Got pages at %p\n", prot_mode_mem); -+ -+ return 1; -+ -+ fail: -+ free_pages (); -+ return 0; -+} -+ -+/* do some funky stuff, then boot linux */ -+void -+linux_boot (void) -+{ -+ grub_printf ("zImage is not supported under EFI.\n"); -+ for (;;); -+} -+ -+static void -+grub_efi_disable_network (void) -+{ -+ grub_efi_guid_t pci_io_guid = GRUB_EFI_PCI_IO_GUID; -+ grub_efi_pci_io_t *pci_proto; -+ grub_efi_uintn_t num_handles; -+ grub_efi_handle_t *handle, *handles; -+ -+ handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, -+ &pci_io_guid, -+ NULL, &num_handles); -+ if (!handles || !num_handles) -+ return; -+ -+ for (handle = handles; num_handles--; handle++) -+ { -+ grub_efi_uint8_t class, pos, id, pm = 0; -+ grub_efi_uint16_t pm_state, vendor; -+ int ttl = 48; -+ -+ pci_proto = grub_efi_open_protocol (*handle, &pci_io_guid, -+ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+ -+ if (!pci_proto) -+ continue; -+ -+ Call_Service_5 (pci_proto->pci.read, pci_proto, -+ grub_efi_pci_io_width_uint8, 0x0b, 1, &class); -+ -+ /* Not a network device */ -+ if (class != 0x02) -+ continue; -+ -+ Call_Service_5 (pci_proto->pci.read, pci_proto, -+ grub_efi_pci_io_width_uint16, 0x00, 1, &vendor); -+ -+ /* Not a Broadcom */ -+ if (vendor != 0x14e4) -+ continue; -+ -+ Call_Service_5 (pci_proto->pci.read, pci_proto, -+ grub_efi_pci_io_width_uint16, 0x2c, 1, &vendor); -+ -+ /* Not an Apple */ -+ if (vendor != 0x106b) -+ continue; -+ -+ pos = 0x34; -+ -+ /* Find the power management registers */ -+ while (ttl--) -+ { -+ Call_Service_5 (pci_proto->pci.read, pci_proto, -+ grub_efi_pci_io_width_uint8, pos, 1, &pos); -+ -+ if (pos < 0x40) -+ break; -+ -+ pos &= ~3; -+ -+ Call_Service_5 (pci_proto->pci.read, pci_proto, -+ grub_efi_pci_io_width_uint8, pos, 1, &id); -+ -+ if (id == 0xff) -+ break; -+ -+ if (id == 0x01) -+ { -+ pm = pos; -+ break; -+ } -+ -+ pos += 1; -+ } -+ -+ if (pm) -+ { -+ Call_Service_5 (pci_proto->pci.read, pci_proto, -+ grub_efi_pci_io_width_uint16, pm + 4, 1, &pm_state); -+ -+ pm_state &= ~0x03; -+ pm_state |= 0x03; -+ -+ /* Set to D3 */ -+ -+ Call_Service_5 (pci_proto->pci.write, pci_proto, -+ grub_efi_pci_io_width_uint16, pm + 4, 1, &pm_state); -+ -+ Call_Service_5 (pci_proto->pci.read, pci_proto, -+ grub_efi_pci_io_width_uint16, pm + 4, 1, -+ &pm_state); -+ } -+ } -+} -+ -+void -+big_linux_boot (void) -+{ -+ struct linux_kernel_params *params; -+ struct grub_linux_kernel_header *lh; -+ grub_efi_uintn_t map_key; -+ grub_efi_uintn_t desc_size; -+ grub_efi_uint32_t desc_version; -+ int e820_nr_map; -+ -+ params = real_mode_mem; -+ -+ graphics_set_kernel_params (params); -+ -+ if (grub_efi_get_memory_map (&map_key, &desc_size, &desc_version) <= 0) -+ grub_fatal ("cannot get memory map"); -+ -+ /* Pass e820 memmap. */ -+ e820_map_from_efi_map ((struct e820_entry *) params->e820_map, &e820_nr_map, -+ mmap_buf, desc_size, mmap_size); -+ params->e820_nr_map = e820_nr_map; -+ -+ grub_efi_disable_network(); -+ -+ if (! grub_efi_exit_boot_services (map_key)) -+ grub_fatal ("cannot exit boot services"); -+ -+ /* Note that no boot services are available from here. */ -+ -+ /* copy vmlinuz image to hdr.code32_start */ -+ memcpy ((char *)(unsigned long)(params->hdr.code32_start), (char *)prot_mode_mem, -+ prot_kernel_size); -+ /* copy switch image */ -+ memcpy ((void *) 0x700, switch_image, switch_size); -+ -+ lh = ¶ms->hdr; -+ /* Pass EFI parameters. */ -+ if (grub_le_to_cpu16 (lh->version) >= 0x0206) { -+ params->version_0206.efi_mem_desc_size = desc_size; -+ params->version_0206.efi_mem_desc_version = desc_version; -+ params->version_0206.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf; -+ params->version_0206.efi_mmap_size = mmap_size; -+ } else if (grub_le_to_cpu16 (lh->version) >= 0x0204) { -+ params->version_0204.efi_mem_desc_size = desc_size; -+ params->version_0204.efi_mem_desc_version = desc_version; -+ params->version_0204.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf; -+ params->version_0204.efi_mmap_size = mmap_size; -+ } else /* dunno */ { -+ params->dunno.efi_mem_desc_size = desc_size; -+ params->dunno.efi_mem_desc_version = desc_version; -+ params->dunno.efi_mmap = (grub_uint32_t) (unsigned long) mmap_buf; -+ params->dunno.efi_mmap_size = mmap_size; -+ params->dunno.efi_mmap_hi = PTR_HI(mmap_buf); -+ } -+ -+#ifdef __x86_64__ -+ /* Pass parameters. */ -+ asm volatile ("mov %0, %%rsi" : : "m" (real_mode_mem)); -+ asm volatile ("movl %0, %%ebx" : : "m" (params->hdr.code32_start)); -+ -+ /* Enter Linux, switch from 64-bit long mode -+ * to 32-bit protect mode, this code end address -+ * must not exceed 0x1000, because linux kernel bootstrap -+ * code will flush this area -+ */ -+ asm volatile ( "mov $0x700, %%rdi" : :); -+ asm volatile ( "jmp *%%rdi" : :); -+#else -+ /* Pass parameters. */ -+ asm volatile ("mov %0, %%esi" : : "m" (real_mode_mem)); -+ asm volatile ("movl %0, %%ebx" : : "m" (params->hdr.code32_start)); -+ -+ /* Enter Linux, switch from 64-bit long mode -+ * to 32-bit protect mode, this code end address -+ * must not exceed 0x1000, because linux kernel bootstrap -+ * code will flush this area -+ */ -+ asm volatile ( "mov $0x700, %%edi" : :); -+ asm volatile ( "jmp *%%edi" : :); -+#endif -+ -+ /* Never reach here. */ -+ for (;;); -+} -+ -+int -+grub_load_linux (char *kernel, char *arg) -+{ -+ struct grub_linux_kernel_header *lh; -+ struct linux_kernel_params *params; -+ static struct linux_kernel_params params_buf; -+ grub_uint8_t setup_sects; -+ grub_size_t real_size, prot_size; -+ grub_uint64_t kernel_base, kernel_length, kernel_pages; -+ grub_ssize_t len; -+ char *dest; -+ int align, min_alignment; -+ int relocatable = 0; -+ -+ if (kernel == NULL) -+ { -+ errnum = ERR_BAD_FILENAME; -+ grub_printf ("no kernel specified"); -+ goto fail1; -+ } -+ -+ if (! grub_open (kernel)) -+ goto fail1; -+ -+ if (grub_read ((char *) ¶ms_buf, sizeof (params_buf)) -+ != sizeof (params_buf)) -+ { -+ errnum = ERR_EXEC_FORMAT; -+ grub_printf ("cannot read the linux header"); -+ goto fail; -+ } -+ -+ lh = ¶ms_buf.hdr; -+ -+ if (lh->boot_flag != grub_cpu_to_le16 (0xaa55)) -+ { -+ errnum = ERR_EXEC_FORMAT; -+ grub_printf ("invalid magic number: %x", lh->boot_flag); -+ goto fail; -+ } -+ -+ /* EFI support is quite new, so reject old versions. */ -+ if (lh->header != grub_cpu_to_le32 (GRUB_LINUX_MAGIC_SIGNATURE) -+ || grub_le_to_cpu16 (lh->version) < 0x0203) -+ { -+ errnum = ERR_EXEC_FORMAT; -+ grub_printf ("too old version"); -+ goto fail; -+ } -+ -+ /* I'm not sure how to support zImage on EFI. */ -+ if (! (lh->loadflags & GRUB_LINUX_FLAG_BIG_KERNEL)) -+ { -+ errnum = ERR_EXEC_FORMAT; -+ grub_printf ("zImage is not supported"); -+ goto fail; -+ } -+ -+ setup_sects = lh->setup_sects; -+ -+ real_size = 0x1000 + grub_strlen(arg); -+ prot_size = grub_file_size () - (setup_sects << SECTOR_BITS) - SECTOR_SIZE; -+ prot_kernel_size = prot_size; -+ -+ if (! allocate_pages (real_size, prot_size)) -+ goto fail; -+ -+ /* XXX Linux assumes that only elilo can boot Linux on EFI!!! */ -+ lh->type_of_loader = 0x50; -+ -+ lh->cmd_line_ptr = (grub_uint32_t) (unsigned long) real_mode_mem + 0x1000; -+ lh->ramdisk_image = 0; -+ lh->ramdisk_size = 0; -+ -+ grub_memset(real_mode_mem, 0, real_size); -+ -+ params = (struct linux_kernel_params *) real_mode_mem; -+ -+ grub_memmove(¶ms->hdr, lh, 0x202 + lh->jump_off - 0x1f1); -+ -+ params->cl_magic = GRUB_LINUX_CL_MAGIC; -+ params->cl_offset = 0x1000; -+ -+ /* These are not needed to be precise, because Linux uses these values -+ only to raise an error when the decompression code cannot find good -+ space. */ -+ params->ext_mem = ((32 * 0x100000) >> 10); -+ params->alt_mem = ((32 * 0x100000) >> 10); -+ -+ /* No APM on EFI. */ -+ params->apm_version = 0; -+ params->apm_code_segment = 0; -+ params->apm_entry = 0; -+ params->apm_16bit_code_segment = 0; -+ params->apm_data_segment = 0; -+ params->apm_flags = 0; -+ params->apm_code_len = 0; -+ params->apm_data_len = 0; -+ -+ /* XXX is there any way to use SpeedStep on EFI? */ -+ params->ist_signature = 0; -+ params->ist_command = 0; -+ params->ist_event = 0; -+ params->ist_perf_level = 0; -+ -+ /* Let the kernel probe the information. */ -+ grub_memset (params->hd0_drive_info, 0, sizeof (params->hd0_drive_info)); -+ grub_memset (params->hd1_drive_info, 0, sizeof (params->hd1_drive_info)); -+ -+ /* No MCA on EFI. */ -+ params->rom_config_len = 0; -+ -+ if (grub_le_to_cpu16 (lh->version) >= 0x0206) { -+ grub_memcpy(¶ms->version_0204.efi_signature, "EL64", 4); -+ params->version_0206.efi_system_table = \ -+ (grub_uint32_t) (unsigned long) grub_efi_system_table; -+ } else if (grub_le_to_cpu16 (lh->version) >= 0x0204) { -+ grub_memcpy(¶ms->version_0204.efi_signature, "EFIL", 4); -+ params->version_0204.efi_system_table = \ -+ (grub_uint32_t) (unsigned long) grub_efi_system_table; -+ } else /* dunno */ { -+ params->dunno.efi_signature = GRUB_LINUX_EFI_SIGNATURE_X64; -+ params->dunno.efi_system_table = \ -+ (grub_uint32_t) (unsigned long) grub_efi_system_table; -+ params->dunno.efi_system_table_hi = PTR_HI(grub_efi_system_table); -+ } -+ /* The other EFI parameters are filled when booting. */ -+ -+ /* No EDD */ -+ params->eddbuf_entries = 0; -+ params->edd_mbr_sig_buf_entries = 0; -+ -+ /* XXX there is no way to know if the kernel really supports EFI. */ -+ grub_printf ("[Linux-EFI, setup=0x%x, size=0x%x]\n", (unsigned int)real_size, -+ (unsigned int)prot_size); -+ -+ /* Check the mem= option to limit memory used for initrd. */ -+ { -+ char *mem; -+ -+ mem = grub_strstr (arg, "mem="); -+ if (mem) -+ { -+ char *value = mem + 4; -+ -+ safe_parse_maxulong (&value, &linux_mem_size); -+ switch (errnum) -+ { -+ case ERR_NUMBER_OVERFLOW: -+ /* If an overflow occurs, use the maximum address for -+ initrd instead. This is good, because MAXINT is -+ greater than LINUX_INITRD_MAX_ADDRESS. */ -+ linux_mem_size = LINUX_INITRD_MAX_ADDRESS; -+ errnum = ERR_NONE; -+ break; -+ -+ case ERR_NONE: -+ { -+ int shift = 0; -+ -+ switch (grub_tolower (*value)) -+ { -+ case 'g': -+ shift += 10; -+ case 'm': -+ shift += 10; -+ case 'k': -+ shift += 10; -+ default: -+ break; -+ } -+ -+ /* Check an overflow. */ -+ if (linux_mem_size > (~0UL >> shift)) -+ linux_mem_size = 0; -+ else -+ linux_mem_size <<= shift; -+ } -+ break; -+ -+ default: -+ linux_mem_size = 0; -+ errnum = ERR_NONE; -+ break; -+ } -+ } -+ else -+ linux_mem_size = 0; -+ } -+ -+ dest = grub_stpcpy ((char *) real_mode_mem + 0x1000, skip_to(0, arg)); -+ -+ grub_seek ((setup_sects << SECTOR_BITS) + SECTOR_SIZE); -+ len = prot_size; -+ if (grub_read ((char *)prot_mode_mem, len) != len) -+ grub_printf ("Couldn't read file"); -+ -+ if (lh->version >= 0x205) { -+ for (align = lh->min_alignment; align < 32; align++) { -+ if (lh->kernel_alignment & (1 << align)) { -+ break; -+ } -+ } -+ relocatable = lh->relocatable_kernel; -+ } -+ -+ if (lh->version >= 0x20a) { -+ kernel_base = lh->pref_address; -+ kernel_length = lh->init_size; -+ min_alignment = lh->min_alignment; -+ } else { -+ kernel_base = lh->code32_start; -+ kernel_length = prot_kernel_size; -+ min_alignment = 0; -+ } -+ -+ kernel_pages = (kernel_length + 4095) >> 12; -+ -+ /* Attempt to allocate address space for the kernel */ -+ kernel_base = (grub_uint64_t)grub_efi_allocate_pages(kernel_base, kernel_pages); -+ -+ if (!kernel_base && relocatable) { -+ grub_efi_memory_descriptor_t *desc; -+ grub_efi_memory_descriptor_t tdesc; -+ grub_efi_uintn_t desc_size; -+ -+ if (grub_efi_get_memory_map (0, &desc_size, 0) <= 0) -+ grub_fatal ("cannot get memory map"); -+ -+ while (align >= min_alignment) { -+ for (desc = mmap_buf; -+ desc < NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size); -+ desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) -+ { -+ grub_uint64_t addr; -+ grub_uint64_t alignval = (1 << align) - 1; -+ -+ if (desc->type != GRUB_EFI_CONVENTIONAL_MEMORY) -+ continue; -+ -+ memcpy(&tdesc, desc, sizeof(tdesc)); -+ -+ addr = (tdesc.physical_start + alignval) & ~(alignval); -+ -+ if ((addr + kernel_length) > -+ (tdesc.physical_start + (tdesc.num_pages << 12))) -+ continue; -+ -+ kernel_base = (grub_uint64_t)grub_efi_allocate_pages(addr, kernel_pages); -+ -+ if (kernel_base) { -+ lh->kernel_alignment = 1 << align; -+ break; -+ } -+ } -+ align--; -+ if (kernel_base) -+ break; -+ } -+ } -+ -+ if (!kernel_base) { -+ grub_printf("Failed to allocate kernel memory"); -+ errnum = ERR_UNRECOGNIZED; -+ goto fail; -+ } -+ -+ lh->code32_start = kernel_base; -+ -+ if (errnum == ERR_NONE) -+ { -+ loaded = 1; -+ } -+ -+ fail: -+ -+ grub_close (); -+ -+ fail1: -+ -+ if (errnum != ERR_NONE) -+ { -+ loaded = 0; -+ } -+ return errnum ? KERNEL_TYPE_NONE : KERNEL_TYPE_BIG_LINUX; -+} -+ -+int -+grub_load_initrd (char *initrd) -+{ -+ grub_ssize_t size; -+ grub_addr_t addr_min, addr_max; -+ grub_addr_t addr; -+ grub_efi_memory_descriptor_t *desc; -+ grub_efi_memory_descriptor_t tdesc; -+ grub_efi_uintn_t desc_size; -+ struct linux_kernel_params *params; -+ -+ if (initrd == NULL) -+ { -+ errnum = ERR_BAD_FILENAME; -+ grub_printf ("No module specified"); -+ goto fail1; -+ } -+ -+ if (! loaded) -+ { -+ errnum = ERR_UNRECOGNIZED; -+ grub_printf ("You need to load the kernel first."); -+ goto fail1; -+ } -+ -+ if (! grub_open (initrd)) -+ goto fail1; -+ -+ size = grub_file_size (); -+ initrd_pages = (page_align (size) >> 12); -+ -+ params = (struct linux_kernel_params *) real_mode_mem; -+ grub_dprintf(__func__, "initrd_pages: %lu\n", initrd_pages); -+ -+ addr_max = grub_cpu_to_le32 (params->hdr.initrd_addr_max); -+ if (linux_mem_size != 0 && linux_mem_size < addr_max) -+ addr_max = linux_mem_size; -+ addr_max &= ~((1 << 12)-1); -+ -+ /* Usually, the compression ratio is about 50%. */ -+ addr_min = 0; -+ -+ /* Find the highest address to put the initrd. */ -+ grub_dprintf(__func__, "addr_min: 0x%lx addr_max: 0x%lx mmap_size: %lu\n", addr_min, addr_max, mmap_size); -+ if (grub_efi_get_memory_map (0, &desc_size, 0) <= 0) -+ grub_fatal ("cannot get memory map"); -+ -+ addr = 0; -+ for (desc = mmap_buf; -+ desc < NEXT_MEMORY_DESCRIPTOR (mmap_buf, mmap_size); -+ desc = NEXT_MEMORY_DESCRIPTOR (desc, desc_size)) -+ { -+ if (desc->type != GRUB_EFI_CONVENTIONAL_MEMORY) -+ continue; -+ memcpy(&tdesc, desc, sizeof (tdesc)); -+ if (tdesc.physical_start < addr_min -+ && tdesc.num_pages > ((addr_min - tdesc.physical_start) >> 12)) -+ { -+ tdesc.num_pages -= ((addr_min - tdesc.physical_start) >> 12); -+ tdesc.physical_start = addr_min; -+ } -+ -+ grub_dprintf(__func__, "desc = {type=%d,ps=0x%llx,vs=0x%llx,sz=%llu,attr=%llu}\n", desc->type, (unsigned long long)desc->physical_start, (unsigned long long)desc->virtual_start, (unsigned long long)desc->num_pages, (unsigned long long)desc->attribute); -+ if (tdesc.physical_start >= addr_min -+ && tdesc.physical_start + page_align (size) <= addr_max -+ && tdesc.num_pages >= initrd_pages) -+ { -+ grub_efi_physical_address_t physical_end; -+ -+ physical_end = tdesc.physical_start + (tdesc.num_pages << 12); -+ if (physical_end > addr_max) -+ physical_end = addr_max; -+ -+ if (physical_end <= 0x7fffffffUL && physical_end > addr) -+ addr = physical_end - page_align (size); -+ } -+ } -+ -+ if (addr == 0) -+ { -+ errnum = ERR_UNRECOGNIZED; -+ grub_printf ("no free pages available"); -+ goto fail; -+ } -+ -+ initrd_mem = grub_efi_allocate_pages (addr, initrd_pages); -+ if (! initrd_mem) -+ grub_fatal ("cannot allocate pages: %x@%x", (unsigned)initrd_pages, -+ (unsigned)addr); -+ -+ if (grub_read (initrd_mem, size) != size) -+ { -+ grub_printf ("Couldn't read file"); -+ goto fail; -+ } -+ -+ grub_printf (" [Initrd, addr=0x%x, size=0x%x]\n", (unsigned int) addr, -+ (unsigned int) size); -+ -+ params->hdr.ramdisk_image = addr; -+ params->hdr.ramdisk_size = size; -+ params->hdr.root_dev = 0x0100; /* XXX */ -+ -+ fail: -+ grub_close (); -+ fail1: -+ return !errnum; -+} -diff --git a/efi/x86_64/loader/switch.S b/efi/x86_64/loader/switch.S -new file mode 100644 -index 0000000..d0d8dca ---- /dev/null -+++ b/efi/x86_64/loader/switch.S -@@ -0,0 +1,92 @@ -+# -+# Switch from protected mode to real mode and jump to setup.S -+# image located at %cx:0. -+# -+# This module must be placed into physical memory at 0:7C00h. -+# EFI has some real mode thunking code at 2000:0h. -+# -+# Processor and non-maskable interrupts should be disabled -+# before control is passed to this module. -+# -+ -+#define __KERNEL_CS 0x38 -+#define MSR_EFER 0xc0000080 -+#define _EFER_LME 8 /* Long mode enable */ -+ -+.global _start -+ -+.text -+_start: -+ # -+ # Load identity mapped GDT & real mode IDT. -+ # Add 7C00h to the addresses since this is linked to start -+ # at 0h and it is being placed at 7C00h. -+ # -+ -+ # fixme here EFI bios cs segment is 0x38 -+ # switch to IA32e compatible mode -+ # esi point to kernel parameter -+ # ebx point to kernel entry point -+.code64 -+ cli -+ cld -+ lgdt gdt_64 -+ lidt idt_64 -+ ljmp *exit_ia32e -+ -+ /* switch to IA32e compatible mode */ -+.code32 -+mode32: -+ # -+ # Turn off PG bit in CR0 and set CR3 to zero. -+ # -+ movl %cr0, %eax -+ andl $0x7FFFFFFF, %eax -+ movl %eax, %cr0 -+ -+ /* Setup EFER (Extended Feature Enable Register) */ -+ nop -+ nop -+ movl $0xc0000080, %ecx -+ rdmsr -+ /* Enable Long Mode */ -+ andl $0xFFFFFEFF, %eax -+ /* Make changes effective */ -+ wrmsr -+ -+ /* Disable PAE */ -+ xorl %eax, %eax -+ movl %eax, %cr4 -+ -+ jmp 2f -+2: -+ jmp *%ebx -+//jmp to kernel entry -+ -+.align 8 -+exit_ia32e: -+ .long mode32 -+ .long 0x10 -+ -+gdt_64: .word 0x08 * 9 -1 -+ .quad gdt -+ -+ .word 0, 0, 0 -+idt_64: .word 0 -+ .quad 0 -+ # -+ # GDT & IDT stuff for switching into 32 bit protected mode. -+ # -+ .word 0,0,0 -+gdt: -+ .quad 0x0000000000000000 /* NULL descriptor 0*/ -+ .quad 0x0 /* unused 0x08 */ -+ .quad 0x00cf9a000000ffff /* __KERNEL_CS 0x10 */ -+ .quad 0x00cf92000000ffff /* __KERNEL_DS 0x18 */ -+ .quad 0x00cf92000000ffff -+ .quad 0x00cf92000000ffff -+ .quad 0x00cf92000000ffff -+ .quad 0x00cf9a000000ffff /* __KERNEL32_CS 0x38*/ -+ .quad 0 /* unused */ -+.end -+ -diff --git a/efi/x86_64/loader/switch.h b/efi/x86_64/loader/switch.h -new file mode 100644 -index 0000000..b5dc39a ---- /dev/null -+++ b/efi/x86_64/loader/switch.h -@@ -0,0 +1,25 @@ -+unsigned char switch_image[] = { -+0xfa, 0xfc, 0x0f, 0x01, 0x14, 0x25, 0x48, 0x07, -+0x00, 0x00, 0x0f, 0x01, 0x1c, 0x25, 0x58, 0x07, -+0x00, 0x00, 0xff, 0x2c, 0x25, 0x40, 0x07, 0x00, -+0x00, 0x0f, 0x20, 0xc0, 0x25, 0xff, 0xff, 0xff, -+0x7f, 0x0f, 0x22, 0xc0, 0x90, 0x90, 0xb9, 0x80, -+0x00, 0x00, 0xc0, 0x0f, 0x32, 0x25, 0xff, 0xfe, -+0xff, 0xff, 0x0f, 0x30, 0x31, 0xc0, 0x0f, 0x22, -+0xe0, 0xeb, 0x00, 0xff, 0xe3, 0x8d, 0x76, 0x00, -+0x19, 0x07, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, -+0x47, 0x00, 0x68, 0x07, 0x00, 0x00, 0x00, 0x00, -+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00, -+0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, -+0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, -+0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, -+0xff, 0xff, 0x00, 0x00, 0x00, 0x92, 0xcf, 0x00, -+0xff, 0xff, 0x00, 0x00, 0x00, 0x9a, 0xcf, 0x00, -+0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -+}; -+int switch_size = sizeof switch_image; -diff --git a/efi/x86_64/reloc.c b/efi/x86_64/reloc.c -new file mode 100644 -index 0000000..b53eb63 ---- /dev/null -+++ b/efi/x86_64/reloc.c -@@ -0,0 +1,79 @@ -+/* reloc_x86_64.c - position independent x86_64 ELF shared object relocator -+ Copyright (C) 1999 Hewlett-Packard Co. -+ Contributed by David Mosberger davidm@hpl.hp.com. -+ Copyright (C) 2005 Intel Co. -+ Contributed by Fenghua Yu fenghua.yu@intel.com. -+ -+ This file is part of GNU-EFI, the GNU EFI development environment. -+ -+ GNU EFI 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, or (at your option) -+ any later version. -+ -+ GNU EFI 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 GNU EFI; see the file COPYING. If not, write to the Free -+ Software Foundation, 59 Temple Place - Suite 330, Boston, MA -+ 02111-1307, USA. */ -+ -+#include <grub/efi/efi.h> -+#include <grub/efi/api.h> -+#include <link.h> -+ -+grub_efi_status_t _relocate (long ldbase, ElfW(Dyn) *dyn, -+ grub_efi_handle_t image_handle, -+ grub_efi_system_table_t *sys_tab) -+{ -+ //extern EFI_STATUS efi_main (EFI_HANDLE, EFI_SYSTEM_TABLE *); -+ long relsz = 0, relent = 0; -+ ElfW(Rel) *rel = 0; -+ unsigned long *addr; -+ int i; -+ -+ for (i = 0; dyn[i].d_tag != DT_NULL; ++i) { -+ switch (dyn[i].d_tag) { -+ case DT_RELA: -+ rel = (ElfW(Rel)*) ((long) dyn[i].d_un.d_ptr + ldbase); -+ break; -+ -+ case DT_RELASZ: -+ relsz = dyn[i].d_un.d_val; -+ break; -+ -+ case DT_RELAENT: -+ relent = dyn[i].d_un.d_val; -+ break; -+ -+ default: -+ break; -+ } -+ } -+ -+ if (!rel || relent == 0){ -+ return GRUB_EFI_LOAD_ERROR; -+ } -+ while (relsz > 0) { -+ /* apply the relocs */ -+ switch (ELF64_R_TYPE (rel->r_info)) { -+ case R_X86_64_NONE: -+ break; -+ -+ case R_X86_64_RELATIVE: -+ addr = (unsigned long *) (ldbase + rel->r_offset); -+ *addr += ldbase; -+ break; -+ -+ default: -+ break; -+ } -+ rel = (ElfW(Rel)*) ((char *) rel + relent); -+ relsz -= relent; -+ } -+ return GRUB_EFI_SUCCESS; -+} -+ -diff --git a/efi/x86_64/setjmp.S b/efi/x86_64/setjmp.S -new file mode 100644 -index 0000000..e042a14 ---- /dev/null -+++ b/efi/x86_64/setjmp.S -@@ -0,0 +1,56 @@ -+/* -+ * 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. -+ */ -+ -+#include <grub/symbol.h> -+ -+ .file "setjmp.S" -+ -+ .text -+ -+/* -+ * int grub_setjmp (grub_jmp_buf env) -+ */ -+FUNCTION(grub_setjmp) -+ pop %rsi /* Return address, and adjust the stack */ -+ xor %rax, %rax -+ movq %rbx, 0(%rdi) /* RBX */ -+ movq %rsp, 8(%rdi) /* RSP */ -+ push %rsi -+ movq %rbp, 16(%rdi) /* RBP */ -+ movq %r12, 24(%rdi) /* R12 */ -+ movq %r13, 32(%rdi) /* R13 */ -+ movq %r14, 40(%rdi) /* R14 */ -+ movq %r15, 48(%rdi) /* R15 */ -+ movq %rsi, 56(%rdi) /* RSI */ -+ ret -+ -+/* -+ * int grub_longjmp (grub_jmp_buf env, int val) -+ */ -+FUNCTION(grub_longjmp) -+ movl %esi, %eax -+ movq (%rdi), %rbx -+ movq 8(%rdi), %rsp -+ movq 16(%rdi), %rbp -+ movq 24(%rdi), %r12 -+ movq 32(%rdi), %r13 -+ movq 40(%rdi), %r14 -+ movq 48(%rdi), %r15 -+ jmp *56(%rdi) -+ -diff --git a/efi/xpm.c b/efi/xpm.c -new file mode 100644 -index 0000000..085a10c ---- /dev/null -+++ b/efi/xpm.c -@@ -0,0 +1,231 @@ -+ -+#if defined(SUPPORT_GRAPHICS) || defined(PLATFORM_EFI) || 1 -+ -+#include <grub/efi/api.h> -+#include <grub/efi/efi.h> -+#include <grub/misc.h> -+ -+#include "xpm.h" -+ -+unsigned char -+xpm_get_pixel_idx(struct xpm *xpm, int x, int y) -+{ -+ if (x < 0 || x >= xpm->width) -+ return -1; -+ if (y < 0 || y >= xpm->width) -+ return -1; -+ return xpm->image[x + (y * xpm->width)]; -+} -+ -+void -+xpm_set_pixel_idx(struct xpm *xpm, int x, int y, unsigned char idx) -+{ -+ xpm->image[y * xpm->width + x] = idx; -+} -+ -+void -+xpm_get_idx(struct xpm *xpm, unsigned char idx, xpm_pixel_t *pixel) -+{ -+ xpm_pixel_t *xpl; -+ if (!pixel) -+ return; -+ if (idx >= xpm->colors) { -+ pixel->red = pixel->green = pixel->blue = 0; -+ return; -+ } -+ xpl = &xpm->palette[idx]; -+ memcpy(pixel, xpl, sizeof (*pixel)); -+// pixel->red = xpl->red; -+// pixel->green = xpl->green; -+// pixel->blue = xpl->blue; -+} -+ -+int -+xpm_get_pixel(struct xpm *xpm, int x, int y, xpm_pixel_t *pixel) -+{ -+ unsigned char idx; -+ idx = xpm_get_pixel_idx(xpm, x, y); -+ xpm_get_idx(xpm, idx, pixel); -+ return 1; -+} -+ -+static int -+hex_to_int(int v) -+{ -+ if (v >= 'A' && v <= 'F') -+ return (v - 'A' + 10); -+ if (v >= 'a' && v <= 'f') -+ return (v - 'a' + 10); -+ return (v - '0'); -+} -+ -+struct xpm * -+xpm_open(char *path) -+{ -+ char c, prev, target[]="/* XPM */\n", base; -+ char buf[32]; -+ int pos = 0; -+ unsigned int i, idx, len, x, y; -+ unsigned char pal[XPM_MAX_COLORS]; -+ struct xpm *xpm; -+ -+ xpm = grub_malloc(sizeof (*xpm)); -+ if (!xpm) -+ return NULL; -+ -+ if (!grub_open(path)) { -+ grub_free(xpm); -+ grub_printf("grub_open("%s") failed\n", path); -+ return NULL; -+ } -+ -+ grub_memset(xpm, '\0', sizeof (*xpm)); -+ -+ prev = '\n'; -+ c = 0; -+ do { -+ if (grub_read(&c, 1) != 1) { -+ grub_printf("grub_read() failed\n"); -+ grub_free(xpm); -+ grub_close(); -+ return NULL; -+ } -+ if ((pos == 0 && prev == '\n') || pos > 0) { -+ if (c == target[pos]) -+ pos++; -+ else -+ pos = 0; -+ } -+ prev = c; -+ } while (target[pos]); -+ -+ /* parse info */ -+ while (grub_read(&c, 1)) { -+ if (c == '"') -+ break; -+ } -+ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) -+ ; -+ -+ i = 0; -+ xpm->width = c - '0'; -+ while (grub_read(&c, 1)) { -+ if (c >= '0' && c <= '9') -+ xpm->width = xpm->width * 10 + c - '0'; -+ else -+ break; -+ } -+ if (xpm->width > XPM_MAX_WIDTH) { -+ grub_printf("xpm->width (%d) was greater than XPM_MAX_WIDTH (%d)\n", -+ xpm->width, XPM_MAX_WIDTH); -+ grub_free(xpm); -+ grub_close(); -+ return NULL; -+ } -+ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) -+ ; -+ -+ xpm->height = c - '0'; -+ while (grub_read(&c, 1)) { -+ if (c >= '0' && c <= '9') -+ xpm->height = xpm->height * 10 + c - '0'; -+ else -+ break; -+ } -+ if (xpm->height > XPM_MAX_HEIGHT) { -+ grub_printf("xpm->height (%d) was greater than XPM_MAX_HEIGHT (%d)\n", -+ xpm->height, XPM_MAX_HEIGHT); -+ grub_free(xpm); -+ grub_close(); -+ return NULL; -+ } -+ -+ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) -+ ; -+ -+ xpm->colors = c - '0'; -+ while (grub_read(&c, 1)) { -+ if (c >= '0' && c <= '9') -+ xpm->colors = xpm->colors * 10 + c - '0'; -+ else -+ break; -+ } -+ -+ base = 0; -+ while (grub_read(&c, 1) && c != '"') -+ ; -+ -+ /* palette */ -+ for (i = 0, idx = 1; i < xpm->colors; i++) { -+ len = 0; -+ -+ while (grub_read(&c, 1) && c != '"') -+ ; -+ grub_read(&c, 1); /* char */ -+ base = c; -+ grub_read(buf, 4); /* \t c # */ -+ -+ while (grub_read(&c, 1) && c != '"') { -+ if (len < sizeof(buf)) -+ buf[len++] = c; -+ } -+ -+ if (len == 6 && idx < xpm->colors) { -+ unsigned char r, g, b; -+ -+ r = (hex_to_int(buf[0]) << 4) | hex_to_int(buf[1]); -+ g = (hex_to_int(buf[2]) << 4) | hex_to_int(buf[3]); -+ b = (hex_to_int(buf[4]) << 4) | hex_to_int(buf[5]); -+ -+ pal[idx] = base; -+ xpm->palette[idx].red = r; -+ xpm->palette[idx].green = g; -+ xpm->palette[idx].blue = b; -+ ++idx; -+ } -+ } -+ -+ /* parse xpm data */ -+ x = y = 0; -+ while (y < xpm->height) { -+ xpm_pixel_t *pixel = NULL; -+ while (1) { -+ if (!grub_read(&c, 1)) { -+ grub_printf("%s %s:%d grub_read() failed\n", __FILE__, __func__, __LINE__); -+ grub_free(xpm); -+ grub_close(); -+ return NULL; -+ } -+ if (c == '"') -+ break; -+ } -+ -+ while (grub_read(&c, 1) && c != '"') { -+ unsigned char *iaddr = NULL; -+ for (i = 1; i < xpm->colors; i++) -+ if (pal[i] == c) { -+ idx = i; -+ break; -+ } -+ -+ xpm_set_pixel_idx(xpm, x, y, idx); -+ -+ if (++x >= xpm->width) { -+ x = 0; -+ -+ ++y; -+ } -+ } -+ } -+ grub_close(); -+ return xpm; -+} -+ -+void -+xpm_free(struct xpm *xpm) -+{ -+ grub_free(xpm); -+} -+ -+ -+#endif /* SUPPORT_GRAPHICS || PLATFORM_EFI */ -diff --git a/efi/xpm.h b/efi/xpm.h -new file mode 100644 -index 0000000..258abc1 ---- /dev/null -+++ b/efi/xpm.h -@@ -0,0 +1,36 @@ -+#ifndef GRUB_XPM_H -+#define GRUB_XPM_H -+ -+#include <shared.h> -+ -+#define XPM_MAX_COLORS 31 -+#define XPM_MAX_WIDTH 640 -+#define XPM_MAX_HEIGHT 480 -+ -+struct xpm_pixel { -+ unsigned char reserved; -+ unsigned char red; -+ unsigned char green; -+ unsigned char blue; -+}; -+typedef struct xpm_pixel xpm_pixel_t; -+ -+struct xpm { -+ int colors; -+ xpm_pixel_t palette[32]; -+ -+ int width; -+ int height; -+ unsigned char image[XPM_MAX_WIDTH * XPM_MAX_HEIGHT]; -+}; -+ -+extern struct xpm *xpm_open(char *path); -+extern void xpm_free(struct xpm *xpm); -+ -+extern unsigned char xpm_get_pixel_idx(struct xpm *xpm, int x, int y); -+extern void xpm_set_pixel_idx(struct xpm *xpm, int x, int y, unsigned char idx); -+extern int xpm_get_pixel(struct xpm *xpm, int x, int y, xpm_pixel_t *pixel); -+ -+extern void xpm_get_idx(struct xpm *xpm, unsigned char idx, xpm_pixel_t *pixel); -+ -+#endif /* GRUB_XPM_H */ -diff --git a/grub.spec b/grub.spec -new file mode 100644 -index 0000000..7e5982d ---- /dev/null -+++ b/grub.spec -@@ -0,0 +1,438 @@ -+Name: grub -+Version: 0.97 -+Release: 20%{?dist} -+Summary: GRUB - the Grand Unified Boot Loader. -+Group: System Environment/Base -+License: GPLv2+ -+ -+ExclusiveArch: i386 x86_64 -+BuildRequires: binutils >= 2.9.1.0.23, ncurses-devel, ncurses-static, texinfo -+BuildRequires: autoconf /usr/lib/crt1.o automake -+PreReq: /sbin/install-info -+Requires: mktemp -+Requires: /usr/bin/cmp -+Requires: system-logos -+BuildRoot: %{_tmppath}/%{name}-%{version}-root -+ -+URL: http://www.gnu.org/software/%%7Bname%7D/ -+Source0: ftp://alpha.gnu.org/gnu/%{name}/%{name}-%{version}.tar.gz -+Patch0: grub-fedora-9.patch -+ -+%description -+GRUB (Grand Unified Boot Loader) is an experimental boot loader -+capable of booting into most free operating systems - Linux, FreeBSD, -+NetBSD, GNU Mach, and others as well as most commercial operating -+systems. -+ -+%prep -+%setup -q -+%patch0 -p1 -b .fedora-9 -+ -+%build -+autoreconf -+autoconf -+GCCVERS=$(gcc --version | head -1 | cut -d\ -f3 | cut -d. -f1) -+CFLAGS="-Os -g -fno-strict-aliasing -Wall -Werror -Wno-shadow -Wno-unused" -+if [ "$GCCVERS" == "4" ]; then -+ CFLAGS="$CFLAGS -Wno-pointer-sign" -+fi -+export CFLAGS -+%ifarch x86_64 -+%configure --sbindir=/sbin --disable-auto-linux-mem-opt --datarootdir=%{_datadir} --with-platform=efi -+make -+rm -fr $RPM_BUILD_ROOT -+%makeinstall sbindir=${RPM_BUILD_ROOT}/sbin -+mv ${RPM_BUILD_ROOT}/sbin/grub ${RPM_BUILD_ROOT}/sbin/grub-efi -+make clean -+autoreconf -+autoconf -+CFLAGS="$CFLAGS -static" -+export CFLAGS -+%endif -+%configure --sbindir=/sbin --disable-auto-linux-mem-opt --datarootdir=%{_datadir} -+make -+ -+%install -+%makeinstall sbindir=${RPM_BUILD_ROOT}/sbin -+mkdir -p ${RPM_BUILD_ROOT}/boot/grub -+ -+rm -f ${RPM_BUILD_ROOT}/%{_infodir}/dir -+ -+%clean -+rm -fr $RPM_BUILD_ROOT -+ -+%post -+if [ "$1" = 1 ]; then -+ /sbin/install-info --info-dir=%{_infodir} %{_infodir}/grub.info.gz || : -+ /sbin/install-info --info-dir=%{_infodir} %{_infodir}/multiboot.info.gz || : -+fi -+ -+%preun -+if [ "$1" = 0 ] ;then -+ /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/grub.info.gz || : -+ /sbin/install-info --delete --info-dir=%{_infodir} %{_infodir}/multiboot.info.gz || : -+fi -+ -+%files -+%defattr(-,root,root) -+%doc AUTHORS ChangeLog NEWS README COPYING TODO docs/menu.lst -+/boot/grub -+/sbin/grub -+/sbin/grub-install -+/sbin/grub-terminfo -+/sbin/grub-md5-crypt -+%{_bindir}/mbchk -+%{_infodir}/grub* -+%{_infodir}/multiboot* -+%{_mandir}/man*/* -+%{_datadir}/grub -+%ifarch x86_64 -+/sbin/grub-efi -+%endif -+ -+%changelog -+* Mon Nov 05 2007 Peter Jones pjones@redhat.com - 0.97-20 -+- Add EFI support from Intel on x86_64 -+ -+* Thu Sep 20 2007 Peter Jones pjones@redhat.com - 0.97-19 -+- Fix dmraid detection on Intel (isw) controllers in grub-install . -+ -+* Wed Aug 22 2007 Peter Jones pjones@redhat.com - 0.97-18 -+- Fix license tag. -+ -+* Mon Aug 20 2007 Peter Jones pjones@redhat.com - 0.97-17 -+- Use --build-id=none instead of stripping out the build-id notes in the -+ first and second stage loaders. -+ -+* Tue Aug 7 2007 Peter Jones pjones@redhat.com - 0.97-16 -+- Add ext[23] large inode support (patch from Eric Sandeen) -+- Fix auto* breakage that happened when we switched from autoreconf to autoconf -+- Move to original tarball + patch generated from git -+ -+* Mon Jul 16 2007 Peter Jones pjones@redhat.com - 0.97-15 -+- Support booting from GPT -+ -+* Fri Feb 23 2007 Bill Nottingham notting@redhat.com - 0.97-14 -+- fix scriplet errors when installed with --nodocs -+- coax grub into building (-ltinfo, autoconf instead of autoreconf) -+ -+* Sun Oct 01 2006 Jesse Keating jkeating@redhat.com - 0.97-13 -+- rebuilt for unwind info generation, broken in gcc-4.1.1-21 -+ -+* Thu Sep 21 2006 Peter Jones pjones@redhat.com - 0.97-12 -+- Reenable patch 505, which fixes #116311 -+ -+* Tue Aug 15 2006 Peter Jones pjones@redhat.com - 0.97-11 -+- Disable patch 505 (#164497) -+ -+* Wed Aug 2 2006 Peter Jones pjones@redhat.com - 0.97-10 -+- Fix grub-install for multipath -+ -+* Wed Jul 12 2006 Jesse Keating jkeating@redhat.com - 0.97-9.1 -+- rebuild -+ -+* Fri Jul 7 2006 Peter Jones pjones@redhat.com - 0.97-9 -+- fix broken error reporting from helper functions -+ -+* Mon Jun 12 2006 Peter Jones pjones@redhat.com - 0.97-8 -+- Fix BIOS keyboard handler to use extended keyboard interrupts, so the -+ Mac Mini works. -+ -+* Mon Jun 5 2006 Jesse Keating jkeating@redhat.com - 0.97-7 -+- Added BuildRequires on a 32bit library -+ -+* Sat May 27 2006 Peter Jones pjones@redhat.com - 0.97-6 -+- Fix mactel keyboard problems, patch from Juergen Keil, forwarded by Linus. -+ -+* Mon Mar 13 2006 Peter Jones pjones@redhat.com - 0.97-5 -+- Fix merge error for "bootonce" patch (broken in 0.95->0.97 update) -+- Get rid of the 0.97 "default" stuff, since it conflicts with our working -+ method. -+ -+* Mon Mar 9 2006 Peter Jones pjones@redhat.com - 0.97-4 -+- Fix running "install" multiple times on the same fs in the same invocation -+ of grub. (bz #158426 , patch from lxo@redhat.com) -+ -+* Mon Feb 13 2006 Peter Jones pjones@redhat.com - 0.97-3 -+- fix partition names on dmraid -+ -+* Tue Feb 07 2006 Jesse Keating jkeating@redhat.com - 0.97-2.1 -+- rebuilt for new gcc4.1 snapshot and glibc changes -+ -+* Fri Jan 13 2006 Peter Jones pjones@redhat.com - 0.97-2 -+- add dmraid support -+ -+* Wed Dec 14 2005 Peter Jones pjones@redhat.com - 0.97-1 -+- update to grub 0.97 -+ -+* Mon Dec 5 2005 Peter Jones pjones@redhat.com - 0.95-17 -+- fix configure conftest.c bugs -+- add -Wno-unused to defeat gcc41 "unused" checking when there are aliases. -+ -+* Mon Aug 1 2005 Peter Jones pjones@redhat.com - 0.95-16 -+- minor fix to the --recheck fix. -+ -+* Mon Jul 25 2005 Peter Jones pjones@redhat.com 0.95-15 -+- Make "grub-install --recheck" warn the user about how bad it is, -+ and keep a backup file, which it reverts to upon detecting some errors. -+ -+* Wed Jul 6 2005 Peter Jones pjones@redhat.com 0.95-14 -+- Fix changelog to be UTF-8 -+ -+* Thu May 19 2005 Peter Jones pjones@redhat.com 0.95-13 -+- Make the spec work with gcc3 and gcc4, so people can test on existing -+ installations. -+- don't treat i2o like a cciss device, since its partition names aren't done -+ that way. (#158158) -+ -+* Wed Mar 16 2005 Peter Jones pjones@redhat.com 0.95-12 -+- Make installing on a partition work again when not using raid -+ -+* Thu Mar 3 2005 Peter Jones pjones@redhat.com 0.95-11 -+- Make it build with gcc4 -+ -+* Sun Feb 20 2005 Peter Jones pjones@redhat.com 0.95-10 -+- Always install in MBR for raid1 /boot/ -+ -+* Sun Feb 20 2005 Peter Jones pjones@redhat.com 0.95-9 -+- Always use full path for mdadm in grub-install -+ -+* Tue Feb 8 2005 Peter Jones pjones@redhat.com 0.95-8 -+- Mark the simulation stack executable -+- Eliminate the use of inline functions in stage2/builtins.c -+ -+* Wed Jan 11 2005 Peter Jones pjones@redhat.com 0.95-7 -+- Make grub ignore everything before the XPM header in the splash image, -+ fixing #143879 -+- If the boot splash image is missing, use console mode instead -+ of graphics mode. -+- Don't print out errors using the graphics terminal code if we're not -+ actually in graphics mode. -+ -+* Mon Jan 3 2005 Peter Jones pjones@redhat.com 0.95-6 -+- reworked much of how the RAID1 support in grub-install works. This version -+ does not require all the devices in the raid to be listed in device.map, -+ as long as you specify a physical device or partition rather than an md -+ device. It should also work with a windows dual-boot on the first partition. -+ -+* Fri Dec 17 2004 Peter Jones pjones@redhat.com 0.95-5 -+- added support for RAID1 devices to grub-install, partly based on a -+ patch from David Knierim. (#114690) -+ -+* Tue Nov 30 2004 Jeremy Katz katzj@redhat.com 0.95-4 -+- add patch from upstream CVS to handle sparse files on ext[23] -+- make geometry detection a little bit more robust/correct -+- use O_DIRECT when reading/writing from devices. use aligned buffers as -+ needed for read/write (#125808) -+- actually apply the i2o patch -+- detect cciss/cpqarray devices better (#123249) -+ -+* Thu Sep 30 2004 Jeremy Katz katzj@redhat.com - 0.95-3 -+- don't act on the keypress for the menu (#134029) -+ -+* Mon Jun 28 2004 Jeremy Katz katzj@redhat.com - 0.95-2 -+- add patch from Nicholas Miell to make hiddenmenu work more -+ nicely with splashimage mode (#126764) -+ -+* Fri Jun 18 2004 Jeremy Katz katzj@redhat.com - 0.95-1 -+- update to 0.95 -+- drop emd patch, E-MD isn't making forward progress upstream -+- fix static build for x86_64 (#121095) -+ -+* Tue Jun 15 2004 Elliot Lee sopwith@redhat.com -+- rebuilt -+ -+* Wed Jun 9 2004 Jeremy Katz katzj@redhat.com -+- require system-logos (#120837) -+ -+* Fri Jun 4 2004 Jeremy Katz katzj@redhat.com -+- buildrequire automake (#125326) -+ -+* Thu May 06 2004 Warren Togami wtogami@redhat.com - 0.94-5 -+- i2o patch from Markus Lidel -+ -+* Wed Apr 14 2004 Jeremy Katz katzj@redhat.com - 0.94-4 -+- read geometry off of the disk since HDIO_GETGEO doesn't actually -+ return correct data with a 2.6 kernel -+ -+* Fri Mar 12 2004 Jeremy Katz katzj@redhat.com -+- add texinfo buildrequires (#118146) -+ -+* Wed Feb 25 2004 Jeremy Katz katzj@redhat.com 0.94-3 -+- don't use initrd_max_address -+ -+* Fri Feb 13 2004 Elliot Lee sopwith@redhat.com 0.94-2 -+- rebuilt -+ -+* Thu Feb 12 2004 Jeremy Katz katzj@redhat.com 0.94-1 -+- update to 0.94, patch merging and updating as necessary -+ -+* Sat Jan 3 2004 Jeremy Katz katzj@redhat.com 0.93-8 -+- new bootonce patch from Padraig Brady so that you don't lose -+ the old default (#112775) -+ -+* Mon Nov 24 2003 Jeremy Katz katzj@redhat.com -+- add ncurses-devel as a buildrequires (#110732) -+ -+* Tue Oct 14 2003 Jeremy Katz katzj@redhat.com 0.93-7 -+- rebuild -+ -+* Wed Jul 2 2003 Jeremy Katz katzj@redhat.com -+- Requires: /usr/bin/cmp (#98325) -+ -+* Thu May 22 2003 Jeremy Katz katzj@redhat.com 0.93-6 -+- add patch from upstream to fix build with gcc 3.3 -+ -+* Wed Apr 2 2003 Jeremy Katz katzj@redhat.com 0.93-5 -+- add patch to fix support for serial terminfo (#85595) -+ -+* Wed Jan 22 2003 Tim Powers timp@redhat.com -+- rebuilt -+ -+* Fri Jan 17 2003 Jeremy Katz katzj@redhat.com 0.93-3 -+- add patch from HJ Lu to support large disks (#80980, #63848) -+- add patch to make message when ending edit clearer (#53846) -+ -+* Sun Dec 29 2002 Jeremy Katz katzj@redhat.com 0.93-2 -+- add a patch to reset the terminal type to console before doing 'boot' from -+ the command line (#61069) -+ -+* Sat Dec 28 2002 Jeremy Katz katzj@redhat.com 0.93-1 -+- update to 0.93 -+- update configfile patch -+- graphics patch rework to fit in as a terminal type as present in 0.93 -+- use CFLAGS="-Os -g" -+- patch configure.in to allow building if host_cpu=x86_64, include -m32 in -+ CFLAGS if building on x86_64 -+- link glibc static on x86_64 to not require glibc32 -+- include multiboot info pages -+- drop obsolete patches, reorder remaining patches into some semblance of order -+ -+* Thu Sep 5 2002 Jeremy Katz katzj@redhat.com 0.92-7 -+- splashscreen is in redhat-logos now -+ -+* Tue Sep 3 2002 Jeremy Katz katzj@redhat.com 0.92-6 -+- update splashscreen again -+ -+* Mon Sep 2 2002 Jeremy Katz katzj@redhat.com 0.92-5 -+- update splashscreen -+ -+* Fri Jun 21 2002 Tim Powers timp@redhat.com 0.92-4 -+- automated rebuild -+ -+* Thu May 23 2002 Tim Powers timp@redhat.com 0.92-3 -+- automated rebuild -+ -+* Fri May 3 2002 Jeremy Katz katzj@redhat.com 0.92-2 -+- add patch from Grant Edwards to make vga16 + serial happier (#63491) -+ -+* Wed May 1 2002 Jeremy Katz katzj@redhat.com 0.92-1 -+- update to 0.92 -+- back to autoreconf -+- make it work with automake 1.6/autoconf 2.53 -+- use "-falign-jumps=1 -falign-loops=1 -falign-functions=1" instead of -+ "-malign-jumps=1 -malign-loops=1 -malign-functions=1" to not use -+ deprecated gcc options -+ -+* Tue Apr 9 2002 Jeremy Katz katzj@redhat.com 0.91-4 -+- new splash screen -+ -+* Fri Mar 8 2002 Jeremy Katz katzj@redhat.com 0.91-3 -+- include patch from Denis Kitzmen to fix typo causing several options to -+ never be defined (in upstream CVS) -+- include patch from upstream CVS to make displaymem always use hex for -+ consistency -+- add patch from GRUB mailing list from Keir Fraser to add a --once flag to -+ savedefault function so that you can have the equivalent of lilo -R -+ functionality (use 'savedefault --default=N --once' from the grub shell) -+- back to autoconf -+ -+* Sun Jan 27 2002 Jeremy Katz katzj@redhat.com -+- change to use $grubdir instead of /boot/grub in the symlink patch (#58771) -+ -+* Fri Jan 25 2002 Jeremy Katz katzj@redhat.com 0.91-2 -+- don't ifdef out the auto memory passing, use the configure flag instead -+- add a patch so that grub respects mem= from the kernel command line when -+ deciding where to place the initrd (#52558) -+ -+* Mon Jan 21 2002 Jeremy Katz katzj@redhat.com 0.91-1 -+- update to 0.91 final -+- add documentation on splashimage param (#51609) -+ -+* Wed Jan 2 2002 Jeremy Katz katzj@redhat.com 0.91-0.20020102cvs -+- update to current CVS snapshot to fix some of the hangs on boot related -+ to LBA probing (#57503, #55868, and others) -+ -+* Fri Dec 21 2001 Erik Troan ewt@redhat.com 0.90-14 -+- fixed append patch to not require arguments to begin with -+- changed to autoreconf from autoconf -+ -+* Wed Oct 31 2001 Jeremy Katz katzj@redhat.com 0.90-13 -+- include additional patch from Erich to add sync calls in grub-install to -+ work around updated images not being synced to disk -+- fix segfault in grub shell if 'password --md5' is used without specifying -+ a password (#55008) -+ -+* Fri Oct 26 2001 Jeremy Katz katzj@redhat.com 0.90-12 -+- Include Erich Boleyn erich@uruk.org's patch to disconnect from the -+ BIOS after APM operations. Should fix #54375 -+ -+* Wed Sep 12 2001 Erik Troan ewt@redhat.com -+- added patch for 'a' option in grub boot menu -+ -+* Wed Sep 5 2001 Jeremy Katz katzj@redhat.com 0.90-11 -+- grub-install: if /boot/grub/grub.conf doesn't exist but /boot/grub/menu.lst -+ does, create a symlink -+ -+* Fri Aug 24 2001 Jeremy Katz katzj@redhat.com -+- pull in patch from upstream CVS to fix md5crypt in grub shell (#52220) -+- use mktemp in grub-install to avoid tmp races -+ -+* Fri Aug 3 2001 Jeremy Katz katzj@redhat.com -+- link curses statically (#49519) -+ -+* Thu Aug 2 2001 Jeremy Katz katzj@redhat.com -+- fix segfault with using the serial device before initialization (#50219) -+ -+* Thu Jul 19 2001 Jeremy Katz katzj@redhat.com -+- add --copy-only flag to grub-install -+ -+* Thu Jul 19 2001 Jeremy Katz katzj@redhat.com -+- copy files in grub-install prior to device probe -+ -+* Thu Jul 19 2001 Jeremy Katz katzj@redhat.com -+- original images don't go in /boot and then grub-install does the right -+ thing -+ -+* Thu Jul 19 2001 Jeremy Katz katzj@redhat.com -+- fix the previous patch -+- put the password prompt in the proper location -+ -+* Thu Jul 19 2001 Jeremy Katz katzj@redhat.com -+- reset the screen when the countdown is cancelled so text will disappear -+ in vga16 mode -+ -+* Mon Jul 16 2001 Jeremy Katz katzj@redhat.com -+- change configfile defaults to grub.conf -+ -+* Sun Jul 15 2001 Jeremy Katz katzj@redhat.com -+- updated to grub 0.90 final -+ -+* Fri Jul 6 2001 Matt Wilson msw@redhat.com -+- modifed splash screen to a nice shade of blue -+ -+* Tue Jul 3 2001 Matt Wilson msw@redhat.com -+- added a first cut at a splash screen -+ -+* Sun Jul 1 2001 Nalin Dahyabhai nalin@redhat.com -+- fix datadir mismatch between build and install phases -+ -+* Mon Jun 25 2001 Jeremy Katz katzj@redhat.com -+- update to current CVS -+- forward port VGA16 patch from Paulo César Pereira de -+ Andrade pcpa@conectiva.com.br -+- add patch for cciss, ida, and rd raid controllers -+- don't pass mem= to the kernel -+ -+* Wed May 23 2001 Erik Troan ewt@redhat.com -+- initial build for Red Hat -diff --git a/grub/.gitignore b/grub/.gitignore -new file mode 100644 -index 0000000..5d89f6d ---- /dev/null -+++ b/grub/.gitignore -@@ -0,0 +1,2 @@ -+Makefile.in -+.deps -diff --git a/grub/Makefile.am b/grub/Makefile.am -index 7eb2eaa..d4353f7 100644 ---- a/grub/Makefile.am -+++ b/grub/Makefile.am -@@ -15,5 +15,5 @@ AM_CPPFLAGS = -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ - - AM_CFLAGS = $(GRUB_CFLAGS) - --grub_SOURCES = main.c asmstub.c -+grub_SOURCES = main.c asmstub.c efitftp.c - grub_LDADD = ../stage2/libgrub.a ../lib/libcommon.a $(GRUB_LIBS) -diff --git a/grub/Makefile.in b/grub/Makefile.in -deleted file mode 100644 -index 136c38f..0000000 ---- a/grub/Makefile.in -+++ /dev/null -@@ -1,445 +0,0 @@ --# Makefile.in generated by automake 1.9.4 from Makefile.am. --# @configure_input@ -- --# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004 Free Software Foundation, Inc. --# This Makefile.in is free software; the Free Software Foundation --# gives unlimited permission to copy and/or distribute it, --# with or without modifications, as long as this notice is preserved. -- --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY, to the extent permitted by law; without --# even the implied warranty of MERCHANTABILITY or FITNESS FOR A --# PARTICULAR PURPOSE. -- --@SET_MAKE@ -- --SOURCES = $(grub_SOURCES) -- --srcdir = @srcdir@ --top_srcdir = @top_srcdir@ --VPATH = @srcdir@ --pkgdatadir = $(datadir)/@PACKAGE@ --pkglibdir = $(libdir)/@PACKAGE@ --pkgincludedir = $(includedir)/@PACKAGE@ --top_builddir = .. --am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd --INSTALL = @INSTALL@ --install_sh_DATA = $(install_sh) -c -m 644 --install_sh_PROGRAM = $(install_sh) -c --install_sh_SCRIPT = $(install_sh) -c --INSTALL_HEADER = $(INSTALL_DATA) --transform = $(program_transform_name) --NORMAL_INSTALL = : --PRE_INSTALL = : --POST_INSTALL = : --NORMAL_UNINSTALL = : --PRE_UNINSTALL = : --POST_UNINSTALL = : --build_triplet = @build@ --host_triplet = @host@ --sbin_PROGRAMS = grub$(EXEEXT) --subdir = grub --DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in --ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 --am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ -- $(top_srcdir)/configure.ac --am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ -- $(ACLOCAL_M4) --mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs --CONFIG_HEADER = $(top_builddir)/config.h --CONFIG_CLEAN_FILES = --am__installdirs = "$(DESTDIR)$(sbindir)" --sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM) --PROGRAMS = $(sbin_PROGRAMS) --am_grub_OBJECTS = main.$(OBJEXT) asmstub.$(OBJEXT) --grub_OBJECTS = $(am_grub_OBJECTS) --am__DEPENDENCIES_1 = --grub_DEPENDENCIES = ../stage2/libgrub.a ../lib/libcommon.a \ -- $(am__DEPENDENCIES_1) --DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) --depcomp = $(SHELL) $(top_srcdir)/depcomp --am__depfiles_maybe = depfiles --COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ -- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) --CCLD = $(CC) --LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ --SOURCES = $(grub_SOURCES) --DIST_SOURCES = $(grub_SOURCES) --ETAGS = etags --CTAGS = ctags --DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) --ACLOCAL = @ACLOCAL@ --AMDEP_FALSE = @AMDEP_FALSE@ --AMDEP_TRUE = @AMDEP_TRUE@ --AMTAR = @AMTAR@ --AUTOCONF = @AUTOCONF@ --AUTOHEADER = @AUTOHEADER@ --AUTOMAKE = @AUTOMAKE@ --AWK = @AWK@ --BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ --BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ --CC = @CC@ --CCAS = @CCAS@ --CCASFLAGS = @CCASFLAGS@ --CCDEPMODE = @CCDEPMODE@ --CFLAGS = @CFLAGS@ --CPP = @CPP@ --CPPFLAGS = @CPPFLAGS@ --CYGPATH_W = @CYGPATH_W@ --DEFS = @DEFS@ --DEPDIR = @DEPDIR@ --DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ --DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ --ECHO_C = @ECHO_C@ --ECHO_N = @ECHO_N@ --ECHO_T = @ECHO_T@ --EGREP = @EGREP@ --EXEEXT = @EXEEXT@ --FSYS_CFLAGS = @FSYS_CFLAGS@ --GRUB_CFLAGS = @GRUB_CFLAGS@ --GRUB_LIBS = @GRUB_LIBS@ --HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ --HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ --INSTALL_DATA = @INSTALL_DATA@ --INSTALL_PROGRAM = @INSTALL_PROGRAM@ --INSTALL_SCRIPT = @INSTALL_SCRIPT@ --INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ --LDFLAGS = @LDFLAGS@ --LIBOBJS = @LIBOBJS@ --LIBS = @LIBS@ --LTLIBOBJS = @LTLIBOBJS@ --MAINT = @MAINT@ --MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ --MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ --MAKEINFO = @MAKEINFO@ --NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ --NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ --NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ --NET_CFLAGS = @NET_CFLAGS@ --NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ --OBJCOPY = @OBJCOPY@ --OBJEXT = @OBJEXT@ --PACKAGE = @PACKAGE@ --PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ --PACKAGE_NAME = @PACKAGE_NAME@ --PACKAGE_STRING = @PACKAGE_STRING@ --PACKAGE_TARNAME = @PACKAGE_TARNAME@ --PACKAGE_VERSION = @PACKAGE_VERSION@ --PATH_SEPARATOR = @PATH_SEPARATOR@ --PERL = @PERL@ --RANLIB = @RANLIB@ --SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ --SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ --SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ --SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ --SET_MAKE = @SET_MAKE@ --SHELL = @SHELL@ --STAGE1_CFLAGS = @STAGE1_CFLAGS@ --STAGE2_CFLAGS = @STAGE2_CFLAGS@ --STRIP = @STRIP@ --VERSION = @VERSION@ --ac_ct_CC = @ac_ct_CC@ --ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ --ac_ct_RANLIB = @ac_ct_RANLIB@ --ac_ct_STRIP = @ac_ct_STRIP@ --am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ --am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ --am__include = @am__include@ --am__leading_dot = @am__leading_dot@ --am__quote = @am__quote@ --am__tar = @am__tar@ --am__untar = @am__untar@ --bindir = @bindir@ --build = @build@ --build_alias = @build_alias@ --build_cpu = @build_cpu@ --build_os = @build_os@ --build_vendor = @build_vendor@ --datadir = @datadir@ --exec_prefix = @exec_prefix@ --host = @host@ --host_alias = @host_alias@ --host_cpu = @host_cpu@ --host_os = @host_os@ --host_vendor = @host_vendor@ --includedir = @includedir@ --infodir = @infodir@ --install_sh = @install_sh@ --libdir = @libdir@ --libexecdir = @libexecdir@ --localstatedir = @localstatedir@ --mandir = @mandir@ --mkdir_p = @mkdir_p@ --oldincludedir = @oldincludedir@ --prefix = @prefix@ --program_transform_name = @program_transform_name@ --sbindir = @sbindir@ --sharedstatedir = @sharedstatedir@ --sysconfdir = @sysconfdir@ --target_alias = @target_alias@ --@SERIAL_SPEED_SIMULATION_FALSE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1 --@SERIAL_SPEED_SIMULATION_TRUE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1 -DSIMULATE_SLOWNESS_OF_SERIAL=1 --AM_CPPFLAGS = -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ -- -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \ -- -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \ -- -DUSE_MD5_PASSWORDS=1 -DSUPPORT_HERCULES=1 \ -- $(SERIAL_FLAGS) -I$(top_srcdir)/stage2 \ -- -I$(top_srcdir)/stage1 -I$(top_srcdir)/lib -- --AM_CFLAGS = $(GRUB_CFLAGS) --grub_SOURCES = main.c asmstub.c --grub_LDADD = ../stage2/libgrub.a ../lib/libcommon.a $(GRUB_LIBS) --all: all-am -- --.SUFFIXES: --.SUFFIXES: .c .o .obj --$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) -- @for dep in $?; do \ -- case '$(am__configure_deps)' in \ -- *$$dep*) \ -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ -- && exit 0; \ -- exit 1;; \ -- esac; \ -- done; \ -- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu grub/Makefile'; \ -- cd $(top_srcdir) && \ -- $(AUTOMAKE) --gnu grub/Makefile --.PRECIOUS: Makefile --Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -- @case '$?' in \ -- *config.status*) \ -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ -- *) \ -- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ -- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ -- esac; -- --$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -- --$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh --$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh --install-sbinPROGRAMS: $(sbin_PROGRAMS) -- @$(NORMAL_INSTALL) -- test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)" -- @list='$(sbin_PROGRAMS)'; for p in $$list; do \ -- p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ -- if test -f $$p \ -- ; then \ -- f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ -- echo " $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \ -- $(INSTALL_PROGRAM_ENV) $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \ -- else :; fi; \ -- done -- --uninstall-sbinPROGRAMS: -- @$(NORMAL_UNINSTALL) -- @list='$(sbin_PROGRAMS)'; for p in $$list; do \ -- f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ -- echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \ -- rm -f "$(DESTDIR)$(sbindir)/$$f"; \ -- done -- --clean-sbinPROGRAMS: -- -test -z "$(sbin_PROGRAMS)" || rm -f $(sbin_PROGRAMS) --grub$(EXEEXT): $(grub_OBJECTS) $(grub_DEPENDENCIES) -- @rm -f grub$(EXEEXT) -- $(LINK) $(grub_LDFLAGS) $(grub_OBJECTS) $(grub_LDADD) $(LIBS) -- --mostlyclean-compile: -- -rm -f *.$(OBJEXT) -- --distclean-compile: -- -rm -f *.tab.c -- --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/asmstub.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ -- --.c.o: --@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(COMPILE) -c $< -- --.c.obj: --@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` --uninstall-info-am: -- --ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- mkid -fID $$unique --tags: TAGS -- --TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ -- test -n "$$unique" || unique=$$empty_fix; \ -- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -- $$tags $$unique; \ -- fi --ctags: CTAGS --CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- test -z "$(CTAGS_ARGS)$$tags$$unique" \ -- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ -- $$tags $$unique -- --GTAGS: -- here=`$(am__cd) $(top_builddir) && pwd` \ -- && cd $(top_srcdir) \ -- && gtags -i $(GTAGS_ARGS) $$here -- --distclean-tags: -- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -- --distdir: $(DISTFILES) -- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ -- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ -- list='$(DISTFILES)'; for file in $$list; do \ -- case $$file in \ -- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ -- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ -- esac; \ -- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ -- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ -- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ -- dir="/$$dir"; \ -- $(mkdir_p) "$(distdir)$$dir"; \ -- else \ -- dir=''; \ -- fi; \ -- if test -d $$d/$$file; then \ -- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ -- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ -- fi; \ -- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ -- else \ -- test -f $(distdir)/$$file \ -- || cp -p $$d/$$file $(distdir)/$$file \ -- || exit 1; \ -- fi; \ -- done --check-am: all-am --check: check-am --all-am: Makefile $(PROGRAMS) --installdirs: -- for dir in "$(DESTDIR)$(sbindir)"; do \ -- test -z "$$dir" || $(mkdir_p) "$$dir"; \ -- done --install: install-am --install-exec: install-exec-am --install-data: install-data-am --uninstall: uninstall-am -- --install-am: all-am -- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -- --installcheck: installcheck-am --install-strip: -- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ -- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ -- `test -z '$(STRIP)' || \ -- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install --mostlyclean-generic: -- --clean-generic: -- --distclean-generic: -- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -- --maintainer-clean-generic: -- @echo "This command is intended for maintainers to use" -- @echo "it deletes files that may require special tools to rebuild." --clean: clean-am -- --clean-am: clean-generic clean-sbinPROGRAMS mostlyclean-am -- --distclean: distclean-am -- -rm -rf ./$(DEPDIR) -- -rm -f Makefile --distclean-am: clean-am distclean-compile distclean-generic \ -- distclean-tags -- --dvi: dvi-am -- --dvi-am: -- --html: html-am -- --info: info-am -- --info-am: -- --install-data-am: -- --install-exec-am: install-sbinPROGRAMS -- --install-info: install-info-am -- --install-man: -- --installcheck-am: -- --maintainer-clean: maintainer-clean-am -- -rm -rf ./$(DEPDIR) -- -rm -f Makefile --maintainer-clean-am: distclean-am maintainer-clean-generic -- --mostlyclean: mostlyclean-am -- --mostlyclean-am: mostlyclean-compile mostlyclean-generic -- --pdf: pdf-am -- --pdf-am: -- --ps: ps-am -- --ps-am: -- --uninstall-am: uninstall-info-am uninstall-sbinPROGRAMS -- --.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ -- clean-sbinPROGRAMS ctags distclean distclean-compile \ -- distclean-generic distclean-tags distdir dvi dvi-am html \ -- html-am info info-am install install-am install-data \ -- install-data-am install-exec install-exec-am install-info \ -- install-info-am install-man install-sbinPROGRAMS install-strip \ -- installcheck installcheck-am installdirs maintainer-clean \ -- maintainer-clean-generic mostlyclean mostlyclean-compile \ -- mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ -- uninstall-am uninstall-info-am uninstall-sbinPROGRAMS -- --# Tell versions [3.59,3.63) of GNU make to not export all variables. --# Otherwise a system limit (for SysV at least) may be exceeded. --.NOEXPORT: -diff --git a/grub/asmstub.c b/grub/asmstub.c -index ab95b4b..818be75 100644 ---- a/grub/asmstub.c -+++ b/grub/asmstub.c -@@ -42,6 +42,7 @@ int grub_stage2 (void); - #include <sys/time.h> - #include <termios.h> - #include <signal.h> -+#include <sys/mman.h> - - #ifdef __linux__ - # include <sys/ioctl.h> /* ioctl */ -@@ -53,6 +54,9 @@ int grub_stage2 (void); - # ifndef BLKFLSBUF - # define BLKFLSBUF _IO (0x12,97) /* flush buffer cache */ - # endif /* ! BLKFLSBUF */ -+# ifndef O_DIRECT -+# define O_DIRECT 040000 -+# endif /* ! O_DIRECT */ - #endif /* __linux__ */ - - /* We want to prevent any circularararity in our stubs, as well as -@@ -71,7 +75,7 @@ unsigned long install_partition = 0x20000; - unsigned long boot_drive = 0; - int saved_entryno = 0; - char version_string[] = VERSION; --char config_file[128] = "/boot/grub/menu.lst"; /* FIXME: arbitrary */ -+char config_file[128] = "/boot/grub/grub.conf"; /* FIXME: arbitrary */ - unsigned long linux_text_len = 0; - char *linux_data_tmp_addr = 0; - char *linux_data_real_addr = 0; -@@ -79,7 +83,7 @@ unsigned short io_map[IO_MAP_SIZE]; - struct apm_info apm_bios_info; - - /* Emulation requirements. */ --char *grub_scratch_mem = 0; -+void *grub_scratch_mem = 0; - - struct geometry *disks = 0; - -@@ -103,14 +107,73 @@ static char *serial_device = 0; - static unsigned int serial_speed; - #endif /* SIMULATE_SLOWNESS_OF_SERIAL */ - -+#ifdef GRUB_UTIL -+int get_sector_size (int drive) -+{ -+ return 0x200; -+} -+int get_sector_bits (int drive) -+{ -+ return 9; -+} -+#endif /* GRUB_UTIL */ -+ -+/* This allocates page-aligned storage of the specified size, which must be -+ * a multiple of the page size as determined by calling sysconf(_SC_PAGESIZE) -+ */ -+#ifdef __linux__ -+static void * -+grub_mmap_alloc(size_t len) -+{ -+ int mmap_flags = MAP_ANONYMOUS|MAP_PRIVATE|MAP_EXECUTABLE; -+ -+#ifdef MAP_32BIT -+ mmap_flags |= MAP_32BIT; -+#endif -+ /* Mark the simulated stack executable, as GCC uses stack trampolines -+ * to implement nested functions. */ -+ return mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, mmap_flags, -1, 0); -+} -+#else /* !defined(__linux__) */ -+static void * -+grub_mmap_alloc(size_t len) -+{ -+ int fd = 0, offset = 0, ret = 0; -+ void *pa = MAP_FAILED; -+ char template[] = "/tmp/grub_mmap_alloc_XXXXXX"; -+ errno_t e; -+ -+ fd = mkstemp(template); -+ if (fd < 0) -+ return pa; -+ -+ unlink(template); -+ -+ ret = ftruncate(fd, len); -+ if (ret < 0) -+ return pa; -+ -+ /* Mark the simulated stack executable, as GCC uses stack trampolines -+ * to implement nested functions. */ -+ pa = mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, -+ MAP_PRIVATE|MAP_EXECUTABLE, fd, offset); -+ -+ e = errno; -+ close(fd); -+ errno = e; -+ return pa; -+} -+#endif /* defined(__linux__) */ -+ - /* The main entry point into this mess. */ - int - grub_stage2 (void) - { - /* These need to be static, because they survive our stack transitions. */ - static int status = 0; -- static char *realstack; -- char *scratch, *simstack; -+ static void *realstack; -+ void *simstack_alloc_base, *simstack; -+ size_t simstack_size, page_size; - int i; - - auto void doit (void); -@@ -120,8 +183,13 @@ grub_stage2 (void) - void doit (void) - { - /* Make sure our stack lives in the simulated memory area. */ -+#ifdef __x86_64 -+ asm volatile ("movq %%rsp, %0\n\tmovq %1, %%rsp\n" -+ : "=&r" (realstack) : "r" (simstack)); -+#else - asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n" - : "=&r" (realstack) : "r" (simstack)); -+#endif - - /* Do a setjmp here for the stop command. */ - if (! setjmp (env_for_exit)) -@@ -138,13 +206,43 @@ grub_stage2 (void) - } - - /* Replace our stack before we use any local variables. */ -+#ifdef __x86_64 -+ asm volatile ("movq %0, %%rsp\n" : : "r" (realstack)); -+#else - asm volatile ("movl %0, %%esp\n" : : "r" (realstack)); -+#endif - } - - assert (grub_scratch_mem == 0); -- scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15); -- assert (scratch); -- grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4); -+ -+ /* Allocate enough pages for 0x100000 + EXTENDED_SIZE + 15, and -+ * make sure the memory is aligned to a multiple of the system's -+ * page size */ -+ page_size = sysconf (_SC_PAGESIZE); -+ simstack_size = ( 0x100000 + EXTENDED_MEMSIZE + 15); -+ if (simstack_size % page_size) -+ { -+ /* If we're not on a page_size boundary, round up to the next one */ -+ simstack_size &= ~(page_size-1); -+ simstack_size += page_size; -+ } -+ -+ /* Add one for a PROT_NONE boundary page at each end. */ -+ simstack_size += 2 * page_size; -+ -+ simstack_alloc_base = grub_mmap_alloc(simstack_size); -+ assert (simstack_alloc_base != MAP_FAILED); -+ -+ /* mark pages above and below our simstack area as innaccessable. -+ * If the implementation we're using doesn't support that, then the -+ * new protection modes are undefined. It's safe to just ignore -+ * them, though. It'd be nice if we knew that we'd get a SEGV for -+ * touching the area, but that's all. it'd be nice to have. */ -+ mprotect (simstack_alloc_base, page_size, PROT_NONE); -+ mprotect ((void *)((unsigned long)simstack_alloc_base + -+ simstack_size - page_size), page_size, PROT_NONE); -+ -+ grub_scratch_mem = (void *)((unsigned long)simstack_alloc_base + page_size); - - /* FIXME: simulate the memory holes using mprot, if available. */ - -@@ -217,7 +315,7 @@ grub_stage2 (void) - device_map = 0; - free (disks); - disks = 0; -- free (scratch); -+ munmap(simstack_alloc_base, simstack_size); - grub_scratch_mem = 0; - - if (serial_device) -@@ -699,6 +797,13 @@ console_getkey (void) - return console_translate_key (c); - } - -+/* returns modifier status */ -+int -+console_keystatus (void) -+{ -+ return 0; -+} -+ - /* returns packed values, LSB+1 is x, LSB is y */ - int - console_getxy (void) -@@ -766,7 +871,7 @@ get_diskinfo (int drive, struct geometry *geometry) - { - /* The unpartitioned device name: /dev/XdX */ - char *devname = device_map[drive]; -- char buf[512]; -+ char * buf, * buf_unaligned; - - if (! devname) - return -1; -@@ -777,13 +882,13 @@ get_diskinfo (int drive, struct geometry *geometry) - - /* Open read/write, or read-only if that failed. */ - if (! read_only) -- disks[drive].flags = open (devname, O_RDWR); -+ disks[drive].flags = open (devname, O_RDWR | O_DIRECT); - - if (disks[drive].flags == -1) - { - if (read_only || errno == EACCES || errno == EROFS || errno == EPERM) - { -- disks[drive].flags = open (devname, O_RDONLY); -+ disks[drive].flags = open (devname, O_RDONLY | O_DIRECT); - if (disks[drive].flags == -1) - { - assign_device_name (drive, 0); -@@ -797,6 +902,10 @@ get_diskinfo (int drive, struct geometry *geometry) - } - } - -+ buf_unaligned = malloc((512 * sizeof(char)) + 4095); -+ buf = (char *) (((unsigned long)buf_unaligned + 4096 - 1) & -+ (~(4096-1))); -+ - /* Attempt to read the first sector. */ - if (read (disks[drive].flags, buf, 512) != 512) - { -@@ -808,6 +917,7 @@ get_diskinfo (int drive, struct geometry *geometry) - - if (disks[drive].flags != -1) - get_drive_geometry (&disks[drive], device_map, drive); -+ free(buf_unaligned); - } - - if (disks[drive].flags == -1) -@@ -829,24 +939,34 @@ static int - nread (int fd, char *buf, size_t len) - { - int size = len; -+ char * buf_unaligned, * buff, * obuff; -+ int ret; -+ -+ buf_unaligned = malloc((len * sizeof(char)) + 4095); -+ obuff = buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) & -+ (~(4096-1))); -+ - - while (len) - { -- int ret = read (fd, buf, len); -+ ret = read (fd, buff, len); - - if (ret <= 0) - { - if (errno == EINTR) - continue; - else -- return ret; -+ break; - } - - len -= ret; -- buf += ret; -+ buff += ret; - } - -- return size; -+ if (!len) ret = size; -+ -+ buf = memcpy(buf, obuff, size); -+ return ret; - } - - /* Write LEN bytes from BUF to FD. Return less than or equal to zero if an -@@ -855,10 +975,18 @@ static int - nwrite (int fd, char *buf, size_t len) - { - int size = len; -+ char * buf_unaligned, * buff; -+ -+ buf_unaligned = malloc((len * sizeof(char)) + 4095); -+ buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) & -+ (~(4096-1))); - - while (len) - { -- int ret = write (fd, buf, len); -+ int ret; -+ -+ memcpy(buff, buf, len); -+ ret = write (fd, buff, len); - - if (ret <= 0) - { -@@ -946,20 +1074,20 @@ biosdisk (int subfunc, int drive, struct geometry *geometry, - _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo, - loff_t *, res, uint, wh); - -- offset = (loff_t) sector * (loff_t) SECTOR_SIZE; -+ offset = (loff_t) sector * (loff_t) get_sector_size(drive); - if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET)) - return -1; - } - #else - { -- off_t offset = (off_t) sector * (off_t) SECTOR_SIZE; -+ off_t offset = (off_t) sector * (off_t) get_sector_size(drive); - - if (lseek (fd, offset, SEEK_SET) != offset) - return -1; - } - #endif - -- buf = (char *) (segment << 4); -+ buf = (char *) (unsigned long) (segment << 4); - - switch (subfunc) - { -@@ -971,13 +1099,13 @@ biosdisk (int subfunc, int drive, struct geometry *geometry, - sectors that are read together with the MBR in one read. It - should only remap the MBR, so we split the read in two - parts. -jochen */ -- if (nread (fd, buf, SECTOR_SIZE) != SECTOR_SIZE) -+ if (nread (fd, buf, get_sector_size(drive)) != get_sector_size(drive)) - return -1; -- buf += SECTOR_SIZE; -+ buf += get_sector_size(drive); - nsec--; - } - #endif -- if (nread (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE) -+ if (nread (fd, buf, nsec * get_sector_size(drive)) != nsec * get_sector_size(drive)) - return -1; - break; - -@@ -987,10 +1115,10 @@ biosdisk (int subfunc, int drive, struct geometry *geometry, - grub_printf ("Write %d sectors starting from %d sector" - " to drive 0x%x (%s)\n", - nsec, sector, drive, device_map[drive]); -- hex_dump (buf, nsec * SECTOR_SIZE); -+ hex_dump (buf, nsec * get_sector_size(drive)); - } - if (! read_only) -- if (nwrite (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE) -+ if (nwrite (fd, buf, nsec * get_sector_size(drive)) != nsec * get_sector_size(drive)) - return -1; - break; - -@@ -1273,3 +1401,21 @@ hercules_setcursor (int on) - { - return 1; - } -+ -+int -+grub_load_linux (char *kernel, char *arg) -+{ -+ return 0; -+} -+ -+int -+grub_load_initrd (char *initrd) -+{ -+ return 0; -+} -+ -+int -+grub_chainloader (char *filename) -+{ -+ return 0; -+} -diff --git a/grub/efitftp.c b/grub/efitftp.c -new file mode 100644 -index 0000000..5355dec ---- /dev/null -+++ b/grub/efitftp.c -@@ -0,0 +1,34 @@ -+#include <shared.h> -+#include <filesys.h> -+ -+int efi_tftp_mount (void); -+int efi_tftp_read (char *buf, int len); -+int efi_tftp_dir (char *dirname); -+void efi_tftp_close (void); -+ -+int -+efi_tftp_mount (void) -+{ -+ grub_printf("non-efi efi_tftp_mount()\n"); -+ return 0; -+} -+ -+int -+efi_tftp_read (char *addr, int size) -+{ -+ grub_printf ("non-efi efi_tftp_read (0x%x, %d)\n", (long) addr, size); -+ return 0; -+} -+ -+int -+efi_tftp_dir (char *dirname) -+{ -+ grub_printf ("non-efi efi_ftp_dir (%s)\n", dirname); -+ return 0; -+} -+ -+void -+efi_tftp_close (void) -+{ -+ grub_printf ("non-efi efi_tftp_close ()\n"); -+} -diff --git a/grub/main.c b/grub/main.c -index dfe847e..6083641 100644 ---- a/grub/main.c -+++ b/grub/main.c -@@ -140,7 +140,7 @@ main (int argc, char **argv) - program_name = argv[0]; - default_boot_drive = boot_drive; - default_install_partition = install_partition; -- if (config_file) -+ if (config_file[0]) - default_config_file = config_file; - else - default_config_file = "NONE"; -diff --git a/lib/.gitignore b/lib/.gitignore -new file mode 100644 -index 0000000..5d89f6d ---- /dev/null -+++ b/lib/.gitignore -@@ -0,0 +1,2 @@ -+Makefile.in -+.deps -diff --git a/lib/Makefile.in b/lib/Makefile.in -deleted file mode 100644 -index 3dae206..0000000 ---- a/lib/Makefile.in -+++ /dev/null -@@ -1,416 +0,0 @@ --# Makefile.in generated by automake 1.9.4 from Makefile.am. --# @configure_input@ -- --# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004 Free Software Foundation, Inc. --# This Makefile.in is free software; the Free Software Foundation --# gives unlimited permission to copy and/or distribute it, --# with or without modifications, as long as this notice is preserved. -- --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY, to the extent permitted by law; without --# even the implied warranty of MERCHANTABILITY or FITNESS FOR A --# PARTICULAR PURPOSE. -- --@SET_MAKE@ -- --SOURCES = $(libcommon_a_SOURCES) -- --srcdir = @srcdir@ --top_srcdir = @top_srcdir@ --VPATH = @srcdir@ --pkgdatadir = $(datadir)/@PACKAGE@ --pkglibdir = $(libdir)/@PACKAGE@ --pkgincludedir = $(includedir)/@PACKAGE@ --top_builddir = .. --am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd --INSTALL = @INSTALL@ --install_sh_DATA = $(install_sh) -c -m 644 --install_sh_PROGRAM = $(install_sh) -c --install_sh_SCRIPT = $(install_sh) -c --INSTALL_HEADER = $(INSTALL_DATA) --transform = $(program_transform_name) --NORMAL_INSTALL = : --PRE_INSTALL = : --POST_INSTALL = : --NORMAL_UNINSTALL = : --PRE_UNINSTALL = : --POST_UNINSTALL = : --build_triplet = @build@ --host_triplet = @host@ --subdir = lib --DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in --ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 --am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ -- $(top_srcdir)/configure.ac --am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ -- $(ACLOCAL_M4) --mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs --CONFIG_HEADER = $(top_builddir)/config.h --CONFIG_CLEAN_FILES = --LIBRARIES = $(noinst_LIBRARIES) --AR = ar --ARFLAGS = cru --libcommon_a_AR = $(AR) $(ARFLAGS) --libcommon_a_LIBADD = --am_libcommon_a_OBJECTS = getopt.$(OBJEXT) getopt1.$(OBJEXT) \ -- device.$(OBJEXT) --libcommon_a_OBJECTS = $(am_libcommon_a_OBJECTS) --DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) --depcomp = $(SHELL) $(top_srcdir)/depcomp --am__depfiles_maybe = depfiles --COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ -- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) --CCLD = $(CC) --LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ --SOURCES = $(libcommon_a_SOURCES) --DIST_SOURCES = $(libcommon_a_SOURCES) --ETAGS = etags --CTAGS = ctags --DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) --ACLOCAL = @ACLOCAL@ --AMDEP_FALSE = @AMDEP_FALSE@ --AMDEP_TRUE = @AMDEP_TRUE@ --AMTAR = @AMTAR@ --AUTOCONF = @AUTOCONF@ --AUTOHEADER = @AUTOHEADER@ --AUTOMAKE = @AUTOMAKE@ --AWK = @AWK@ --BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ --BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ --CC = @CC@ --CCAS = @CCAS@ --CCASFLAGS = @CCASFLAGS@ --CCDEPMODE = @CCDEPMODE@ --CFLAGS = @CFLAGS@ --CPP = @CPP@ --CPPFLAGS = @CPPFLAGS@ --CYGPATH_W = @CYGPATH_W@ --DEFS = @DEFS@ --DEPDIR = @DEPDIR@ --DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ --DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ --ECHO_C = @ECHO_C@ --ECHO_N = @ECHO_N@ --ECHO_T = @ECHO_T@ --EGREP = @EGREP@ --EXEEXT = @EXEEXT@ --FSYS_CFLAGS = @FSYS_CFLAGS@ --GRUB_CFLAGS = @GRUB_CFLAGS@ --GRUB_LIBS = @GRUB_LIBS@ --HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ --HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ --INSTALL_DATA = @INSTALL_DATA@ --INSTALL_PROGRAM = @INSTALL_PROGRAM@ --INSTALL_SCRIPT = @INSTALL_SCRIPT@ --INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ --LDFLAGS = @LDFLAGS@ --LIBOBJS = @LIBOBJS@ --LIBS = @LIBS@ --LTLIBOBJS = @LTLIBOBJS@ --MAINT = @MAINT@ --MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ --MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ --MAKEINFO = @MAKEINFO@ --NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ --NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ --NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ --NET_CFLAGS = @NET_CFLAGS@ --NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ --OBJCOPY = @OBJCOPY@ --OBJEXT = @OBJEXT@ --PACKAGE = @PACKAGE@ --PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ --PACKAGE_NAME = @PACKAGE_NAME@ --PACKAGE_STRING = @PACKAGE_STRING@ --PACKAGE_TARNAME = @PACKAGE_TARNAME@ --PACKAGE_VERSION = @PACKAGE_VERSION@ --PATH_SEPARATOR = @PATH_SEPARATOR@ --PERL = @PERL@ --RANLIB = @RANLIB@ --SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ --SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ --SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ --SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ --SET_MAKE = @SET_MAKE@ --SHELL = @SHELL@ --STAGE1_CFLAGS = @STAGE1_CFLAGS@ --STAGE2_CFLAGS = @STAGE2_CFLAGS@ --STRIP = @STRIP@ --VERSION = @VERSION@ --ac_ct_CC = @ac_ct_CC@ --ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ --ac_ct_RANLIB = @ac_ct_RANLIB@ --ac_ct_STRIP = @ac_ct_STRIP@ --am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ --am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ --am__include = @am__include@ --am__leading_dot = @am__leading_dot@ --am__quote = @am__quote@ --am__tar = @am__tar@ --am__untar = @am__untar@ --bindir = @bindir@ --build = @build@ --build_alias = @build_alias@ --build_cpu = @build_cpu@ --build_os = @build_os@ --build_vendor = @build_vendor@ --datadir = @datadir@ --exec_prefix = @exec_prefix@ --host = @host@ --host_alias = @host_alias@ --host_cpu = @host_cpu@ --host_os = @host_os@ --host_vendor = @host_vendor@ --includedir = @includedir@ --infodir = @infodir@ --install_sh = @install_sh@ --libdir = @libdir@ --libexecdir = @libexecdir@ --localstatedir = @localstatedir@ --mandir = @mandir@ --mkdir_p = @mkdir_p@ --oldincludedir = @oldincludedir@ --prefix = @prefix@ --program_transform_name = @program_transform_name@ --sbindir = @sbindir@ --sharedstatedir = @sharedstatedir@ --sysconfdir = @sysconfdir@ --target_alias = @target_alias@ --noinst_LIBRARIES = libcommon.a --AM_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/stage2 \ -- -I$(top_srcdir)/stage1 -- --libcommon_a_SOURCES = getopt.c getopt1.c getopt.h device.c device.h --all: all-am -- --.SUFFIXES: --.SUFFIXES: .c .o .obj --$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) -- @for dep in $?; do \ -- case '$(am__configure_deps)' in \ -- *$$dep*) \ -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ -- && exit 0; \ -- exit 1;; \ -- esac; \ -- done; \ -- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu lib/Makefile'; \ -- cd $(top_srcdir) && \ -- $(AUTOMAKE) --gnu lib/Makefile --.PRECIOUS: Makefile --Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -- @case '$?' in \ -- *config.status*) \ -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ -- *) \ -- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ -- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ -- esac; -- --$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -- --$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh --$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -- --clean-noinstLIBRARIES: -- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) --libcommon.a: $(libcommon_a_OBJECTS) $(libcommon_a_DEPENDENCIES) -- -rm -f libcommon.a -- $(libcommon_a_AR) libcommon.a $(libcommon_a_OBJECTS) $(libcommon_a_LIBADD) -- $(RANLIB) libcommon.a -- --mostlyclean-compile: -- -rm -f *.$(OBJEXT) -- --distclean-compile: -- -rm -f *.tab.c -- --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/device.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@ -- --.c.o: --@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(COMPILE) -c $< -- --.c.obj: --@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` --uninstall-info-am: -- --ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- mkid -fID $$unique --tags: TAGS -- --TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ -- test -n "$$unique" || unique=$$empty_fix; \ -- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -- $$tags $$unique; \ -- fi --ctags: CTAGS --CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- test -z "$(CTAGS_ARGS)$$tags$$unique" \ -- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ -- $$tags $$unique -- --GTAGS: -- here=`$(am__cd) $(top_builddir) && pwd` \ -- && cd $(top_srcdir) \ -- && gtags -i $(GTAGS_ARGS) $$here -- --distclean-tags: -- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -- --distdir: $(DISTFILES) -- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ -- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ -- list='$(DISTFILES)'; for file in $$list; do \ -- case $$file in \ -- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ -- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ -- esac; \ -- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ -- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ -- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ -- dir="/$$dir"; \ -- $(mkdir_p) "$(distdir)$$dir"; \ -- else \ -- dir=''; \ -- fi; \ -- if test -d $$d/$$file; then \ -- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ -- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ -- fi; \ -- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ -- else \ -- test -f $(distdir)/$$file \ -- || cp -p $$d/$$file $(distdir)/$$file \ -- || exit 1; \ -- fi; \ -- done --check-am: all-am --check: check-am --all-am: Makefile $(LIBRARIES) --installdirs: --install: install-am --install-exec: install-exec-am --install-data: install-data-am --uninstall: uninstall-am -- --install-am: all-am -- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -- --installcheck: installcheck-am --install-strip: -- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ -- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ -- `test -z '$(STRIP)' || \ -- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install --mostlyclean-generic: -- --clean-generic: -- --distclean-generic: -- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -- --maintainer-clean-generic: -- @echo "This command is intended for maintainers to use" -- @echo "it deletes files that may require special tools to rebuild." --clean: clean-am -- --clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am -- --distclean: distclean-am -- -rm -rf ./$(DEPDIR) -- -rm -f Makefile --distclean-am: clean-am distclean-compile distclean-generic \ -- distclean-tags -- --dvi: dvi-am -- --dvi-am: -- --html: html-am -- --info: info-am -- --info-am: -- --install-data-am: -- --install-exec-am: -- --install-info: install-info-am -- --install-man: -- --installcheck-am: -- --maintainer-clean: maintainer-clean-am -- -rm -rf ./$(DEPDIR) -- -rm -f Makefile --maintainer-clean-am: distclean-am maintainer-clean-generic -- --mostlyclean: mostlyclean-am -- --mostlyclean-am: mostlyclean-compile mostlyclean-generic -- --pdf: pdf-am -- --pdf-am: -- --ps: ps-am -- --ps-am: -- --uninstall-am: uninstall-info-am -- --.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ -- clean-noinstLIBRARIES ctags distclean distclean-compile \ -- distclean-generic distclean-tags distdir dvi dvi-am html \ -- html-am info info-am install install-am install-data \ -- install-data-am install-exec install-exec-am install-info \ -- install-info-am install-man install-strip installcheck \ -- installcheck-am installdirs maintainer-clean \ -- maintainer-clean-generic mostlyclean mostlyclean-compile \ -- mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ -- uninstall-am uninstall-info-am -- --# Tell versions [3.59,3.63) of GNU make to not export all variables. --# Otherwise a system limit (for SysV at least) may be exceeded. --.NOEXPORT: -diff --git a/lib/device.c b/lib/device.c -index d0663b3..50540bc 100644 ---- a/lib/device.c -+++ b/lib/device.c -@@ -36,6 +36,9 @@ - #include <limits.h> - #include <stdarg.h> - -+#define SECTOR_SIZE 0x200 -+#define SECTOR_BITS 9 -+ - #ifdef __linux__ - # if !defined(__GLIBC__) || \ - ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))) -@@ -131,6 +134,152 @@ get_kfreebsd_version () - #include <shared.h> - #include <device.h> - -+#if defined(__linux__) -+/* The 2.6 kernel has removed all of the geometry handling for IDE drives -+ * that did fixups for LBA, etc. This means that the geometry we get -+ * with the ioctl has a good chance of being wrong. So, we get to -+ * also know about partition tables and try to read what the geometry -+ * is there. *grumble* Very closely based on code from cfdisk -+ */ -+static void get_kernel_geometry(int fd, long long *cyl, int *heads, int *sectors) { -+ struct hd_geometry hdg; -+ -+ if (ioctl (fd, HDIO_GETGEO, &hdg)) -+ return; -+ -+ *cyl = hdg.cylinders; -+ *heads = hdg.heads; -+ *sectors = hdg.sectors; -+} -+ -+struct partition { -+ unsigned char boot_ind; /* 0x80 - active */ -+ unsigned char head; /* starting head */ -+ unsigned char sector; /* starting sector */ -+ unsigned char cyl; /* starting cylinder */ -+ unsigned char sys_ind; /* What partition type */ -+ unsigned char end_head; /* end head */ -+ unsigned char end_sector; /* end sector */ -+ unsigned char end_cyl; /* end cylinder */ -+ unsigned char start4[4]; /* starting sector counting from 0 */ -+ unsigned char size4[4]; /* nr of sectors in partition */ -+}; -+ -+#define ALIGNMENT 2 -+typedef union { -+ struct { -+ unsigned char align[ALIGNMENT]; -+ unsigned char b[SECTOR_SIZE]; -+ } c; -+ struct { -+ unsigned char align[ALIGNMENT]; -+ unsigned char buffer[0x1BE]; -+ struct partition part[4]; -+ unsigned char magicflag[2]; -+ } p; -+} partition_table; -+ -+#define PART_TABLE_FLAG0 0x55 -+#define PART_TABLE_FLAG1 0xAA -+ -+static void -+get_partition_table_geometry(partition_table *bufp, long long *cyl, int *heads, -+ int *sectors) { -+ struct partition *p; -+ int i,h,s,hh,ss; -+ int first = 1; -+ int bad = 0; -+ -+ if (bufp->p.magicflag[0] != PART_TABLE_FLAG0 || -+ bufp->p.magicflag[1] != PART_TABLE_FLAG1) { -+ /* Matthew Wilcox: slightly friendlier version of -+ fatal(_("Bad signature on partition table"), 3); -+ */ -+ fprintf(stderr, "Unknown partition table signature\n"); -+ return; -+ } -+ -+ hh = ss = 0; -+ for (i=0; i<4; i++) { -+ p = &(bufp->p.part[i]); -+ if (p->sys_ind != 0) { -+ h = p->end_head + 1; -+ s = (p->end_sector & 077); -+ if (first) { -+ hh = h; -+ ss = s; -+ first = 0; -+ } else if (hh != h || ss != s) -+ bad = 1; -+ } -+ } -+ -+ if (!first && !bad) { -+ *heads = hh; -+ *sectors = ss; -+ } -+} -+ -+static long long my_lseek (unsigned int fd, long long offset, -+ unsigned int origin) -+{ -+#if defined(__linux__) && (!defined(__GLIBC__) || \ -+ ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))) -+ /* Maybe libc doesn't have large file support. */ -+ loff_t offset, result; -+ static int _llseek (uint filedes, ulong hi, ulong lo, -+ loff_t *res, uint wh); -+ _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo, -+ loff_t *, res, uint, wh); -+ -+ if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET) < 0) -+ return (long long) -1; -+ return result; -+#else -+ return lseek(fd, offset, SEEK_SET); -+#endif -+} -+ -+static void get_linux_geometry (int fd, struct geometry *geom) { -+ long long kern_cyl = 0; int kern_head = 0, kern_sectors = 0; -+ long long pt_cyl = 0; int pt_head = 0, pt_sectors = 0; -+ partition_table bufp; -+ char *buff, *buf_unaligned; -+ -+ buf_unaligned = malloc(sizeof(partition_table) + 4095); -+ buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) & -+ (~(4096-1))); -+ -+ get_kernel_geometry(fd, &kern_cyl, &kern_head, &kern_sectors); -+ -+ if (my_lseek (fd, 0*SECTOR_SIZE, SEEK_SET) < 0) { -+ fprintf(stderr, "Unable to seek"); -+ } -+ -+ if (read(fd, buff, SECTOR_SIZE) == SECTOR_SIZE) { -+ memcpy(bufp.c.b, buff, SECTOR_SIZE); -+ get_partition_table_geometry(&bufp, &pt_cyl, &pt_head, &pt_sectors); -+ } else { -+ fprintf(stderr, "Unable to read partition table: %s\n", strerror(errno)); -+ } -+ -+ if (pt_head && pt_sectors) { -+ int cyl_size; -+ -+ geom->heads = pt_head; -+ geom->sectors = pt_sectors; -+ cyl_size = pt_head * pt_sectors; -+ geom->cylinders = geom->total_sectors/cyl_size; -+ } else { -+ geom->heads = kern_head; -+ geom->sectors = kern_sectors; -+ geom->cylinders = kern_cyl; -+ } -+ -+ return; -+} -+#endif -+ - /* Get the geometry of a drive DRIVE. */ - void - get_drive_geometry (struct geometry *geom, char **map, int drive) -@@ -151,21 +300,16 @@ get_drive_geometry (struct geometry *geom, char **map, int drive) - #if defined(__linux__) - /* Linux */ - { -- struct hd_geometry hdg; - unsigned long nr; -- -- if (ioctl (fd, HDIO_GETGEO, &hdg)) -- goto fail; - - if (ioctl (fd, BLKGETSIZE, &nr)) - goto fail; - - /* Got the geometry, so save it. */ -- geom->cylinders = hdg.cylinders; -- geom->heads = hdg.heads; -- geom->sectors = hdg.sectors; - geom->total_sectors = nr; -- -+ get_linux_geometry(fd, geom); -+ if (!geom->heads && !geom->cylinders && !geom->sectors) -+ goto fail; - goto success; - } - -@@ -403,10 +547,27 @@ get_dac960_disk_name (char *name, int controller, int drive) - } - - static void -+get_cciss_disk_name (char * name, int controller, int drive) -+{ -+ sprintf (name, "/dev/cciss/c%dd%d", controller, drive); -+} -+ -+static void -+get_cpqarray_disk_name (char * name, int controller, int drive) -+{ -+ sprintf (name, "/dev/ida/c%dd%d", controller, drive); -+} -+static void - get_ataraid_disk_name (char *name, int unit) - { - sprintf (name, "/dev/ataraid/d%c", unit + '0'); - } -+ -+static void -+get_i2o_disk_name (char *name, int unit) -+{ -+ sprintf (name, "/dev/i2o/hd%c", unit + 'a'); -+} - #endif - - /* Check if DEVICE can be read. If an error occurs, return zero, -@@ -490,27 +651,24 @@ check_device (const char *device) - } - - /* Read mapping information from FP, and write it to MAP. */ -+static void rdm_show_error (const char *map_file, int no, const char *msg) -+{ -+ fprintf (stderr, "%s:%d: error: %s\n", map_file, no, msg); -+} -+ -+static void rdm_show_warning (const char *map_file,int no, const char *msg, ...) -+{ -+ va_list ap; -+ -+ va_start (ap, msg); -+ fprintf (stderr, "%s:%d: warning: ", map_file, no); -+ vfprintf (stderr, msg, ap); -+ va_end (ap); -+} -+ - static int - read_device_map (FILE *fp, char **map, const char *map_file) - { -- auto void show_error (int no, const char *msg); -- auto void show_warning (int no, const char *msg, ...); -- -- auto void show_error (int no, const char *msg) -- { -- fprintf (stderr, "%s:%d: error: %s\n", map_file, no, msg); -- } -- -- auto void show_warning (int no, const char *msg, ...) -- { -- va_list ap; -- -- va_start (ap, msg); -- fprintf (stderr, "%s:%d: warning: ", map_file, no); -- vfprintf (stderr, msg, ap); -- va_end (ap); -- } -- - /* If there is the device map file, use the data in it instead of - probing devices. */ - char buf[1024]; /* XXX */ -@@ -540,14 +698,14 @@ read_device_map (FILE *fp, char **map, const char *map_file) - - if (*ptr != '(') - { -- show_error (line_number, "No open parenthesis found"); -+ rdm_show_error (map_file, line_number, "No open parenthesis found"); - return 0; - } - - ptr++; - if ((*ptr != 'f' && *ptr != 'h') || *(ptr + 1) != 'd') - { -- show_error (line_number, "Bad drive name"); -+ rdm_show_error (map_file, line_number, "Bad drive name"); - return 0; - } - -@@ -558,12 +716,12 @@ read_device_map (FILE *fp, char **map, const char *map_file) - drive = strtoul (ptr, &ptr, 10); - if (drive < 0) - { -- show_error (line_number, "Bad device number"); -+ rdm_show_error (map_file, line_number, "Bad device number"); - return 0; - } - else if (drive > 127) - { -- show_warning (line_number, -+ rdm_show_warning (map_file, line_number, - "Ignoring %cd%d due to a BIOS limitation", - is_floppy ? 'f' : 'h', drive); - continue; -@@ -574,7 +732,7 @@ read_device_map (FILE *fp, char **map, const char *map_file) - - if (*ptr != ')') - { -- show_error (line_number, "No close parenthesis found"); -+ rdm_show_error (map_file, line_number, "No close parenthesis found"); - return 0; - } - -@@ -585,7 +743,7 @@ read_device_map (FILE *fp, char **map, const char *map_file) - - if (! *ptr) - { -- show_error (line_number, "No filename found"); -+ rdm_show_error (map_file, line_number, "No filename found"); - return 0; - } - -@@ -598,7 +756,7 @@ read_device_map (FILE *fp, char **map, const char *map_file) - /* Multiple entries for a given drive is not allowed. */ - if (map[drive]) - { -- show_error (line_number, "Duplicated entry found"); -+ rdm_show_error (map_file, line_number, "Duplicated entry found"); - return 0; - } - -@@ -782,7 +940,7 @@ init_device_map (char ***map, const char *map_file, int floppy_disks) - - for (controller = 0; controller < 8; controller++) - { -- for (drive = 0; drive < 15; drive++) -+ for (drive = 0; drive < 32; drive++) - { - char name[24]; - -@@ -801,6 +959,90 @@ init_device_map (char ***map, const char *map_file, int floppy_disks) - } - } - } -+ -+ /* I2O disks. */ -+ for (i = 0; i < 8; i++) -+ { -+ char name[16]; -+ -+ get_i2o_disk_name (name, i); -+ if (check_device (name)) -+ { -+ (*map)[num_hd + 0x80] = strdup (name); -+ assert ((*map)[num_hd + 0x80]); -+ -+ /* If the device map file is opened, write the map. */ -+ if (fp) -+ fprintf (fp, "(hd%d)\t%s\n", num_hd, name); -+ -+ num_hd++; -+ } -+ } -+ -+#endif /* __linux__ */ -+ -+#ifdef __linux__ -+ /* This is for cciss - we have -+ /dev/cciss/c<controller>d<logical drive>p<partition>. -+ -+ cciss driver currently supports up to 8 controllers, 16 logical -+ drives, and 7 partitions. */ -+ { -+ int controller, drive; -+ -+ for (controller = 0; controller < 8; controller++) -+ { -+ for (drive = 0; drive < 16; drive++) -+ { -+ char name[24]; -+ -+ get_cciss_disk_name (name, controller, drive); -+ if (check_device (name)) -+ { -+ (*map)[num_hd + 0x80] = strdup (name); -+ assert ((*map)[num_hd + 0x80]); -+ -+ /* If the device map file is opened, write the map. */ -+ if (fp) -+ fprintf (fp, "(hd%d)\t%s\n", num_hd, name); -+ -+ num_hd++; -+ } -+ } -+ } -+ } -+#endif /* __linux__ */ -+ -+#ifdef __linux__ -+ /* This is for cpqarray - we have -+ /dev/ida/c<controller>d<logical drive>p<partition>. -+ -+ cpqarray driver currently supports up to 8 controllers, 16 logical -+ drives, and 15 partitions. */ -+ { -+ int controller, drive; -+ -+ for (controller = 0; controller < 8; controller++) -+ { -+ for (drive = 0; drive < 15; drive++) -+ { -+ char name[24]; -+ -+ get_cpqarray_disk_name (name, controller, drive); -+ if (check_device (name)) -+ { -+ (*map)[num_hd + 0x80] = strdup (name); -+ assert ((*map)[num_hd + 0x80]); -+ -+ /* If the device map file is opened, write the map. */ -+ if (fp) -+ fprintf (fp, "(hd%d)\t%s\n", num_hd, name); -+ -+ num_hd++; -+ } -+ } -+ } -+ } - #endif /* __linux__ */ - - /* OK, close the device map file if opened. */ -@@ -844,6 +1086,7 @@ write_to_partition (char **map, int drive, int partition, - { - char dev[PATH_MAX]; /* XXX */ - int fd; -+ off_t offset = (off_t) sector * (off_t) SECTOR_SIZE; - - if ((partition & 0x00FF00) != 0x00FF00) - { -@@ -861,44 +1104,35 @@ write_to_partition (char **map, int drive, int partition, - if (strcmp (dev + strlen(dev) - 5, "/disc") == 0) - strcpy (dev + strlen(dev) - 5, "/part"); - } -- sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1); -+ -+ sprintf (dev + strlen(dev), "%s%d", -+ /* Compaq smart and others */ -+ (strncmp(dev, "/dev/ida/", 9) == 0 || -+ strncmp(dev, "/dev/ataraid/", 13) == 0 || -+ strncmp(dev, "/dev/mapper/", 12) == 0 || -+ strncmp(dev, "/dev/md", 7) == 0 || -+ strncmp(dev, "/dev/cciss/", 11) == 0 || -+ strncmp(dev, "/dev/rd/", 8) == 0) ? "p" : "", -+ ((partition >> 16) & 0xFF) + 1); - - /* Open the partition. */ - fd = open (dev, O_RDWR); - if (fd < 0) - { -+ /* No partition file, pass thru and not worry about -+ * cache inconsistency. */ -+ if (errno == ENOENT) -+ return -1; - errnum = ERR_NO_PART; - return 0; - } -- --#if defined(__linux__) && (!defined(__GLIBC__) || \ -- ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))) -- /* Maybe libc doesn't have large file support. */ -- { -- loff_t offset, result; -- static int _llseek (uint filedes, ulong hi, ulong lo, -- loff_t *res, uint wh); -- _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo, -- loff_t *, res, uint, wh); -- -- offset = (loff_t) sector * (loff_t) SECTOR_SIZE; -- if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET)) -- { -- errnum = ERR_DEV_VALUES; -- return 0; -- } -- } --#else -- { -- off_t offset = (off_t) sector * (off_t) SECTOR_SIZE; - -- if (lseek (fd, offset, SEEK_SET) != offset) -- { -- errnum = ERR_DEV_VALUES; -- return 0; -- } -- } --#endif -+ -+ if (my_lseek(fd, offset, SEEK_SET) != offset) -+ { -+ errnum = ERR_DEV_VALUES; -+ return 0; -+ } - - if (write (fd, buf, size * SECTOR_SIZE) != (size * SECTOR_SIZE)) - { -diff --git a/makediff b/makediff -new file mode 100755 -index 0000000..a82b448 ---- /dev/null -+++ b/makediff -@@ -0,0 +1,21 @@ -+#!/bin/bash -+( -+cat << EOF -+From: Peter Jones pjones@redhat.com" -+Date: $(date) -+Subject: [PATCH] Changes from grub-0.97 to master -+ -+This patch is a bundle of the changes between grub-0.97 and master. -+It can be reginerated from the git repository at: -+ -+git://github.com/vathpela/grub-fedora.git -+ -+Using the command: -+ -+git diff grub-0.97 master -+ -+EOF -+git diff grub-0.97 master | diffstat -p1 -+echo -+git diff grub-0.97 master -+) | cat -diff --git a/netboot/.gitignore b/netboot/.gitignore -new file mode 100644 -index 0000000..5d89f6d ---- /dev/null -+++ b/netboot/.gitignore -@@ -0,0 +1,2 @@ -+Makefile.in -+.deps -diff --git a/netboot/Makefile.in b/netboot/Makefile.in -deleted file mode 100644 -index 75ac299..0000000 ---- a/netboot/Makefile.in -+++ /dev/null -@@ -1,1091 +0,0 @@ --# Makefile.in generated by automake 1.9.4 from Makefile.am. --# @configure_input@ -- --# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004 Free Software Foundation, Inc. --# This Makefile.in is free software; the Free Software Foundation --# gives unlimited permission to copy and/or distribute it, --# with or without modifications, as long as this notice is preserved. -- --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY, to the extent permitted by law; without --# even the implied warranty of MERCHANTABILITY or FITNESS FOR A --# PARTICULAR PURPOSE. -- --@SET_MAKE@ -- --SOURCES = $(libdrivers_a_SOURCES) $(EXTRA_libdrivers_a_SOURCES) -- --srcdir = @srcdir@ --top_srcdir = @top_srcdir@ --VPATH = @srcdir@ --pkgdatadir = $(datadir)/@PACKAGE@ --pkglibdir = $(libdir)/@PACKAGE@ --pkgincludedir = $(includedir)/@PACKAGE@ --top_builddir = .. --am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd --INSTALL = @INSTALL@ --install_sh_DATA = $(install_sh) -c -m 644 --install_sh_PROGRAM = $(install_sh) -c --install_sh_SCRIPT = $(install_sh) -c --INSTALL_HEADER = $(INSTALL_DATA) --transform = $(program_transform_name) --NORMAL_INSTALL = : --PRE_INSTALL = : --POST_INSTALL = : --NORMAL_UNINSTALL = : --PRE_UNINSTALL = : --POST_UNINSTALL = : --build_triplet = @build@ --host_triplet = @host@ --subdir = netboot --DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in --ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 --am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ -- $(top_srcdir)/configure.ac --am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ -- $(ACLOCAL_M4) --mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs --CONFIG_HEADER = $(top_builddir)/config.h --CONFIG_CLEAN_FILES = --LIBRARIES = $(noinst_LIBRARIES) --AR = ar --ARFLAGS = cru --libdrivers_a_AR = $(AR) $(ARFLAGS) --am_libdrivers_a_OBJECTS = libdrivers_a-config.$(OBJEXT) \ -- libdrivers_a-fsys_tftp.$(OBJEXT) libdrivers_a-main.$(OBJEXT) \ -- libdrivers_a-misc.$(OBJEXT) libdrivers_a-pci.$(OBJEXT) \ -- libdrivers_a-timer.$(OBJEXT) --libdrivers_a_OBJECTS = $(am_libdrivers_a_OBJECTS) --DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) --depcomp = $(SHELL) $(top_srcdir)/depcomp --am__depfiles_maybe = depfiles --COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ -- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) --CCLD = $(CC) --LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ --SOURCES = $(libdrivers_a_SOURCES) $(EXTRA_libdrivers_a_SOURCES) --DIST_SOURCES = $(libdrivers_a_SOURCES) $(EXTRA_libdrivers_a_SOURCES) --ETAGS = etags --CTAGS = ctags --DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) --ACLOCAL = @ACLOCAL@ --AMDEP_FALSE = @AMDEP_FALSE@ --AMDEP_TRUE = @AMDEP_TRUE@ --AMTAR = @AMTAR@ --AUTOCONF = @AUTOCONF@ --AUTOHEADER = @AUTOHEADER@ --AUTOMAKE = @AUTOMAKE@ --AWK = @AWK@ --BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ --BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ --CC = @CC@ --CCAS = @CCAS@ --CCASFLAGS = @CCASFLAGS@ --CCDEPMODE = @CCDEPMODE@ --CFLAGS = @CFLAGS@ --CPP = @CPP@ --CPPFLAGS = @CPPFLAGS@ --CYGPATH_W = @CYGPATH_W@ --DEFS = @DEFS@ --DEPDIR = @DEPDIR@ --DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ --DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ --ECHO_C = @ECHO_C@ --ECHO_N = @ECHO_N@ --ECHO_T = @ECHO_T@ --EGREP = @EGREP@ --EXEEXT = @EXEEXT@ --FSYS_CFLAGS = @FSYS_CFLAGS@ --GRUB_CFLAGS = @GRUB_CFLAGS@ --GRUB_LIBS = @GRUB_LIBS@ --HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ --HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ --INSTALL_DATA = @INSTALL_DATA@ --INSTALL_PROGRAM = @INSTALL_PROGRAM@ --INSTALL_SCRIPT = @INSTALL_SCRIPT@ --INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ --LDFLAGS = @LDFLAGS@ --LIBOBJS = @LIBOBJS@ --LIBS = @LIBS@ --LTLIBOBJS = @LTLIBOBJS@ --MAINT = @MAINT@ --MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ --MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ --MAKEINFO = @MAKEINFO@ --NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ --NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ --NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ --NET_CFLAGS = @NET_CFLAGS@ --NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ --OBJCOPY = @OBJCOPY@ --OBJEXT = @OBJEXT@ --PACKAGE = @PACKAGE@ --PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ --PACKAGE_NAME = @PACKAGE_NAME@ --PACKAGE_STRING = @PACKAGE_STRING@ --PACKAGE_TARNAME = @PACKAGE_TARNAME@ --PACKAGE_VERSION = @PACKAGE_VERSION@ --PATH_SEPARATOR = @PATH_SEPARATOR@ --PERL = @PERL@ --RANLIB = @RANLIB@ --SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ --SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ --SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ --SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ --SET_MAKE = @SET_MAKE@ --SHELL = @SHELL@ --STAGE1_CFLAGS = @STAGE1_CFLAGS@ --STAGE2_CFLAGS = @STAGE2_CFLAGS@ --STRIP = @STRIP@ --VERSION = @VERSION@ --ac_ct_CC = @ac_ct_CC@ --ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ --ac_ct_RANLIB = @ac_ct_RANLIB@ --ac_ct_STRIP = @ac_ct_STRIP@ --am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ --am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ --am__include = @am__include@ --am__leading_dot = @am__leading_dot@ --am__quote = @am__quote@ --am__tar = @am__tar@ --am__untar = @am__untar@ --bindir = @bindir@ --build = @build@ --build_alias = @build_alias@ --build_cpu = @build_cpu@ --build_os = @build_os@ --build_vendor = @build_vendor@ --datadir = @datadir@ --exec_prefix = @exec_prefix@ --host = @host@ --host_alias = @host_alias@ --host_cpu = @host_cpu@ --host_os = @host_os@ --host_vendor = @host_vendor@ --includedir = @includedir@ --infodir = @infodir@ --install_sh = @install_sh@ --libdir = @libdir@ --libexecdir = @libexecdir@ --localstatedir = @localstatedir@ --mandir = @mandir@ --mkdir_p = @mkdir_p@ --oldincludedir = @oldincludedir@ --prefix = @prefix@ --program_transform_name = @program_transform_name@ --sbindir = @sbindir@ --sharedstatedir = @sharedstatedir@ --sysconfdir = @sysconfdir@ --target_alias = @target_alias@ -- --# For <shared.h> and <stage1.h>. --INCLUDES = -I$(top_srcdir)/stage2 -I$(top_srcdir)/stage1 --@NETBOOT_SUPPORT_FALSE@LIBDRIVERS = -- --# Don't build the netboot support by default. --@NETBOOT_SUPPORT_TRUE@LIBDRIVERS = libdrivers.a --noinst_LIBRARIES = $(LIBDRIVERS) --libdrivers_a_SOURCES = cards.h config.c etherboot.h \ -- fsys_tftp.c linux-asm-io.h linux-asm-string.h \ -- main.c misc.c nic.h osdep.h pci.c pci.h timer.c timer.h -- --EXTRA_libdrivers_a_SOURCES = 3c509.c 3c509.h 3c595.c 3c595.h 3c90x.c \ -- cs89x0.c cs89x0.h davicom.c depca.c eepro.c eepro100.c \ -- epic100.c epic100.h fa311.c i82586.c lance.c natsemi.c \ -- ni5010.c ns8390.c ns8390.h otulip.c otulip.h rtl8139.c \ -- sis900.c sis900.h sk_g16.c sk_g16.h smc9000.c smc9000.h \ -- tiara.c tlan.c tulip.c via-rhine.c w89c840.c -- --libdrivers_a_CFLAGS = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- -DFSYS_TFTP=1 $(NET_CFLAGS) $(NET_EXTRAFLAGS) -- --# Filled by configure. --libdrivers_a_LIBADD = @NETBOOT_DRIVERS@ --libdrivers_a_DEPENDENCIES = $(libdrivers_a_LIBADD) --EXTRA_DIST = README.netboot 3c90x.txt cs89x0.txt sis900.txt tulip.txt -- --# These below are several special rules for the device drivers. --# We cannot use a simple rule for them... -- --# What objects are derived from a driver? --3c509_drivers = 3c509.o 3c529.o --3c595_drivers = 3c595.o --3c90x_drivers = 3c90x.o --cs89x0_drivers = cs89x0.o --davicom_drivers = davicom.o --depca_drivers = depca.o --eepro_drivers = eepro.o --eepro100_drivers = eepro100.o --epic100_drivers = epic100.o --#fa311_drivers = fa311.o --i82586_drivers = 3c507.o exos205.o ni5210.o --lance_drivers = lance.o ne2100.o ni6510.o --natsemi_drivers = natsemi.o --ni5010_drivers = ni5010.o --ns8390_drivers = 3c503.o ne.o ns8390.o wd.o --otulip_drivers = otulip.o --rtl8139_drivers = rtl8139.o --sis900_drivers = sis900.o --sk_g16_drivers = sk_g16.o --smc9000_drivers = smc9000.o --tiara_drivers = tiara.o --#tlan_drivers = tlan.o --tulip_drivers = tulip.o --via_rhine_drivers = via_rhine.o --w89c840_drivers = w89c840.o -- --# Per-object flags. --3c509_o_CFLAGS = -DINCLUDE_3C509=1 --3c529_o_CFLAGS = -DINCLUDE_3C529=1 --3c595_o_CFLAGS = -DINCLUDE_3C595=1 --3c90x_o_CFLAGS = -DINCLUDE_3C90X=1 --cs89x0_o_CFLAGS = -DINCLUDE_CS89X0=1 --davicom_o_CFLAGS = -DINCLUDE_DAVICOM=1 --depca_o_CFLAGS = -DINCLUDE_DEPCA=1 --eepro_o_CFLAGS = -DINCLUDE_EEPRO=1 --eepro100_o_CFLAGS = -DINCLUDE_EEPRO100=1 --epic100_o_CFLAGS = -DINCLUDE_EPIC100=1 --#fa311_o_CFLAGS = -DINCLUDE_FA311=1 --3c507_o_CFLAGS = -DINCLUDE_3C507=1 --exos205_o_CFLAGS = -DINCLUDE_EXOS205=1 --ni5210_o_CFLAGS = -DINCLUDE_NI5210=1 --lance_o_CFLAGS = -DINCLUDE_LANCE=1 --ne2100_o_CFLAGS = -DINCLUDE_NE2100=1 --ni6510_o_CFLAGS = -DINCLUDE_NI6510=1 --natsemi_o_CFLAGS = -DINCLUDE_NATSEMI=1 --ni5010_o_CFLAGS = -DINCLUDE_NI5010=1 --3c503_o_CFLAGS = -DINCLUDE_3C503=1 --ne_o_CFLAGS = -DINCLUDE_NE=1 --ns8390_o_CFLAGS = -DINCLUDE_NS8390=1 --wd_o_CFLAGS = -DINCLUDE_WD=1 --otulip_o_CFLAGS = -DINCLUDE_OTULIP=1 --rtl8139_o_CFLAGS = -DINCLUDE_RTL8139=1 --sis900_o_CFLAGS = -DINCLUDE_SIS900=1 --sk_g16_o_CFLAGS = -DINCLUDE_SK_G16=1 --smc9000_o_CFLAGS = -DINCLUDE_SMC9000=1 --tiara_o_CFLAGS = -DINCLUDE_TIARA=1 --#tlan_o_CFLAGS = -DINCLUDE_TLAN=1 --tulip_o_CFLAGS = -DINCLUDE_TULIP=1 --via_rhine_o_CFLAGS = -DINCLUDE_VIA_RHINE=1 --w89c840_o_CFLAGS = -DINCLUDE_W89C840=1 --all: all-am -- --.SUFFIXES: --.SUFFIXES: .c .o .obj --$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) -- @for dep in $?; do \ -- case '$(am__configure_deps)' in \ -- *$$dep*) \ -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ -- && exit 0; \ -- exit 1;; \ -- esac; \ -- done; \ -- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu netboot/Makefile'; \ -- cd $(top_srcdir) && \ -- $(AUTOMAKE) --gnu netboot/Makefile --.PRECIOUS: Makefile --Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -- @case '$?' in \ -- *config.status*) \ -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ -- *) \ -- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ -- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ -- esac; -- --$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -- --$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh --$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -- --clean-noinstLIBRARIES: -- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) --libdrivers.a: $(libdrivers_a_OBJECTS) $(libdrivers_a_DEPENDENCIES) -- -rm -f libdrivers.a -- $(libdrivers_a_AR) libdrivers.a $(libdrivers_a_OBJECTS) $(libdrivers_a_LIBADD) -- $(RANLIB) libdrivers.a -- --mostlyclean-compile: -- -rm -f *.$(OBJEXT) -- --distclean-compile: -- -rm -f *.tab.c -- --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-3c509.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-3c595.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-3c90x.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-config.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-cs89x0.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-davicom.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-depca.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-eepro.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-eepro100.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-epic100.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-fa311.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-fsys_tftp.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-i82586.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-lance.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-main.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-misc.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-natsemi.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-ni5010.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-ns8390.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-otulip.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-pci.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-rtl8139.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-sis900.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-sk_g16.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-smc9000.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-tiara.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-timer.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-tlan.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-tulip.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-via-rhine.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libdrivers_a-w89c840.Po@am__quote@ -- --.c.o: --@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(COMPILE) -c $< -- --.c.obj: --@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` -- --libdrivers_a-config.o: config.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-config.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-config.Tpo" -c -o libdrivers_a-config.o `test -f 'config.c' || echo '$(srcdir)/'`config.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-config.Tpo" "$(DEPDIR)/libdrivers_a-config.Po"; else rm -f "$(DEPDIR)/libdrivers_a-config.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config.c' object='libdrivers_a-config.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-config.o `test -f 'config.c' || echo '$(srcdir)/'`config.c -- --libdrivers_a-config.obj: config.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-config.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-config.Tpo" -c -o libdrivers_a-config.obj `if test -f 'config.c'; then $(CYGPATH_W) 'config.c'; else $(CYGPATH_W) '$(srcdir)/config.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-config.Tpo" "$(DEPDIR)/libdrivers_a-config.Po"; else rm -f "$(DEPDIR)/libdrivers_a-config.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='config.c' object='libdrivers_a-config.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-config.obj `if test -f 'config.c'; then $(CYGPATH_W) 'config.c'; else $(CYGPATH_W) '$(srcdir)/config.c'; fi` -- --libdrivers_a-fsys_tftp.o: fsys_tftp.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fsys_tftp.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" -c -o libdrivers_a-fsys_tftp.o `test -f 'fsys_tftp.c' || echo '$(srcdir)/'`fsys_tftp.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" "$(DEPDIR)/libdrivers_a-fsys_tftp.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_tftp.c' object='libdrivers_a-fsys_tftp.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fsys_tftp.o `test -f 'fsys_tftp.c' || echo '$(srcdir)/'`fsys_tftp.c -- --libdrivers_a-fsys_tftp.obj: fsys_tftp.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fsys_tftp.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" -c -o libdrivers_a-fsys_tftp.obj `if test -f 'fsys_tftp.c'; then $(CYGPATH_W) 'fsys_tftp.c'; else $(CYGPATH_W) '$(srcdir)/fsys_tftp.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo" "$(DEPDIR)/libdrivers_a-fsys_tftp.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fsys_tftp.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_tftp.c' object='libdrivers_a-fsys_tftp.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fsys_tftp.obj `if test -f 'fsys_tftp.c'; then $(CYGPATH_W) 'fsys_tftp.c'; else $(CYGPATH_W) '$(srcdir)/fsys_tftp.c'; fi` -- --libdrivers_a-main.o: main.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-main.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-main.Tpo" -c -o libdrivers_a-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-main.Tpo" "$(DEPDIR)/libdrivers_a-main.Po"; else rm -f "$(DEPDIR)/libdrivers_a-main.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='libdrivers_a-main.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-main.o `test -f 'main.c' || echo '$(srcdir)/'`main.c -- --libdrivers_a-main.obj: main.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-main.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-main.Tpo" -c -o libdrivers_a-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-main.Tpo" "$(DEPDIR)/libdrivers_a-main.Po"; else rm -f "$(DEPDIR)/libdrivers_a-main.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='main.c' object='libdrivers_a-main.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-main.obj `if test -f 'main.c'; then $(CYGPATH_W) 'main.c'; else $(CYGPATH_W) '$(srcdir)/main.c'; fi` -- --libdrivers_a-misc.o: misc.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-misc.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-misc.Tpo" -c -o libdrivers_a-misc.o `test -f 'misc.c' || echo '$(srcdir)/'`misc.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-misc.Tpo" "$(DEPDIR)/libdrivers_a-misc.Po"; else rm -f "$(DEPDIR)/libdrivers_a-misc.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='misc.c' object='libdrivers_a-misc.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-misc.o `test -f 'misc.c' || echo '$(srcdir)/'`misc.c -- --libdrivers_a-misc.obj: misc.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-misc.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-misc.Tpo" -c -o libdrivers_a-misc.obj `if test -f 'misc.c'; then $(CYGPATH_W) 'misc.c'; else $(CYGPATH_W) '$(srcdir)/misc.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-misc.Tpo" "$(DEPDIR)/libdrivers_a-misc.Po"; else rm -f "$(DEPDIR)/libdrivers_a-misc.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='misc.c' object='libdrivers_a-misc.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-misc.obj `if test -f 'misc.c'; then $(CYGPATH_W) 'misc.c'; else $(CYGPATH_W) '$(srcdir)/misc.c'; fi` -- --libdrivers_a-pci.o: pci.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-pci.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-pci.Tpo" -c -o libdrivers_a-pci.o `test -f 'pci.c' || echo '$(srcdir)/'`pci.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-pci.Tpo" "$(DEPDIR)/libdrivers_a-pci.Po"; else rm -f "$(DEPDIR)/libdrivers_a-pci.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pci.c' object='libdrivers_a-pci.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-pci.o `test -f 'pci.c' || echo '$(srcdir)/'`pci.c -- --libdrivers_a-pci.obj: pci.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-pci.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-pci.Tpo" -c -o libdrivers_a-pci.obj `if test -f 'pci.c'; then $(CYGPATH_W) 'pci.c'; else $(CYGPATH_W) '$(srcdir)/pci.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-pci.Tpo" "$(DEPDIR)/libdrivers_a-pci.Po"; else rm -f "$(DEPDIR)/libdrivers_a-pci.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='pci.c' object='libdrivers_a-pci.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-pci.obj `if test -f 'pci.c'; then $(CYGPATH_W) 'pci.c'; else $(CYGPATH_W) '$(srcdir)/pci.c'; fi` -- --libdrivers_a-timer.o: timer.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-timer.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-timer.Tpo" -c -o libdrivers_a-timer.o `test -f 'timer.c' || echo '$(srcdir)/'`timer.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-timer.Tpo" "$(DEPDIR)/libdrivers_a-timer.Po"; else rm -f "$(DEPDIR)/libdrivers_a-timer.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='timer.c' object='libdrivers_a-timer.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-timer.o `test -f 'timer.c' || echo '$(srcdir)/'`timer.c -- --libdrivers_a-timer.obj: timer.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-timer.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-timer.Tpo" -c -o libdrivers_a-timer.obj `if test -f 'timer.c'; then $(CYGPATH_W) 'timer.c'; else $(CYGPATH_W) '$(srcdir)/timer.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-timer.Tpo" "$(DEPDIR)/libdrivers_a-timer.Po"; else rm -f "$(DEPDIR)/libdrivers_a-timer.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='timer.c' object='libdrivers_a-timer.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-timer.obj `if test -f 'timer.c'; then $(CYGPATH_W) 'timer.c'; else $(CYGPATH_W) '$(srcdir)/timer.c'; fi` -- --libdrivers_a-3c509.o: 3c509.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c509.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c509.Tpo" -c -o libdrivers_a-3c509.o `test -f '3c509.c' || echo '$(srcdir)/'`3c509.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c509.Tpo" "$(DEPDIR)/libdrivers_a-3c509.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c509.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c509.c' object='libdrivers_a-3c509.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c509.o `test -f '3c509.c' || echo '$(srcdir)/'`3c509.c -- --libdrivers_a-3c509.obj: 3c509.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c509.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c509.Tpo" -c -o libdrivers_a-3c509.obj `if test -f '3c509.c'; then $(CYGPATH_W) '3c509.c'; else $(CYGPATH_W) '$(srcdir)/3c509.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c509.Tpo" "$(DEPDIR)/libdrivers_a-3c509.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c509.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c509.c' object='libdrivers_a-3c509.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c509.obj `if test -f '3c509.c'; then $(CYGPATH_W) '3c509.c'; else $(CYGPATH_W) '$(srcdir)/3c509.c'; fi` -- --libdrivers_a-3c595.o: 3c595.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c595.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c595.Tpo" -c -o libdrivers_a-3c595.o `test -f '3c595.c' || echo '$(srcdir)/'`3c595.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c595.Tpo" "$(DEPDIR)/libdrivers_a-3c595.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c595.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c595.c' object='libdrivers_a-3c595.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c595.o `test -f '3c595.c' || echo '$(srcdir)/'`3c595.c -- --libdrivers_a-3c595.obj: 3c595.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c595.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c595.Tpo" -c -o libdrivers_a-3c595.obj `if test -f '3c595.c'; then $(CYGPATH_W) '3c595.c'; else $(CYGPATH_W) '$(srcdir)/3c595.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c595.Tpo" "$(DEPDIR)/libdrivers_a-3c595.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c595.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c595.c' object='libdrivers_a-3c595.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c595.obj `if test -f '3c595.c'; then $(CYGPATH_W) '3c595.c'; else $(CYGPATH_W) '$(srcdir)/3c595.c'; fi` -- --libdrivers_a-3c90x.o: 3c90x.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c90x.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c90x.Tpo" -c -o libdrivers_a-3c90x.o `test -f '3c90x.c' || echo '$(srcdir)/'`3c90x.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo" "$(DEPDIR)/libdrivers_a-3c90x.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c90x.c' object='libdrivers_a-3c90x.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c90x.o `test -f '3c90x.c' || echo '$(srcdir)/'`3c90x.c -- --libdrivers_a-3c90x.obj: 3c90x.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-3c90x.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-3c90x.Tpo" -c -o libdrivers_a-3c90x.obj `if test -f '3c90x.c'; then $(CYGPATH_W) '3c90x.c'; else $(CYGPATH_W) '$(srcdir)/3c90x.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo" "$(DEPDIR)/libdrivers_a-3c90x.Po"; else rm -f "$(DEPDIR)/libdrivers_a-3c90x.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='3c90x.c' object='libdrivers_a-3c90x.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-3c90x.obj `if test -f '3c90x.c'; then $(CYGPATH_W) '3c90x.c'; else $(CYGPATH_W) '$(srcdir)/3c90x.c'; fi` -- --libdrivers_a-cs89x0.o: cs89x0.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-cs89x0.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" -c -o libdrivers_a-cs89x0.o `test -f 'cs89x0.c' || echo '$(srcdir)/'`cs89x0.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" "$(DEPDIR)/libdrivers_a-cs89x0.Po"; else rm -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cs89x0.c' object='libdrivers_a-cs89x0.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-cs89x0.o `test -f 'cs89x0.c' || echo '$(srcdir)/'`cs89x0.c -- --libdrivers_a-cs89x0.obj: cs89x0.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-cs89x0.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" -c -o libdrivers_a-cs89x0.obj `if test -f 'cs89x0.c'; then $(CYGPATH_W) 'cs89x0.c'; else $(CYGPATH_W) '$(srcdir)/cs89x0.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo" "$(DEPDIR)/libdrivers_a-cs89x0.Po"; else rm -f "$(DEPDIR)/libdrivers_a-cs89x0.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cs89x0.c' object='libdrivers_a-cs89x0.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-cs89x0.obj `if test -f 'cs89x0.c'; then $(CYGPATH_W) 'cs89x0.c'; else $(CYGPATH_W) '$(srcdir)/cs89x0.c'; fi` -- --libdrivers_a-davicom.o: davicom.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-davicom.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-davicom.Tpo" -c -o libdrivers_a-davicom.o `test -f 'davicom.c' || echo '$(srcdir)/'`davicom.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-davicom.Tpo" "$(DEPDIR)/libdrivers_a-davicom.Po"; else rm -f "$(DEPDIR)/libdrivers_a-davicom.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='davicom.c' object='libdrivers_a-davicom.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-davicom.o `test -f 'davicom.c' || echo '$(srcdir)/'`davicom.c -- --libdrivers_a-davicom.obj: davicom.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-davicom.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-davicom.Tpo" -c -o libdrivers_a-davicom.obj `if test -f 'davicom.c'; then $(CYGPATH_W) 'davicom.c'; else $(CYGPATH_W) '$(srcdir)/davicom.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-davicom.Tpo" "$(DEPDIR)/libdrivers_a-davicom.Po"; else rm -f "$(DEPDIR)/libdrivers_a-davicom.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='davicom.c' object='libdrivers_a-davicom.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-davicom.obj `if test -f 'davicom.c'; then $(CYGPATH_W) 'davicom.c'; else $(CYGPATH_W) '$(srcdir)/davicom.c'; fi` -- --libdrivers_a-depca.o: depca.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-depca.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-depca.Tpo" -c -o libdrivers_a-depca.o `test -f 'depca.c' || echo '$(srcdir)/'`depca.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-depca.Tpo" "$(DEPDIR)/libdrivers_a-depca.Po"; else rm -f "$(DEPDIR)/libdrivers_a-depca.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='depca.c' object='libdrivers_a-depca.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-depca.o `test -f 'depca.c' || echo '$(srcdir)/'`depca.c -- --libdrivers_a-depca.obj: depca.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-depca.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-depca.Tpo" -c -o libdrivers_a-depca.obj `if test -f 'depca.c'; then $(CYGPATH_W) 'depca.c'; else $(CYGPATH_W) '$(srcdir)/depca.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-depca.Tpo" "$(DEPDIR)/libdrivers_a-depca.Po"; else rm -f "$(DEPDIR)/libdrivers_a-depca.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='depca.c' object='libdrivers_a-depca.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-depca.obj `if test -f 'depca.c'; then $(CYGPATH_W) 'depca.c'; else $(CYGPATH_W) '$(srcdir)/depca.c'; fi` -- --libdrivers_a-eepro.o: eepro.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro.Tpo" -c -o libdrivers_a-eepro.o `test -f 'eepro.c' || echo '$(srcdir)/'`eepro.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-eepro.Tpo" "$(DEPDIR)/libdrivers_a-eepro.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eepro.c' object='libdrivers_a-eepro.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro.o `test -f 'eepro.c' || echo '$(srcdir)/'`eepro.c -- --libdrivers_a-eepro.obj: eepro.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro.Tpo" -c -o libdrivers_a-eepro.obj `if test -f 'eepro.c'; then $(CYGPATH_W) 'eepro.c'; else $(CYGPATH_W) '$(srcdir)/eepro.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-eepro.Tpo" "$(DEPDIR)/libdrivers_a-eepro.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eepro.c' object='libdrivers_a-eepro.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro.obj `if test -f 'eepro.c'; then $(CYGPATH_W) 'eepro.c'; else $(CYGPATH_W) '$(srcdir)/eepro.c'; fi` -- --libdrivers_a-eepro100.o: eepro100.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro100.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro100.Tpo" -c -o libdrivers_a-eepro100.o `test -f 'eepro100.c' || echo '$(srcdir)/'`eepro100.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo" "$(DEPDIR)/libdrivers_a-eepro100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eepro100.c' object='libdrivers_a-eepro100.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro100.o `test -f 'eepro100.c' || echo '$(srcdir)/'`eepro100.c -- --libdrivers_a-eepro100.obj: eepro100.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-eepro100.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-eepro100.Tpo" -c -o libdrivers_a-eepro100.obj `if test -f 'eepro100.c'; then $(CYGPATH_W) 'eepro100.c'; else $(CYGPATH_W) '$(srcdir)/eepro100.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo" "$(DEPDIR)/libdrivers_a-eepro100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-eepro100.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='eepro100.c' object='libdrivers_a-eepro100.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-eepro100.obj `if test -f 'eepro100.c'; then $(CYGPATH_W) 'eepro100.c'; else $(CYGPATH_W) '$(srcdir)/eepro100.c'; fi` -- --libdrivers_a-epic100.o: epic100.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-epic100.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-epic100.Tpo" -c -o libdrivers_a-epic100.o `test -f 'epic100.c' || echo '$(srcdir)/'`epic100.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-epic100.Tpo" "$(DEPDIR)/libdrivers_a-epic100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-epic100.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='epic100.c' object='libdrivers_a-epic100.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-epic100.o `test -f 'epic100.c' || echo '$(srcdir)/'`epic100.c -- --libdrivers_a-epic100.obj: epic100.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-epic100.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-epic100.Tpo" -c -o libdrivers_a-epic100.obj `if test -f 'epic100.c'; then $(CYGPATH_W) 'epic100.c'; else $(CYGPATH_W) '$(srcdir)/epic100.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-epic100.Tpo" "$(DEPDIR)/libdrivers_a-epic100.Po"; else rm -f "$(DEPDIR)/libdrivers_a-epic100.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='epic100.c' object='libdrivers_a-epic100.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-epic100.obj `if test -f 'epic100.c'; then $(CYGPATH_W) 'epic100.c'; else $(CYGPATH_W) '$(srcdir)/epic100.c'; fi` -- --libdrivers_a-fa311.o: fa311.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fa311.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-fa311.Tpo" -c -o libdrivers_a-fa311.o `test -f 'fa311.c' || echo '$(srcdir)/'`fa311.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-fa311.Tpo" "$(DEPDIR)/libdrivers_a-fa311.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fa311.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fa311.c' object='libdrivers_a-fa311.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fa311.o `test -f 'fa311.c' || echo '$(srcdir)/'`fa311.c -- --libdrivers_a-fa311.obj: fa311.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-fa311.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-fa311.Tpo" -c -o libdrivers_a-fa311.obj `if test -f 'fa311.c'; then $(CYGPATH_W) 'fa311.c'; else $(CYGPATH_W) '$(srcdir)/fa311.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-fa311.Tpo" "$(DEPDIR)/libdrivers_a-fa311.Po"; else rm -f "$(DEPDIR)/libdrivers_a-fa311.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fa311.c' object='libdrivers_a-fa311.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-fa311.obj `if test -f 'fa311.c'; then $(CYGPATH_W) 'fa311.c'; else $(CYGPATH_W) '$(srcdir)/fa311.c'; fi` -- --libdrivers_a-i82586.o: i82586.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-i82586.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-i82586.Tpo" -c -o libdrivers_a-i82586.o `test -f 'i82586.c' || echo '$(srcdir)/'`i82586.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-i82586.Tpo" "$(DEPDIR)/libdrivers_a-i82586.Po"; else rm -f "$(DEPDIR)/libdrivers_a-i82586.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='i82586.c' object='libdrivers_a-i82586.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-i82586.o `test -f 'i82586.c' || echo '$(srcdir)/'`i82586.c -- --libdrivers_a-i82586.obj: i82586.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-i82586.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-i82586.Tpo" -c -o libdrivers_a-i82586.obj `if test -f 'i82586.c'; then $(CYGPATH_W) 'i82586.c'; else $(CYGPATH_W) '$(srcdir)/i82586.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-i82586.Tpo" "$(DEPDIR)/libdrivers_a-i82586.Po"; else rm -f "$(DEPDIR)/libdrivers_a-i82586.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='i82586.c' object='libdrivers_a-i82586.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-i82586.obj `if test -f 'i82586.c'; then $(CYGPATH_W) 'i82586.c'; else $(CYGPATH_W) '$(srcdir)/i82586.c'; fi` -- --libdrivers_a-lance.o: lance.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-lance.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-lance.Tpo" -c -o libdrivers_a-lance.o `test -f 'lance.c' || echo '$(srcdir)/'`lance.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-lance.Tpo" "$(DEPDIR)/libdrivers_a-lance.Po"; else rm -f "$(DEPDIR)/libdrivers_a-lance.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lance.c' object='libdrivers_a-lance.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-lance.o `test -f 'lance.c' || echo '$(srcdir)/'`lance.c -- --libdrivers_a-lance.obj: lance.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-lance.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-lance.Tpo" -c -o libdrivers_a-lance.obj `if test -f 'lance.c'; then $(CYGPATH_W) 'lance.c'; else $(CYGPATH_W) '$(srcdir)/lance.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-lance.Tpo" "$(DEPDIR)/libdrivers_a-lance.Po"; else rm -f "$(DEPDIR)/libdrivers_a-lance.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='lance.c' object='libdrivers_a-lance.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-lance.obj `if test -f 'lance.c'; then $(CYGPATH_W) 'lance.c'; else $(CYGPATH_W) '$(srcdir)/lance.c'; fi` -- --libdrivers_a-natsemi.o: natsemi.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-natsemi.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-natsemi.Tpo" -c -o libdrivers_a-natsemi.o `test -f 'natsemi.c' || echo '$(srcdir)/'`natsemi.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo" "$(DEPDIR)/libdrivers_a-natsemi.Po"; else rm -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='natsemi.c' object='libdrivers_a-natsemi.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-natsemi.o `test -f 'natsemi.c' || echo '$(srcdir)/'`natsemi.c -- --libdrivers_a-natsemi.obj: natsemi.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-natsemi.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-natsemi.Tpo" -c -o libdrivers_a-natsemi.obj `if test -f 'natsemi.c'; then $(CYGPATH_W) 'natsemi.c'; else $(CYGPATH_W) '$(srcdir)/natsemi.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo" "$(DEPDIR)/libdrivers_a-natsemi.Po"; else rm -f "$(DEPDIR)/libdrivers_a-natsemi.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='natsemi.c' object='libdrivers_a-natsemi.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-natsemi.obj `if test -f 'natsemi.c'; then $(CYGPATH_W) 'natsemi.c'; else $(CYGPATH_W) '$(srcdir)/natsemi.c'; fi` -- --libdrivers_a-ni5010.o: ni5010.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ni5010.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-ni5010.Tpo" -c -o libdrivers_a-ni5010.o `test -f 'ni5010.c' || echo '$(srcdir)/'`ni5010.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo" "$(DEPDIR)/libdrivers_a-ni5010.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ni5010.c' object='libdrivers_a-ni5010.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ni5010.o `test -f 'ni5010.c' || echo '$(srcdir)/'`ni5010.c -- --libdrivers_a-ni5010.obj: ni5010.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ni5010.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-ni5010.Tpo" -c -o libdrivers_a-ni5010.obj `if test -f 'ni5010.c'; then $(CYGPATH_W) 'ni5010.c'; else $(CYGPATH_W) '$(srcdir)/ni5010.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo" "$(DEPDIR)/libdrivers_a-ni5010.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ni5010.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ni5010.c' object='libdrivers_a-ni5010.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ni5010.obj `if test -f 'ni5010.c'; then $(CYGPATH_W) 'ni5010.c'; else $(CYGPATH_W) '$(srcdir)/ni5010.c'; fi` -- --libdrivers_a-ns8390.o: ns8390.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ns8390.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-ns8390.Tpo" -c -o libdrivers_a-ns8390.o `test -f 'ns8390.c' || echo '$(srcdir)/'`ns8390.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo" "$(DEPDIR)/libdrivers_a-ns8390.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ns8390.c' object='libdrivers_a-ns8390.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ns8390.o `test -f 'ns8390.c' || echo '$(srcdir)/'`ns8390.c -- --libdrivers_a-ns8390.obj: ns8390.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-ns8390.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-ns8390.Tpo" -c -o libdrivers_a-ns8390.obj `if test -f 'ns8390.c'; then $(CYGPATH_W) 'ns8390.c'; else $(CYGPATH_W) '$(srcdir)/ns8390.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo" "$(DEPDIR)/libdrivers_a-ns8390.Po"; else rm -f "$(DEPDIR)/libdrivers_a-ns8390.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='ns8390.c' object='libdrivers_a-ns8390.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-ns8390.obj `if test -f 'ns8390.c'; then $(CYGPATH_W) 'ns8390.c'; else $(CYGPATH_W) '$(srcdir)/ns8390.c'; fi` -- --libdrivers_a-otulip.o: otulip.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-otulip.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-otulip.Tpo" -c -o libdrivers_a-otulip.o `test -f 'otulip.c' || echo '$(srcdir)/'`otulip.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-otulip.Tpo" "$(DEPDIR)/libdrivers_a-otulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-otulip.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='otulip.c' object='libdrivers_a-otulip.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-otulip.o `test -f 'otulip.c' || echo '$(srcdir)/'`otulip.c -- --libdrivers_a-otulip.obj: otulip.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-otulip.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-otulip.Tpo" -c -o libdrivers_a-otulip.obj `if test -f 'otulip.c'; then $(CYGPATH_W) 'otulip.c'; else $(CYGPATH_W) '$(srcdir)/otulip.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-otulip.Tpo" "$(DEPDIR)/libdrivers_a-otulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-otulip.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='otulip.c' object='libdrivers_a-otulip.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-otulip.obj `if test -f 'otulip.c'; then $(CYGPATH_W) 'otulip.c'; else $(CYGPATH_W) '$(srcdir)/otulip.c'; fi` -- --libdrivers_a-rtl8139.o: rtl8139.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-rtl8139.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" -c -o libdrivers_a-rtl8139.o `test -f 'rtl8139.c' || echo '$(srcdir)/'`rtl8139.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" "$(DEPDIR)/libdrivers_a-rtl8139.Po"; else rm -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rtl8139.c' object='libdrivers_a-rtl8139.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-rtl8139.o `test -f 'rtl8139.c' || echo '$(srcdir)/'`rtl8139.c -- --libdrivers_a-rtl8139.obj: rtl8139.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-rtl8139.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" -c -o libdrivers_a-rtl8139.obj `if test -f 'rtl8139.c'; then $(CYGPATH_W) 'rtl8139.c'; else $(CYGPATH_W) '$(srcdir)/rtl8139.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo" "$(DEPDIR)/libdrivers_a-rtl8139.Po"; else rm -f "$(DEPDIR)/libdrivers_a-rtl8139.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='rtl8139.c' object='libdrivers_a-rtl8139.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-rtl8139.obj `if test -f 'rtl8139.c'; then $(CYGPATH_W) 'rtl8139.c'; else $(CYGPATH_W) '$(srcdir)/rtl8139.c'; fi` -- --libdrivers_a-sis900.o: sis900.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sis900.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-sis900.Tpo" -c -o libdrivers_a-sis900.o `test -f 'sis900.c' || echo '$(srcdir)/'`sis900.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-sis900.Tpo" "$(DEPDIR)/libdrivers_a-sis900.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sis900.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sis900.c' object='libdrivers_a-sis900.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sis900.o `test -f 'sis900.c' || echo '$(srcdir)/'`sis900.c -- --libdrivers_a-sis900.obj: sis900.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sis900.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-sis900.Tpo" -c -o libdrivers_a-sis900.obj `if test -f 'sis900.c'; then $(CYGPATH_W) 'sis900.c'; else $(CYGPATH_W) '$(srcdir)/sis900.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-sis900.Tpo" "$(DEPDIR)/libdrivers_a-sis900.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sis900.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sis900.c' object='libdrivers_a-sis900.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sis900.obj `if test -f 'sis900.c'; then $(CYGPATH_W) 'sis900.c'; else $(CYGPATH_W) '$(srcdir)/sis900.c'; fi` -- --libdrivers_a-sk_g16.o: sk_g16.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sk_g16.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" -c -o libdrivers_a-sk_g16.o `test -f 'sk_g16.c' || echo '$(srcdir)/'`sk_g16.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" "$(DEPDIR)/libdrivers_a-sk_g16.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sk_g16.c' object='libdrivers_a-sk_g16.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sk_g16.o `test -f 'sk_g16.c' || echo '$(srcdir)/'`sk_g16.c -- --libdrivers_a-sk_g16.obj: sk_g16.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-sk_g16.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" -c -o libdrivers_a-sk_g16.obj `if test -f 'sk_g16.c'; then $(CYGPATH_W) 'sk_g16.c'; else $(CYGPATH_W) '$(srcdir)/sk_g16.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo" "$(DEPDIR)/libdrivers_a-sk_g16.Po"; else rm -f "$(DEPDIR)/libdrivers_a-sk_g16.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='sk_g16.c' object='libdrivers_a-sk_g16.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-sk_g16.obj `if test -f 'sk_g16.c'; then $(CYGPATH_W) 'sk_g16.c'; else $(CYGPATH_W) '$(srcdir)/sk_g16.c'; fi` -- --libdrivers_a-smc9000.o: smc9000.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-smc9000.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-smc9000.Tpo" -c -o libdrivers_a-smc9000.o `test -f 'smc9000.c' || echo '$(srcdir)/'`smc9000.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo" "$(DEPDIR)/libdrivers_a-smc9000.Po"; else rm -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smc9000.c' object='libdrivers_a-smc9000.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-smc9000.o `test -f 'smc9000.c' || echo '$(srcdir)/'`smc9000.c -- --libdrivers_a-smc9000.obj: smc9000.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-smc9000.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-smc9000.Tpo" -c -o libdrivers_a-smc9000.obj `if test -f 'smc9000.c'; then $(CYGPATH_W) 'smc9000.c'; else $(CYGPATH_W) '$(srcdir)/smc9000.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo" "$(DEPDIR)/libdrivers_a-smc9000.Po"; else rm -f "$(DEPDIR)/libdrivers_a-smc9000.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smc9000.c' object='libdrivers_a-smc9000.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-smc9000.obj `if test -f 'smc9000.c'; then $(CYGPATH_W) 'smc9000.c'; else $(CYGPATH_W) '$(srcdir)/smc9000.c'; fi` -- --libdrivers_a-tiara.o: tiara.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tiara.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-tiara.Tpo" -c -o libdrivers_a-tiara.o `test -f 'tiara.c' || echo '$(srcdir)/'`tiara.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tiara.Tpo" "$(DEPDIR)/libdrivers_a-tiara.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tiara.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tiara.c' object='libdrivers_a-tiara.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tiara.o `test -f 'tiara.c' || echo '$(srcdir)/'`tiara.c -- --libdrivers_a-tiara.obj: tiara.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tiara.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-tiara.Tpo" -c -o libdrivers_a-tiara.obj `if test -f 'tiara.c'; then $(CYGPATH_W) 'tiara.c'; else $(CYGPATH_W) '$(srcdir)/tiara.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tiara.Tpo" "$(DEPDIR)/libdrivers_a-tiara.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tiara.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tiara.c' object='libdrivers_a-tiara.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tiara.obj `if test -f 'tiara.c'; then $(CYGPATH_W) 'tiara.c'; else $(CYGPATH_W) '$(srcdir)/tiara.c'; fi` -- --libdrivers_a-tlan.o: tlan.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tlan.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-tlan.Tpo" -c -o libdrivers_a-tlan.o `test -f 'tlan.c' || echo '$(srcdir)/'`tlan.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tlan.Tpo" "$(DEPDIR)/libdrivers_a-tlan.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tlan.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tlan.c' object='libdrivers_a-tlan.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tlan.o `test -f 'tlan.c' || echo '$(srcdir)/'`tlan.c -- --libdrivers_a-tlan.obj: tlan.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tlan.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-tlan.Tpo" -c -o libdrivers_a-tlan.obj `if test -f 'tlan.c'; then $(CYGPATH_W) 'tlan.c'; else $(CYGPATH_W) '$(srcdir)/tlan.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tlan.Tpo" "$(DEPDIR)/libdrivers_a-tlan.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tlan.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tlan.c' object='libdrivers_a-tlan.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tlan.obj `if test -f 'tlan.c'; then $(CYGPATH_W) 'tlan.c'; else $(CYGPATH_W) '$(srcdir)/tlan.c'; fi` -- --libdrivers_a-tulip.o: tulip.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tulip.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-tulip.Tpo" -c -o libdrivers_a-tulip.o `test -f 'tulip.c' || echo '$(srcdir)/'`tulip.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tulip.Tpo" "$(DEPDIR)/libdrivers_a-tulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tulip.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tulip.c' object='libdrivers_a-tulip.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tulip.o `test -f 'tulip.c' || echo '$(srcdir)/'`tulip.c -- --libdrivers_a-tulip.obj: tulip.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-tulip.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-tulip.Tpo" -c -o libdrivers_a-tulip.obj `if test -f 'tulip.c'; then $(CYGPATH_W) 'tulip.c'; else $(CYGPATH_W) '$(srcdir)/tulip.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-tulip.Tpo" "$(DEPDIR)/libdrivers_a-tulip.Po"; else rm -f "$(DEPDIR)/libdrivers_a-tulip.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tulip.c' object='libdrivers_a-tulip.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-tulip.obj `if test -f 'tulip.c'; then $(CYGPATH_W) 'tulip.c'; else $(CYGPATH_W) '$(srcdir)/tulip.c'; fi` -- --libdrivers_a-via-rhine.o: via-rhine.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-via-rhine.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" -c -o libdrivers_a-via-rhine.o `test -f 'via-rhine.c' || echo '$(srcdir)/'`via-rhine.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" "$(DEPDIR)/libdrivers_a-via-rhine.Po"; else rm -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='via-rhine.c' object='libdrivers_a-via-rhine.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-via-rhine.o `test -f 'via-rhine.c' || echo '$(srcdir)/'`via-rhine.c -- --libdrivers_a-via-rhine.obj: via-rhine.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-via-rhine.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" -c -o libdrivers_a-via-rhine.obj `if test -f 'via-rhine.c'; then $(CYGPATH_W) 'via-rhine.c'; else $(CYGPATH_W) '$(srcdir)/via-rhine.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo" "$(DEPDIR)/libdrivers_a-via-rhine.Po"; else rm -f "$(DEPDIR)/libdrivers_a-via-rhine.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='via-rhine.c' object='libdrivers_a-via-rhine.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-via-rhine.obj `if test -f 'via-rhine.c'; then $(CYGPATH_W) 'via-rhine.c'; else $(CYGPATH_W) '$(srcdir)/via-rhine.c'; fi` -- --libdrivers_a-w89c840.o: w89c840.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-w89c840.o -MD -MP -MF "$(DEPDIR)/libdrivers_a-w89c840.Tpo" -c -o libdrivers_a-w89c840.o `test -f 'w89c840.c' || echo '$(srcdir)/'`w89c840.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo" "$(DEPDIR)/libdrivers_a-w89c840.Po"; else rm -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='w89c840.c' object='libdrivers_a-w89c840.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-w89c840.o `test -f 'w89c840.c' || echo '$(srcdir)/'`w89c840.c -- --libdrivers_a-w89c840.obj: w89c840.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -MT libdrivers_a-w89c840.obj -MD -MP -MF "$(DEPDIR)/libdrivers_a-w89c840.Tpo" -c -o libdrivers_a-w89c840.obj `if test -f 'w89c840.c'; then $(CYGPATH_W) 'w89c840.c'; else $(CYGPATH_W) '$(srcdir)/w89c840.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo" "$(DEPDIR)/libdrivers_a-w89c840.Po"; else rm -f "$(DEPDIR)/libdrivers_a-w89c840.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='w89c840.c' object='libdrivers_a-w89c840.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libdrivers_a_CFLAGS) $(CFLAGS) -c -o libdrivers_a-w89c840.obj `if test -f 'w89c840.c'; then $(CYGPATH_W) 'w89c840.c'; else $(CYGPATH_W) '$(srcdir)/w89c840.c'; fi` --uninstall-info-am: -- --ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- mkid -fID $$unique --tags: TAGS -- --TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ -- test -n "$$unique" || unique=$$empty_fix; \ -- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -- $$tags $$unique; \ -- fi --ctags: CTAGS --CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- test -z "$(CTAGS_ARGS)$$tags$$unique" \ -- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ -- $$tags $$unique -- --GTAGS: -- here=`$(am__cd) $(top_builddir) && pwd` \ -- && cd $(top_srcdir) \ -- && gtags -i $(GTAGS_ARGS) $$here -- --distclean-tags: -- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -- --distdir: $(DISTFILES) -- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ -- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ -- list='$(DISTFILES)'; for file in $$list; do \ -- case $$file in \ -- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ -- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ -- esac; \ -- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ -- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ -- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ -- dir="/$$dir"; \ -- $(mkdir_p) "$(distdir)$$dir"; \ -- else \ -- dir=''; \ -- fi; \ -- if test -d $$d/$$file; then \ -- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ -- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ -- fi; \ -- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ -- else \ -- test -f $(distdir)/$$file \ -- || cp -p $$d/$$file $(distdir)/$$file \ -- || exit 1; \ -- fi; \ -- done --check-am: all-am --check: check-am --all-am: Makefile $(LIBRARIES) --installdirs: --install: install-am --install-exec: install-exec-am --install-data: install-data-am --uninstall: uninstall-am -- --install-am: all-am -- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -- --installcheck: installcheck-am --install-strip: -- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ -- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ -- `test -z '$(STRIP)' || \ -- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install --mostlyclean-generic: -- --clean-generic: -- --distclean-generic: -- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -- --maintainer-clean-generic: -- @echo "This command is intended for maintainers to use" -- @echo "it deletes files that may require special tools to rebuild." --clean: clean-am -- --clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am -- --distclean: distclean-am -- -rm -rf ./$(DEPDIR) -- -rm -f Makefile --distclean-am: clean-am distclean-compile distclean-generic \ -- distclean-tags -- --dvi: dvi-am -- --dvi-am: -- --html: html-am -- --info: info-am -- --info-am: -- --install-data-am: -- --install-exec-am: -- --install-info: install-info-am -- --install-man: -- --installcheck-am: -- --maintainer-clean: maintainer-clean-am -- -rm -rf ./$(DEPDIR) -- -rm -f Makefile --maintainer-clean-am: distclean-am maintainer-clean-generic -- --mostlyclean: mostlyclean-am -- --mostlyclean-am: mostlyclean-compile mostlyclean-generic -- --pdf: pdf-am -- --pdf-am: -- --ps: ps-am -- --ps-am: -- --uninstall-am: uninstall-info-am -- --.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ -- clean-noinstLIBRARIES ctags distclean distclean-compile \ -- distclean-generic distclean-tags distdir dvi dvi-am html \ -- html-am info info-am install install-am install-data \ -- install-data-am install-exec install-exec-am install-info \ -- install-info-am install-man install-strip installcheck \ -- installcheck-am installdirs maintainer-clean \ -- maintainer-clean-generic mostlyclean mostlyclean-compile \ -- mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ -- uninstall-am uninstall-info-am -- -- --# Is it really necessary to specify dependecies explicitly? --$(3c509_drivers): 3c509.c 3c509.h --$(3c509_drivers): %.o: 3c509.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(3c595_drivers): 3c595.c 3c595.h --$(3c595_drivers): %.o: 3c595.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(3c90x_drivers): 3c90x.c --$(3c90x_drivers): %.o: 3c90x.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(cs89x0_drivers): cs89x0.c cs89x0.h --$(cs89x0_drivers): %.o: cs89x0.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(davicom_drivers): davicom.c --$(davicom_drivers): %.o: davicom.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(depca_drivers): depca.c --$(depca_drivers): %.o: depca.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(eepro_drivers): eepro.c --$(eepro_drivers): %.o: eepro.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(eepro100_drivers): eepro100.c --$(eepro100_drivers): %.o: eepro100.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(epic100_drivers): epic100.c epic100.h --$(epic100_drivers): %.o: epic100.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --#$(fa311_drivers): fa311.c --#$(fa311_drivers): %.o: fa311.c --# $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ --# $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(i82586_drivers): i82586.c --$(i82586_drivers): %.o: i82586.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(lance_drivers): lance.c --$(lance_drivers): %.o: lance.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(natsemi_drivers): natsemi.c --$(natsemi_drivers): %.o: natsemi.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(ni5010_drivers): ni5010.c --$(ni5010_drivers): %.o: ni5010.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(ns8390_drivers): ns8390.c ns8390.h --$(ns8390_drivers): %.o: ns8390.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(otulip_drivers): otulip.c otulip.h --$(otulip_drivers): %.o: otulip.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(rtl8139_drivers): rtl8139.c --$(rtl8139_drivers): %.o: rtl8139.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(sis900_drivers): sis900.c --$(sis900_drivers): %.o: sis900.c sis900.h -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(sk_g16_drivers): sk_g16.c sk_g16.h --$(sk_g16_drivers): %.o: sk_g16.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(smc9000_drivers): smc9000.c smc9000.h --$(smc9000_drivers): %.o: smc9000.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(tiara_drivers): tiara.c --$(tiara_drivers): %.o: tiara.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --#$(tlan_drivers): tlan.c --#$(tlan_drivers): %.o: tlan.c --# $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ --# $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(tulip_drivers): tulip.c --$(tulip_drivers): %.o: tulip.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(via_rhine_drivers): via-rhine.c --$(via_rhine_drivers): %.o: via-rhine.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< -- --$(w89c840_drivers): w89c840.c --$(w89c840_drivers): %.o: w89c840.c -- $(COMPILE) $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NET_EXTRAFLAGS) $($(basename $@)_o_CFLAGS) -o $@ -c $< --# Tell versions [3.59,3.63) of GNU make to not export all variables. --# Otherwise a system limit (for SysV at least) may be exceeded. --.NOEXPORT: -diff --git a/netboot/etherboot.h b/netboot/etherboot.h -index 74ca16f..9c02b25 100644 ---- a/netboot/etherboot.h -+++ b/netboot/etherboot.h -@@ -246,7 +246,7 @@ Author: Martin Renters - - typedef struct - { -- unsigned long s_addr; -+ unsigned int s_addr; - } - in_addr; - -@@ -302,7 +302,7 @@ struct bootp_t - char bp_htype; - char bp_hlen; - char bp_hops; -- unsigned long bp_xid; -+ unsigned int bp_xid; - unsigned short bp_secs; - unsigned short unused; - in_addr bp_ciaddr; -@@ -411,25 +411,25 @@ struct rpc_t - - struct - { -- long id; -- long type; -- long rpcvers; -- long prog; -- long vers; -- long proc; -- long data[1]; -+ int id; -+ int type; -+ int rpcvers; -+ int prog; -+ int vers; -+ int proc; -+ int data[1]; - } - call; - - struct - { -- long id; -- long type; -- long rstatus; -- long verifier; -- long v2; -- long astatus; -- long data[1]; -+ int id; -+ int type; -+ int rstatus; -+ int verifier; -+ int v2; -+ int astatus; -+ int data[1]; - } - reply; - } -@@ -531,9 +531,7 @@ extern int ip_abort; - extern int network_ready; - extern struct rom_info rom; - extern struct arptable_t arptable[MAX_ARP]; --extern struct bootpd_t bootp_data; - #define BOOTP_DATA_ADDR (&bootp_data) --extern unsigned char *end_of_rfc1533; - - /* config.c */ - extern struct nic nic; -diff --git a/netboot/main.c b/netboot/main.c -index 82759b6..b8ba920 100644 ---- a/netboot/main.c -+++ b/netboot/main.c -@@ -53,9 +53,9 @@ int network_ready = 0; - struct rom_info rom; - - static int vendorext_isvalid; --static unsigned long netmask; -+static unsigned int netmask; - static struct bootpd_t bootp_data; --static unsigned long xid; -+static unsigned int xid; - static unsigned char *end_of_rfc1533 = NULL; - - #ifndef NO_DHCP_SUPPORT -@@ -773,7 +773,7 @@ await_reply (int type, int ival, void *ptr, int timeout) - if (nic.packetlen >= ETH_HLEN + sizeof (struct arprequest) - && ptype == ARP) - { -- unsigned long tmp; -+ unsigned int tmp; - - arpreply = (struct arprequest *) &nic.packet[ETH_HLEN]; - -diff --git a/netboot/misc.c b/netboot/misc.c -index 28614fd..6ea9a8e 100644 ---- a/netboot/misc.c -+++ b/netboot/misc.c -@@ -21,6 +21,7 @@ - - #define GRUB 1 - #include <etherboot.h> -+#include <stdarg.h> - - void - sleep (int secs) -@@ -71,9 +72,10 @@ PRINTF and friends - Note: width specification not supported - **************************************************************************/ - static int --etherboot_vsprintf (char *buf, const char *fmt, const int *dp) -+etherboot_vsprintf (char *buf, const char *fmt, va_list args) - { - char *p, *s; -+ int n; - - s = buf; - for ( ; *fmt != '\0'; ++fmt) -@@ -86,7 +88,7 @@ etherboot_vsprintf (char *buf, const char *fmt, const int *dp) - - if (*++fmt == 's') - { -- for (p = (char *) *dp++; *p != '\0'; p++) -+ for (p = va_arg (args, char *); *p != '\0'; p++) - buf ? *s++ = *p : grub_putchar (*p); - } - else -@@ -120,46 +122,44 @@ etherboot_vsprintf (char *buf, const char *fmt, const int *dp) - */ - if ((*fmt | 0x20) == 'x') - { -- /* With x86 gcc, sizeof(long) == sizeof(int) */ -- const long *lp = (const long *) dp; -- long h = *lp++; - int ncase = (*fmt & 0x20); -+ -+ n = va_arg (args, int); - -- dp = (const int *) lp; - if (alt) - { - *q++ = '0'; - *q++ = 'X' | ncase; - } - for (; shift >= 0; shift -= 4) -- *q++ = "0123456789ABCDEF"[(h >> shift) & 0xF] | ncase; -+ *q++ = "0123456789ABCDEF"[(n >> shift) & 0xF] | ncase; - } - else if (*fmt == 'd') - { -- int i = *dp++; - char *r; -- -- if (i < 0) -+ -+ n = va_arg (args, int); -+ if (n < 0) - { - *q++ = '-'; -- i = -i; -+ n = -n; - } - - p = q; /* save beginning of digits */ - do - { -- *q++ = '0' + (i % 10); -- i /= 10; -+ *q++ = '0' + (n % 10); -+ n /= 10; - } -- while (i); -+ while (n); - - /* reverse digits, stop in middle */ - r = q; /* don't alter q */ - while (--r > p) - { -- i = *r; -+ n = *r; - *r = *p; -- *p++ = i; -+ *p++ = n; - } - } - else if (*fmt == '@') -@@ -167,14 +167,12 @@ etherboot_vsprintf (char *buf, const char *fmt, const int *dp) - unsigned char *r; - union - { -- long l; -+ int l; - unsigned char c[4]; - } - u; -- const long *lp = (const long *) dp; - -- u.l = *lp++; -- dp = (const int *) lp; -+ u.l = va_arg (args, int); - - for (r = &u.c[0]; r < &u.c[4]; ++r) - q += etherboot_sprintf (q, "%d.", *r); -@@ -184,15 +182,15 @@ etherboot_vsprintf (char *buf, const char *fmt, const int *dp) - else if (*fmt == '!') - { - char *r; -- p = (char *) *dp++; -- -+ -+ p = va_arg (args, char *); - for (r = p + ETH_ALEN; p < r; ++p) - q += etherboot_sprintf (q, "%hhX:", *p); - - --q; - } - else if (*fmt == 'c') -- *q++ = *dp++; -+ *q++ = va_arg (args, int); - else - *q++ = *fmt; - -@@ -211,13 +209,23 @@ etherboot_vsprintf (char *buf, const char *fmt, const int *dp) - int - etherboot_sprintf (char *buf, const char *fmt, ...) - { -- return etherboot_vsprintf (buf, fmt, ((const int *) &fmt) + 1); -+ va_list ap; -+ int ret; -+ -+ va_start (ap, fmt); -+ ret = etherboot_vsprintf (buf, fmt, ap); -+ va_end (ap); -+ return ret; - } - - void - etherboot_printf (const char *fmt, ...) - { -- (void) etherboot_vsprintf (0, fmt, ((const int *) &fmt) + 1); -+ va_list ap; -+ -+ va_start (ap, fmt); -+ (void) etherboot_vsprintf (0, fmt, ap); -+ va_end (ap); - } - - int -diff --git a/netboot/osdep.h b/netboot/osdep.h -index 57218bf..881141b 100644 ---- a/netboot/osdep.h -+++ b/netboot/osdep.h -@@ -21,10 +21,10 @@ - #elif defined(__LITTLE_ENDIAN) - # if !defined(__constant_htonl) - # define __constant_htonl(x) \ -- ((unsigned long int)((((unsigned long int)(x) & 0x000000ffU) << 24) | \ -- (((unsigned long int)(x) & 0x0000ff00U) << 8) | \ -- (((unsigned long int)(x) & 0x00ff0000U) >> 8) | \ -- (((unsigned long int)(x) & 0xff000000U) >> 24))) -+ ((unsigned int)((((unsigned int)(x) & 0x000000ffU) << 24) | \ -+ (((unsigned int)(x) & 0x0000ff00U) << 8) | \ -+ (((unsigned int)(x) & 0x00ff0000U) >> 8) | \ -+ (((unsigned int)(x) & 0xff000000U) >> 24))) - # endif - # if !defined(__constant_htons) - # define __constant_htons(x) \ -@@ -36,11 +36,11 @@ - #endif - - #define ntohl(x) \ --(__builtin_constant_p(x) ? \ -+(__builtin_constant_p((unsigned int)x) ? \ - __constant_htonl((x)) : \ - __swap32(x)) - #define htonl(x) \ --(__builtin_constant_p(x) ? \ -+(__builtin_constant_p((unsigned int)x) ? \ - __constant_htonl((x)) : \ - __swap32(x)) - #define ntohs(x) \ -@@ -52,21 +52,29 @@ - __constant_htons((x)) : \ - __swap16(x)) - --static inline unsigned long int __swap32(unsigned long int x) -+static inline unsigned int __swap32(unsigned int x) - { -+#ifdef PLATFORM_EFI -+ __asm__("bswapl %0" : "=r" (x) : "0" (x)); -+#else - __asm__("xchgb %b0,%h0\n\t" - "rorl $16,%0\n\t" - "xchgb %b0,%h0" - : "=q" (x) - : "0" (x)); -+#endif - return x; - } - - static inline unsigned short int __swap16(unsigned short int x) - { -+#ifdef PLATFORM_EFI -+ return __constant_htons(x); -+#else - __asm__("xchgb %b0,%h0" - : "=q" (x) - : "0" (x)); -+#endif - return x; - } - -@@ -76,7 +84,7 @@ static inline unsigned short int __swap16(unsigned short int x) - - #include "linux-asm-io.h" - --typedef unsigned long Address; -+typedef unsigned int Address; - - /* ANSI prototyping macro */ - #ifdef __STDC__ -diff --git a/stage1/.gitignore b/stage1/.gitignore -new file mode 100644 -index 0000000..5d89f6d ---- /dev/null -+++ b/stage1/.gitignore -@@ -0,0 +1,2 @@ -+Makefile.in -+.deps -diff --git a/stage1/Makefile.am b/stage1/Makefile.am -index 0afc285..cbae397 100644 ---- a/stage1/Makefile.am -+++ b/stage1/Makefile.am -@@ -1,11 +1,14 @@ --pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) --nodist_pkglib_DATA = stage1 -- --CLEANFILES = $(nodist_pkglib_DATA) -+pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) - - # We can't use builtins or standard includes. - AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc --LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00 -+LDFLAGS = $(LOADER_LDFLAGS) -nostdlib -Wl,-N,-Ttext,7C00 -+ -+if !PLATFORM_EFI -+ -+nodist_pkgdata_DATA = stage1 -+ -+CLEANFILES = $(nodist_pkgdata_DATA) - - noinst_PROGRAMS = stage1.exec - stage1_exec_SOURCES = stage1.S stage1.h -@@ -13,3 +16,5 @@ stage1_exec_SOURCES = stage1.S stage1.h - SUFFIXES = .exec - .exec: - $(OBJCOPY) -O binary $< $@ -+ -+endif -diff --git a/stage1/Makefile.in b/stage1/Makefile.in -deleted file mode 100644 -index 7134bdf..0000000 ---- a/stage1/Makefile.in -+++ /dev/null -@@ -1,433 +0,0 @@ --# Makefile.in generated by automake 1.9.4 from Makefile.am. --# @configure_input@ -- --# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004 Free Software Foundation, Inc. --# This Makefile.in is free software; the Free Software Foundation --# gives unlimited permission to copy and/or distribute it, --# with or without modifications, as long as this notice is preserved. -- --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY, to the extent permitted by law; without --# even the implied warranty of MERCHANTABILITY or FITNESS FOR A --# PARTICULAR PURPOSE. -- --@SET_MAKE@ -- -- --SOURCES = $(stage1_exec_SOURCES) -- --srcdir = @srcdir@ --top_srcdir = @top_srcdir@ --VPATH = @srcdir@ --pkgdatadir = $(datadir)/@PACKAGE@ --pkgincludedir = $(includedir)/@PACKAGE@ --top_builddir = .. --am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd --INSTALL = @INSTALL@ --install_sh_DATA = $(install_sh) -c -m 644 --install_sh_PROGRAM = $(install_sh) -c --install_sh_SCRIPT = $(install_sh) -c --INSTALL_HEADER = $(INSTALL_DATA) --transform = $(program_transform_name) --NORMAL_INSTALL = : --PRE_INSTALL = : --POST_INSTALL = : --NORMAL_UNINSTALL = : --PRE_UNINSTALL = : --POST_UNINSTALL = : --build_triplet = @build@ --host_triplet = @host@ --noinst_PROGRAMS = stage1.exec$(EXEEXT) --subdir = stage1 --DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in --ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 --am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ -- $(top_srcdir)/configure.ac --am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ -- $(ACLOCAL_M4) --mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs --CONFIG_HEADER = $(top_builddir)/config.h --CONFIG_CLEAN_FILES = --PROGRAMS = $(noinst_PROGRAMS) --am_stage1_exec_OBJECTS = stage1.$(OBJEXT) --stage1_exec_OBJECTS = $(am_stage1_exec_OBJECTS) --stage1_exec_LDADD = $(LDADD) --DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) --CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) --COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ -- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) --CCLD = $(CC) --LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ --SOURCES = $(stage1_exec_SOURCES) --DIST_SOURCES = $(stage1_exec_SOURCES) --am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; --am__vpath_adj = case $$p in \ -- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ -- *) f=$$p;; \ -- esac; --am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; --am__installdirs = "$(DESTDIR)$(pkglibdir)" --nodist_pkglibDATA_INSTALL = $(INSTALL_DATA) --DATA = $(nodist_pkglib_DATA) --ETAGS = etags --CTAGS = ctags --DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) --pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) --ACLOCAL = @ACLOCAL@ --AMDEP_FALSE = @AMDEP_FALSE@ --AMDEP_TRUE = @AMDEP_TRUE@ --AMTAR = @AMTAR@ --AUTOCONF = @AUTOCONF@ --AUTOHEADER = @AUTOHEADER@ --AUTOMAKE = @AUTOMAKE@ --AWK = @AWK@ --BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ --BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ --CC = @CC@ --CCAS = @CCAS@ --CCASFLAGS = @CCASFLAGS@ --CCDEPMODE = @CCDEPMODE@ --CFLAGS = @CFLAGS@ --CPP = @CPP@ --CPPFLAGS = @CPPFLAGS@ --CYGPATH_W = @CYGPATH_W@ --DEFS = @DEFS@ --DEPDIR = @DEPDIR@ --DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ --DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ --ECHO_C = @ECHO_C@ --ECHO_N = @ECHO_N@ --ECHO_T = @ECHO_T@ --EGREP = @EGREP@ --EXEEXT = @EXEEXT@ --FSYS_CFLAGS = @FSYS_CFLAGS@ --GRUB_CFLAGS = @GRUB_CFLAGS@ --GRUB_LIBS = @GRUB_LIBS@ --HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ --HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ --INSTALL_DATA = @INSTALL_DATA@ --INSTALL_PROGRAM = @INSTALL_PROGRAM@ --INSTALL_SCRIPT = @INSTALL_SCRIPT@ --INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ --LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00 --LIBOBJS = @LIBOBJS@ --LIBS = @LIBS@ --LTLIBOBJS = @LTLIBOBJS@ --MAINT = @MAINT@ --MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ --MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ --MAKEINFO = @MAKEINFO@ --NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ --NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ --NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ --NET_CFLAGS = @NET_CFLAGS@ --NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ --OBJCOPY = @OBJCOPY@ --OBJEXT = @OBJEXT@ --PACKAGE = @PACKAGE@ --PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ --PACKAGE_NAME = @PACKAGE_NAME@ --PACKAGE_STRING = @PACKAGE_STRING@ --PACKAGE_TARNAME = @PACKAGE_TARNAME@ --PACKAGE_VERSION = @PACKAGE_VERSION@ --PATH_SEPARATOR = @PATH_SEPARATOR@ --PERL = @PERL@ --RANLIB = @RANLIB@ --SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ --SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ --SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ --SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ --SET_MAKE = @SET_MAKE@ --SHELL = @SHELL@ --STAGE1_CFLAGS = @STAGE1_CFLAGS@ --STAGE2_CFLAGS = @STAGE2_CFLAGS@ --STRIP = @STRIP@ --VERSION = @VERSION@ --ac_ct_CC = @ac_ct_CC@ --ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ --ac_ct_RANLIB = @ac_ct_RANLIB@ --ac_ct_STRIP = @ac_ct_STRIP@ --am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ --am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ --am__include = @am__include@ --am__leading_dot = @am__leading_dot@ --am__quote = @am__quote@ --am__tar = @am__tar@ --am__untar = @am__untar@ --bindir = @bindir@ --build = @build@ --build_alias = @build_alias@ --build_cpu = @build_cpu@ --build_os = @build_os@ --build_vendor = @build_vendor@ --datadir = @datadir@ --exec_prefix = @exec_prefix@ --host = @host@ --host_alias = @host_alias@ --host_cpu = @host_cpu@ --host_os = @host_os@ --host_vendor = @host_vendor@ --includedir = @includedir@ --infodir = @infodir@ --install_sh = @install_sh@ --libdir = @libdir@ --libexecdir = @libexecdir@ --localstatedir = @localstatedir@ --mandir = @mandir@ --mkdir_p = @mkdir_p@ --oldincludedir = @oldincludedir@ --prefix = @prefix@ --program_transform_name = @program_transform_name@ --sbindir = @sbindir@ --sharedstatedir = @sharedstatedir@ --sysconfdir = @sysconfdir@ --target_alias = @target_alias@ --nodist_pkglib_DATA = stage1 --CLEANFILES = $(nodist_pkglib_DATA) -- --# We can't use builtins or standard includes. --AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc --stage1_exec_SOURCES = stage1.S stage1.h --SUFFIXES = .exec --all: all-am -- --.SUFFIXES: --.SUFFIXES: .exec .S .o .obj --$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) -- @for dep in $?; do \ -- case '$(am__configure_deps)' in \ -- *$$dep*) \ -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ -- && exit 0; \ -- exit 1;; \ -- esac; \ -- done; \ -- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu stage1/Makefile'; \ -- cd $(top_srcdir) && \ -- $(AUTOMAKE) --gnu stage1/Makefile --.PRECIOUS: Makefile --Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -- @case '$?' in \ -- *config.status*) \ -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ -- *) \ -- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ -- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ -- esac; -- --$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -- --$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh --$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -- --clean-noinstPROGRAMS: -- -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) --stage1.exec$(EXEEXT): $(stage1_exec_OBJECTS) $(stage1_exec_DEPENDENCIES) -- @rm -f stage1.exec$(EXEEXT) -- $(LINK) $(stage1_exec_LDFLAGS) $(stage1_exec_OBJECTS) $(stage1_exec_LDADD) $(LIBS) -- --mostlyclean-compile: -- -rm -f *.$(OBJEXT) -- --distclean-compile: -- -rm -f *.tab.c -- --.S.o: -- $(CCASCOMPILE) -c $< -- --.S.obj: -- $(CCASCOMPILE) -c `$(CYGPATH_W) '$<'` --uninstall-info-am: --install-nodist_pkglibDATA: $(nodist_pkglib_DATA) -- @$(NORMAL_INSTALL) -- test -z "$(pkglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkglibdir)" -- @list='$(nodist_pkglib_DATA)'; for p in $$list; do \ -- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ -- f=$(am__strip_dir) \ -- echo " $(nodist_pkglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \ -- $(nodist_pkglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \ -- done -- --uninstall-nodist_pkglibDATA: -- @$(NORMAL_UNINSTALL) -- @list='$(nodist_pkglib_DATA)'; for p in $$list; do \ -- f=$(am__strip_dir) \ -- echo " rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ -- rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ -- done -- --ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- mkid -fID $$unique --tags: TAGS -- --TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ -- test -n "$$unique" || unique=$$empty_fix; \ -- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -- $$tags $$unique; \ -- fi --ctags: CTAGS --CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- test -z "$(CTAGS_ARGS)$$tags$$unique" \ -- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ -- $$tags $$unique -- --GTAGS: -- here=`$(am__cd) $(top_builddir) && pwd` \ -- && cd $(top_srcdir) \ -- && gtags -i $(GTAGS_ARGS) $$here -- --distclean-tags: -- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -- --distdir: $(DISTFILES) -- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ -- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ -- list='$(DISTFILES)'; for file in $$list; do \ -- case $$file in \ -- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ -- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ -- esac; \ -- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ -- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ -- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ -- dir="/$$dir"; \ -- $(mkdir_p) "$(distdir)$$dir"; \ -- else \ -- dir=''; \ -- fi; \ -- if test -d $$d/$$file; then \ -- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ -- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ -- fi; \ -- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ -- else \ -- test -f $(distdir)/$$file \ -- || cp -p $$d/$$file $(distdir)/$$file \ -- || exit 1; \ -- fi; \ -- done --check-am: all-am --check: check-am --all-am: Makefile $(PROGRAMS) $(DATA) --installdirs: -- for dir in "$(DESTDIR)$(pkglibdir)"; do \ -- test -z "$$dir" || $(mkdir_p) "$$dir"; \ -- done --install: install-am --install-exec: install-exec-am --install-data: install-data-am --uninstall: uninstall-am -- --install-am: all-am -- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -- --installcheck: installcheck-am --install-strip: -- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ -- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ -- `test -z '$(STRIP)' || \ -- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install --mostlyclean-generic: -- --clean-generic: -- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) -- --distclean-generic: -- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -- --maintainer-clean-generic: -- @echo "This command is intended for maintainers to use" -- @echo "it deletes files that may require special tools to rebuild." --clean: clean-am -- --clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am -- --distclean: distclean-am -- -rm -f Makefile --distclean-am: clean-am distclean-compile distclean-generic \ -- distclean-tags -- --dvi: dvi-am -- --dvi-am: -- --html: html-am -- --info: info-am -- --info-am: -- --install-data-am: -- --install-exec-am: install-nodist_pkglibDATA -- --install-info: install-info-am -- --install-man: -- --installcheck-am: -- --maintainer-clean: maintainer-clean-am -- -rm -f Makefile --maintainer-clean-am: distclean-am maintainer-clean-generic -- --mostlyclean: mostlyclean-am -- --mostlyclean-am: mostlyclean-compile mostlyclean-generic -- --pdf: pdf-am -- --pdf-am: -- --ps: ps-am -- --ps-am: -- --uninstall-am: uninstall-info-am uninstall-nodist_pkglibDATA -- --.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ -- clean-noinstPROGRAMS ctags distclean distclean-compile \ -- distclean-generic distclean-tags distdir dvi dvi-am html \ -- html-am info info-am install install-am install-data \ -- install-data-am install-exec install-exec-am install-info \ -- install-info-am install-man install-nodist_pkglibDATA \ -- install-strip installcheck installcheck-am installdirs \ -- maintainer-clean maintainer-clean-generic mostlyclean \ -- mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ -- tags uninstall uninstall-am uninstall-info-am \ -- uninstall-nodist_pkglibDATA -- --.exec: -- $(OBJCOPY) -O binary $< $@ --# Tell versions [3.59,3.63) of GNU make to not export all variables. --# Otherwise a system limit (for SysV at least) may be exceeded. --.NOEXPORT: -diff --git a/stage1/stage1.S b/stage1/stage1.S -index 985963d..3a896be 100644 ---- a/stage1/stage1.S -+++ b/stage1/stage1.S -@@ -31,6 +31,8 @@ - - /* Print message string */ - #define MSG(x) movw $ABS(x), %si; call message -+ /* Print verbose message string */ -+#define VMSG(x) - - /* XXX: binutils-2.9.1.0.x doesn't produce a short opcode for this. */ - #define MOV_MEM_TO_AL(x) .byte 0xa0; .word x -@@ -151,7 +153,7 @@ real_start: - pushw %dx - - /* print a notification message on the screen */ -- MSG(notification_string) -+ VMSG(notification_string) - - /* do not probe LBA if the drive is a floppy */ - testb $STAGE1_BIOS_HD_FLAG, %dl -diff --git a/stage2/.gitignore b/stage2/.gitignore -new file mode 100644 -index 0000000..e0480a0 ---- /dev/null -+++ b/stage2/.gitignore -@@ -0,0 +1,5 @@ -+Makefile.in -+Makefile -+.deps -+*.a -+*.o -diff --git a/stage2/Makefile.am b/stage2/Makefile.am -index f8e6d42..04ff165 100644 ---- a/stage2/Makefile.am -+++ b/stage2/Makefile.am -@@ -7,19 +7,23 @@ noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \ - fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \ - imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \ - nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \ -- terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h -+ terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h graphics.h gpt.h - EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS) - - # For <stage1.h>. --INCLUDES = -I$(top_srcdir)/stage1 -+INCLUDES = -I$(top_srcdir)/stage1 -I$(top_srcdir)/efi - - # The library for /sbin/grub. -+if PLATFORM_EFI -+noinst_LIBRARIES = libgrub.a libstage2.a -+else - noinst_LIBRARIES = libgrub.a -+endif - libgrub_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \ - disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \ -- fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \ -- fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \ -- terminfo.c tparm.c -+ fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_uefi.c fsys_ufs2.c \ -+ fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c sha256crypt.c \ -+ sha512crypt.c stage2.c terminfo.c tparm.c graphics.c efistubs.c - libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \ - -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ - -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \ -@@ -27,12 +31,14 @@ libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \ - -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 - - # Stage 2 and Stage 1.5's. --pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) -+pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) -+ -+if !PLATFORM_EFI - - EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec - - if DISKLESS_SUPPORT --pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ -+pkgdata_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ - ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ - reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 \ - nbgrub pxegrub -@@ -43,7 +49,7 @@ noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \ - reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \ - xfs_stage1_5.exec nbloader.exec pxeloader.exec diskless.exec - else --pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ -+pkgdata_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ - ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ - reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 - noinst_DATA = pre_stage2 start start_eltorito -@@ -55,11 +61,13 @@ noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \ - endif - MOSTLYCLEANFILES = $(noinst_PROGRAMS) - --PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200 --START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000 --NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0 --PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 --START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 -+endif -+ -+PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200 $(LOADER_LDFLAGS) -+START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000 $(LOADER_LDFLAGS) -+NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0 $(LOADER_LDFLAGS) -+PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 $(LOADER_LDFLAGS) -+START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 $(LOADER_LDFLAGS) - - if NETBOOT_SUPPORT - NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1 -@@ -79,10 +87,25 @@ else - HERCULES_FLAGS = - endif - -+if GRAPHICS_SUPPORT -+GRAPHICS_FLAGS = -DSUPPORT_GRAPHICS=1 -+else -+GRAPHICS_FLAGS = -+endif -+ - STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) -+ $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) $(GRAPHICS_FLAGS) -+ -+libstage2_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \ -+ disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \ -+ fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_uefi.c fsys_ufs2.c \ -+ fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c sha256crypt.c \ -+ sha512crypt.c stage2.c terminfo.c tparm.c efistubs.c -+libstage2_a_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) - --STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000 -+if !PLATFORM_EFI -+ -+STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000 $(LOADER_LDFLAGS) - STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1 - - # For stage2 target. -@@ -90,13 +113,15 @@ pre_stage2_exec_SOURCES = asm.S bios.c boot.c builtins.c char_io.c \ - cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \ - fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \ - fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \ -- hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c -+ hercules.c md5.c serial.c smp-imps.c sha256crypt.c sha512crypt.c \ -+ stage2.c terminfo.c tparm.c graphics.c - pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) - pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) - pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK) - -+pre_stage2_exec_LDADD = @LIBGCC@ - if NETBOOT_SUPPORT --pre_stage2_exec_LDADD = ../netboot/libdrivers.a -+pre_stage2_exec_LDADD += ../netboot/libdrivers.a - endif - - if DISKLESS_SUPPORT -@@ -105,7 +130,7 @@ else - BUILT_SOURCES = stage2_size.h - endif - --CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES) -+CLEANFILES = $(pkgdata_DATA) $(noinst_DATA) $(BUILT_SOURCES) - - stage2_size.h: pre_stage2 - -rm -f stage2_size.h -@@ -115,6 +140,7 @@ stage2_size.h: pre_stage2 - start_exec_SOURCES = start.S - start_exec_CCASFLAGS = $(STAGE2_COMPILE) - start_exec_LDFLAGS = $(START_LINK) -+start_exec_LDADD = @LIBGCC@ - - # XXX: automake doesn't provide a way to specify dependencies for object - # files explicitly, so we must write this by a general Makefile scheme. -@@ -129,6 +155,7 @@ stage2: pre_stage2 start - start_eltorito_exec_SOURCES = start_eltorito.S - start_eltorito_exec_CCASFLAGS = $(STAGE2_COMPILE) - start_eltorito_exec_LDFLAGS = $(START_ELTORITO_LINK) -+start_eltorito_exec_LDADD = @LIBGCC@ - - start_eltorito_exec-start.$(OBJEXT): stage2_size.h - -@@ -144,6 +171,7 @@ e2fs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \ - e2fs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \ - -DNO_BLOCK_FILES=1 - e2fs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -+e2fs_stage1_5_exec_LDADD = @LIBGCC@ - - # For fat_stage1_5 target. - fat_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ -@@ -153,6 +181,7 @@ fat_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \ - fat_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \ - -DNO_BLOCK_FILES=1 - fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -+fat_stage1_5_exec_LDADD = @LIBGCC@ - - # For ffs_stage1_5 target. - ffs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ -@@ -162,6 +191,7 @@ ffs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \ - ffs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \ - -DNO_BLOCK_FILES=1 - ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -+ffs_stage1_5_exec_LDADD = @LIBGCC@ - - # For ufs2_stage1_5 target. - ufs2_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ -@@ -171,6 +201,7 @@ ufs2_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ - ufs2_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ - -DNO_BLOCK_FILES=1 - ufs2_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -+ufs2_stage1_5_exec_LDADD = @LIBGCC@ - - # For minix_stage1_5 target. - minix_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ -@@ -180,6 +211,7 @@ minix_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \ - minix_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \ - -DNO_BLOCK_FILES=1 - minix_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -+minix_stage1_5_exec_LDADD = @LIBGCC@ - - # For reiserfs_stage1_5 target. - reiserfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ -@@ -189,6 +221,7 @@ reiserfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \ - reiserfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \ - -DNO_BLOCK_FILES=1 - reiserfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -+reiserfs_stage1_5_exec_LDADD = @LIBGCC@ - - # For vstafs_stage1_5 target. - vstafs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ -@@ -198,6 +231,7 @@ vstafs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \ - vstafs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \ - -DNO_BLOCK_FILES=1 - vstafs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -+vstafs_stage1_5_exec_LDADD = @LIBGCC@ - - # For jfs_stage1_5 target. - jfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ -@@ -207,6 +241,7 @@ jfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \ - jfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \ - -DNO_BLOCK_FILES=1 - jfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -+jfs_stage1_5_exec_LDADD = @LIBGCC@ - - # For xfs_stage1_5 target. - xfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ -@@ -216,6 +251,7 @@ xfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \ - xfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \ - -DNO_BLOCK_FILES=1 - xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -+xfs_stage1_5_exec_LDADD = @LIBGCC@ - - # For iso9660_stage1_5 target. - iso9660_stage1_5_exec_SOURCES = start_eltorito.S asm.S common.c char_io.c \ -@@ -225,6 +261,7 @@ iso9660_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ - iso9660_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ - -DNO_BLOCK_FILES=1 - iso9660_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -+iso9660_stage1_5_exec_LDADD = @LIBGCC@ - - # For diskless target. - diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES) -@@ -233,7 +270,7 @@ diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \ - diskless_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \ - -DSUPPORT_DISKLESS=1 - diskless_exec_LDFLAGS = $(PRE_STAGE2_LINK) --diskless_exec_LDADD = ../netboot/libdrivers.a -+diskless_exec_LDADD = ../netboot/libdrivers.a @LIBGCC@ - - diskless_size.h: diskless - -rm -f $@ -@@ -270,3 +307,5 @@ pxegrub: pxeloader diskless - SUFFIXES = .exec - .exec: - $(OBJCOPY) -O binary $< $@ -+ -+endif -diff --git a/stage2/Makefile.in b/stage2/Makefile.in -deleted file mode 100644 -index d0062bd..0000000 ---- a/stage2/Makefile.in -+++ /dev/null -@@ -1,3250 +0,0 @@ --# Makefile.in generated by automake 1.9.4 from Makefile.am. --# @configure_input@ -- --# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004 Free Software Foundation, Inc. --# This Makefile.in is free software; the Free Software Foundation --# gives unlimited permission to copy and/or distribute it, --# with or without modifications, as long as this notice is preserved. -- --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY, to the extent permitted by law; without --# even the implied warranty of MERCHANTABILITY or FITNESS FOR A --# PARTICULAR PURPOSE. -- --@SET_MAKE@ -- -- -- -- -- --SOURCES = $(libgrub_a_SOURCES) $(diskless_exec_SOURCES) $(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) $(ffs_stage1_5_exec_SOURCES) $(iso9660_stage1_5_exec_SOURCES) $(jfs_stage1_5_exec_SOURCES) $(minix_stage1_5_exec_SOURCES) $(nbloader_exec_SOURCES) $(pre_stage2_exec_SOURCES) $(pxeloader_exec_SOURCES) $(reiserfs_stage1_5_exec_SOURCES) $(start_exec_SOURCES) $(start_eltorito_exec_SOURCES) $(ufs2_stage1_5_exec_SOURCES) $(vstafs_stage1_5_exec_SOURCES) $(xfs_stage1_5_exec_SOURCES) -- --srcdir = @srcdir@ --top_srcdir = @top_srcdir@ --VPATH = @srcdir@ --pkgdatadir = $(datadir)/@PACKAGE@ --pkgincludedir = $(includedir)/@PACKAGE@ --top_builddir = .. --am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd --INSTALL = @INSTALL@ --install_sh_DATA = $(install_sh) -c -m 644 --install_sh_PROGRAM = $(install_sh) -c --install_sh_SCRIPT = $(install_sh) -c --INSTALL_HEADER = $(INSTALL_DATA) --transform = $(program_transform_name) --NORMAL_INSTALL = : --PRE_INSTALL = : --POST_INSTALL = : --NORMAL_UNINSTALL = : --PRE_UNINSTALL = : --POST_UNINSTALL = : --build_triplet = @build@ --host_triplet = @host@ --EXTRA_PROGRAMS = nbloader.exec$(EXEEXT) pxeloader.exec$(EXEEXT) \ -- diskless.exec$(EXEEXT) --@DISKLESS_SUPPORT_FALSE@noinst_PROGRAMS = pre_stage2.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_FALSE@ start.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_FALSE@ start_eltorito.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_FALSE@ e2fs_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_FALSE@ fat_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_FALSE@ ffs_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_FALSE@ iso9660_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_FALSE@ jfs_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_FALSE@ minix_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_FALSE@ reiserfs_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_FALSE@ ufs2_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_FALSE@ vstafs_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_FALSE@ xfs_stage1_5.exec$(EXEEXT) --@DISKLESS_SUPPORT_TRUE@noinst_PROGRAMS = pre_stage2.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_TRUE@ start.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_TRUE@ start_eltorito.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_TRUE@ e2fs_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_TRUE@ fat_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_TRUE@ ffs_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_TRUE@ iso9660_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_TRUE@ jfs_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_TRUE@ minix_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_TRUE@ reiserfs_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_TRUE@ ufs2_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_TRUE@ vstafs_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_TRUE@ xfs_stage1_5.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_TRUE@ nbloader.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_TRUE@ pxeloader.exec$(EXEEXT) \ --@DISKLESS_SUPPORT_TRUE@ diskless.exec$(EXEEXT) --subdir = stage2 --DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ -- $(srcdir)/Makefile.in --ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 --am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ -- $(top_srcdir)/configure.ac --am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ -- $(ACLOCAL_M4) --mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs --CONFIG_HEADER = $(top_builddir)/config.h --CONFIG_CLEAN_FILES = --LIBRARIES = $(noinst_LIBRARIES) --AR = ar --ARFLAGS = cru --libgrub_a_AR = $(AR) $(ARFLAGS) --libgrub_a_LIBADD = --am_libgrub_a_OBJECTS = libgrub_a-boot.$(OBJEXT) \ -- libgrub_a-builtins.$(OBJEXT) libgrub_a-char_io.$(OBJEXT) \ -- libgrub_a-cmdline.$(OBJEXT) libgrub_a-common.$(OBJEXT) \ -- libgrub_a-disk_io.$(OBJEXT) libgrub_a-fsys_ext2fs.$(OBJEXT) \ -- libgrub_a-fsys_fat.$(OBJEXT) libgrub_a-fsys_ffs.$(OBJEXT) \ -- libgrub_a-fsys_iso9660.$(OBJEXT) libgrub_a-fsys_jfs.$(OBJEXT) \ -- libgrub_a-fsys_minix.$(OBJEXT) \ -- libgrub_a-fsys_reiserfs.$(OBJEXT) \ -- libgrub_a-fsys_ufs2.$(OBJEXT) libgrub_a-fsys_vstafs.$(OBJEXT) \ -- libgrub_a-fsys_xfs.$(OBJEXT) libgrub_a-gunzip.$(OBJEXT) \ -- libgrub_a-md5.$(OBJEXT) libgrub_a-serial.$(OBJEXT) \ -- libgrub_a-stage2.$(OBJEXT) libgrub_a-terminfo.$(OBJEXT) \ -- libgrub_a-tparm.$(OBJEXT) --libgrub_a_OBJECTS = $(am_libgrub_a_OBJECTS) --PROGRAMS = $(noinst_PROGRAMS) --am__objects_1 = diskless_exec-asm.$(OBJEXT) \ -- diskless_exec-bios.$(OBJEXT) diskless_exec-boot.$(OBJEXT) \ -- diskless_exec-builtins.$(OBJEXT) \ -- diskless_exec-char_io.$(OBJEXT) \ -- diskless_exec-cmdline.$(OBJEXT) diskless_exec-common.$(OBJEXT) \ -- diskless_exec-console.$(OBJEXT) \ -- diskless_exec-disk_io.$(OBJEXT) \ -- diskless_exec-fsys_ext2fs.$(OBJEXT) \ -- diskless_exec-fsys_fat.$(OBJEXT) \ -- diskless_exec-fsys_ffs.$(OBJEXT) \ -- diskless_exec-fsys_iso9660.$(OBJEXT) \ -- diskless_exec-fsys_jfs.$(OBJEXT) \ -- diskless_exec-fsys_minix.$(OBJEXT) \ -- diskless_exec-fsys_reiserfs.$(OBJEXT) \ -- diskless_exec-fsys_ufs2.$(OBJEXT) \ -- diskless_exec-fsys_vstafs.$(OBJEXT) \ -- diskless_exec-fsys_xfs.$(OBJEXT) \ -- diskless_exec-gunzip.$(OBJEXT) \ -- diskless_exec-hercules.$(OBJEXT) diskless_exec-md5.$(OBJEXT) \ -- diskless_exec-serial.$(OBJEXT) \ -- diskless_exec-smp-imps.$(OBJEXT) \ -- diskless_exec-stage2.$(OBJEXT) \ -- diskless_exec-terminfo.$(OBJEXT) diskless_exec-tparm.$(OBJEXT) --am_diskless_exec_OBJECTS = $(am__objects_1) --diskless_exec_OBJECTS = $(am_diskless_exec_OBJECTS) --diskless_exec_DEPENDENCIES = ../netboot/libdrivers.a --am_e2fs_stage1_5_exec_OBJECTS = e2fs_stage1_5_exec-start.$(OBJEXT) \ -- e2fs_stage1_5_exec-asm.$(OBJEXT) \ -- e2fs_stage1_5_exec-common.$(OBJEXT) \ -- e2fs_stage1_5_exec-char_io.$(OBJEXT) \ -- e2fs_stage1_5_exec-disk_io.$(OBJEXT) \ -- e2fs_stage1_5_exec-stage1_5.$(OBJEXT) \ -- e2fs_stage1_5_exec-fsys_ext2fs.$(OBJEXT) \ -- e2fs_stage1_5_exec-bios.$(OBJEXT) --e2fs_stage1_5_exec_OBJECTS = $(am_e2fs_stage1_5_exec_OBJECTS) --e2fs_stage1_5_exec_LDADD = $(LDADD) --am_fat_stage1_5_exec_OBJECTS = fat_stage1_5_exec-start.$(OBJEXT) \ -- fat_stage1_5_exec-asm.$(OBJEXT) \ -- fat_stage1_5_exec-common.$(OBJEXT) \ -- fat_stage1_5_exec-char_io.$(OBJEXT) \ -- fat_stage1_5_exec-disk_io.$(OBJEXT) \ -- fat_stage1_5_exec-stage1_5.$(OBJEXT) \ -- fat_stage1_5_exec-fsys_fat.$(OBJEXT) \ -- fat_stage1_5_exec-bios.$(OBJEXT) --fat_stage1_5_exec_OBJECTS = $(am_fat_stage1_5_exec_OBJECTS) --fat_stage1_5_exec_LDADD = $(LDADD) --am_ffs_stage1_5_exec_OBJECTS = ffs_stage1_5_exec-start.$(OBJEXT) \ -- ffs_stage1_5_exec-asm.$(OBJEXT) \ -- ffs_stage1_5_exec-common.$(OBJEXT) \ -- ffs_stage1_5_exec-char_io.$(OBJEXT) \ -- ffs_stage1_5_exec-disk_io.$(OBJEXT) \ -- ffs_stage1_5_exec-stage1_5.$(OBJEXT) \ -- ffs_stage1_5_exec-fsys_ffs.$(OBJEXT) \ -- ffs_stage1_5_exec-bios.$(OBJEXT) --ffs_stage1_5_exec_OBJECTS = $(am_ffs_stage1_5_exec_OBJECTS) --ffs_stage1_5_exec_LDADD = $(LDADD) --am_iso9660_stage1_5_exec_OBJECTS = \ -- iso9660_stage1_5_exec-start_eltorito.$(OBJEXT) \ -- iso9660_stage1_5_exec-asm.$(OBJEXT) \ -- iso9660_stage1_5_exec-common.$(OBJEXT) \ -- iso9660_stage1_5_exec-char_io.$(OBJEXT) \ -- iso9660_stage1_5_exec-disk_io.$(OBJEXT) \ -- iso9660_stage1_5_exec-stage1_5.$(OBJEXT) \ -- iso9660_stage1_5_exec-fsys_iso9660.$(OBJEXT) \ -- iso9660_stage1_5_exec-bios.$(OBJEXT) --iso9660_stage1_5_exec_OBJECTS = $(am_iso9660_stage1_5_exec_OBJECTS) --iso9660_stage1_5_exec_LDADD = $(LDADD) --am_jfs_stage1_5_exec_OBJECTS = jfs_stage1_5_exec-start.$(OBJEXT) \ -- jfs_stage1_5_exec-asm.$(OBJEXT) \ -- jfs_stage1_5_exec-common.$(OBJEXT) \ -- jfs_stage1_5_exec-char_io.$(OBJEXT) \ -- jfs_stage1_5_exec-disk_io.$(OBJEXT) \ -- jfs_stage1_5_exec-stage1_5.$(OBJEXT) \ -- jfs_stage1_5_exec-fsys_jfs.$(OBJEXT) \ -- jfs_stage1_5_exec-bios.$(OBJEXT) --jfs_stage1_5_exec_OBJECTS = $(am_jfs_stage1_5_exec_OBJECTS) --jfs_stage1_5_exec_LDADD = $(LDADD) --am_minix_stage1_5_exec_OBJECTS = minix_stage1_5_exec-start.$(OBJEXT) \ -- minix_stage1_5_exec-asm.$(OBJEXT) \ -- minix_stage1_5_exec-common.$(OBJEXT) \ -- minix_stage1_5_exec-char_io.$(OBJEXT) \ -- minix_stage1_5_exec-disk_io.$(OBJEXT) \ -- minix_stage1_5_exec-stage1_5.$(OBJEXT) \ -- minix_stage1_5_exec-fsys_minix.$(OBJEXT) \ -- minix_stage1_5_exec-bios.$(OBJEXT) --minix_stage1_5_exec_OBJECTS = $(am_minix_stage1_5_exec_OBJECTS) --minix_stage1_5_exec_LDADD = $(LDADD) --am_nbloader_exec_OBJECTS = nbloader_exec-nbloader.$(OBJEXT) --nbloader_exec_OBJECTS = $(am_nbloader_exec_OBJECTS) --nbloader_exec_LDADD = $(LDADD) --am_pre_stage2_exec_OBJECTS = pre_stage2_exec-asm.$(OBJEXT) \ -- pre_stage2_exec-bios.$(OBJEXT) pre_stage2_exec-boot.$(OBJEXT) \ -- pre_stage2_exec-builtins.$(OBJEXT) \ -- pre_stage2_exec-char_io.$(OBJEXT) \ -- pre_stage2_exec-cmdline.$(OBJEXT) \ -- pre_stage2_exec-common.$(OBJEXT) \ -- pre_stage2_exec-console.$(OBJEXT) \ -- pre_stage2_exec-disk_io.$(OBJEXT) \ -- pre_stage2_exec-fsys_ext2fs.$(OBJEXT) \ -- pre_stage2_exec-fsys_fat.$(OBJEXT) \ -- pre_stage2_exec-fsys_ffs.$(OBJEXT) \ -- pre_stage2_exec-fsys_iso9660.$(OBJEXT) \ -- pre_stage2_exec-fsys_jfs.$(OBJEXT) \ -- pre_stage2_exec-fsys_minix.$(OBJEXT) \ -- pre_stage2_exec-fsys_reiserfs.$(OBJEXT) \ -- pre_stage2_exec-fsys_ufs2.$(OBJEXT) \ -- pre_stage2_exec-fsys_vstafs.$(OBJEXT) \ -- pre_stage2_exec-fsys_xfs.$(OBJEXT) \ -- pre_stage2_exec-gunzip.$(OBJEXT) \ -- pre_stage2_exec-hercules.$(OBJEXT) \ -- pre_stage2_exec-md5.$(OBJEXT) pre_stage2_exec-serial.$(OBJEXT) \ -- pre_stage2_exec-smp-imps.$(OBJEXT) \ -- pre_stage2_exec-stage2.$(OBJEXT) \ -- pre_stage2_exec-terminfo.$(OBJEXT) \ -- pre_stage2_exec-tparm.$(OBJEXT) --pre_stage2_exec_OBJECTS = $(am_pre_stage2_exec_OBJECTS) --@NETBOOT_SUPPORT_TRUE@pre_stage2_exec_DEPENDENCIES = \ --@NETBOOT_SUPPORT_TRUE@ ../netboot/libdrivers.a --am_pxeloader_exec_OBJECTS = pxeloader_exec-pxeloader.$(OBJEXT) --pxeloader_exec_OBJECTS = $(am_pxeloader_exec_OBJECTS) --pxeloader_exec_LDADD = $(LDADD) --am_reiserfs_stage1_5_exec_OBJECTS = \ -- reiserfs_stage1_5_exec-start.$(OBJEXT) \ -- reiserfs_stage1_5_exec-asm.$(OBJEXT) \ -- reiserfs_stage1_5_exec-common.$(OBJEXT) \ -- reiserfs_stage1_5_exec-char_io.$(OBJEXT) \ -- reiserfs_stage1_5_exec-disk_io.$(OBJEXT) \ -- reiserfs_stage1_5_exec-stage1_5.$(OBJEXT) \ -- reiserfs_stage1_5_exec-fsys_reiserfs.$(OBJEXT) \ -- reiserfs_stage1_5_exec-bios.$(OBJEXT) --reiserfs_stage1_5_exec_OBJECTS = $(am_reiserfs_stage1_5_exec_OBJECTS) --reiserfs_stage1_5_exec_LDADD = $(LDADD) --am_start_exec_OBJECTS = start_exec-start.$(OBJEXT) --start_exec_OBJECTS = $(am_start_exec_OBJECTS) --start_exec_LDADD = $(LDADD) --am_start_eltorito_exec_OBJECTS = \ -- start_eltorito_exec-start_eltorito.$(OBJEXT) --start_eltorito_exec_OBJECTS = $(am_start_eltorito_exec_OBJECTS) --start_eltorito_exec_LDADD = $(LDADD) --am_ufs2_stage1_5_exec_OBJECTS = ufs2_stage1_5_exec-start.$(OBJEXT) \ -- ufs2_stage1_5_exec-asm.$(OBJEXT) \ -- ufs2_stage1_5_exec-common.$(OBJEXT) \ -- ufs2_stage1_5_exec-char_io.$(OBJEXT) \ -- ufs2_stage1_5_exec-disk_io.$(OBJEXT) \ -- ufs2_stage1_5_exec-stage1_5.$(OBJEXT) \ -- ufs2_stage1_5_exec-fsys_ufs2.$(OBJEXT) \ -- ufs2_stage1_5_exec-bios.$(OBJEXT) --ufs2_stage1_5_exec_OBJECTS = $(am_ufs2_stage1_5_exec_OBJECTS) --ufs2_stage1_5_exec_LDADD = $(LDADD) --am_vstafs_stage1_5_exec_OBJECTS = \ -- vstafs_stage1_5_exec-start.$(OBJEXT) \ -- vstafs_stage1_5_exec-asm.$(OBJEXT) \ -- vstafs_stage1_5_exec-common.$(OBJEXT) \ -- vstafs_stage1_5_exec-char_io.$(OBJEXT) \ -- vstafs_stage1_5_exec-disk_io.$(OBJEXT) \ -- vstafs_stage1_5_exec-stage1_5.$(OBJEXT) \ -- vstafs_stage1_5_exec-fsys_vstafs.$(OBJEXT) \ -- vstafs_stage1_5_exec-bios.$(OBJEXT) --vstafs_stage1_5_exec_OBJECTS = $(am_vstafs_stage1_5_exec_OBJECTS) --vstafs_stage1_5_exec_LDADD = $(LDADD) --am_xfs_stage1_5_exec_OBJECTS = xfs_stage1_5_exec-start.$(OBJEXT) \ -- xfs_stage1_5_exec-asm.$(OBJEXT) \ -- xfs_stage1_5_exec-common.$(OBJEXT) \ -- xfs_stage1_5_exec-char_io.$(OBJEXT) \ -- xfs_stage1_5_exec-disk_io.$(OBJEXT) \ -- xfs_stage1_5_exec-stage1_5.$(OBJEXT) \ -- xfs_stage1_5_exec-fsys_xfs.$(OBJEXT) \ -- xfs_stage1_5_exec-bios.$(OBJEXT) --xfs_stage1_5_exec_OBJECTS = $(am_xfs_stage1_5_exec_OBJECTS) --xfs_stage1_5_exec_LDADD = $(LDADD) --SCRIPTS = $(noinst_SCRIPTS) --DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) --depcomp = $(SHELL) $(top_srcdir)/depcomp --am__depfiles_maybe = depfiles --CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) --COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ -- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) --CCLD = $(CC) --LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ --SOURCES = $(libgrub_a_SOURCES) $(diskless_exec_SOURCES) \ -- $(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) \ -- $(ffs_stage1_5_exec_SOURCES) $(iso9660_stage1_5_exec_SOURCES) \ -- $(jfs_stage1_5_exec_SOURCES) $(minix_stage1_5_exec_SOURCES) \ -- $(nbloader_exec_SOURCES) $(pre_stage2_exec_SOURCES) \ -- $(pxeloader_exec_SOURCES) $(reiserfs_stage1_5_exec_SOURCES) \ -- $(start_exec_SOURCES) $(start_eltorito_exec_SOURCES) \ -- $(ufs2_stage1_5_exec_SOURCES) $(vstafs_stage1_5_exec_SOURCES) \ -- $(xfs_stage1_5_exec_SOURCES) --DIST_SOURCES = $(libgrub_a_SOURCES) $(diskless_exec_SOURCES) \ -- $(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) \ -- $(ffs_stage1_5_exec_SOURCES) $(iso9660_stage1_5_exec_SOURCES) \ -- $(jfs_stage1_5_exec_SOURCES) $(minix_stage1_5_exec_SOURCES) \ -- $(nbloader_exec_SOURCES) $(pre_stage2_exec_SOURCES) \ -- $(pxeloader_exec_SOURCES) $(reiserfs_stage1_5_exec_SOURCES) \ -- $(start_exec_SOURCES) $(start_eltorito_exec_SOURCES) \ -- $(ufs2_stage1_5_exec_SOURCES) $(vstafs_stage1_5_exec_SOURCES) \ -- $(xfs_stage1_5_exec_SOURCES) --am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; --am__vpath_adj = case $$p in \ -- $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ -- *) f=$$p;; \ -- esac; --am__strip_dir = `echo $$p | sed -e 's|^.*/||'`; --am__installdirs = "$(DESTDIR)$(pkglibdir)" --pkglibDATA_INSTALL = $(INSTALL_DATA) --DATA = $(noinst_DATA) $(pkglib_DATA) --HEADERS = $(noinst_HEADERS) --ETAGS = etags --CTAGS = ctags --DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -- --# Stage 2 and Stage 1.5's. --pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) --ACLOCAL = @ACLOCAL@ --AMDEP_FALSE = @AMDEP_FALSE@ --AMDEP_TRUE = @AMDEP_TRUE@ --AMTAR = @AMTAR@ --AUTOCONF = @AUTOCONF@ --AUTOHEADER = @AUTOHEADER@ --AUTOMAKE = @AUTOMAKE@ --AWK = @AWK@ --BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ --BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ --CC = @CC@ --CCAS = @CCAS@ --CCASFLAGS = @CCASFLAGS@ --CCDEPMODE = @CCDEPMODE@ --CFLAGS = @CFLAGS@ --CPP = @CPP@ --CPPFLAGS = @CPPFLAGS@ --CYGPATH_W = @CYGPATH_W@ --DEFS = @DEFS@ --DEPDIR = @DEPDIR@ --DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ --DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ --ECHO_C = @ECHO_C@ --ECHO_N = @ECHO_N@ --ECHO_T = @ECHO_T@ --EGREP = @EGREP@ --EXEEXT = @EXEEXT@ --FSYS_CFLAGS = @FSYS_CFLAGS@ --GRUB_CFLAGS = @GRUB_CFLAGS@ --GRUB_LIBS = @GRUB_LIBS@ --HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ --HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ --INSTALL_DATA = @INSTALL_DATA@ --INSTALL_PROGRAM = @INSTALL_PROGRAM@ --INSTALL_SCRIPT = @INSTALL_SCRIPT@ --INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ --LDFLAGS = @LDFLAGS@ --LIBOBJS = @LIBOBJS@ --LIBS = @LIBS@ --LTLIBOBJS = @LTLIBOBJS@ --MAINT = @MAINT@ --MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ --MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ --MAKEINFO = @MAKEINFO@ --NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ --NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ --NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ --NET_CFLAGS = @NET_CFLAGS@ --NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ --OBJCOPY = @OBJCOPY@ --OBJEXT = @OBJEXT@ --PACKAGE = @PACKAGE@ --PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ --PACKAGE_NAME = @PACKAGE_NAME@ --PACKAGE_STRING = @PACKAGE_STRING@ --PACKAGE_TARNAME = @PACKAGE_TARNAME@ --PACKAGE_VERSION = @PACKAGE_VERSION@ --PATH_SEPARATOR = @PATH_SEPARATOR@ --PERL = @PERL@ --RANLIB = @RANLIB@ --SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ --SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ --SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ --SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ --SET_MAKE = @SET_MAKE@ --SHELL = @SHELL@ --STAGE1_CFLAGS = @STAGE1_CFLAGS@ --STAGE2_CFLAGS = @STAGE2_CFLAGS@ --STRIP = @STRIP@ --VERSION = @VERSION@ --ac_ct_CC = @ac_ct_CC@ --ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ --ac_ct_RANLIB = @ac_ct_RANLIB@ --ac_ct_STRIP = @ac_ct_STRIP@ --am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ --am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ --am__include = @am__include@ --am__leading_dot = @am__leading_dot@ --am__quote = @am__quote@ --am__tar = @am__tar@ --am__untar = @am__untar@ --bindir = @bindir@ --build = @build@ --build_alias = @build_alias@ --build_cpu = @build_cpu@ --build_os = @build_os@ --build_vendor = @build_vendor@ --datadir = @datadir@ --exec_prefix = @exec_prefix@ --host = @host@ --host_alias = @host_alias@ --host_cpu = @host_cpu@ --host_os = @host_os@ --host_vendor = @host_vendor@ --includedir = @includedir@ --infodir = @infodir@ --install_sh = @install_sh@ --libdir = @libdir@ --libexecdir = @libexecdir@ --localstatedir = @localstatedir@ --mandir = @mandir@ --mkdir_p = @mkdir_p@ --oldincludedir = @oldincludedir@ --prefix = @prefix@ --program_transform_name = @program_transform_name@ --sbindir = @sbindir@ --sharedstatedir = @sharedstatedir@ --sysconfdir = @sysconfdir@ --target_alias = @target_alias@ -- --# For test target. --TESTS = size_test --noinst_SCRIPTS = $(TESTS) -- --# For dist target. --noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \ -- fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \ -- imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \ -- nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \ -- terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h -- --EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS) -- --# For <stage1.h>. --INCLUDES = -I$(top_srcdir)/stage1 -- --# The library for /sbin/grub. --noinst_LIBRARIES = libgrub.a --libgrub_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \ -- disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \ -- fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \ -- fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \ -- terminfo.c tparm.c -- --libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \ -- -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ -- -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \ -- -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \ -- -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 -- --@DISKLESS_SUPPORT_FALSE@pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ --@DISKLESS_SUPPORT_FALSE@ ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ --@DISKLESS_SUPPORT_FALSE@ reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 -- --@DISKLESS_SUPPORT_TRUE@pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ --@DISKLESS_SUPPORT_TRUE@ ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ --@DISKLESS_SUPPORT_TRUE@ reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 \ --@DISKLESS_SUPPORT_TRUE@ nbgrub pxegrub -- --@DISKLESS_SUPPORT_FALSE@noinst_DATA = pre_stage2 start start_eltorito --@DISKLESS_SUPPORT_TRUE@noinst_DATA = pre_stage2 start start_eltorito nbloader pxeloader diskless --MOSTLYCLEANFILES = $(noinst_PROGRAMS) --PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200 --START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000 --NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0 --PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 --START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 --@NETBOOT_SUPPORT_FALSE@NETBOOT_FLAGS = --@NETBOOT_SUPPORT_TRUE@NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1 --@SERIAL_SUPPORT_FALSE@SERIAL_FLAGS = --@SERIAL_SUPPORT_TRUE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1 --@HERCULES_SUPPORT_FALSE@HERCULES_FLAGS = --@HERCULES_SUPPORT_TRUE@HERCULES_FLAGS = -DSUPPORT_HERCULES=1 --STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ -- $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) -- --STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000 --STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1 -- --# For stage2 target. --pre_stage2_exec_SOURCES = asm.S bios.c boot.c builtins.c char_io.c \ -- cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \ -- fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \ -- fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \ -- hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c -- --pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) --pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) --pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK) --@NETBOOT_SUPPORT_TRUE@pre_stage2_exec_LDADD = ../netboot/libdrivers.a --@DISKLESS_SUPPORT_FALSE@BUILT_SOURCES = stage2_size.h --@DISKLESS_SUPPORT_TRUE@BUILT_SOURCES = stage2_size.h diskless_size.h --CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES) --start_exec_SOURCES = start.S --start_exec_CCASFLAGS = $(STAGE2_COMPILE) --start_exec_LDFLAGS = $(START_LINK) --start_eltorito_exec_SOURCES = start_eltorito.S --start_eltorito_exec_CCASFLAGS = $(STAGE2_COMPILE) --start_eltorito_exec_LDFLAGS = $(START_ELTORITO_LINK) -- --# For e2fs_stage1_5 target. --e2fs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ -- stage1_5.c fsys_ext2fs.c bios.c -- --e2fs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \ -- -DNO_BLOCK_FILES=1 -- --e2fs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \ -- -DNO_BLOCK_FILES=1 -- --e2fs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -- --# For fat_stage1_5 target. --fat_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ -- stage1_5.c fsys_fat.c bios.c -- --fat_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \ -- -DNO_BLOCK_FILES=1 -- --fat_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \ -- -DNO_BLOCK_FILES=1 -- --fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -- --# For ffs_stage1_5 target. --ffs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ -- stage1_5.c fsys_ffs.c bios.c -- --ffs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \ -- -DNO_BLOCK_FILES=1 -- --ffs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \ -- -DNO_BLOCK_FILES=1 -- --ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -- --# For ufs2_stage1_5 target. --ufs2_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ -- stage1_5.c fsys_ufs2.c bios.c -- --ufs2_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ -- -DNO_BLOCK_FILES=1 -- --ufs2_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ -- -DNO_BLOCK_FILES=1 -- --ufs2_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -- --# For minix_stage1_5 target. --minix_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ -- stage1_5.c fsys_minix.c bios.c -- --minix_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \ -- -DNO_BLOCK_FILES=1 -- --minix_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \ -- -DNO_BLOCK_FILES=1 -- --minix_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -- --# For reiserfs_stage1_5 target. --reiserfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ -- disk_io.c stage1_5.c fsys_reiserfs.c bios.c -- --reiserfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \ -- -DNO_BLOCK_FILES=1 -- --reiserfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \ -- -DNO_BLOCK_FILES=1 -- --reiserfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -- --# For vstafs_stage1_5 target. --vstafs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ -- disk_io.c stage1_5.c fsys_vstafs.c bios.c -- --vstafs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \ -- -DNO_BLOCK_FILES=1 -- --vstafs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \ -- -DNO_BLOCK_FILES=1 -- --vstafs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -- --# For jfs_stage1_5 target. --jfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ -- disk_io.c stage1_5.c fsys_jfs.c bios.c -- --jfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \ -- -DNO_BLOCK_FILES=1 -- --jfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \ -- -DNO_BLOCK_FILES=1 -- --jfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -- --# For xfs_stage1_5 target. --xfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ -- disk_io.c stage1_5.c fsys_xfs.c bios.c -- --xfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \ -- -DNO_BLOCK_FILES=1 -- --xfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \ -- -DNO_BLOCK_FILES=1 -- --xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -- --# For iso9660_stage1_5 target. --iso9660_stage1_5_exec_SOURCES = start_eltorito.S asm.S common.c char_io.c \ -- disk_io.c stage1_5.c fsys_iso9660.c bios.c -- --iso9660_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ -- -DNO_BLOCK_FILES=1 -- --iso9660_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ -- -DNO_BLOCK_FILES=1 -- --iso9660_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) -- --# For diskless target. --diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES) --diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \ -- -DSUPPORT_DISKLESS=1 -- --diskless_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \ -- -DSUPPORT_DISKLESS=1 -- --diskless_exec_LDFLAGS = $(PRE_STAGE2_LINK) --diskless_exec_LDADD = ../netboot/libdrivers.a -- --# For nbloader target. --nbloader_exec_SOURCES = nbloader.S --nbloader_exec_CCASFLAGS = $(STAGE2_COMPILE) --nbloader_exec_LDFLAGS = $(NBLOADER_LINK) -- --# For pxeloader target. --pxeloader_exec_SOURCES = pxeloader.S --pxeloader_exec_CCASFLAGS = $(STAGE2_COMPILE) --pxeloader_exec_LDFLAGS = $(PXELOADER_LINK) -- --# General rule for making a raw binary. --SUFFIXES = .exec --all: $(BUILT_SOURCES) -- $(MAKE) $(AM_MAKEFLAGS) all-am -- --.SUFFIXES: --.SUFFIXES: .exec .S .c .o .obj --$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) -- @for dep in $?; do \ -- case '$(am__configure_deps)' in \ -- *$$dep*) \ -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ -- && exit 0; \ -- exit 1;; \ -- esac; \ -- done; \ -- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu stage2/Makefile'; \ -- cd $(top_srcdir) && \ -- $(AUTOMAKE) --gnu stage2/Makefile --.PRECIOUS: Makefile --Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -- @case '$?' in \ -- *config.status*) \ -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ -- *) \ -- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ -- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ -- esac; -- --$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -- --$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh --$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -- --clean-noinstLIBRARIES: -- -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) --libgrub.a: $(libgrub_a_OBJECTS) $(libgrub_a_DEPENDENCIES) -- -rm -f libgrub.a -- $(libgrub_a_AR) libgrub.a $(libgrub_a_OBJECTS) $(libgrub_a_LIBADD) -- $(RANLIB) libgrub.a -- --clean-noinstPROGRAMS: -- -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) --diskless.exec$(EXEEXT): $(diskless_exec_OBJECTS) $(diskless_exec_DEPENDENCIES) -- @rm -f diskless.exec$(EXEEXT) -- $(LINK) $(diskless_exec_LDFLAGS) $(diskless_exec_OBJECTS) $(diskless_exec_LDADD) $(LIBS) --e2fs_stage1_5.exec$(EXEEXT): $(e2fs_stage1_5_exec_OBJECTS) $(e2fs_stage1_5_exec_DEPENDENCIES) -- @rm -f e2fs_stage1_5.exec$(EXEEXT) -- $(LINK) $(e2fs_stage1_5_exec_LDFLAGS) $(e2fs_stage1_5_exec_OBJECTS) $(e2fs_stage1_5_exec_LDADD) $(LIBS) --fat_stage1_5.exec$(EXEEXT): $(fat_stage1_5_exec_OBJECTS) $(fat_stage1_5_exec_DEPENDENCIES) -- @rm -f fat_stage1_5.exec$(EXEEXT) -- $(LINK) $(fat_stage1_5_exec_LDFLAGS) $(fat_stage1_5_exec_OBJECTS) $(fat_stage1_5_exec_LDADD) $(LIBS) --ffs_stage1_5.exec$(EXEEXT): $(ffs_stage1_5_exec_OBJECTS) $(ffs_stage1_5_exec_DEPENDENCIES) -- @rm -f ffs_stage1_5.exec$(EXEEXT) -- $(LINK) $(ffs_stage1_5_exec_LDFLAGS) $(ffs_stage1_5_exec_OBJECTS) $(ffs_stage1_5_exec_LDADD) $(LIBS) --iso9660_stage1_5.exec$(EXEEXT): $(iso9660_stage1_5_exec_OBJECTS) $(iso9660_stage1_5_exec_DEPENDENCIES) -- @rm -f iso9660_stage1_5.exec$(EXEEXT) -- $(LINK) $(iso9660_stage1_5_exec_LDFLAGS) $(iso9660_stage1_5_exec_OBJECTS) $(iso9660_stage1_5_exec_LDADD) $(LIBS) --jfs_stage1_5.exec$(EXEEXT): $(jfs_stage1_5_exec_OBJECTS) $(jfs_stage1_5_exec_DEPENDENCIES) -- @rm -f jfs_stage1_5.exec$(EXEEXT) -- $(LINK) $(jfs_stage1_5_exec_LDFLAGS) $(jfs_stage1_5_exec_OBJECTS) $(jfs_stage1_5_exec_LDADD) $(LIBS) --minix_stage1_5.exec$(EXEEXT): $(minix_stage1_5_exec_OBJECTS) $(minix_stage1_5_exec_DEPENDENCIES) -- @rm -f minix_stage1_5.exec$(EXEEXT) -- $(LINK) $(minix_stage1_5_exec_LDFLAGS) $(minix_stage1_5_exec_OBJECTS) $(minix_stage1_5_exec_LDADD) $(LIBS) --nbloader.exec$(EXEEXT): $(nbloader_exec_OBJECTS) $(nbloader_exec_DEPENDENCIES) -- @rm -f nbloader.exec$(EXEEXT) -- $(LINK) $(nbloader_exec_LDFLAGS) $(nbloader_exec_OBJECTS) $(nbloader_exec_LDADD) $(LIBS) --pre_stage2.exec$(EXEEXT): $(pre_stage2_exec_OBJECTS) $(pre_stage2_exec_DEPENDENCIES) -- @rm -f pre_stage2.exec$(EXEEXT) -- $(LINK) $(pre_stage2_exec_LDFLAGS) $(pre_stage2_exec_OBJECTS) $(pre_stage2_exec_LDADD) $(LIBS) --pxeloader.exec$(EXEEXT): $(pxeloader_exec_OBJECTS) $(pxeloader_exec_DEPENDENCIES) -- @rm -f pxeloader.exec$(EXEEXT) -- $(LINK) $(pxeloader_exec_LDFLAGS) $(pxeloader_exec_OBJECTS) $(pxeloader_exec_LDADD) $(LIBS) --reiserfs_stage1_5.exec$(EXEEXT): $(reiserfs_stage1_5_exec_OBJECTS) $(reiserfs_stage1_5_exec_DEPENDENCIES) -- @rm -f reiserfs_stage1_5.exec$(EXEEXT) -- $(LINK) $(reiserfs_stage1_5_exec_LDFLAGS) $(reiserfs_stage1_5_exec_OBJECTS) $(reiserfs_stage1_5_exec_LDADD) $(LIBS) --start.exec$(EXEEXT): $(start_exec_OBJECTS) $(start_exec_DEPENDENCIES) -- @rm -f start.exec$(EXEEXT) -- $(LINK) $(start_exec_LDFLAGS) $(start_exec_OBJECTS) $(start_exec_LDADD) $(LIBS) --start_eltorito.exec$(EXEEXT): $(start_eltorito_exec_OBJECTS) $(start_eltorito_exec_DEPENDENCIES) -- @rm -f start_eltorito.exec$(EXEEXT) -- $(LINK) $(start_eltorito_exec_LDFLAGS) $(start_eltorito_exec_OBJECTS) $(start_eltorito_exec_LDADD) $(LIBS) --ufs2_stage1_5.exec$(EXEEXT): $(ufs2_stage1_5_exec_OBJECTS) $(ufs2_stage1_5_exec_DEPENDENCIES) -- @rm -f ufs2_stage1_5.exec$(EXEEXT) -- $(LINK) $(ufs2_stage1_5_exec_LDFLAGS) $(ufs2_stage1_5_exec_OBJECTS) $(ufs2_stage1_5_exec_LDADD) $(LIBS) --vstafs_stage1_5.exec$(EXEEXT): $(vstafs_stage1_5_exec_OBJECTS) $(vstafs_stage1_5_exec_DEPENDENCIES) -- @rm -f vstafs_stage1_5.exec$(EXEEXT) -- $(LINK) $(vstafs_stage1_5_exec_LDFLAGS) $(vstafs_stage1_5_exec_OBJECTS) $(vstafs_stage1_5_exec_LDADD) $(LIBS) --xfs_stage1_5.exec$(EXEEXT): $(xfs_stage1_5_exec_OBJECTS) $(xfs_stage1_5_exec_DEPENDENCIES) -- @rm -f xfs_stage1_5.exec$(EXEEXT) -- $(LINK) $(xfs_stage1_5_exec_LDFLAGS) $(xfs_stage1_5_exec_OBJECTS) $(xfs_stage1_5_exec_LDADD) $(LIBS) -- --mostlyclean-compile: -- -rm -f *.$(OBJEXT) -- --distclean-compile: -- -rm -f *.tab.c -- --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-bios.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-boot.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-builtins.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-char_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-cmdline.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-common.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-console.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-disk_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_ext2fs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_fat.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_ffs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_iso9660.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_jfs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_minix.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_reiserfs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_ufs2.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_vstafs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-fsys_xfs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-gunzip.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-hercules.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-md5.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-serial.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-smp-imps.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-stage2.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-terminfo.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/diskless_exec-tparm.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-bios.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-char_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-common.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-bios.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-char_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-common.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-disk_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fat_stage1_5_exec-stage1_5.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-bios.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-char_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-common.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-disk_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-bios.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-common.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-bios.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-char_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-common.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-disk_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-boot.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-builtins.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-char_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-cmdline.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-common.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-disk_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_ext2fs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_fat.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_ffs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_iso9660.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_jfs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_minix.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_reiserfs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_ufs2.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_vstafs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-fsys_xfs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-gunzip.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-md5.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-serial.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-stage2.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-terminfo.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgrub_a-tparm.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-bios.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-char_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-common.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-disk_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/minix_stage1_5_exec-stage1_5.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-bios.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-boot.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-builtins.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-char_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-cmdline.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-common.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-console.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-disk_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_fat.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_ffs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_jfs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_minix.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-fsys_xfs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-gunzip.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-hercules.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-md5.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-serial.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-smp-imps.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-stage2.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-terminfo.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pre_stage2_exec-tparm.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-bios.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-common.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-bios.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-char_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-common.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-bios.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-char_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-common.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-bios.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-char_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-common.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-disk_io.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po@am__quote@ --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po@am__quote@ -- --.S.o: -- $(CCASCOMPILE) -c $< -- --.S.obj: -- $(CCASCOMPILE) -c `$(CYGPATH_W) '$<'` -- --diskless_exec-asm.o: asm.S -- $(CCAS) $(diskless_exec_CCASFLAGS) $(CCASFLAGS) -c -o diskless_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S -- --diskless_exec-asm.obj: asm.S -- $(CCAS) $(diskless_exec_CCASFLAGS) $(CCASFLAGS) -c -o diskless_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` -- --e2fs_stage1_5_exec-start.o: start.S -- $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S -- --e2fs_stage1_5_exec-start.obj: start.S -- $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` -- --e2fs_stage1_5_exec-asm.o: asm.S -- $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S -- --e2fs_stage1_5_exec-asm.obj: asm.S -- $(CCAS) $(e2fs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o e2fs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` -- --fat_stage1_5_exec-start.o: start.S -- $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S -- --fat_stage1_5_exec-start.obj: start.S -- $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` -- --fat_stage1_5_exec-asm.o: asm.S -- $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S -- --fat_stage1_5_exec-asm.obj: asm.S -- $(CCAS) $(fat_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o fat_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` -- --ffs_stage1_5_exec-start.o: start.S -- $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S -- --ffs_stage1_5_exec-start.obj: start.S -- $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` -- --ffs_stage1_5_exec-asm.o: asm.S -- $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S -- --ffs_stage1_5_exec-asm.obj: asm.S -- $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` -- --iso9660_stage1_5_exec-start_eltorito.o: start_eltorito.S -- $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-start_eltorito.o `test -f 'start_eltorito.S' || echo '$(srcdir)/'`start_eltorito.S -- --iso9660_stage1_5_exec-start_eltorito.obj: start_eltorito.S -- $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-start_eltorito.obj `if test -f 'start_eltorito.S'; then $(CYGPATH_W) 'start_eltorito.S'; else $(CYGPATH_W) '$(srcdir)/start_eltorito.S'; fi` -- --iso9660_stage1_5_exec-asm.o: asm.S -- $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S -- --iso9660_stage1_5_exec-asm.obj: asm.S -- $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` -- --jfs_stage1_5_exec-start.o: start.S -- $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S -- --jfs_stage1_5_exec-start.obj: start.S -- $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` -- --jfs_stage1_5_exec-asm.o: asm.S -- $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S -- --jfs_stage1_5_exec-asm.obj: asm.S -- $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` -- --minix_stage1_5_exec-start.o: start.S -- $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S -- --minix_stage1_5_exec-start.obj: start.S -- $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` -- --minix_stage1_5_exec-asm.o: asm.S -- $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S -- --minix_stage1_5_exec-asm.obj: asm.S -- $(CCAS) $(minix_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o minix_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` -- --nbloader_exec-nbloader.o: nbloader.S -- $(CCAS) $(nbloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o nbloader_exec-nbloader.o `test -f 'nbloader.S' || echo '$(srcdir)/'`nbloader.S -- --nbloader_exec-nbloader.obj: nbloader.S -- $(CCAS) $(nbloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o nbloader_exec-nbloader.obj `if test -f 'nbloader.S'; then $(CYGPATH_W) 'nbloader.S'; else $(CYGPATH_W) '$(srcdir)/nbloader.S'; fi` -- --pre_stage2_exec-asm.o: asm.S -- $(CCAS) $(pre_stage2_exec_CCASFLAGS) $(CCASFLAGS) -c -o pre_stage2_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S -- --pre_stage2_exec-asm.obj: asm.S -- $(CCAS) $(pre_stage2_exec_CCASFLAGS) $(CCASFLAGS) -c -o pre_stage2_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` -- --pxeloader_exec-pxeloader.o: pxeloader.S -- $(CCAS) $(pxeloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o pxeloader_exec-pxeloader.o `test -f 'pxeloader.S' || echo '$(srcdir)/'`pxeloader.S -- --pxeloader_exec-pxeloader.obj: pxeloader.S -- $(CCAS) $(pxeloader_exec_CCASFLAGS) $(CCASFLAGS) -c -o pxeloader_exec-pxeloader.obj `if test -f 'pxeloader.S'; then $(CYGPATH_W) 'pxeloader.S'; else $(CYGPATH_W) '$(srcdir)/pxeloader.S'; fi` -- --reiserfs_stage1_5_exec-start.o: start.S -- $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S -- --reiserfs_stage1_5_exec-start.obj: start.S -- $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` -- --reiserfs_stage1_5_exec-asm.o: asm.S -- $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S -- --reiserfs_stage1_5_exec-asm.obj: asm.S -- $(CCAS) $(reiserfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o reiserfs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` -- --start_exec-start.o: start.S -- $(CCAS) $(start_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S -- --start_exec-start.obj: start.S -- $(CCAS) $(start_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` -- --start_eltorito_exec-start_eltorito.o: start_eltorito.S -- $(CCAS) $(start_eltorito_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_eltorito_exec-start_eltorito.o `test -f 'start_eltorito.S' || echo '$(srcdir)/'`start_eltorito.S -- --start_eltorito_exec-start_eltorito.obj: start_eltorito.S -- $(CCAS) $(start_eltorito_exec_CCASFLAGS) $(CCASFLAGS) -c -o start_eltorito_exec-start_eltorito.obj `if test -f 'start_eltorito.S'; then $(CYGPATH_W) 'start_eltorito.S'; else $(CYGPATH_W) '$(srcdir)/start_eltorito.S'; fi` -- --ufs2_stage1_5_exec-start.o: start.S -- $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S -- --ufs2_stage1_5_exec-start.obj: start.S -- $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` -- --ufs2_stage1_5_exec-asm.o: asm.S -- $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S -- --ufs2_stage1_5_exec-asm.obj: asm.S -- $(CCAS) $(ufs2_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ufs2_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` -- --vstafs_stage1_5_exec-start.o: start.S -- $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S -- --vstafs_stage1_5_exec-start.obj: start.S -- $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` -- --vstafs_stage1_5_exec-asm.o: asm.S -- $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S -- --vstafs_stage1_5_exec-asm.obj: asm.S -- $(CCAS) $(vstafs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o vstafs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` -- --xfs_stage1_5_exec-start.o: start.S -- $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S -- --xfs_stage1_5_exec-start.obj: start.S -- $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-start.obj `if test -f 'start.S'; then $(CYGPATH_W) 'start.S'; else $(CYGPATH_W) '$(srcdir)/start.S'; fi` -- --xfs_stage1_5_exec-asm.o: asm.S -- $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S -- --xfs_stage1_5_exec-asm.obj: asm.S -- $(CCAS) $(xfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o xfs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` -- --.c.o: --@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(COMPILE) -c $< -- --.c.obj: --@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` -- --libgrub_a-boot.o: boot.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-boot.o -MD -MP -MF "$(DEPDIR)/libgrub_a-boot.Tpo" -c -o libgrub_a-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-boot.Tpo" "$(DEPDIR)/libgrub_a-boot.Po"; else rm -f "$(DEPDIR)/libgrub_a-boot.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='libgrub_a-boot.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c -- --libgrub_a-boot.obj: boot.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-boot.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-boot.Tpo" -c -o libgrub_a-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-boot.Tpo" "$(DEPDIR)/libgrub_a-boot.Po"; else rm -f "$(DEPDIR)/libgrub_a-boot.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='libgrub_a-boot.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi` -- --libgrub_a-builtins.o: builtins.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-builtins.o -MD -MP -MF "$(DEPDIR)/libgrub_a-builtins.Tpo" -c -o libgrub_a-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-builtins.Tpo" "$(DEPDIR)/libgrub_a-builtins.Po"; else rm -f "$(DEPDIR)/libgrub_a-builtins.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='libgrub_a-builtins.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c -- --libgrub_a-builtins.obj: builtins.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-builtins.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-builtins.Tpo" -c -o libgrub_a-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-builtins.Tpo" "$(DEPDIR)/libgrub_a-builtins.Po"; else rm -f "$(DEPDIR)/libgrub_a-builtins.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='libgrub_a-builtins.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi` -- --libgrub_a-char_io.o: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-char_io.o -MD -MP -MF "$(DEPDIR)/libgrub_a-char_io.Tpo" -c -o libgrub_a-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-char_io.Tpo" "$(DEPDIR)/libgrub_a-char_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='libgrub_a-char_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c -- --libgrub_a-char_io.obj: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-char_io.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-char_io.Tpo" -c -o libgrub_a-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-char_io.Tpo" "$(DEPDIR)/libgrub_a-char_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='libgrub_a-char_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` -- --libgrub_a-cmdline.o: cmdline.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-cmdline.o -MD -MP -MF "$(DEPDIR)/libgrub_a-cmdline.Tpo" -c -o libgrub_a-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-cmdline.Tpo" "$(DEPDIR)/libgrub_a-cmdline.Po"; else rm -f "$(DEPDIR)/libgrub_a-cmdline.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='libgrub_a-cmdline.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c -- --libgrub_a-cmdline.obj: cmdline.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-cmdline.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-cmdline.Tpo" -c -o libgrub_a-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-cmdline.Tpo" "$(DEPDIR)/libgrub_a-cmdline.Po"; else rm -f "$(DEPDIR)/libgrub_a-cmdline.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='libgrub_a-cmdline.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi` -- --libgrub_a-common.o: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-common.o -MD -MP -MF "$(DEPDIR)/libgrub_a-common.Tpo" -c -o libgrub_a-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-common.Tpo" "$(DEPDIR)/libgrub_a-common.Po"; else rm -f "$(DEPDIR)/libgrub_a-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='libgrub_a-common.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c -- --libgrub_a-common.obj: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-common.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-common.Tpo" -c -o libgrub_a-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-common.Tpo" "$(DEPDIR)/libgrub_a-common.Po"; else rm -f "$(DEPDIR)/libgrub_a-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='libgrub_a-common.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` -- --libgrub_a-disk_io.o: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-disk_io.o -MD -MP -MF "$(DEPDIR)/libgrub_a-disk_io.Tpo" -c -o libgrub_a-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-disk_io.Tpo" "$(DEPDIR)/libgrub_a-disk_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='libgrub_a-disk_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c -- --libgrub_a-disk_io.obj: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-disk_io.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-disk_io.Tpo" -c -o libgrub_a-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-disk_io.Tpo" "$(DEPDIR)/libgrub_a-disk_io.Po"; else rm -f "$(DEPDIR)/libgrub_a-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='libgrub_a-disk_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` -- --libgrub_a-fsys_ext2fs.o: fsys_ext2fs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" -c -o libgrub_a-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='libgrub_a-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c -- --libgrub_a-fsys_ext2fs.obj: fsys_ext2fs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" -c -o libgrub_a-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ext2fs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='libgrub_a-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi` -- --libgrub_a-fsys_fat.o: fsys_fat.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_fat.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" -c -o libgrub_a-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" "$(DEPDIR)/libgrub_a-fsys_fat.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='libgrub_a-fsys_fat.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c -- --libgrub_a-fsys_fat.obj: fsys_fat.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" -c -o libgrub_a-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo" "$(DEPDIR)/libgrub_a-fsys_fat.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_fat.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='libgrub_a-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi` -- --libgrub_a-fsys_ffs.o: fsys_ffs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" -c -o libgrub_a-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ffs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='libgrub_a-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c -- --libgrub_a-fsys_ffs.obj: fsys_ffs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" -c -o libgrub_a-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo" "$(DEPDIR)/libgrub_a-fsys_ffs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ffs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='libgrub_a-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi` -- --libgrub_a-fsys_iso9660.o: fsys_iso9660.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" -c -o libgrub_a-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" "$(DEPDIR)/libgrub_a-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='libgrub_a-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c -- --libgrub_a-fsys_iso9660.obj: fsys_iso9660.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" -c -o libgrub_a-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" "$(DEPDIR)/libgrub_a-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='libgrub_a-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi` -- --libgrub_a-fsys_jfs.o: fsys_jfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" -c -o libgrub_a-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_jfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='libgrub_a-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c -- --libgrub_a-fsys_jfs.obj: fsys_jfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" -c -o libgrub_a-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_jfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_jfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='libgrub_a-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi` -- --libgrub_a-fsys_minix.o: fsys_minix.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_minix.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" -c -o libgrub_a-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" "$(DEPDIR)/libgrub_a-fsys_minix.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='libgrub_a-fsys_minix.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c -- --libgrub_a-fsys_minix.obj: fsys_minix.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" -c -o libgrub_a-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo" "$(DEPDIR)/libgrub_a-fsys_minix.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_minix.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='libgrub_a-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi` -- --libgrub_a-fsys_reiserfs.o: fsys_reiserfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" -c -o libgrub_a-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='libgrub_a-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c -- --libgrub_a-fsys_reiserfs.obj: fsys_reiserfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" -c -o libgrub_a-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_reiserfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='libgrub_a-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi` -- --libgrub_a-fsys_ufs2.o: fsys_ufs2.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" -c -o libgrub_a-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" "$(DEPDIR)/libgrub_a-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='libgrub_a-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c -- --libgrub_a-fsys_ufs2.obj: fsys_ufs2.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" -c -o libgrub_a-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo" "$(DEPDIR)/libgrub_a-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_ufs2.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='libgrub_a-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi` -- --libgrub_a-fsys_vstafs.o: fsys_vstafs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" -c -o libgrub_a-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" "$(DEPDIR)/libgrub_a-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='libgrub_a-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c -- --libgrub_a-fsys_vstafs.obj: fsys_vstafs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" -c -o libgrub_a-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo" "$(DEPDIR)/libgrub_a-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_vstafs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='libgrub_a-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi` -- --libgrub_a-fsys_xfs.o: fsys_xfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" -c -o libgrub_a-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_xfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='libgrub_a-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c -- --libgrub_a-fsys_xfs.obj: fsys_xfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" -c -o libgrub_a-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo" "$(DEPDIR)/libgrub_a-fsys_xfs.Po"; else rm -f "$(DEPDIR)/libgrub_a-fsys_xfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='libgrub_a-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi` -- --libgrub_a-gunzip.o: gunzip.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-gunzip.o -MD -MP -MF "$(DEPDIR)/libgrub_a-gunzip.Tpo" -c -o libgrub_a-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-gunzip.Tpo" "$(DEPDIR)/libgrub_a-gunzip.Po"; else rm -f "$(DEPDIR)/libgrub_a-gunzip.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='libgrub_a-gunzip.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c -- --libgrub_a-gunzip.obj: gunzip.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-gunzip.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-gunzip.Tpo" -c -o libgrub_a-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-gunzip.Tpo" "$(DEPDIR)/libgrub_a-gunzip.Po"; else rm -f "$(DEPDIR)/libgrub_a-gunzip.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='libgrub_a-gunzip.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi` -- --libgrub_a-md5.o: md5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-md5.o -MD -MP -MF "$(DEPDIR)/libgrub_a-md5.Tpo" -c -o libgrub_a-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-md5.Tpo" "$(DEPDIR)/libgrub_a-md5.Po"; else rm -f "$(DEPDIR)/libgrub_a-md5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='libgrub_a-md5.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c -- --libgrub_a-md5.obj: md5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-md5.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-md5.Tpo" -c -o libgrub_a-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-md5.Tpo" "$(DEPDIR)/libgrub_a-md5.Po"; else rm -f "$(DEPDIR)/libgrub_a-md5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='libgrub_a-md5.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi` -- --libgrub_a-serial.o: serial.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-serial.o -MD -MP -MF "$(DEPDIR)/libgrub_a-serial.Tpo" -c -o libgrub_a-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-serial.Tpo" "$(DEPDIR)/libgrub_a-serial.Po"; else rm -f "$(DEPDIR)/libgrub_a-serial.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='libgrub_a-serial.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c -- --libgrub_a-serial.obj: serial.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-serial.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-serial.Tpo" -c -o libgrub_a-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-serial.Tpo" "$(DEPDIR)/libgrub_a-serial.Po"; else rm -f "$(DEPDIR)/libgrub_a-serial.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='libgrub_a-serial.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi` -- --libgrub_a-stage2.o: stage2.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-stage2.o -MD -MP -MF "$(DEPDIR)/libgrub_a-stage2.Tpo" -c -o libgrub_a-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-stage2.Tpo" "$(DEPDIR)/libgrub_a-stage2.Po"; else rm -f "$(DEPDIR)/libgrub_a-stage2.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='libgrub_a-stage2.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c -- --libgrub_a-stage2.obj: stage2.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-stage2.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-stage2.Tpo" -c -o libgrub_a-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-stage2.Tpo" "$(DEPDIR)/libgrub_a-stage2.Po"; else rm -f "$(DEPDIR)/libgrub_a-stage2.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='libgrub_a-stage2.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi` -- --libgrub_a-terminfo.o: terminfo.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-terminfo.o -MD -MP -MF "$(DEPDIR)/libgrub_a-terminfo.Tpo" -c -o libgrub_a-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-terminfo.Tpo" "$(DEPDIR)/libgrub_a-terminfo.Po"; else rm -f "$(DEPDIR)/libgrub_a-terminfo.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='libgrub_a-terminfo.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c -- --libgrub_a-terminfo.obj: terminfo.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-terminfo.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-terminfo.Tpo" -c -o libgrub_a-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-terminfo.Tpo" "$(DEPDIR)/libgrub_a-terminfo.Po"; else rm -f "$(DEPDIR)/libgrub_a-terminfo.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='libgrub_a-terminfo.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi` -- --libgrub_a-tparm.o: tparm.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-tparm.o -MD -MP -MF "$(DEPDIR)/libgrub_a-tparm.Tpo" -c -o libgrub_a-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-tparm.Tpo" "$(DEPDIR)/libgrub_a-tparm.Po"; else rm -f "$(DEPDIR)/libgrub_a-tparm.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='libgrub_a-tparm.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c -- --libgrub_a-tparm.obj: tparm.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -MT libgrub_a-tparm.obj -MD -MP -MF "$(DEPDIR)/libgrub_a-tparm.Tpo" -c -o libgrub_a-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/libgrub_a-tparm.Tpo" "$(DEPDIR)/libgrub_a-tparm.Po"; else rm -f "$(DEPDIR)/libgrub_a-tparm.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='libgrub_a-tparm.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi` -- --diskless_exec-bios.o: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-bios.o -MD -MP -MF "$(DEPDIR)/diskless_exec-bios.Tpo" -c -o diskless_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-bios.Tpo" "$(DEPDIR)/diskless_exec-bios.Po"; else rm -f "$(DEPDIR)/diskless_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='diskless_exec-bios.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c -- --diskless_exec-bios.obj: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-bios.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-bios.Tpo" -c -o diskless_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-bios.Tpo" "$(DEPDIR)/diskless_exec-bios.Po"; else rm -f "$(DEPDIR)/diskless_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='diskless_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` -- --diskless_exec-boot.o: boot.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-boot.o -MD -MP -MF "$(DEPDIR)/diskless_exec-boot.Tpo" -c -o diskless_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-boot.Tpo" "$(DEPDIR)/diskless_exec-boot.Po"; else rm -f "$(DEPDIR)/diskless_exec-boot.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='diskless_exec-boot.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c -- --diskless_exec-boot.obj: boot.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-boot.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-boot.Tpo" -c -o diskless_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-boot.Tpo" "$(DEPDIR)/diskless_exec-boot.Po"; else rm -f "$(DEPDIR)/diskless_exec-boot.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='diskless_exec-boot.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi` -- --diskless_exec-builtins.o: builtins.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-builtins.o -MD -MP -MF "$(DEPDIR)/diskless_exec-builtins.Tpo" -c -o diskless_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-builtins.Tpo" "$(DEPDIR)/diskless_exec-builtins.Po"; else rm -f "$(DEPDIR)/diskless_exec-builtins.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='diskless_exec-builtins.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c -- --diskless_exec-builtins.obj: builtins.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-builtins.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-builtins.Tpo" -c -o diskless_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-builtins.Tpo" "$(DEPDIR)/diskless_exec-builtins.Po"; else rm -f "$(DEPDIR)/diskless_exec-builtins.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='diskless_exec-builtins.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi` -- --diskless_exec-char_io.o: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-char_io.o -MD -MP -MF "$(DEPDIR)/diskless_exec-char_io.Tpo" -c -o diskless_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-char_io.Tpo" "$(DEPDIR)/diskless_exec-char_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='diskless_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c -- --diskless_exec-char_io.obj: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-char_io.Tpo" -c -o diskless_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-char_io.Tpo" "$(DEPDIR)/diskless_exec-char_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='diskless_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` -- --diskless_exec-cmdline.o: cmdline.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-cmdline.o -MD -MP -MF "$(DEPDIR)/diskless_exec-cmdline.Tpo" -c -o diskless_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-cmdline.Tpo" "$(DEPDIR)/diskless_exec-cmdline.Po"; else rm -f "$(DEPDIR)/diskless_exec-cmdline.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='diskless_exec-cmdline.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c -- --diskless_exec-cmdline.obj: cmdline.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-cmdline.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-cmdline.Tpo" -c -o diskless_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-cmdline.Tpo" "$(DEPDIR)/diskless_exec-cmdline.Po"; else rm -f "$(DEPDIR)/diskless_exec-cmdline.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='diskless_exec-cmdline.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi` -- --diskless_exec-common.o: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-common.o -MD -MP -MF "$(DEPDIR)/diskless_exec-common.Tpo" -c -o diskless_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-common.Tpo" "$(DEPDIR)/diskless_exec-common.Po"; else rm -f "$(DEPDIR)/diskless_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='diskless_exec-common.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c -- --diskless_exec-common.obj: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-common.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-common.Tpo" -c -o diskless_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-common.Tpo" "$(DEPDIR)/diskless_exec-common.Po"; else rm -f "$(DEPDIR)/diskless_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='diskless_exec-common.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` -- --diskless_exec-console.o: console.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-console.o -MD -MP -MF "$(DEPDIR)/diskless_exec-console.Tpo" -c -o diskless_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-console.Tpo" "$(DEPDIR)/diskless_exec-console.Po"; else rm -f "$(DEPDIR)/diskless_exec-console.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='console.c' object='diskless_exec-console.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c -- --diskless_exec-console.obj: console.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-console.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-console.Tpo" -c -o diskless_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-console.Tpo" "$(DEPDIR)/diskless_exec-console.Po"; else rm -f "$(DEPDIR)/diskless_exec-console.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='console.c' object='diskless_exec-console.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi` -- --diskless_exec-disk_io.o: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/diskless_exec-disk_io.Tpo" -c -o diskless_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-disk_io.Tpo" "$(DEPDIR)/diskless_exec-disk_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='diskless_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c -- --diskless_exec-disk_io.obj: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-disk_io.Tpo" -c -o diskless_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-disk_io.Tpo" "$(DEPDIR)/diskless_exec-disk_io.Po"; else rm -f "$(DEPDIR)/diskless_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='diskless_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` -- --diskless_exec-fsys_ext2fs.o: fsys_ext2fs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" -c -o diskless_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='diskless_exec-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c -- --diskless_exec-fsys_ext2fs.obj: fsys_ext2fs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" -c -o diskless_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ext2fs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='diskless_exec-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi` -- --diskless_exec-fsys_fat.o: fsys_fat.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_fat.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" -c -o diskless_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" "$(DEPDIR)/diskless_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='diskless_exec-fsys_fat.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c -- --diskless_exec-fsys_fat.obj: fsys_fat.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" -c -o diskless_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo" "$(DEPDIR)/diskless_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_fat.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='diskless_exec-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi` -- --diskless_exec-fsys_ffs.o: fsys_ffs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" -c -o diskless_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='diskless_exec-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c -- --diskless_exec-fsys_ffs.obj: fsys_ffs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" -c -o diskless_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo" "$(DEPDIR)/diskless_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ffs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='diskless_exec-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi` -- --diskless_exec-fsys_iso9660.o: fsys_iso9660.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" -c -o diskless_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" "$(DEPDIR)/diskless_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='diskless_exec-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c -- --diskless_exec-fsys_iso9660.obj: fsys_iso9660.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" -c -o diskless_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" "$(DEPDIR)/diskless_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='diskless_exec-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi` -- --diskless_exec-fsys_jfs.o: fsys_jfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" -c -o diskless_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='diskless_exec-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c -- --diskless_exec-fsys_jfs.obj: fsys_jfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" -c -o diskless_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_jfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='diskless_exec-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi` -- --diskless_exec-fsys_minix.o: fsys_minix.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_minix.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" -c -o diskless_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" "$(DEPDIR)/diskless_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='diskless_exec-fsys_minix.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c -- --diskless_exec-fsys_minix.obj: fsys_minix.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" -c -o diskless_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo" "$(DEPDIR)/diskless_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_minix.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='diskless_exec-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi` -- --diskless_exec-fsys_reiserfs.o: fsys_reiserfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" -c -o diskless_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='diskless_exec-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c -- --diskless_exec-fsys_reiserfs.obj: fsys_reiserfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" -c -o diskless_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_reiserfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='diskless_exec-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi` -- --diskless_exec-fsys_ufs2.o: fsys_ufs2.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" -c -o diskless_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" "$(DEPDIR)/diskless_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='diskless_exec-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c -- --diskless_exec-fsys_ufs2.obj: fsys_ufs2.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" -c -o diskless_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo" "$(DEPDIR)/diskless_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_ufs2.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='diskless_exec-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi` -- --diskless_exec-fsys_vstafs.o: fsys_vstafs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" -c -o diskless_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" "$(DEPDIR)/diskless_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='diskless_exec-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c -- --diskless_exec-fsys_vstafs.obj: fsys_vstafs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" -c -o diskless_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo" "$(DEPDIR)/diskless_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_vstafs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='diskless_exec-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi` -- --diskless_exec-fsys_xfs.o: fsys_xfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" -c -o diskless_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='diskless_exec-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c -- --diskless_exec-fsys_xfs.obj: fsys_xfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" -c -o diskless_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo" "$(DEPDIR)/diskless_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/diskless_exec-fsys_xfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='diskless_exec-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi` -- --diskless_exec-gunzip.o: gunzip.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-gunzip.o -MD -MP -MF "$(DEPDIR)/diskless_exec-gunzip.Tpo" -c -o diskless_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-gunzip.Tpo" "$(DEPDIR)/diskless_exec-gunzip.Po"; else rm -f "$(DEPDIR)/diskless_exec-gunzip.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='diskless_exec-gunzip.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c -- --diskless_exec-gunzip.obj: gunzip.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-gunzip.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-gunzip.Tpo" -c -o diskless_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-gunzip.Tpo" "$(DEPDIR)/diskless_exec-gunzip.Po"; else rm -f "$(DEPDIR)/diskless_exec-gunzip.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='diskless_exec-gunzip.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi` -- --diskless_exec-hercules.o: hercules.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-hercules.o -MD -MP -MF "$(DEPDIR)/diskless_exec-hercules.Tpo" -c -o diskless_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-hercules.Tpo" "$(DEPDIR)/diskless_exec-hercules.Po"; else rm -f "$(DEPDIR)/diskless_exec-hercules.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hercules.c' object='diskless_exec-hercules.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c -- --diskless_exec-hercules.obj: hercules.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-hercules.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-hercules.Tpo" -c -o diskless_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-hercules.Tpo" "$(DEPDIR)/diskless_exec-hercules.Po"; else rm -f "$(DEPDIR)/diskless_exec-hercules.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hercules.c' object='diskless_exec-hercules.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi` -- --diskless_exec-md5.o: md5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-md5.o -MD -MP -MF "$(DEPDIR)/diskless_exec-md5.Tpo" -c -o diskless_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-md5.Tpo" "$(DEPDIR)/diskless_exec-md5.Po"; else rm -f "$(DEPDIR)/diskless_exec-md5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='diskless_exec-md5.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c -- --diskless_exec-md5.obj: md5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-md5.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-md5.Tpo" -c -o diskless_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-md5.Tpo" "$(DEPDIR)/diskless_exec-md5.Po"; else rm -f "$(DEPDIR)/diskless_exec-md5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='diskless_exec-md5.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi` -- --diskless_exec-serial.o: serial.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-serial.o -MD -MP -MF "$(DEPDIR)/diskless_exec-serial.Tpo" -c -o diskless_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-serial.Tpo" "$(DEPDIR)/diskless_exec-serial.Po"; else rm -f "$(DEPDIR)/diskless_exec-serial.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='diskless_exec-serial.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c -- --diskless_exec-serial.obj: serial.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-serial.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-serial.Tpo" -c -o diskless_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-serial.Tpo" "$(DEPDIR)/diskless_exec-serial.Po"; else rm -f "$(DEPDIR)/diskless_exec-serial.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='diskless_exec-serial.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi` -- --diskless_exec-smp-imps.o: smp-imps.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-smp-imps.o -MD -MP -MF "$(DEPDIR)/diskless_exec-smp-imps.Tpo" -c -o diskless_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo" "$(DEPDIR)/diskless_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smp-imps.c' object='diskless_exec-smp-imps.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c -- --diskless_exec-smp-imps.obj: smp-imps.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-smp-imps.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-smp-imps.Tpo" -c -o diskless_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo" "$(DEPDIR)/diskless_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/diskless_exec-smp-imps.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smp-imps.c' object='diskless_exec-smp-imps.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi` -- --diskless_exec-stage2.o: stage2.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-stage2.o -MD -MP -MF "$(DEPDIR)/diskless_exec-stage2.Tpo" -c -o diskless_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-stage2.Tpo" "$(DEPDIR)/diskless_exec-stage2.Po"; else rm -f "$(DEPDIR)/diskless_exec-stage2.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='diskless_exec-stage2.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c -- --diskless_exec-stage2.obj: stage2.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-stage2.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-stage2.Tpo" -c -o diskless_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-stage2.Tpo" "$(DEPDIR)/diskless_exec-stage2.Po"; else rm -f "$(DEPDIR)/diskless_exec-stage2.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='diskless_exec-stage2.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi` -- --diskless_exec-terminfo.o: terminfo.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-terminfo.o -MD -MP -MF "$(DEPDIR)/diskless_exec-terminfo.Tpo" -c -o diskless_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-terminfo.Tpo" "$(DEPDIR)/diskless_exec-terminfo.Po"; else rm -f "$(DEPDIR)/diskless_exec-terminfo.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='diskless_exec-terminfo.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c -- --diskless_exec-terminfo.obj: terminfo.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-terminfo.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-terminfo.Tpo" -c -o diskless_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-terminfo.Tpo" "$(DEPDIR)/diskless_exec-terminfo.Po"; else rm -f "$(DEPDIR)/diskless_exec-terminfo.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='diskless_exec-terminfo.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi` -- --diskless_exec-tparm.o: tparm.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-tparm.o -MD -MP -MF "$(DEPDIR)/diskless_exec-tparm.Tpo" -c -o diskless_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-tparm.Tpo" "$(DEPDIR)/diskless_exec-tparm.Po"; else rm -f "$(DEPDIR)/diskless_exec-tparm.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='diskless_exec-tparm.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c -- --diskless_exec-tparm.obj: tparm.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -MT diskless_exec-tparm.obj -MD -MP -MF "$(DEPDIR)/diskless_exec-tparm.Tpo" -c -o diskless_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/diskless_exec-tparm.Tpo" "$(DEPDIR)/diskless_exec-tparm.Po"; else rm -f "$(DEPDIR)/diskless_exec-tparm.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='diskless_exec-tparm.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi` -- --e2fs_stage1_5_exec-common.o: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" -c -o e2fs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='e2fs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c -- --e2fs_stage1_5_exec-common.obj: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" -c -o e2fs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='e2fs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` -- --e2fs_stage1_5_exec-char_io.o: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" -c -o e2fs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='e2fs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c -- --e2fs_stage1_5_exec-char_io.obj: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" -c -o e2fs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='e2fs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` -- --e2fs_stage1_5_exec-disk_io.o: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" -c -o e2fs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='e2fs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c -- --e2fs_stage1_5_exec-disk_io.obj: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" -c -o e2fs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='e2fs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` -- --e2fs_stage1_5_exec-stage1_5.o: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" -c -o e2fs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='e2fs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c -- --e2fs_stage1_5_exec-stage1_5.obj: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" -c -o e2fs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='e2fs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` -- --e2fs_stage1_5_exec-fsys_ext2fs.o: fsys_ext2fs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" -c -o e2fs_stage1_5_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='e2fs_stage1_5_exec-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c -- --e2fs_stage1_5_exec-fsys_ext2fs.obj: fsys_ext2fs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" -c -o e2fs_stage1_5_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-fsys_ext2fs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='e2fs_stage1_5_exec-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi` -- --e2fs_stage1_5_exec-bios.o: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" -c -o e2fs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='e2fs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c -- --e2fs_stage1_5_exec-bios.obj: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT e2fs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" -c -o e2fs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/e2fs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/e2fs_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='e2fs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(e2fs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o e2fs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` -- --fat_stage1_5_exec-common.o: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" -c -o fat_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" "$(DEPDIR)/fat_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='fat_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c -- --fat_stage1_5_exec-common.obj: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" -c -o fat_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo" "$(DEPDIR)/fat_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='fat_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` -- --fat_stage1_5_exec-char_io.o: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" -c -o fat_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='fat_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c -- --fat_stage1_5_exec-char_io.obj: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" -c -o fat_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='fat_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` -- --fat_stage1_5_exec-disk_io.o: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" -c -o fat_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='fat_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c -- --fat_stage1_5_exec-disk_io.obj: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" -c -o fat_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/fat_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='fat_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` -- --fat_stage1_5_exec-stage1_5.o: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" -c -o fat_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='fat_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c -- --fat_stage1_5_exec-stage1_5.obj: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" -c -o fat_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='fat_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` -- --fat_stage1_5_exec-fsys_fat.o: fsys_fat.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-fsys_fat.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" -c -o fat_stage1_5_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='fat_stage1_5_exec-fsys_fat.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c -- --fat_stage1_5_exec-fsys_fat.obj: fsys_fat.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" -c -o fat_stage1_5_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo" "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-fsys_fat.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='fat_stage1_5_exec-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi` -- --fat_stage1_5_exec-bios.o: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" -c -o fat_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" "$(DEPDIR)/fat_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='fat_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c -- --fat_stage1_5_exec-bios.obj: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -MT fat_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" -c -o fat_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo" "$(DEPDIR)/fat_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/fat_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='fat_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(fat_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o fat_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` -- --ffs_stage1_5_exec-common.o: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" -c -o ffs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='ffs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c -- --ffs_stage1_5_exec-common.obj: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" -c -o ffs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='ffs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` -- --ffs_stage1_5_exec-char_io.o: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" -c -o ffs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='ffs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c -- --ffs_stage1_5_exec-char_io.obj: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" -c -o ffs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='ffs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` -- --ffs_stage1_5_exec-disk_io.o: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" -c -o ffs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='ffs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c -- --ffs_stage1_5_exec-disk_io.obj: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" -c -o ffs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='ffs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` -- --ffs_stage1_5_exec-stage1_5.o: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" -c -o ffs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='ffs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c -- --ffs_stage1_5_exec-stage1_5.obj: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" -c -o ffs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='ffs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` -- --ffs_stage1_5_exec-fsys_ffs.o: fsys_ffs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" -c -o ffs_stage1_5_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='ffs_stage1_5_exec-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c -- --ffs_stage1_5_exec-fsys_ffs.obj: fsys_ffs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" -c -o ffs_stage1_5_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='ffs_stage1_5_exec-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi` -- --ffs_stage1_5_exec-bios.o: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" -c -o ffs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='ffs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c -- --ffs_stage1_5_exec-bios.obj: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ffs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" -c -o ffs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ffs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ffs_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='ffs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` -- --iso9660_stage1_5_exec-common.o: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" -c -o iso9660_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='iso9660_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c -- --iso9660_stage1_5_exec-common.obj: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" -c -o iso9660_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='iso9660_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` -- --iso9660_stage1_5_exec-char_io.o: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" -c -o iso9660_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='iso9660_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c -- --iso9660_stage1_5_exec-char_io.obj: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" -c -o iso9660_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='iso9660_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` -- --iso9660_stage1_5_exec-disk_io.o: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" -c -o iso9660_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='iso9660_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c -- --iso9660_stage1_5_exec-disk_io.obj: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" -c -o iso9660_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='iso9660_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` -- --iso9660_stage1_5_exec-stage1_5.o: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" -c -o iso9660_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='iso9660_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c -- --iso9660_stage1_5_exec-stage1_5.obj: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" -c -o iso9660_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='iso9660_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` -- --iso9660_stage1_5_exec-fsys_iso9660.o: fsys_iso9660.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" -c -o iso9660_stage1_5_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='iso9660_stage1_5_exec-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c -- --iso9660_stage1_5_exec-fsys_iso9660.obj: fsys_iso9660.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" -c -o iso9660_stage1_5_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='iso9660_stage1_5_exec-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi` -- --iso9660_stage1_5_exec-bios.o: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" -c -o iso9660_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='iso9660_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c -- --iso9660_stage1_5_exec-bios.obj: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -MT iso9660_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" -c -o iso9660_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='iso9660_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(iso9660_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o iso9660_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` -- --jfs_stage1_5_exec-common.o: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" -c -o jfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='jfs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c -- --jfs_stage1_5_exec-common.obj: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" -c -o jfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='jfs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` -- --jfs_stage1_5_exec-char_io.o: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" -c -o jfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='jfs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c -- --jfs_stage1_5_exec-char_io.obj: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" -c -o jfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='jfs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` -- --jfs_stage1_5_exec-disk_io.o: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" -c -o jfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='jfs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c -- --jfs_stage1_5_exec-disk_io.obj: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" -c -o jfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='jfs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` -- --jfs_stage1_5_exec-stage1_5.o: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" -c -o jfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='jfs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c -- --jfs_stage1_5_exec-stage1_5.obj: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" -c -o jfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='jfs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` -- --jfs_stage1_5_exec-fsys_jfs.o: fsys_jfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" -c -o jfs_stage1_5_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='jfs_stage1_5_exec-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c -- --jfs_stage1_5_exec-fsys_jfs.obj: fsys_jfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" -c -o jfs_stage1_5_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='jfs_stage1_5_exec-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi` -- --jfs_stage1_5_exec-bios.o: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" -c -o jfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='jfs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c -- --jfs_stage1_5_exec-bios.obj: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT jfs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" -c -o jfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/jfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/jfs_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='jfs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` -- --minix_stage1_5_exec-common.o: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" -c -o minix_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" "$(DEPDIR)/minix_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='minix_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c -- --minix_stage1_5_exec-common.obj: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" -c -o minix_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo" "$(DEPDIR)/minix_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='minix_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` -- --minix_stage1_5_exec-char_io.o: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" -c -o minix_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='minix_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c -- --minix_stage1_5_exec-char_io.obj: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" -c -o minix_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='minix_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` -- --minix_stage1_5_exec-disk_io.o: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" -c -o minix_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='minix_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c -- --minix_stage1_5_exec-disk_io.obj: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" -c -o minix_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/minix_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='minix_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` -- --minix_stage1_5_exec-stage1_5.o: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" -c -o minix_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='minix_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c -- --minix_stage1_5_exec-stage1_5.obj: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" -c -o minix_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='minix_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` -- --minix_stage1_5_exec-fsys_minix.o: fsys_minix.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-fsys_minix.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" -c -o minix_stage1_5_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='minix_stage1_5_exec-fsys_minix.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c -- --minix_stage1_5_exec-fsys_minix.obj: fsys_minix.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" -c -o minix_stage1_5_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo" "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-fsys_minix.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='minix_stage1_5_exec-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi` -- --minix_stage1_5_exec-bios.o: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" -c -o minix_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" "$(DEPDIR)/minix_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='minix_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c -- --minix_stage1_5_exec-bios.obj: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -MT minix_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" -c -o minix_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo" "$(DEPDIR)/minix_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/minix_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='minix_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(minix_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o minix_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` -- --pre_stage2_exec-bios.o: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-bios.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-bios.Tpo" -c -o pre_stage2_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo" "$(DEPDIR)/pre_stage2_exec-bios.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='pre_stage2_exec-bios.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c -- --pre_stage2_exec-bios.obj: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-bios.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-bios.Tpo" -c -o pre_stage2_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo" "$(DEPDIR)/pre_stage2_exec-bios.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='pre_stage2_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` -- --pre_stage2_exec-boot.o: boot.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-boot.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-boot.Tpo" -c -o pre_stage2_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo" "$(DEPDIR)/pre_stage2_exec-boot.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='pre_stage2_exec-boot.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-boot.o `test -f 'boot.c' || echo '$(srcdir)/'`boot.c -- --pre_stage2_exec-boot.obj: boot.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-boot.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-boot.Tpo" -c -o pre_stage2_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo" "$(DEPDIR)/pre_stage2_exec-boot.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-boot.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='boot.c' object='pre_stage2_exec-boot.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-boot.obj `if test -f 'boot.c'; then $(CYGPATH_W) 'boot.c'; else $(CYGPATH_W) '$(srcdir)/boot.c'; fi` -- --pre_stage2_exec-builtins.o: builtins.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-builtins.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" -c -o pre_stage2_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" "$(DEPDIR)/pre_stage2_exec-builtins.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='pre_stage2_exec-builtins.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-builtins.o `test -f 'builtins.c' || echo '$(srcdir)/'`builtins.c -- --pre_stage2_exec-builtins.obj: builtins.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-builtins.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" -c -o pre_stage2_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo" "$(DEPDIR)/pre_stage2_exec-builtins.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-builtins.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='builtins.c' object='pre_stage2_exec-builtins.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-builtins.obj `if test -f 'builtins.c'; then $(CYGPATH_W) 'builtins.c'; else $(CYGPATH_W) '$(srcdir)/builtins.c'; fi` -- --pre_stage2_exec-char_io.o: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-char_io.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" -c -o pre_stage2_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" "$(DEPDIR)/pre_stage2_exec-char_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='pre_stage2_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c -- --pre_stage2_exec-char_io.obj: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" -c -o pre_stage2_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo" "$(DEPDIR)/pre_stage2_exec-char_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='pre_stage2_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` -- --pre_stage2_exec-cmdline.o: cmdline.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-cmdline.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" -c -o pre_stage2_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" "$(DEPDIR)/pre_stage2_exec-cmdline.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='pre_stage2_exec-cmdline.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-cmdline.o `test -f 'cmdline.c' || echo '$(srcdir)/'`cmdline.c -- --pre_stage2_exec-cmdline.obj: cmdline.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-cmdline.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" -c -o pre_stage2_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo" "$(DEPDIR)/pre_stage2_exec-cmdline.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-cmdline.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='cmdline.c' object='pre_stage2_exec-cmdline.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-cmdline.obj `if test -f 'cmdline.c'; then $(CYGPATH_W) 'cmdline.c'; else $(CYGPATH_W) '$(srcdir)/cmdline.c'; fi` -- --pre_stage2_exec-common.o: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-common.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-common.Tpo" -c -o pre_stage2_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-common.Tpo" "$(DEPDIR)/pre_stage2_exec-common.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='pre_stage2_exec-common.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c -- --pre_stage2_exec-common.obj: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-common.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-common.Tpo" -c -o pre_stage2_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-common.Tpo" "$(DEPDIR)/pre_stage2_exec-common.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='pre_stage2_exec-common.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` -- --pre_stage2_exec-console.o: console.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-console.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-console.Tpo" -c -o pre_stage2_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-console.Tpo" "$(DEPDIR)/pre_stage2_exec-console.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-console.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='console.c' object='pre_stage2_exec-console.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-console.o `test -f 'console.c' || echo '$(srcdir)/'`console.c -- --pre_stage2_exec-console.obj: console.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-console.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-console.Tpo" -c -o pre_stage2_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-console.Tpo" "$(DEPDIR)/pre_stage2_exec-console.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-console.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='console.c' object='pre_stage2_exec-console.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-console.obj `if test -f 'console.c'; then $(CYGPATH_W) 'console.c'; else $(CYGPATH_W) '$(srcdir)/console.c'; fi` -- --pre_stage2_exec-disk_io.o: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" -c -o pre_stage2_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" "$(DEPDIR)/pre_stage2_exec-disk_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='pre_stage2_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c -- --pre_stage2_exec-disk_io.obj: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" -c -o pre_stage2_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo" "$(DEPDIR)/pre_stage2_exec-disk_io.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='pre_stage2_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` -- --pre_stage2_exec-fsys_ext2fs.o: fsys_ext2fs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ext2fs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" -c -o pre_stage2_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='pre_stage2_exec-fsys_ext2fs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ext2fs.o `test -f 'fsys_ext2fs.c' || echo '$(srcdir)/'`fsys_ext2fs.c -- --pre_stage2_exec-fsys_ext2fs.obj: fsys_ext2fs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ext2fs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" -c -o pre_stage2_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ext2fs.c' object='pre_stage2_exec-fsys_ext2fs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ext2fs.obj `if test -f 'fsys_ext2fs.c'; then $(CYGPATH_W) 'fsys_ext2fs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ext2fs.c'; fi` -- --pre_stage2_exec-fsys_fat.o: fsys_fat.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_fat.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" -c -o pre_stage2_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='pre_stage2_exec-fsys_fat.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_fat.o `test -f 'fsys_fat.c' || echo '$(srcdir)/'`fsys_fat.c -- --pre_stage2_exec-fsys_fat.obj: fsys_fat.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_fat.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" -c -o pre_stage2_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_fat.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_fat.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_fat.c' object='pre_stage2_exec-fsys_fat.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_fat.obj `if test -f 'fsys_fat.c'; then $(CYGPATH_W) 'fsys_fat.c'; else $(CYGPATH_W) '$(srcdir)/fsys_fat.c'; fi` -- --pre_stage2_exec-fsys_ffs.o: fsys_ffs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ffs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" -c -o pre_stage2_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='pre_stage2_exec-fsys_ffs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ffs.o `test -f 'fsys_ffs.c' || echo '$(srcdir)/'`fsys_ffs.c -- --pre_stage2_exec-fsys_ffs.obj: fsys_ffs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ffs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" -c -o pre_stage2_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ffs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ffs.c' object='pre_stage2_exec-fsys_ffs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ffs.obj `if test -f 'fsys_ffs.c'; then $(CYGPATH_W) 'fsys_ffs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ffs.c'; fi` -- --pre_stage2_exec-fsys_iso9660.o: fsys_iso9660.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_iso9660.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" -c -o pre_stage2_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='pre_stage2_exec-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c -- --pre_stage2_exec-fsys_iso9660.obj: fsys_iso9660.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_iso9660.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" -c -o pre_stage2_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='pre_stage2_exec-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_iso9660.obj `if test -f 'fsys_iso9660.c'; then $(CYGPATH_W) 'fsys_iso9660.c'; else $(CYGPATH_W) '$(srcdir)/fsys_iso9660.c'; fi` -- --pre_stage2_exec-fsys_jfs.o: fsys_jfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_jfs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" -c -o pre_stage2_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='pre_stage2_exec-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c -- --pre_stage2_exec-fsys_jfs.obj: fsys_jfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_jfs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" -c -o pre_stage2_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_jfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_jfs.c' object='pre_stage2_exec-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_jfs.obj `if test -f 'fsys_jfs.c'; then $(CYGPATH_W) 'fsys_jfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_jfs.c'; fi` -- --pre_stage2_exec-fsys_minix.o: fsys_minix.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_minix.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" -c -o pre_stage2_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='pre_stage2_exec-fsys_minix.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_minix.o `test -f 'fsys_minix.c' || echo '$(srcdir)/'`fsys_minix.c -- --pre_stage2_exec-fsys_minix.obj: fsys_minix.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_minix.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" -c -o pre_stage2_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_minix.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_minix.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_minix.c' object='pre_stage2_exec-fsys_minix.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_minix.obj `if test -f 'fsys_minix.c'; then $(CYGPATH_W) 'fsys_minix.c'; else $(CYGPATH_W) '$(srcdir)/fsys_minix.c'; fi` -- --pre_stage2_exec-fsys_reiserfs.o: fsys_reiserfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" -c -o pre_stage2_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='pre_stage2_exec-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c -- --pre_stage2_exec-fsys_reiserfs.obj: fsys_reiserfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" -c -o pre_stage2_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='pre_stage2_exec-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi` -- --pre_stage2_exec-fsys_ufs2.o: fsys_ufs2.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" -c -o pre_stage2_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='pre_stage2_exec-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c -- --pre_stage2_exec-fsys_ufs2.obj: fsys_ufs2.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" -c -o pre_stage2_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_ufs2.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='pre_stage2_exec-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi` -- --pre_stage2_exec-fsys_vstafs.o: fsys_vstafs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" -c -o pre_stage2_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='pre_stage2_exec-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c -- --pre_stage2_exec-fsys_vstafs.obj: fsys_vstafs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" -c -o pre_stage2_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='pre_stage2_exec-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi` -- --pre_stage2_exec-fsys_xfs.o: fsys_xfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" -c -o pre_stage2_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='pre_stage2_exec-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c -- --pre_stage2_exec-fsys_xfs.obj: fsys_xfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" -c -o pre_stage2_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_xfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='pre_stage2_exec-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi` -- --pre_stage2_exec-gunzip.o: gunzip.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-gunzip.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" -c -o pre_stage2_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" "$(DEPDIR)/pre_stage2_exec-gunzip.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='pre_stage2_exec-gunzip.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-gunzip.o `test -f 'gunzip.c' || echo '$(srcdir)/'`gunzip.c -- --pre_stage2_exec-gunzip.obj: gunzip.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-gunzip.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" -c -o pre_stage2_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo" "$(DEPDIR)/pre_stage2_exec-gunzip.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-gunzip.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='gunzip.c' object='pre_stage2_exec-gunzip.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-gunzip.obj `if test -f 'gunzip.c'; then $(CYGPATH_W) 'gunzip.c'; else $(CYGPATH_W) '$(srcdir)/gunzip.c'; fi` -- --pre_stage2_exec-hercules.o: hercules.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-hercules.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" -c -o pre_stage2_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" "$(DEPDIR)/pre_stage2_exec-hercules.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hercules.c' object='pre_stage2_exec-hercules.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-hercules.o `test -f 'hercules.c' || echo '$(srcdir)/'`hercules.c -- --pre_stage2_exec-hercules.obj: hercules.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-hercules.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" -c -o pre_stage2_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo" "$(DEPDIR)/pre_stage2_exec-hercules.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-hercules.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='hercules.c' object='pre_stage2_exec-hercules.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-hercules.obj `if test -f 'hercules.c'; then $(CYGPATH_W) 'hercules.c'; else $(CYGPATH_W) '$(srcdir)/hercules.c'; fi` -- --pre_stage2_exec-md5.o: md5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-md5.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-md5.Tpo" -c -o pre_stage2_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo" "$(DEPDIR)/pre_stage2_exec-md5.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='pre_stage2_exec-md5.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c -- --pre_stage2_exec-md5.obj: md5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-md5.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-md5.Tpo" -c -o pre_stage2_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo" "$(DEPDIR)/pre_stage2_exec-md5.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-md5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='md5.c' object='pre_stage2_exec-md5.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi` -- --pre_stage2_exec-serial.o: serial.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-serial.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-serial.Tpo" -c -o pre_stage2_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo" "$(DEPDIR)/pre_stage2_exec-serial.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='pre_stage2_exec-serial.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-serial.o `test -f 'serial.c' || echo '$(srcdir)/'`serial.c -- --pre_stage2_exec-serial.obj: serial.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-serial.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-serial.Tpo" -c -o pre_stage2_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo" "$(DEPDIR)/pre_stage2_exec-serial.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-serial.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='serial.c' object='pre_stage2_exec-serial.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-serial.obj `if test -f 'serial.c'; then $(CYGPATH_W) 'serial.c'; else $(CYGPATH_W) '$(srcdir)/serial.c'; fi` -- --pre_stage2_exec-smp-imps.o: smp-imps.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-smp-imps.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" -c -o pre_stage2_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" "$(DEPDIR)/pre_stage2_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smp-imps.c' object='pre_stage2_exec-smp-imps.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-smp-imps.o `test -f 'smp-imps.c' || echo '$(srcdir)/'`smp-imps.c -- --pre_stage2_exec-smp-imps.obj: smp-imps.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-smp-imps.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" -c -o pre_stage2_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo" "$(DEPDIR)/pre_stage2_exec-smp-imps.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-smp-imps.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='smp-imps.c' object='pre_stage2_exec-smp-imps.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-smp-imps.obj `if test -f 'smp-imps.c'; then $(CYGPATH_W) 'smp-imps.c'; else $(CYGPATH_W) '$(srcdir)/smp-imps.c'; fi` -- --pre_stage2_exec-stage2.o: stage2.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-stage2.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" -c -o pre_stage2_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" "$(DEPDIR)/pre_stage2_exec-stage2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='pre_stage2_exec-stage2.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-stage2.o `test -f 'stage2.c' || echo '$(srcdir)/'`stage2.c -- --pre_stage2_exec-stage2.obj: stage2.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-stage2.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" -c -o pre_stage2_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo" "$(DEPDIR)/pre_stage2_exec-stage2.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-stage2.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage2.c' object='pre_stage2_exec-stage2.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-stage2.obj `if test -f 'stage2.c'; then $(CYGPATH_W) 'stage2.c'; else $(CYGPATH_W) '$(srcdir)/stage2.c'; fi` -- --pre_stage2_exec-terminfo.o: terminfo.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-terminfo.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" -c -o pre_stage2_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" "$(DEPDIR)/pre_stage2_exec-terminfo.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='pre_stage2_exec-terminfo.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-terminfo.o `test -f 'terminfo.c' || echo '$(srcdir)/'`terminfo.c -- --pre_stage2_exec-terminfo.obj: terminfo.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-terminfo.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" -c -o pre_stage2_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo" "$(DEPDIR)/pre_stage2_exec-terminfo.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-terminfo.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='terminfo.c' object='pre_stage2_exec-terminfo.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-terminfo.obj `if test -f 'terminfo.c'; then $(CYGPATH_W) 'terminfo.c'; else $(CYGPATH_W) '$(srcdir)/terminfo.c'; fi` -- --pre_stage2_exec-tparm.o: tparm.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-tparm.o -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" -c -o pre_stage2_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" "$(DEPDIR)/pre_stage2_exec-tparm.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='pre_stage2_exec-tparm.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-tparm.o `test -f 'tparm.c' || echo '$(srcdir)/'`tparm.c -- --pre_stage2_exec-tparm.obj: tparm.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -MT pre_stage2_exec-tparm.obj -MD -MP -MF "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" -c -o pre_stage2_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo" "$(DEPDIR)/pre_stage2_exec-tparm.Po"; else rm -f "$(DEPDIR)/pre_stage2_exec-tparm.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='tparm.c' object='pre_stage2_exec-tparm.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-tparm.obj `if test -f 'tparm.c'; then $(CYGPATH_W) 'tparm.c'; else $(CYGPATH_W) '$(srcdir)/tparm.c'; fi` -- --reiserfs_stage1_5_exec-common.o: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" -c -o reiserfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='reiserfs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c -- --reiserfs_stage1_5_exec-common.obj: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" -c -o reiserfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='reiserfs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` -- --reiserfs_stage1_5_exec-char_io.o: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" -c -o reiserfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='reiserfs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c -- --reiserfs_stage1_5_exec-char_io.obj: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" -c -o reiserfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='reiserfs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` -- --reiserfs_stage1_5_exec-disk_io.o: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" -c -o reiserfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='reiserfs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c -- --reiserfs_stage1_5_exec-disk_io.obj: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" -c -o reiserfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='reiserfs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` -- --reiserfs_stage1_5_exec-stage1_5.o: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" -c -o reiserfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='reiserfs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c -- --reiserfs_stage1_5_exec-stage1_5.obj: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" -c -o reiserfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='reiserfs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` -- --reiserfs_stage1_5_exec-fsys_reiserfs.o: fsys_reiserfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-fsys_reiserfs.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" -c -o reiserfs_stage1_5_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='reiserfs_stage1_5_exec-fsys_reiserfs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-fsys_reiserfs.o `test -f 'fsys_reiserfs.c' || echo '$(srcdir)/'`fsys_reiserfs.c -- --reiserfs_stage1_5_exec-fsys_reiserfs.obj: fsys_reiserfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-fsys_reiserfs.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" -c -o reiserfs_stage1_5_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-fsys_reiserfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_reiserfs.c' object='reiserfs_stage1_5_exec-fsys_reiserfs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-fsys_reiserfs.obj `if test -f 'fsys_reiserfs.c'; then $(CYGPATH_W) 'fsys_reiserfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_reiserfs.c'; fi` -- --reiserfs_stage1_5_exec-bios.o: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" -c -o reiserfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='reiserfs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c -- --reiserfs_stage1_5_exec-bios.obj: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT reiserfs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" -c -o reiserfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/reiserfs_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='reiserfs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(reiserfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o reiserfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` -- --ufs2_stage1_5_exec-common.o: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" -c -o ufs2_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='ufs2_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c -- --ufs2_stage1_5_exec-common.obj: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" -c -o ufs2_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='ufs2_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` -- --ufs2_stage1_5_exec-char_io.o: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" -c -o ufs2_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='ufs2_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c -- --ufs2_stage1_5_exec-char_io.obj: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" -c -o ufs2_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='ufs2_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` -- --ufs2_stage1_5_exec-disk_io.o: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" -c -o ufs2_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='ufs2_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c -- --ufs2_stage1_5_exec-disk_io.obj: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" -c -o ufs2_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='ufs2_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` -- --ufs2_stage1_5_exec-stage1_5.o: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" -c -o ufs2_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='ufs2_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c -- --ufs2_stage1_5_exec-stage1_5.obj: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" -c -o ufs2_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='ufs2_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` -- --ufs2_stage1_5_exec-fsys_ufs2.o: fsys_ufs2.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-fsys_ufs2.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" -c -o ufs2_stage1_5_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='ufs2_stage1_5_exec-fsys_ufs2.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-fsys_ufs2.o `test -f 'fsys_ufs2.c' || echo '$(srcdir)/'`fsys_ufs2.c -- --ufs2_stage1_5_exec-fsys_ufs2.obj: fsys_ufs2.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-fsys_ufs2.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" -c -o ufs2_stage1_5_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-fsys_ufs2.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_ufs2.c' object='ufs2_stage1_5_exec-fsys_ufs2.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-fsys_ufs2.obj `if test -f 'fsys_ufs2.c'; then $(CYGPATH_W) 'fsys_ufs2.c'; else $(CYGPATH_W) '$(srcdir)/fsys_ufs2.c'; fi` -- --ufs2_stage1_5_exec-bios.o: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" -c -o ufs2_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='ufs2_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c -- --ufs2_stage1_5_exec-bios.obj: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -MT ufs2_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" -c -o ufs2_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo" "$(DEPDIR)/ufs2_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/ufs2_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='ufs2_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ufs2_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ufs2_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` -- --vstafs_stage1_5_exec-common.o: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" -c -o vstafs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='vstafs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c -- --vstafs_stage1_5_exec-common.obj: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" -c -o vstafs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='vstafs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` -- --vstafs_stage1_5_exec-char_io.o: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" -c -o vstafs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='vstafs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c -- --vstafs_stage1_5_exec-char_io.obj: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" -c -o vstafs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='vstafs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` -- --vstafs_stage1_5_exec-disk_io.o: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" -c -o vstafs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='vstafs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c -- --vstafs_stage1_5_exec-disk_io.obj: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" -c -o vstafs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='vstafs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` -- --vstafs_stage1_5_exec-stage1_5.o: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" -c -o vstafs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='vstafs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c -- --vstafs_stage1_5_exec-stage1_5.obj: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" -c -o vstafs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='vstafs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` -- --vstafs_stage1_5_exec-fsys_vstafs.o: fsys_vstafs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-fsys_vstafs.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" -c -o vstafs_stage1_5_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='vstafs_stage1_5_exec-fsys_vstafs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-fsys_vstafs.o `test -f 'fsys_vstafs.c' || echo '$(srcdir)/'`fsys_vstafs.c -- --vstafs_stage1_5_exec-fsys_vstafs.obj: fsys_vstafs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-fsys_vstafs.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" -c -o vstafs_stage1_5_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_vstafs.c' object='vstafs_stage1_5_exec-fsys_vstafs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-fsys_vstafs.obj `if test -f 'fsys_vstafs.c'; then $(CYGPATH_W) 'fsys_vstafs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_vstafs.c'; fi` -- --vstafs_stage1_5_exec-bios.o: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" -c -o vstafs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='vstafs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c -- --vstafs_stage1_5_exec-bios.obj: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT vstafs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" -c -o vstafs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/vstafs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/vstafs_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='vstafs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` -- --xfs_stage1_5_exec-common.o: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-common.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" -c -o xfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='xfs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c -- --xfs_stage1_5_exec-common.obj: common.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-common.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" -c -o xfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-common.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-common.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='xfs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-common.obj `if test -f 'common.c'; then $(CYGPATH_W) 'common.c'; else $(CYGPATH_W) '$(srcdir)/common.c'; fi` -- --xfs_stage1_5_exec-char_io.o: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-char_io.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" -c -o xfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='xfs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c -- --xfs_stage1_5_exec-char_io.obj: char_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-char_io.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" -c -o xfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-char_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-char_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='char_io.c' object='xfs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-char_io.obj `if test -f 'char_io.c'; then $(CYGPATH_W) 'char_io.c'; else $(CYGPATH_W) '$(srcdir)/char_io.c'; fi` -- --xfs_stage1_5_exec-disk_io.o: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-disk_io.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" -c -o xfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='xfs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c -- --xfs_stage1_5_exec-disk_io.obj: disk_io.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-disk_io.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" -c -o xfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-disk_io.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='disk_io.c' object='xfs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-disk_io.obj `if test -f 'disk_io.c'; then $(CYGPATH_W) 'disk_io.c'; else $(CYGPATH_W) '$(srcdir)/disk_io.c'; fi` -- --xfs_stage1_5_exec-stage1_5.o: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-stage1_5.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" -c -o xfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='xfs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c -- --xfs_stage1_5_exec-stage1_5.obj: stage1_5.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-stage1_5.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" -c -o xfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='stage1_5.c' object='xfs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-stage1_5.obj `if test -f 'stage1_5.c'; then $(CYGPATH_W) 'stage1_5.c'; else $(CYGPATH_W) '$(srcdir)/stage1_5.c'; fi` -- --xfs_stage1_5_exec-fsys_xfs.o: fsys_xfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-fsys_xfs.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" -c -o xfs_stage1_5_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='xfs_stage1_5_exec-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-fsys_xfs.o `test -f 'fsys_xfs.c' || echo '$(srcdir)/'`fsys_xfs.c -- --xfs_stage1_5_exec-fsys_xfs.obj: fsys_xfs.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-fsys_xfs.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" -c -o xfs_stage1_5_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_xfs.c' object='xfs_stage1_5_exec-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-fsys_xfs.obj `if test -f 'fsys_xfs.c'; then $(CYGPATH_W) 'fsys_xfs.c'; else $(CYGPATH_W) '$(srcdir)/fsys_xfs.c'; fi` -- --xfs_stage1_5_exec-bios.o: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-bios.o -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" -c -o xfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='xfs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c -- --xfs_stage1_5_exec-bios.obj: bios.c --@am__fastdepCC_TRUE@ if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -MT xfs_stage1_5_exec-bios.obj -MD -MP -MF "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" -c -o xfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo" "$(DEPDIR)/xfs_stage1_5_exec-bios.Po"; else rm -f "$(DEPDIR)/xfs_stage1_5_exec-bios.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='xfs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-bios.obj `if test -f 'bios.c'; then $(CYGPATH_W) 'bios.c'; else $(CYGPATH_W) '$(srcdir)/bios.c'; fi` --uninstall-info-am: --install-pkglibDATA: $(pkglib_DATA) -- @$(NORMAL_INSTALL) -- test -z "$(pkglibdir)" || $(mkdir_p) "$(DESTDIR)$(pkglibdir)" -- @list='$(pkglib_DATA)'; for p in $$list; do \ -- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ -- f=$(am__strip_dir) \ -- echo " $(pkglibDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkglibdir)/$$f'"; \ -- $(pkglibDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkglibdir)/$$f"; \ -- done -- --uninstall-pkglibDATA: -- @$(NORMAL_UNINSTALL) -- @list='$(pkglib_DATA)'; for p in $$list; do \ -- f=$(am__strip_dir) \ -- echo " rm -f '$(DESTDIR)$(pkglibdir)/$$f'"; \ -- rm -f "$(DESTDIR)$(pkglibdir)/$$f"; \ -- done -- --ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- mkid -fID $$unique --tags: TAGS -- --TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ -- test -n "$$unique" || unique=$$empty_fix; \ -- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -- $$tags $$unique; \ -- fi --ctags: CTAGS --CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- test -z "$(CTAGS_ARGS)$$tags$$unique" \ -- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ -- $$tags $$unique -- --GTAGS: -- here=`$(am__cd) $(top_builddir) && pwd` \ -- && cd $(top_srcdir) \ -- && gtags -i $(GTAGS_ARGS) $$here -- --distclean-tags: -- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -- --check-TESTS: $(TESTS) -- @failed=0; all=0; xfail=0; xpass=0; skip=0; \ -- srcdir=$(srcdir); export srcdir; \ -- list='$(TESTS)'; \ -- if test -n "$$list"; then \ -- for tst in $$list; do \ -- if test -f ./$$tst; then dir=./; \ -- elif test -f $$tst; then dir=; \ -- else dir="$(srcdir)/"; fi; \ -- if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ -- all=`expr $$all + 1`; \ -- case " $(XFAIL_TESTS) " in \ -- *" $$tst "*) \ -- xpass=`expr $$xpass + 1`; \ -- failed=`expr $$failed + 1`; \ -- echo "XPASS: $$tst"; \ -- ;; \ -- *) \ -- echo "PASS: $$tst"; \ -- ;; \ -- esac; \ -- elif test $$? -ne 77; then \ -- all=`expr $$all + 1`; \ -- case " $(XFAIL_TESTS) " in \ -- *" $$tst "*) \ -- xfail=`expr $$xfail + 1`; \ -- echo "XFAIL: $$tst"; \ -- ;; \ -- *) \ -- failed=`expr $$failed + 1`; \ -- echo "FAIL: $$tst"; \ -- ;; \ -- esac; \ -- else \ -- skip=`expr $$skip + 1`; \ -- echo "SKIP: $$tst"; \ -- fi; \ -- done; \ -- if test "$$failed" -eq 0; then \ -- if test "$$xfail" -eq 0; then \ -- banner="All $$all tests passed"; \ -- else \ -- banner="All $$all tests behaved as expected ($$xfail expected failures)"; \ -- fi; \ -- else \ -- if test "$$xpass" -eq 0; then \ -- banner="$$failed of $$all tests failed"; \ -- else \ -- banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \ -- fi; \ -- fi; \ -- dashes="$$banner"; \ -- skipped=""; \ -- if test "$$skip" -ne 0; then \ -- skipped="($$skip tests were not run)"; \ -- test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ -- dashes="$$skipped"; \ -- fi; \ -- report=""; \ -- if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ -- report="Please report to $(PACKAGE_BUGREPORT)"; \ -- test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ -- dashes="$$report"; \ -- fi; \ -- dashes=`echo "$$dashes" | sed s/./=/g`; \ -- echo "$$dashes"; \ -- echo "$$banner"; \ -- test -z "$$skipped" || echo "$$skipped"; \ -- test -z "$$report" || echo "$$report"; \ -- echo "$$dashes"; \ -- test "$$failed" -eq 0; \ -- else :; fi -- --distdir: $(DISTFILES) -- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ -- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ -- list='$(DISTFILES)'; for file in $$list; do \ -- case $$file in \ -- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ -- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ -- esac; \ -- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ -- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ -- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ -- dir="/$$dir"; \ -- $(mkdir_p) "$(distdir)$$dir"; \ -- else \ -- dir=''; \ -- fi; \ -- if test -d $$d/$$file; then \ -- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ -- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ -- fi; \ -- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ -- else \ -- test -f $(distdir)/$$file \ -- || cp -p $$d/$$file $(distdir)/$$file \ -- || exit 1; \ -- fi; \ -- done --check-am: all-am -- $(MAKE) $(AM_MAKEFLAGS) check-TESTS --check: $(BUILT_SOURCES) -- $(MAKE) $(AM_MAKEFLAGS) check-am --all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(SCRIPTS) $(DATA) \ -- $(HEADERS) --installdirs: -- for dir in "$(DESTDIR)$(pkglibdir)"; do \ -- test -z "$$dir" || $(mkdir_p) "$$dir"; \ -- done --install: $(BUILT_SOURCES) -- $(MAKE) $(AM_MAKEFLAGS) install-am --install-exec: install-exec-am --install-data: install-data-am --uninstall: uninstall-am -- --install-am: all-am -- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -- --installcheck: installcheck-am --install-strip: -- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ -- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ -- `test -z '$(STRIP)' || \ -- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install --mostlyclean-generic: -- -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) -- --clean-generic: -- -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) -- --distclean-generic: -- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -- --maintainer-clean-generic: -- @echo "This command is intended for maintainers to use" -- @echo "it deletes files that may require special tools to rebuild." -- -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) --clean: clean-am -- --clean-am: clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS \ -- mostlyclean-am -- --distclean: distclean-am -- -rm -rf ./$(DEPDIR) -- -rm -f Makefile --distclean-am: clean-am distclean-compile distclean-generic \ -- distclean-tags -- --dvi: dvi-am -- --dvi-am: -- --html: html-am -- --info: info-am -- --info-am: -- --install-data-am: -- --install-exec-am: install-pkglibDATA -- --install-info: install-info-am -- --install-man: -- --installcheck-am: -- --maintainer-clean: maintainer-clean-am -- -rm -rf ./$(DEPDIR) -- -rm -f Makefile --maintainer-clean-am: distclean-am maintainer-clean-generic -- --mostlyclean: mostlyclean-am -- --mostlyclean-am: mostlyclean-compile mostlyclean-generic -- --pdf: pdf-am -- --pdf-am: -- --ps: ps-am -- --ps-am: -- --uninstall-am: uninstall-info-am uninstall-pkglibDATA -- --.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ -- clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \ -- distclean distclean-compile distclean-generic distclean-tags \ -- distdir dvi dvi-am html html-am info info-am install \ -- install-am install-data install-data-am install-exec \ -- install-exec-am install-info install-info-am install-man \ -- install-pkglibDATA install-strip installcheck installcheck-am \ -- installdirs maintainer-clean maintainer-clean-generic \ -- mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ -- ps ps-am tags uninstall uninstall-am uninstall-info-am \ -- uninstall-pkglibDATA -- -- --stage2_size.h: pre_stage2 -- -rm -f stage2_size.h -- set dummy `ls -l pre_stage2`; \ -- echo "#define STAGE2_SIZE $$6" > stage2_size.h -- --# XXX: automake doesn't provide a way to specify dependencies for object --# files explicitly, so we must write this by a general Makefile scheme. --# If automake change the naming scheme for per-executable objects, this --# will be broken. --start_exec-start.$(OBJEXT): stage2_size.h -- --stage2: pre_stage2 start -- -rm -f stage2 -- cat start pre_stage2 > stage2 -- --start_eltorito_exec-start.$(OBJEXT): stage2_size.h -- --stage2_eltorito: pre_stage2 start_eltorito -- -rm -f stage2_eltorito -- cat start_eltorito pre_stage2 > stage2_eltorito -- --diskless_size.h: diskless -- -rm -f $@ -- set dummy `ls -l $^`; \ -- echo "#define DISKLESS_SIZE $$6" > $@ -- --# XXX: See the comment for start_exec-start.o. --nbloader_exec-nbloader.$(OBJEXT): diskless_size.h -- --# For nbgrub target. --nbgrub: nbloader diskless -- -rm -f $@ -- cat $^ > $@ -- --# XXX: See the comment for start_exec-start.o. --pxeloader_exec-pxeloader.$(OBJEXT): diskless_size.h -- --# For pxegrub target. --pxegrub: pxeloader diskless -- -rm -f $@ -- cat $^ > $@ --.exec: -- $(OBJCOPY) -O binary $< $@ --# Tell versions [3.59,3.63) of GNU make to not export all variables. --# Otherwise a system limit (for SysV at least) may be exceeded. --.NOEXPORT: -diff --git a/stage2/asm.S b/stage2/asm.S -index 34b6e7d..5c4dd5e 100644 ---- a/stage2/asm.S -+++ b/stage2/asm.S -@@ -98,7 +98,7 @@ VARIABLE(version_string) - .string VERSION - VARIABLE(config_file) - #ifndef STAGE1_5 -- .string "/boot/grub/menu.lst" -+ .string "/boot/grub/grub.conf" - #else /* STAGE1_5 */ - .long 0xffffffff - .string "/boot/grub/stage2" -@@ -1622,36 +1622,78 @@ ENTRY(set_vbe_mode) - */ - - ENTRY(gateA20) -+ pushl %ebx -+ pushl %edx -+ call testA20 -+ jnz 1f -+ call A20_BIOS -+ call testA20 -+ jnz 1f -+ call A20_PORT92 -+ call testA20 -+ jnz 1f -+ call A20_KBDCTL -+ call testA20 -+ jnz 1f -+ movl $0,%eax -+ jmp 2f -+1: -+ movl $-1,%eax -+2: -+ popl %edx -+ popl %ebx -+ ret -+ -+testA20: -+ movl 0x500,%eax -+ movl 0x100500,%ebx -+ notl %eax -+ movl %eax,0x100500 -+ cmpl %eax,0x500 -+ pushfl -+ movl %ebx,0x100500 -+ notl %eax -+ movl %eax,0x500 -+ popfl -+ ret -+ -+A20_BIOS: - /* first, try a BIOS call */ -- pushl %ebp -- movl 8(%esp), %edx - - call EXT_C(prot_to_real) - - .code16 -- movw $0x2400, %ax -- testw %dx, %dx -- jz 1f -- incw %ax -+ movw $0x2401, %ax - 1: stc - int $0x15 -- jnc 2f -- -- /* set non-zero if failed */ -- movb $1, %ah -- -- /* save the status */ --2: movb %ah, %dl - - DATA32 call EXT_C(real_to_prot) - .code32 -+ ret - -- popl %ebp -- testb %dl, %dl -- jnz 3f -+A20_PORT92: -+ /* -+ * try to switch gateA20 using PORT92, the "Fast A20 and Init" -+ * register -+ */ -+ mov $0x92, %dx -+ inb %dx, %al -+ /* skip the port92 code if it's unimplemented (read returns 0xff) */ -+ cmpb $0xff, %al -+ jz 6f -+ -+ /* set bit1, the ALT_A20_GATE bit */ -+ orb $2, %al -+ /* and $0xfd, %al */ -+ -+ /* clear the INIT_NOW bit; don't accidently reset the machine */ -+ and $0xfe, %al -+ outb %al, %dx -+6: - ret - --3: /* use keyboard controller */ -+A20_KBDCTL: -+ /* use keyboard controller */ - pushl %eax - - call gloop1 -@@ -1665,11 +1707,7 @@ gloopint1: - jnz gloopint1 - - movb $KB_OUTPUT_MASK, %al -- cmpb $0, 0x8(%esp) -- jz gdoit -- - orb $KB_A20_ENABLE, %al --gdoit: - outb $K_RDWR - - call gloop1 -@@ -1994,8 +2032,25 @@ ENTRY(console_getkey) - call EXT_C(prot_to_real) - .code16 - -+.again: -+ mov $0x11, %ah /* poll kbd */ - int $0x16 - -+ jz .again -+#if 0 -+/* XXX handle serial here? -- pj */ -+ jnz .kbd -+#endif -+.kbd: -+ mov $0x10, %ah -+ int $0x16 -+ cmp $0xe0, %al -+ jnz .not_ext -+ xor %al, %al -+.not_ext: -+ and %al, %al -+ jz .func_key -+.func_key: - movw %ax, %dx /* real_to_prot uses %eax */ - call translate_keycode - call remap_ascii_char -@@ -2003,7 +2058,7 @@ ENTRY(console_getkey) - DATA32 call EXT_C(real_to_prot) - .code32 - -- movw %dx, %ax -+ mov %dx, %ax - - pop %ebp - ret -@@ -2029,7 +2084,7 @@ ENTRY(console_checkkey) - call EXT_C(prot_to_real) /* enter real mode */ - .code16 - -- movb $0x1, %ah -+ movb $0x11, %ah - int $0x16 - - DATA32 jz notpending -@@ -2051,6 +2106,37 @@ pending: - pop %ebp - ret - -+ -+/* -+ * int console_keystatus (void) -+ * BIOS call "INT 16H Function 02H" to get keyboard modifier status -+ * Call with %ah = 0x2 -+ * Return: %al = keyboard state: -+ * bit 3: alt key down -+ * bit 2: ctrl key down -+ * bit 1: left shift key down -+ * bit 0: right shift key down -+ */ -+ENTRY(console_keystatus) -+ push %ebp -+ -+ call EXT_C(prot_to_real) -+ .code16 -+ -+ movb $0x12, %ah -+ int $0x16 -+ movw %ax, %dx -+ -+ DATA32 call EXT_C(real_to_prot) -+ .code32 -+ -+ movw %dx, %ax -+ -+ /* Mask out numlock, capslock and insert state. */ -+ andl $0x0f0f, %eax -+ pop %ebp -+ ret -+ - - /* - * int console_getxy (void) -@@ -2216,6 +2302,156 @@ ENTRY(console_setcursor) - pop %ebx - pop %ebp - ret -+ -+/* graphics mode functions */ -+#ifdef SUPPORT_GRAPHICS -+VARIABLE(cursorX) -+.word 0 -+VARIABLE(cursorY) -+.word 0 -+VARIABLE(cursorCount) -+.word 0 -+VARIABLE(cursorBuf) -+.byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 -+ -+ -+/* -+ * int set_videomode(mode) -+ * BIOS call "INT 10H Function 0h" to set video mode -+ * Call with %ah = 0x0 -+ * %al = video mode -+ * Returns old videomode. -+ */ -+ENTRY(set_videomode) -+ push %ebp -+ push %ebx -+ push %ecx -+ -+ movb 0x10(%esp), %cl -+ -+ call EXT_C(prot_to_real) -+ .code16 -+ -+ xorw %bx, %bx -+ movb $0xf, %ah -+ int $0x10 /* Get Current Video mode */ -+ movb %al, %ch -+ xorb %ah, %ah -+ movb %cl, %al -+ int $0x10 /* Set Video mode */ -+ -+ DATA32 call EXT_C(real_to_prot) -+ .code32 -+ -+ xorb %ah, %ah -+ movb %ch, %al -+ -+ pop %ecx -+ pop %ebx -+ pop %ebp -+ ret -+ -+ -+/* -+ * unsigned char * graphics_get_font() -+ * BIOS call "INT 10H Function 11h" to set font -+ * Call with %ah = 0x11 -+ */ -+ENTRY(graphics_get_font) -+ push %ebp -+ push %ebx -+ push %ecx -+ push %edx -+ -+ call EXT_C(prot_to_real) -+ .code16 -+ -+ movw $0x1130, %ax -+ movb $6, %bh /* font 8x16 */ -+ int $0x10 -+ movw %bp, %dx -+ movw %es, %cx -+ -+ DATA32 call EXT_C(real_to_prot) -+ .code32 -+ -+ xorl %eax, %eax -+ movw %cx, %ax -+ shll $4, %eax -+ movw %dx, %ax -+ -+ pop %edx -+ pop %ecx -+ pop %ebx -+ pop %ebp -+ ret -+ -+ -+ -+/* -+ * graphics_set_palette(index, red, green, blue) -+ * BIOS call "INT 10H Function 10h" to set individual dac register -+ * Call with %ah = 0x10 -+ * %bx = register number -+ * %ch = new value for green (0-63) -+ * %cl = new value for blue (0-63) -+ * %dh = new value for red (0-63) -+ */ -+ -+ENTRY(graphics_set_palette) -+ push %ebp -+ push %eax -+ push %ebx -+ push %ecx -+ push %edx -+ -+ movw $0x3c8, %bx /* address write mode register */ -+ -+ /* wait vertical retrace */ -+ -+ movw $0x3da, %dx -+l1b: inb %dx, %al /* wait vertical active display */ -+ test $8, %al -+ jnz l1b -+ -+l2b: inb %dx, %al /* wait vertical retrace */ -+ test $8, %al -+ jnz l2b -+ -+ mov %bx, %dx -+ movb 0x18(%esp), %al /* index */ -+ outb %al, %dx -+ inc %dx -+ -+ movb 0x1c(%esp), %al /* red */ -+ outb %al, %dx -+ -+ movb 0x20(%esp), %al /* green */ -+ outb %al, %dx -+ -+ movb 0x24(%esp), %al /* blue */ -+ outb %al, %dx -+ -+ movw 0x18(%esp), %bx -+ -+ call EXT_C(prot_to_real) -+ .code16 -+ -+ movb %bl, %bh -+ movw $0x1000, %ax -+ int $0x10 -+ -+ DATA32 call EXT_C(real_to_prot) -+ .code32 -+ -+ pop %edx -+ pop %ecx -+ pop %ebx -+ pop %eax -+ pop %ebp -+ ret -+ -+#endif /* SUPPORT_GRAPHICS */ - - /* - * getrtsecs() -diff --git a/stage2/boot.c b/stage2/boot.c -index 4185d23..e30daf8 100644 ---- a/stage2/boot.c -+++ b/stage2/boot.c -@@ -25,10 +25,14 @@ - #include "imgact_aout.h" - #include "i386-elf.h" - -+#ifndef PLATFORM_EFI - static int cur_addr; -+#endif - entry_func entry_addr; -+#ifndef PLATFORM_EFI - static struct mod_list mll[99]; - static int linux_mem_size; -+#endif - - /* - * The next two functions, 'load_image' and 'load_module', are the building -@@ -40,6 +44,9 @@ kernel_t - load_image (char *kernel, char *arg, kernel_t suggested_type, - unsigned long load_flags) - { -+#ifdef PLATFORM_EFI -+ return grub_load_linux (kernel, arg); -+#else - int len, i, exec_type = 0, align_4k = 1; - entry_func real_entry_addr = 0; - kernel_t type = KERNEL_TYPE_NONE; -@@ -221,6 +228,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - { - int big_linux = 0; - int setup_sects = lh->setup_sects; -+ int cmdline_size = 0xff; - - if (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0200) - { -@@ -248,6 +256,14 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - lh->cl_offset = LINUX_CL_OFFSET; - lh->setup_move_size = LINUX_SETUP_MOVE_SIZE; - } -+ -+ if (lh->version >= 0x0206) -+ { -+ cmdline_size = lh->cmdline_size; -+ if (cmdline_size > (LINUX_CL_END_OFFSET - LINUX_CL_OFFSET)) -+ cmdline_size = LINUX_CL_END_OFFSET - LINUX_CL_OFFSET; -+ } -+ - } - else - { -@@ -265,7 +281,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - setup_sects = LINUX_DEFAULT_SETUP_SECTS; - - data_len = setup_sects << 9; -- text_len = filemax - data_len - SECTOR_SIZE; -+ text_len = filemax - data_len - get_sector_size(current_drive); - - linux_data_tmp_addr = (char *) LINUX_BZIMAGE_ADDR + text_len; - -@@ -280,8 +296,12 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - errnum = ERR_WONT_FIT; - else - { -- grub_printf (" [Linux-%s, setup=0x%x, size=0x%x]\n", -- (big_linux ? "bzImage" : "zImage"), data_len, text_len); -+ grub_verbose_printf (" [Linux-%s, setup=0x%x, size=0x%x]\n", -+ (big_linux ? "bzImage" : "zImage"), -+ data_len, text_len); -+ -+ if (silent_grub) -+ lh->vid_mode = 0x0f04; - - /* Video mode selection support. What a mess! */ - /* NOTE: Even the word "mess" is not still enough to -@@ -375,14 +395,15 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - - /* It is possible that DATA_LEN + SECTOR_SIZE is greater than - MULTIBOOT_SEARCH, so the data may have been read partially. */ -- if (data_len + SECTOR_SIZE <= MULTIBOOT_SEARCH) -+ if (data_len + get_sector_size(current_drive) <= MULTIBOOT_SEARCH) - grub_memmove (linux_data_tmp_addr, buffer, -- data_len + SECTOR_SIZE); -+ data_len + get_sector_size(current_drive)); - else - { - grub_memmove (linux_data_tmp_addr, buffer, MULTIBOOT_SEARCH); - grub_read (linux_data_tmp_addr + MULTIBOOT_SEARCH, -- data_len + SECTOR_SIZE - MULTIBOOT_SEARCH); -+ data_len + get_sector_size(current_drive) -+ - MULTIBOOT_SEARCH); - } - - if (lh->header != LINUX_MAGIC_SIGNATURE || -@@ -404,7 +425,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - char *src = skip_to (0, arg); - char *dest = linux_data_tmp_addr + LINUX_CL_OFFSET; - -- while (dest < linux_data_tmp_addr + LINUX_CL_END_OFFSET && *src) -+ while (dest < linux_data_tmp_addr + LINUX_CL_OFFSET + cmdline_size && *src) - *(dest++) = *(src++); - - /* Old Linux kernels have problems determining the amount of -@@ -425,7 +446,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - if (! grub_strstr (arg, "mem=") - && ! (load_flags & KERNEL_LOAD_NO_MEM_OPTION) - && lh->version < 0x0203 /* kernel version < 2.4.18 */ -- && dest + 15 < linux_data_tmp_addr + LINUX_CL_END_OFFSET) -+ && dest + 15 < linux_data_tmp_addr + LINUX_CL_OFFSET + cmdline_size) - { - *dest++ = ' '; - *dest++ = 'm'; -@@ -441,7 +462,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - } - - /* offset into file */ -- grub_seek (data_len + SECTOR_SIZE); -+ grub_seek (data_len + get_sector_size(current_drive)); - - cur_addr = (int) linux_data_tmp_addr + LINUX_SETUP_MOVE_SIZE; - grub_read ((char *) LINUX_BZIMAGE_ADDR, text_len); -@@ -487,7 +508,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - mbi.syms.a.addr = 0; - mbi.syms.a.pad = 0; - -- printf (" [%s-%s", str2, str); -+ verbose_printf (" [%s-%s", str2, str); - - str = ""; - -@@ -496,7 +517,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - if (flags & MULTIBOOT_AOUT_KLUDGE) - str = "-and-data"; - -- printf (", loadaddr=0x%x, text%s=0x%x", cur_addr, str, text_len); -+ verbose_printf (", loadaddr=0x%x, text%s=0x%x", cur_addr, str, text_len); - - /* read text, then read data */ - if (grub_read ((char *) RAW_ADDR (cur_addr), text_len) == text_len) -@@ -509,9 +530,9 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - if (align_4k) - cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000; - else -- printf (", C"); -+ verbose_printf (", C"); - -- printf (", data=0x%x", data_len); -+ verbose_printf (", data=0x%x", data_len); - - if ((grub_read ((char *) RAW_ADDR (cur_addr), data_len) - != data_len) -@@ -525,7 +546,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - memset ((char *) RAW_ADDR (cur_addr), 0, bss_len); - cur_addr += bss_len; - -- printf (", bss=0x%x", bss_len); -+ verbose_printf (", bss=0x%x", bss_len); - } - } - else if (!errnum) -@@ -545,7 +566,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - *((int *) RAW_ADDR (cur_addr)) = pu.aout->a_syms; - cur_addr += sizeof (int); - -- printf (", symtab=0x%x", pu.aout->a_syms); -+ verbose_printf (", symtab=0x%x", pu.aout->a_syms); - - if (grub_read ((char *) RAW_ADDR (cur_addr), pu.aout->a_syms) - == pu.aout->a_syms) -@@ -562,7 +583,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - - i -= sizeof (int); - -- printf (", strtab=0x%x", i); -+ verbose_printf (", strtab=0x%x", i); - - symtab_err = (grub_read ((char *) RAW_ADDR (cur_addr), i) - != i); -@@ -576,7 +597,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - - if (symtab_err) - { -- printf ("(bad)"); -+ verbose_printf ("(bad)"); - cur_addr = orig_addr; - mbi.syms.a.tabsize = 0; - mbi.syms.a.strsize = 0; -@@ -630,7 +651,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - /* mark memory as used */ - if (cur_addr < memaddr + memsiz) - cur_addr = memaddr + memsiz; -- printf (", <0x%x:0x%x:0x%x>", memaddr, filesiz, -+ verbose_printf (", <0x%x:0x%x:0x%x>", memaddr, filesiz, - memsiz - filesiz); - /* increment number of segments */ - loaded++; -@@ -676,7 +697,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - shdr = (Elf32_Shdr *) mbi.syms.e.addr; - cur_addr += tab_size; - -- printf (", shtab=0x%x", cur_addr); -+ verbose_printf (", shtab=0x%x", cur_addr); - - for (i = 0; i < mbi.syms.e.num; i++) - { -@@ -718,7 +739,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - - if (symtab_err) - { -- printf ("(bad)"); -+ verbose_printf ("(bad)"); - mbi.syms.e.num = 0; - mbi.syms.e.size = 0; - mbi.syms.e.addr = 0; -@@ -733,7 +754,7 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - - if (! errnum) - { -- grub_printf (", entry=0x%x]\n", (unsigned) entry_addr); -+ grub_verbose_printf (", entry=0x%x]\n", (unsigned) entry_addr); - - /* If the entry address is physically different from that of the ELF - header, correct it here. */ -@@ -756,8 +777,10 @@ load_image (char *kernel, char *arg, kernel_t suggested_type, - } - - return type; -+#endif - } - -+#ifndef PLATFORM_EFI - int - load_module (char *module, char *arg) - { -@@ -776,7 +799,7 @@ load_module (char *module, char *arg) - return 0; - } - -- printf (" [Multiboot-module @ 0x%x, 0x%x bytes]\n", cur_addr, len); -+ verbose_printf (" [Multiboot-module @ 0x%x, 0x%x bytes]\n", cur_addr, len); - - /* these two simply need to be set if any modules are loaded at all */ - mbi.flags |= MB_INFO_MODS; -@@ -794,11 +817,19 @@ load_module (char *module, char *arg) - grub_close (); - return 1; - } -+#endif - - int - load_initrd (char *initrd) - { -- int len; -+#ifdef PLATFORM_EFI -+#ifndef NO_DECOMPRESSION -+ no_decompression = 1; -+#endif -+ return grub_load_initrd (initrd); -+#else -+ int len, next_addr; -+ char *singleimage, *pos; - unsigned long moveto; - unsigned long max_addr; - struct linux_kernel_header *lh -@@ -807,16 +838,24 @@ load_initrd (char *initrd) - #ifndef NO_DECOMPRESSION - no_decompression = 1; - #endif -- -- if (! grub_open (initrd)) -- goto fail; -+ len = 0; -+ next_addr = cur_addr; - -- len = grub_read ((char *) cur_addr, -1); -- if (! len) -- { -- grub_close (); -- goto fail; -- } -+ /* loop over all initrd images and concatenate them in memory */ -+ singleimage = strtok_r(initrd," \t",&pos); -+ while (singleimage) { -+ if (! grub_open (singleimage)) -+ continue; -+ -+ len += grub_read ((char *) next_addr, -1); -+ grub_close (); -+ -+ next_addr = cur_addr + len; -+ singleimage = strtok_r(NULL," \t",&pos); -+ } -+ -+ if (!len) -+ goto fail; - - if (linux_mem_size) - moveto = linux_mem_size; -@@ -824,8 +863,12 @@ load_initrd (char *initrd) - moveto = (mbi.mem_upper + 0x400) << 10; - - moveto = (moveto - len) & 0xfffff000; -+#if 0 - max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203 - ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS); -+#else -+ max_addr = LINUX_INITRD_MAX_ADDRESS; -+#endif - if (moveto + len >= max_addr) - moveto = (max_addr - len) & 0xfffff000; - -@@ -836,13 +879,12 @@ load_initrd (char *initrd) - moveto -= 0x10000; - memmove ((void *) RAW_ADDR (moveto), (void *) cur_addr, len); - -- printf (" [Linux-initrd @ 0x%x, 0x%x bytes]\n", moveto, len); -+ verbose_printf (" [Linux-initrd @ 0x%x, 0x%x bytes]\n", moveto, len); - - /* FIXME: Should check if the kernel supports INITRD. */ - lh->ramdisk_image = RAW_ADDR (moveto); - lh->ramdisk_size = len; - -- grub_close (); - - fail: - -@@ -851,9 +893,11 @@ load_initrd (char *initrd) - #endif - - return ! errnum; -+#endif - } - - -+#ifndef PLATFORM_EFI - #ifdef GRUB_UTIL - /* Dummy function to fake the *BSD boot. */ - static void -@@ -1018,3 +1062,5 @@ bsd_boot (kernel_t type, int bootdev, char *arg) - extended_memory, mbi.mem_lower); - } - } -+#endif -+ -diff --git a/stage2/builtins.c b/stage2/builtins.c -index 3e08a86..b95b181 100644 ---- a/stage2/builtins.c -+++ b/stage2/builtins.c -@@ -56,6 +56,9 @@ static int bootdev; - /* True when the debug mode is turned on, and false - when it is turned off. */ - int debug = 0; -+int debug_graphics = 0; -+/* Print what we're booting */ -+int grub_verbose = 0; - /* The default entry. */ - int default_entry = 0; - /* The fallback entry. */ -@@ -117,6 +120,27 @@ check_password (char *entered, char* expected, password_t type) - case PASSWORD_MD5: - return check_md5_password (entered, expected); - #endif -+ -+ case PASSWORD_ENCRYPTED: -+ if (grub_memcmp (expected, "$1$", 3) == 0) -+ return check_md5_password (entered, expected); -+ else if (grub_memcmp (expected, "$5$", 3) == 0) -+ { -+ char *hashed; -+ -+ hashed = sha256_crypt (entered, expected); -+ return hashed == NULL || strcmp (expected, hashed); -+ } -+ else if (grub_memcmp (expected, "$6$", 3) == 0) -+ { -+ char *hashed; -+ -+ hashed = sha512_crypt (entered, expected); -+ return hashed == NULL || strcmp (expected, hashed); -+ } -+ else -+ return strcmp (entered, expected); -+ - default: - /* unsupported password type: be secure */ - return 1; -@@ -131,62 +155,98 @@ disk_read_print_func (int sector, int offset, int length) - } - - -+/* blocklist_read_helper nee disk_read_blocklist_func was a nested -+ * function, to which pointers were taken and exposed globally. Even -+ * in the GNU-C nested functions extension, they have local linkage, -+ * and aren't guaranteed to be accessable *at all* outside of their -+ * containing scope. -+ * -+ * Above and beyond all of that, the variables within blocklist_func_context -+ * are originally local variables, with local (not even static) linkage, -+ * from within blocklist_func. These were each referenced by -+ * disk_read_blocklist_func, which is only called from other functions -+ * through a globally scoped pointer. -+ * -+ * The documentation in GCC actually uses the words "all hell will break -+ * loose" to describe this scenario. -+ * -+ * Also, "start_sector" was also used uninitialized, but gcc doesn't warn -+ * about it (possibly because of the scoping madness?) -+ */ -+ -+static struct { -+ int start_sector; -+ int num_sectors; -+ int num_entries; -+ int last_length; -+} blocklist_func_context = { -+ .start_sector = 0, -+ .num_sectors = 0, -+ .num_entries = 0, -+ .last_length = 0 -+}; -+ -+/* Collect contiguous blocks into one entry as many as possible, -+ and print the blocklist notation on the screen. */ -+static void -+blocklist_read_helper (int sector, int offset, int length) -+{ -+ int *start_sector = &blocklist_func_context.start_sector; -+ int *num_sectors = &blocklist_func_context.num_sectors; -+ int *num_entries = &blocklist_func_context.num_entries; -+ int *last_length = &blocklist_func_context.last_length; -+ int sector_size = get_sector_size(current_drive); -+ -+ if (*num_sectors > 0) -+ { -+ if (*start_sector + *num_sectors == sector -+ && offset == 0 && *last_length == sector_size) -+ { -+ *num_sectors++; -+ *last_length = length; -+ return; -+ } -+ else -+ { -+ if (*last_length == sector_size) -+ grub_printf ("%s%d+%d", *num_entries ? "," : "", -+ *start_sector - part_start, *num_sectors); -+ else if (*num_sectors > 1) -+ grub_printf ("%s%d+%d,%d[0-%d]", *num_entries ? "," : "", -+ *start_sector - part_start, *num_sectors-1, -+ *start_sector + *num_sectors-1 - part_start, -+ *last_length); -+ else -+ grub_printf ("%s%d[0-%d]", *num_entries ? "," : "", -+ *start_sector - part_start, *last_length); -+ *num_entries++; -+ *num_sectors = 0; -+ } -+ } -+ -+ if (offset > 0) -+ { -+ grub_printf("%s%d[%d-%d]", *num_entries ? "," : "", -+ sector-part_start, offset, offset+length); -+ *num_entries++; -+ } -+ else -+ { -+ *start_sector = sector; -+ *num_sectors = 1; -+ *last_length = length; -+ } -+} -+ - /* blocklist */ - static int - blocklist_func (char *arg, int flags) - { - char *dummy = (char *) RAW_ADDR (0x100000); -- int start_sector; -- int num_sectors = 0; -- int num_entries = 0; -- int last_length = 0; - -- auto void disk_read_blocklist_func (int sector, int offset, int length); -- -- /* Collect contiguous blocks into one entry as many as possible, -- and print the blocklist notation on the screen. */ -- auto void disk_read_blocklist_func (int sector, int offset, int length) -- { -- if (num_sectors > 0) -- { -- if (start_sector + num_sectors == sector -- && offset == 0 && last_length == SECTOR_SIZE) -- { -- num_sectors++; -- last_length = length; -- return; -- } -- else -- { -- if (last_length == SECTOR_SIZE) -- grub_printf ("%s%d+%d", num_entries ? "," : "", -- start_sector - part_start, num_sectors); -- else if (num_sectors > 1) -- grub_printf ("%s%d+%d,%d[0-%d]", num_entries ? "," : "", -- start_sector - part_start, num_sectors-1, -- start_sector + num_sectors-1 - part_start, -- last_length); -- else -- grub_printf ("%s%d[0-%d]", num_entries ? "," : "", -- start_sector - part_start, last_length); -- num_entries++; -- num_sectors = 0; -- } -- } -- -- if (offset > 0) -- { -- grub_printf("%s%d[%d-%d]", num_entries ? "," : "", -- sector-part_start, offset, offset+length); -- num_entries++; -- } -- else -- { -- start_sector = sector; -- num_sectors = 1; -- last_length = length; -- } -- } -+ int *start_sector = &blocklist_func_context.start_sector; -+ int *num_sectors = &blocklist_func_context.num_sectors; -+ int *num_entries = &blocklist_func_context.num_entries; - - /* Open the file. */ - if (! grub_open (arg)) -@@ -206,15 +266,15 @@ blocklist_func (char *arg, int flags) - grub_printf (")"); - - /* Read in the whole file to DUMMY. */ -- disk_read_hook = disk_read_blocklist_func; -+ disk_read_hook = blocklist_read_helper; - if (! grub_read (dummy, -1)) - goto fail; - - /* The last entry may not be printed yet. Don't check if it is a - * full sector, since it doesn't matter if we read too much. */ -- if (num_sectors > 0) -- grub_printf ("%s%d+%d", num_entries ? "," : "", -- start_sector - part_start, num_sectors); -+ if (*num_sectors > 0) -+ grub_printf ("%s%d+%d", *num_entries ? "," : "", -+ *start_sector - part_start, *num_sectors); - - grub_printf ("\n"); - -@@ -237,12 +297,25 @@ static struct builtin builtin_blocklist = - static int - boot_func (char *arg, int flags) - { -+ struct term_entry *prev_term = current_term; - /* Clear the int15 handler if we can boot the kernel successfully. - This assumes that the boot code never fails only if KERNEL_TYPE is - not KERNEL_TYPE_NONE. Is this assumption is bad? */ - if (kernel_type != KERNEL_TYPE_NONE) - unset_int15_handler (); - -+ /* if our terminal needed initialization, we should shut it down -+ * before booting the kernel, but we want to save what it was so -+ * we can come back if needed */ -+ if (current_term->shutdown) -+ { -+ (*current_term->shutdown)(); -+ current_term = term_table; /* assumption: console is first */ -+ } -+ -+ if (silent_grub) -+ setcursor(0); -+ - #ifdef SUPPORT_NETBOOT - /* Shut down the networking. */ - cleanup_net (); -@@ -250,11 +323,13 @@ boot_func (char *arg, int flags) - - switch (kernel_type) - { -+#ifndef PLATFORM_EFI - case KERNEL_TYPE_FREEBSD: - case KERNEL_TYPE_NETBSD: - /* *BSD */ - bsd_boot (kernel_type, bootdev, (char *) mbi.cmdline); - break; -+#endif - - case KERNEL_TYPE_LINUX: - /* Linux */ -@@ -296,16 +371,25 @@ boot_func (char *arg, int flags) - chain_stage1 (0, BOOTSEC_LOCATION, boot_part_addr); - break; - -+#ifndef PLATFORM_EFI - case KERNEL_TYPE_MULTIBOOT: - /* Multiboot */ - multi_boot ((int) entry_addr, (int) &mbi); - break; -+#endif - - default: - errnum = ERR_BOOT_COMMAND; - return 1; - } - -+ /* if we get back here, we should go back to what our term was before */ -+ current_term = prev_term; -+ if (current_term->startup) -+ /* if our terminal fails to initialize, fall back to console since -+ * it should always work */ -+ if ((*current_term->startup)() == 0) -+ current_term = term_table; /* we know that console is first */ - return 0; - } - -@@ -402,6 +486,10 @@ static struct builtin builtin_cat = - static int - chainloader_func (char *arg, int flags) - { -+#ifdef PLATFORM_EFI -+ kernel_type = grub_chainloader(arg); -+ return kernel_type == KERNEL_TYPE_NONE; -+#else - int force = 0; - char *file = arg; - -@@ -458,6 +546,7 @@ chainloader_func (char *arg, int flags) - errnum = ERR_NONE; - - return 0; -+#endif - } - - static struct builtin builtin_chainloader = -@@ -564,89 +653,88 @@ static struct builtin builtin_cmp = - /* Set new colors used for the menu interface. Support two methods to - specify a color name: a direct integer representation and a symbolic - color name. An example of the latter is "blink-light-gray/blue". */ --static int --color_func (char *arg, int flags) --{ -- char *normal; -- char *highlight; -- int new_normal_color; -- int new_highlight_color; -- static char *color_list[16] = -- { -- "black", -- "blue", -- "green", -- "cyan", -- "red", -- "magenta", -- "brown", -- "light-gray", -- "dark-gray", -- "light-blue", -- "light-green", -- "light-cyan", -- "light-red", -- "light-magenta", -- "yellow", -- "white" -- }; -+static const char * const color_list[16] = -+{ -+ "black", -+ "blue", -+ "green", -+ "cyan", -+ "red", -+ "magenta", -+ "brown", -+ "light-gray", -+ "dark-gray", -+ "light-blue", -+ "light-green", -+ "light-cyan", -+ "light-red", -+ "light-magenta", -+ "yellow", -+ "white" -+}; - -- auto int color_number (char *str); -+/* Convert the color name STR into the magical number. */ -+static int color_number (char *str) -+{ -+ char *ptr; -+ int i; -+ int color = 0; - -- /* Convert the color name STR into the magical number. */ -- auto int color_number (char *str) -- { -- char *ptr; -- int i; -- int color = 0; -- -- /* Find the separator. */ -- for (ptr = str; *ptr && *ptr != '/'; ptr++) -- ; -+ /* Find the separator. */ -+ for (ptr = str; *ptr && *ptr != '/'; ptr++) -+ ; - -- /* If not found, return -1. */ -- if (! *ptr) -- return -1; -+ /* If not found, return -1. */ -+ if (! *ptr) -+ return -1; - -- /* Terminate the string STR. */ -- *ptr++ = 0; -+ /* Terminate the string STR. */ -+ *ptr++ = 0; - -- /* If STR contains the prefix "blink-", then set the `blink' bit -- in COLOR. */ -- if (substring ("blink-", str) <= 0) -- { -- color = 0x80; -- str += 6; -- } -- -- /* Search for the color name. */ -- for (i = 0; i < 16; i++) -- if (grub_strcmp (color_list[i], str) == 0) -- { -- color |= i; -- break; -- } -+ /* If STR contains the prefix "blink-", then set the `blink' bit -+ in COLOR. */ -+ if (substring ("blink-", str) <= 0) -+ { -+ color = 0x80; -+ str += 6; -+ } -+ -+ /* Search for the color name. */ -+ for (i = 0; i < 16; i++) -+ if (grub_strcmp (color_list[i], str) == 0) -+ { -+ color |= i; -+ break; -+ } - -- if (i == 16) -- return -1; -+ if (i == 16) -+ return -1; - -- str = ptr; -- nul_terminate (str); -+ str = ptr; -+ nul_terminate (str); - -- /* Search for the color name. */ -- for (i = 0; i < 8; i++) -- if (grub_strcmp (color_list[i], str) == 0) -- { -- color |= i << 4; -- break; -- } -+ /* Search for the color name. */ -+ for (i = 0; i < 8; i++) -+ if (grub_strcmp (color_list[i], str) == 0) -+ { -+ color |= i << 4; -+ break; -+ } - -- if (i == 8) -- return -1; -+ if (i == 8) -+ return -1; -+ -+ return color; -+} -+ -+static int -+color_func (char *arg, int flags) -+{ -+ char *normal; -+ char *highlight; -+ int new_normal_color; -+ int new_highlight_color; - -- return color; -- } -- - normal = arg; - highlight = skip_to (0, arg); - -@@ -690,7 +778,6 @@ static struct builtin builtin_color = - " But only the first eight names can be used for BG. You can prefix" - " "blink-" to FG if you want a blinking foreground color." - }; -- - - /* configfile */ - static int -@@ -737,14 +824,18 @@ static struct builtin builtin_configfile = - static int - debug_func (char *arg, int flags) - { -- if (debug) -+ int *whichdebug = &debug; -+ if (arg && !strcmp(arg, "--graphics")) -+ whichdebug = &debug_graphics; -+ -+ if (*whichdebug) - { -- debug = 0; -+ *whichdebug = 0; - grub_printf (" Debug mode is turned off\n"); - } - else - { -- debug = 1; -+ *whichdebug = 1; - grub_printf (" Debug mode is turned on\n"); - } - -@@ -755,17 +846,61 @@ static struct builtin builtin_debug = - { - "debug", - debug_func, -- BUILTIN_CMDLINE, -+ BUILTIN_CMDLINE | BUILTIN_MENU, - "debug", - "Turn on/off the debug mode." - }; - - -+/* verbose */ -+static int -+verbose_func (char *arg, int flags) -+{ -+ if (grub_verbose) -+ { -+ grub_verbose = 0; -+ grub_printf (" Verbose mode is turned off\n"); -+ } -+ else -+ { -+ grub_verbose = 1; -+ grub_printf (" Verbose mode is turned on\n"); -+ } -+ -+ return 0; -+} -+ -+static struct builtin builtin_verbose = -+{ -+ "verbose", -+ verbose_func, -+ BUILTIN_CMDLINE | BUILTIN_MENU, -+ "verbose", -+ "Turn on/off verbose output." -+}; -+ -+ -+#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL) && !defined(PLATFORM_EFI) -+static int savedefault_helper(int); -+#endif - /* default */ - static int - default_func (char *arg, int flags) - { - #ifndef SUPPORT_DISKLESS -+#ifndef GRUB_UTIL -+#ifndef PLATFORM_EFI -+ /* Has a forced once-only default been specified? */ -+ if ((saved_entryno & STAGE2_ONCEONLY_ENTRY) != 0) -+ { -+ int old_defaults=saved_entryno & ~STAGE2_ONCEONLY_ENTRY; -+ grub_timeout = 0; -+ default_entry = old_defaults >> 8; -+ savedefault_helper(old_defaults & 0xff); -+ return 0; -+ } -+#endif -+#endif - if (grub_strcmp (arg, "saved") == 0) - { - default_entry = saved_entryno; -@@ -792,7 +927,7 @@ static struct builtin builtin_default = - }; - - --#ifdef GRUB_UTIL -+#if defined(GRUB_UTIL) || defined(PLATFORM_EFI) - /* device */ - static int - device_func (char *arg, int flags) -@@ -800,16 +935,17 @@ device_func (char *arg, int flags) - char *drive = arg; - char *device; - -- /* Get the drive number from DRIVE. */ -- if (! set_device (drive)) -- return 1; -- - /* Get the device argument. */ - device = skip_to (0, drive); -- -+ -+ nul_terminate (drive); - /* Terminate DEVICE. */ - nul_terminate (device); - -+ /* Get the drive number from DRIVE. */ -+ if (! set_device (drive)) -+ return 1; -+ - if (! *device || ! check_device (device)) - { - errnum = ERR_FILE_NOT_FOUND; -@@ -817,7 +953,7 @@ device_func (char *arg, int flags) - } - - assign_device_name (current_drive, device); -- -+ - return 0; - } - -@@ -828,9 +964,20 @@ static struct builtin builtin_device = - BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, - "device DRIVE DEVICE", - "Specify DEVICE as the actual drive for a BIOS drive DRIVE. This command" -- " can be used only in the grub shell." -+ " can be used only in the grub shell and in EFI." - }; --#endif /* GRUB_UTIL */ -+#endif /* defined(GRUB_UTIL) || defined(PLATFORM_EFI) */ -+#ifdef PLATFORM_EFI -+static struct builtin builtin_efimap = -+{ -+ "efimap", -+ device_func, -+ BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, -+ "efimap DRIVE DEVICE", -+ "Specify DEVICE as the actual drive for a BIOS drive DRIVE. This command" -+ " can be used only in EFI." -+}; -+#endif /* PLATFORM_EFI */ - - - #ifdef SUPPORT_NETBOOT -@@ -852,6 +999,139 @@ static struct builtin builtin_dhcp = - }; - #endif /* SUPPORT_NETBOOT */ - -+static int terminal_func (char *arg, int flags); -+ -+#ifdef SUPPORT_GRAPHICS -+ -+static int splashimage_func(char *arg, int flags) { -+ char splashimage[64]; -+ int i; -+ -+ /* filename can only be 64 characters due to our buffer size */ -+ if (strlen(arg) > 63) -+ return 1; -+ if (flags == BUILTIN_CMDLINE) { -+ if (!grub_open(arg)) -+ return 1; -+ grub_close(); -+ } -+ -+ strcpy(splashimage, arg); -+ -+ /* get rid of TERM_NEED_INIT from the graphics terminal. */ -+ for (i = 0; term_table[i].name; i++) { -+ if (grub_strcmp (term_table[i].name, "graphics") == 0) { -+ term_table[i].flags &= ~TERM_NEED_INIT; -+ break; -+ } -+ } -+ -+ graphics_set_splash(splashimage); -+ -+ if (flags == BUILTIN_CMDLINE && graphics_inited) { -+ graphics_end(); -+ graphics_init(); -+ graphics_cls(); -+ } -+ -+ /* FIXME: should we be explicitly switching the terminal as a -+ * side effect here? */ -+ terminal_func("graphics", flags); -+ -+ return 0; -+} -+ -+static struct builtin builtin_splashimage = -+{ -+ "splashimage", -+ splashimage_func, -+ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, -+ "splashimage FILE", -+ "Load FILE as the background image when in graphics mode." -+}; -+ -+ -+/* foreground */ -+static int -+foreground_func(char *arg, int flags) -+{ -+ if (grub_strlen(arg) == 6) { -+ int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2; -+ int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2; -+ int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2; -+ -+ foreground = (r << 16) | (g << 8) | b; -+ if (graphics_inited) -+ graphics_set_palette(15, r, g, b); -+ -+ return (0); -+ } -+ -+ return (1); -+} -+ -+static struct builtin builtin_foreground = -+{ -+ "foreground", -+ foreground_func, -+ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, -+ "foreground RRGGBB", -+ "Sets the foreground color when in graphics mode." -+ "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal." -+}; -+ -+ -+/* background */ -+static int -+background_func(char *arg, int flags) -+{ -+ if (grub_strlen(arg) == 6) { -+ int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2; -+ int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2; -+ int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2; -+ -+ background = (r << 16) | (g << 8) | b; -+ if (graphics_inited) -+ graphics_set_palette(0, r, g, b); -+ return (0); -+ } -+ -+ return (1); -+} -+ -+static struct builtin builtin_background = -+{ -+ "background", -+ background_func, -+ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, -+ "background RRGGBB", -+ "Sets the background color when in graphics mode." -+ "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal." -+}; -+ -+#endif /* SUPPORT_GRAPHICS */ -+ -+ -+/* clear */ -+static int -+clear_func() -+{ -+ if (current_term->cls) -+ current_term->cls(); -+ -+ return 0; -+} -+ -+static struct builtin builtin_clear = -+{ -+ "clear", -+ clear_func, -+ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, -+ "clear", -+ "Clear the screen" -+}; -+ -+#ifndef PLATFORM_EFI - - /* displayapm */ - static int -@@ -893,6 +1173,7 @@ static struct builtin builtin_displayapm = - "displayapm", - "Display APM BIOS information." - }; -+#endif /* !PLATFORM_EFI */ - - - /* displaymem */ -@@ -912,11 +1193,11 @@ displaymem_func (char *arg, int flags) - if (mbi.flags & MB_INFO_MEM_MAP) - { - struct AddrRangeDesc *map = (struct AddrRangeDesc *) mbi.mmap_addr; -- int end_addr = mbi.mmap_addr + mbi.mmap_length; -+ unsigned long end_addr = mbi.mmap_addr + mbi.mmap_length; - - grub_printf (" [Address Range Descriptor entries " - "immediately follow (values are 64-bit)]\n"); -- while (end_addr > (int) map) -+ while (end_addr > (unsigned long) map) - { - char *str; - -@@ -924,15 +1205,10 @@ displaymem_func (char *arg, int flags) - str = "Usable RAM"; - else - str = "Reserved"; -- grub_printf (" %s: Base Address: 0x%x X 4GB + 0x%x,\n" -- " Length: 0x%x X 4GB + 0x%x bytes\n", -- str, -- (unsigned long) (map->BaseAddr >> 32), -- (unsigned long) (map->BaseAddr & 0xFFFFFFFF), -- (unsigned long) (map->Length >> 32), -- (unsigned long) (map->Length & 0xFFFFFFFF)); -- -- map = ((struct AddrRangeDesc *) (((int) map) + 4 + map->size)); -+ grub_printf (" %s: Base Address: 0x%lx Length: 0x%lx bytes\n", -+ str, map->BaseAddr, map->Length); -+ -+ map = ((struct AddrRangeDesc *) (((unsigned long) map) + 4 + map->size)); - } - } - -@@ -1009,6 +1285,7 @@ static struct builtin builtin_dump = - }; - #endif /* GRUB_UTIL */ - -+#ifndef PLATFORM_EFI - - static char embed_info[32]; - /* embed */ -@@ -1143,6 +1420,7 @@ static struct builtin builtin_embed = - " is a drive, or in the "bootloader" area if DEVICE is a FFS partition." - " Print the number of sectors which STAGE1_5 occupies if successful." - }; -+#endif /* ! PLATFORM_EFI */ - - - /* fallback */ -@@ -1230,17 +1508,19 @@ find_func (char *arg, int flags) - } - - /* Hard disks. */ -- for (drive = 0x80; drive < 0x88; drive++) -+ for (drive = 0x80; drive < (0x80 + MAX_HD_NUM); drive++) - { - unsigned long part = 0xFFFFFF; -- unsigned long start, len, offset, ext_offset; -- int type, entry; -- char buf[SECTOR_SIZE]; -+ unsigned long start, len, offset, ext_offset, gpt_offset; -+ int type, entry, gpt_count, gpt_size; -+ int sector_size = get_sector_size(drive); -+ char buf[sector_size]; - - current_drive = drive; - while (next_partition (drive, 0xFFFFFF, &part, &type, - &start, &len, &offset, &entry, -- &ext_offset, buf)) -+ &ext_offset, &gpt_offset, -+ &gpt_count, &gpt_size, buf)) - { - if (type != PC_SLICE_TYPE_NONE - && ! IS_PC_SLICE_TYPE_BSD (type) -@@ -1301,6 +1581,59 @@ static struct builtin builtin_find = - "Search for the filename FILENAME in all of partitions and print the list of" - " the devices which contain the file." - }; -+ -+/* findiso */ -+ -+/* Search for an ISO 9660 partition. */ -+static int -+findiso_func (char *arg, int flags) -+{ -+ unsigned long drive; -+ unsigned long tmp_drive = saved_drive; -+ unsigned long tmp_partition = saved_partition; -+ -+ /* Hard disks. */ -+ for (drive = 0x80; drive < 0x89; drive++) -+ { -+ unsigned long part = 0xFFFFFF; -+ -+ if (drive == 0x88) -+ drive = 0x100; -+ -+ current_drive = drive; -+ current_partition = part; -+ -+ if (open_device ()) -+ { -+ char *type = get_fsys_type(); -+ if (!grub_strcmp(type, "iso9660")) -+ { -+ saved_drive = current_drive; -+ saved_partition = current_partition; -+ errnum = ERR_NONE; -+ return 0; -+ } -+ } -+ -+ /* We want to ignore any error here. */ -+ errnum = ERR_NONE; -+ } -+ -+ saved_drive = tmp_drive; -+ saved_partition = tmp_partition; -+ -+ errnum = ERR_FILE_NOT_FOUND; -+ return 1; -+} -+ -+static struct builtin builtin_findiso = -+{ -+ "findiso", -+ findiso_func, -+ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, -+ "findiso FILENAME", -+ "Set root to the first device with a valid ISO 9660 filesystem." -+}; - - - /* fstest */ -@@ -1679,6 +2012,7 @@ static struct builtin builtin_ifconfig = - }; - #endif /* SUPPORT_NETBOOT */ - -+#ifndef PLATFORM_EFI - - /* impsprobe */ - static int -@@ -1706,6 +2040,7 @@ static struct builtin builtin_impsprobe = - " configuration table and boot the various CPUs which are found into" - " a tight loop." - }; -+#endif /* ! PLATFORM_EFI */ - - - /* initrd */ -@@ -1738,8 +2073,82 @@ static struct builtin builtin_initrd = - " appropriate parameters in the Linux setup area in memory." - }; - -+#ifndef PLATFORM_EFI - - /* install */ -+static struct { -+ int saved_sector; -+ int installaddr; -+ int installlist; -+ int last_length; -+ char *stage2_first_buffer; -+} install_func_context = { -+ .saved_sector = 0, -+ .installaddr = 0, -+ .installlist = 0, -+ .last_length = SECTOR_SIZE, -+ .stage2_first_buffer = NULL, -+}; -+ -+/* Save the first sector of Stage2 in STAGE2_SECT. */ -+/* Formerly disk_read_savesect_func with local scope inside install_func */ -+static void -+install_savesect_helper(int sector, int offset, int length) -+{ -+ if (debug) -+ printf ("[%d]", sector); -+ -+ /* ReiserFS has files which sometimes contain data not aligned -+ on sector boundaries. Returning an error is better than -+ silently failing. */ -+ if (offset != 0 || length != SECTOR_SIZE) -+ errnum = ERR_UNALIGNED; -+ -+ install_func_context.saved_sector = sector; -+} -+ -+/* Write SECTOR to INSTALLLIST, and update INSTALLADDR and INSTALLSECT. */ -+/* Formerly disk_read_blocklist_func with local scope inside install_func */ -+static void -+install_blocklist_helper (int sector, int offset, int length) -+{ -+ int *installaddr = &install_func_context.installaddr; -+ int *installlist = &install_func_context.installlist; -+ char **stage2_first_buffer = &install_func_context.stage2_first_buffer; -+ /* Was the last sector full? */ -+ int *last_length = &install_func_context.last_length; -+ -+ if (debug) -+ printf("[%d]", sector); -+ -+ if (offset != 0 || *last_length != SECTOR_SIZE) -+ { -+ /* We found a non-sector-aligned data block. */ -+ errnum = ERR_UNALIGNED; -+ return; -+ } -+ -+ *last_length = length; -+ -+ if (*((unsigned long *) (*installlist - 4)) -+ + *((unsigned short *) *installlist) != sector -+ || *installlist == (int) *stage2_first_buffer + SECTOR_SIZE + 4) -+ { -+ *installlist -= 8; -+ -+ if (*((unsigned long *) (*installlist - 8))) -+ errnum = ERR_WONT_FIT; -+ else -+ { -+ *((unsigned short *) (*installlist + 2)) = (*installaddr >> 4); -+ *((unsigned long *) (*installlist - 4)) = sector; -+ } -+ } -+ -+ *((unsigned short *) *installlist) += 1; -+ *installaddr += 512; -+} -+ - static int - install_func (char *arg, int flags) - { -@@ -1747,8 +2156,12 @@ install_func (char *arg, int flags) - char *stage1_buffer = (char *) RAW_ADDR (0x100000); - char *stage2_buffer = stage1_buffer + SECTOR_SIZE; - char *old_sect = stage2_buffer + SECTOR_SIZE; -- char *stage2_first_buffer = old_sect + SECTOR_SIZE; -- char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; -+ /* stage2_first_buffer used to be defined as: -+ * char *stage2_first_buffer = old_sect + SECTOR_SIZE; */ -+ char **stage2_first_buffer = &install_func_context.stage2_first_buffer; -+ /* and stage2_second_buffer was: -+ * char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; */ -+ char *stage2_second_buffer = old_sect + SECTOR_SIZE + SECTOR_SIZE; - /* XXX: Probably SECTOR_SIZE is reasonable. */ - char *config_filename = stage2_second_buffer + SECTOR_SIZE; - char *dummy = config_filename + SECTOR_SIZE; -@@ -1757,10 +2170,11 @@ install_func (char *arg, int flags) - int src_drive, src_partition, src_part_start; - int i; - struct geometry dest_geom, src_geom; -- int saved_sector; -+ int *saved_sector = &install_func_context.saved_sector; - int stage2_first_sector, stage2_second_sector; - char *ptr; -- int installaddr, installlist; -+ int *installaddr = &install_func_context.installaddr; -+ int *installlist = &install_func_context.installlist; - /* Point to the location of the name of a configuration file in Stage 2. */ - char *config_file_location; - /* If FILE is a Stage 1.5? */ -@@ -1769,68 +2183,18 @@ install_func (char *arg, int flags) - int is_open = 0; - /* If LBA is forced? */ - int is_force_lba = 0; -- /* Was the last sector full? */ -- int last_length = SECTOR_SIZE; -+ int *last_length = &install_func_context.last_length; - -+ /* Reset state. */ -+ *last_length = SECTOR_SIZE; -+ -+ *stage2_first_buffer = old_sect + SECTOR_SIZE; - #ifdef GRUB_UTIL - /* If the Stage 2 is in a partition mounted by an OS, this will store - the filename under the OS. */ - char *stage2_os_file = 0; - #endif /* GRUB_UTIL */ - -- auto void disk_read_savesect_func (int sector, int offset, int length); -- auto void disk_read_blocklist_func (int sector, int offset, int length); -- -- /* Save the first sector of Stage2 in STAGE2_SECT. */ -- auto void disk_read_savesect_func (int sector, int offset, int length) -- { -- if (debug) -- printf ("[%d]", sector); -- -- /* ReiserFS has files which sometimes contain data not aligned -- on sector boundaries. Returning an error is better than -- silently failing. */ -- if (offset != 0 || length != SECTOR_SIZE) -- errnum = ERR_UNALIGNED; -- -- saved_sector = sector; -- } -- -- /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and -- INSTALLSECT. */ -- auto void disk_read_blocklist_func (int sector, int offset, int length) -- { -- if (debug) -- printf("[%d]", sector); -- -- if (offset != 0 || last_length != SECTOR_SIZE) -- { -- /* We found a non-sector-aligned data block. */ -- errnum = ERR_UNALIGNED; -- return; -- } -- -- last_length = length; -- -- if (*((unsigned long *) (installlist - 4)) -- + *((unsigned short *) installlist) != sector -- || installlist == (int) stage2_first_buffer + SECTOR_SIZE + 4) -- { -- installlist -= 8; -- -- if (*((unsigned long *) (installlist - 8))) -- errnum = ERR_WONT_FIT; -- else -- { -- *((unsigned short *) (installlist + 2)) = (installaddr >> 4); -- *((unsigned long *) (installlist - 4)) = sector; -- } -- } -- -- *((unsigned short *) installlist) += 1; -- installaddr += 512; -- } -- - /* First, check the GNU-style long option. */ - while (1) - { -@@ -1862,10 +2226,10 @@ install_func (char *arg, int flags) - addr = skip_to (0, file); - - /* Get the installation address. */ -- if (! safe_parse_maxint (&addr, &installaddr)) -+ if (! safe_parse_maxint (&addr, installaddr)) - { - /* ADDR is not specified. */ -- installaddr = 0; -+ *installaddr = 0; - ptr = addr; - errnum = 0; - } -@@ -1961,17 +2325,17 @@ install_func (char *arg, int flags) - = 0x9090; - - /* Read the first sector of Stage 2. */ -- disk_read_hook = disk_read_savesect_func; -- if (grub_read (stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE) -+ disk_read_hook = install_savesect_helper; -+ if (grub_read (*stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE) - goto fail; - -- stage2_first_sector = saved_sector; -+ stage2_first_sector = *saved_sector; - - /* Read the second sector of Stage 2. */ - if (grub_read (stage2_second_buffer, SECTOR_SIZE) != SECTOR_SIZE) - goto fail; - -- stage2_second_sector = saved_sector; -+ stage2_second_sector = *saved_sector; - - /* Check for the version of Stage 2. */ - if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS)) -@@ -1987,27 +2351,27 @@ install_func (char *arg, int flags) - - /* If INSTALLADDR is not specified explicitly in the command-line, - determine it by the Stage 2 id. */ -- if (! installaddr) -+ if (! *installaddr) - { - if (! is_stage1_5) - /* Stage 2. */ -- installaddr = 0x8000; -+ *installaddr = 0x8000; - else - /* Stage 1.5. */ -- installaddr = 0x2000; -+ *installaddr = 0x2000; - } - - *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR)) - = stage2_first_sector; - *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS)) -- = installaddr; -+ = *installaddr; - *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT)) -- = installaddr >> 4; -+ = *installaddr >> 4; - -- i = (int) stage2_first_buffer + SECTOR_SIZE - 4; -+ i = (int) *stage2_first_buffer + SECTOR_SIZE - 4; - while (*((unsigned long *) i)) - { -- if (i < (int) stage2_first_buffer -+ if (i < (int) *stage2_first_buffer - || (*((int *) (i - 4)) & 0x80000000) - || *((unsigned short *) i) >= 0xA00 - || *((short *) (i + 2)) == 0) -@@ -2021,13 +2385,13 @@ install_func (char *arg, int flags) - i -= 8; - } - -- installlist = (int) stage2_first_buffer + SECTOR_SIZE + 4; -- installaddr += SECTOR_SIZE; -+ *installlist = (int) *stage2_first_buffer + SECTOR_SIZE + 4; -+ *installaddr += SECTOR_SIZE; - - /* Read the whole of Stage2 except for the first sector. */ - grub_seek (SECTOR_SIZE); - -- disk_read_hook = disk_read_blocklist_func; -+ disk_read_hook = install_blocklist_helper; - if (! grub_read (dummy, -1)) - goto fail; - -@@ -2110,7 +2474,7 @@ install_func (char *arg, int flags) - /* Skip the first sector. */ - grub_seek (SECTOR_SIZE); - -- disk_read_hook = disk_read_savesect_func; -+ disk_read_hook = install_savesect_helper; - if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE) - goto fail; - -@@ -2180,7 +2544,7 @@ install_func (char *arg, int flags) - else - #endif /* GRUB_UTIL */ - { -- if (! devwrite (saved_sector - part_start, 1, stage2_buffer)) -+ if (! devwrite (*saved_sector - part_start, 1, stage2_buffer)) - goto fail; - } - } -@@ -2202,7 +2566,7 @@ install_func (char *arg, int flags) - goto fail; - } - -- if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) -+ if (fwrite (*stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) - { - fclose (fp); - errnum = ERR_WRITE; -@@ -2229,7 +2593,7 @@ install_func (char *arg, int flags) - goto fail; - - if (! devwrite (stage2_first_sector - src_part_start, 1, -- stage2_first_buffer)) -+ *stage2_first_buffer)) - goto fail; - - if (! devwrite (stage2_second_sector - src_part_start, 1, -@@ -2322,6 +2686,7 @@ static struct builtin builtin_ioprobe = - "ioprobe DRIVE", - "Probe I/O ports used for the drive DRIVE." - }; -+#endif /* ! PLATFORM_EFI */ - - - /* kernel */ -@@ -2456,6 +2821,7 @@ static struct builtin builtin_makeactive = - " This command is limited to _primary_ PC partitions on a hard disk." - }; - -+#ifndef PLATFORM_EFI - - /* map */ - /* Map FROM_DRIVE to TO_DRIVE. */ -@@ -2519,6 +2885,7 @@ static struct builtin builtin_map = - " when you chain-load some operating systems, such as DOS, if such an" - " OS resides at a non-first drive." - }; -+#endif /* ! PLATFORM_EFI */ - - - #ifdef USE_MD5_PASSWORDS -@@ -2579,6 +2946,7 @@ static struct builtin builtin_md5crypt = - }; - #endif /* USE_MD5_PASSWORDS */ - -+#ifndef PLATFORM_EFI - - /* module */ - static int -@@ -2656,6 +3024,7 @@ static struct builtin builtin_modulenounzip = - "The same as `module', except that automatic decompression is" - " disabled." - }; -+#endif /* !PLATFORM_EFI */ - - - /* pager [on|off] */ -@@ -2698,7 +3067,6 @@ partnew_func (char *arg, int flags) - int start_cl, start_ch, start_dh; - int end_cl, end_ch, end_dh; - int entry; -- char mbr[512]; - - /* Convert a LBA address to a CHS address in the INT 13 format. */ - auto void lba_to_chs (int lba, int *cl, int *ch, int *dh); -@@ -2729,6 +3097,9 @@ partnew_func (char *arg, int flags) - return 1; - } - -+ int sector_size = get_sector_size(current_drive); -+ char mbr[sector_size]; -+ - /* The partition must a primary partition. */ - if ((current_partition >> 16) > 3 - || (current_partition & 0xFFFF) != 0xFFFF) -@@ -2762,7 +3133,7 @@ partnew_func (char *arg, int flags) - return 1; - - /* Read the MBR. */ -- if (! rawread (current_drive, 0, 0, SECTOR_SIZE, mbr)) -+ if (! rawread (current_drive, 0, 0, sector_size, mbr)) - return 1; - - /* Check if the new partition will fit in the disk. */ -@@ -2815,9 +3186,8 @@ parttype_func (char *arg, int flags) - { - int new_type; - unsigned long part = 0xFFFFFF; -- unsigned long start, len, offset, ext_offset; -- int entry, type; -- char mbr[512]; -+ unsigned long start, len, offset, ext_offset, gpt_offset; -+ int entry, type, gpt_count, gpt_size; - - /* Get the drive and the partition. */ - if (! set_device (arg)) -@@ -2829,6 +3199,9 @@ parttype_func (char *arg, int flags) - errnum = ERR_BAD_ARGUMENT; - return 1; - } -+ -+ int sector_size = get_sector_size(current_drive); -+ char mbr[sector_size]; - - /* The partition must be a PC slice. */ - if ((current_partition >> 16) == 0xFF -@@ -2853,8 +3226,15 @@ parttype_func (char *arg, int flags) - /* Look for the partition. */ - while (next_partition (current_drive, 0xFFFFFF, &part, &type, - &start, &len, &offset, &entry, -- &ext_offset, mbr)) -+ &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr)) - { -+ /* The partition may not be a GPT partition. */ -+ if (gpt_offset != 0) -+ { -+ errnum = ERR_BAD_ARGUMENT; -+ return 1; -+ } -+ - if (part == current_partition) - { - /* Found. */ -@@ -2900,6 +3280,11 @@ password_func (char *arg, int flags) - arg = skip_to (0, arg); - } - #endif -+ else if (grub_memcmp (arg, "--encrypted", 5) == 0) -+ { -+ type = PASSWORD_ENCRYPTED; -+ arg = skip_to (0, arg); -+ } - if (grub_memcmp (arg, "--", 2) == 0) - { - type = PASSWORD_UNSUPPORTED; -@@ -2947,7 +3332,7 @@ static struct builtin builtin_password = - "password", - password_func, - BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_NO_ECHO, -- "password [--md5] PASSWD [FILE]", -+ "password [--md5|--encrypted] PASSWD [FILE]", - "If used in the first section of a menu file, disable all" - " interactive editing control (menu entry editor and" - " command line). If the password PASSWD is entered, it loads the" -@@ -2956,7 +3341,8 @@ static struct builtin builtin_password = - " instructions. You can also use it in the script section, in" - " which case it will ask for the password, before continueing." - " The option --md5 tells GRUB that PASSWD is encrypted with" -- " md5crypt." -+ " md5crypt, --encrypted that PASSWD is encrypted (with algorithm" -+ " specified in PASSWD: supported is md5, sha-256, sha-512)." - }; - - -@@ -2982,8 +3368,8 @@ static struct builtin builtin_pause = - "Print MESSAGE, then wait until a key is pressed." - }; - -+#if defined (GRUB_UTIL) || defined (PLATFORM_EFI) - --#ifdef GRUB_UTIL - /* quit */ - static int - quit_func (char *arg, int flags) -@@ -3002,7 +3388,7 @@ static struct builtin builtin_quit = - "quit", - "Exit from the GRUB shell." - }; --#endif /* GRUB_UTIL */ -+#endif /* defined (GRUB_UTIL) || defined (PLATFORM_EFI) */ - - - #ifdef SUPPORT_NETBOOT -@@ -3165,7 +3551,8 @@ real_root_func (char *arg, int attempt_mount) - return 1; - - /* Print the type of the filesystem. */ -- print_fsys_type (); -+ if (grub_verbose) -+ print_fsys_type (); - } - - return 0; -@@ -3217,146 +3604,181 @@ static struct builtin builtin_rootnoverify = - }; - - --/* savedefault */ -+ -+#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL) && !defined(PLATFORM_EFI) -+/* Write specified default entry number into stage2 file. */ - static int --savedefault_func (char *arg, int flags) -+savedefault_helper(int new_default) - { --#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL) -- unsigned long tmp_drive = saved_drive; -- unsigned long tmp_partition = saved_partition; -- char *default_file = (char *) DEFAULT_FILE_BUF; -- char buf[10]; -- char sect[SECTOR_SIZE]; -- int entryno; -- int sector_count = 0; -- int saved_sectors[2]; -- int saved_offsets[2]; -- int saved_lengths[2]; -- -- /* Save sector information about at most two sectors. */ -- auto void disk_read_savesect_func (int sector, int offset, int length); -- void disk_read_savesect_func (int sector, int offset, int length) -- { -- if (sector_count < 2) -- { -- saved_sectors[sector_count] = sector; -- saved_offsets[sector_count] = offset; -- saved_lengths[sector_count] = length; -- } -- sector_count++; -- } -- -- /* This command is only useful when you boot an entry from the menu -- interface. */ -- if (! (flags & BUILTIN_SCRIPT)) -+ char buffer[512]; -+ int *entryno_ptr; -+ -+ /* Get the geometry of the boot drive (i.e. the disk which contains -+ this stage2). */ -+ if (get_diskinfo (boot_drive, &buf_geom)) - { -- errnum = ERR_UNRECOGNIZED; -+ errnum = ERR_NO_DISK; - return 1; - } - -- /* Determine a saved entry number. */ -- if (*arg) -+ /* Load the second sector of this stage2. */ -+ if (! rawread (boot_drive, install_second_sector, 0, SECTOR_SIZE, buffer)) - { -- if (grub_memcmp (arg, "fallback", sizeof ("fallback") - 1) == 0) -- { -- int i; -- int index = 0; -- -- for (i = 0; i < MAX_FALLBACK_ENTRIES; i++) -- { -- if (fallback_entries[i] < 0) -- break; -- if (fallback_entries[i] == current_entryno) -- { -- index = i + 1; -- break; -- } -- } -- -- if (index >= MAX_FALLBACK_ENTRIES || fallback_entries[index] < 0) -- { -- /* This is the last. */ -- errnum = ERR_BAD_ARGUMENT; -- return 1; -- } -+ return 1; -+ } - -- entryno = fallback_entries[index]; -- } -- else if (! safe_parse_maxint (&arg, &entryno)) -- return 1; -+ /* Sanity check. */ -+ if (buffer[STAGE2_STAGE2_ID] != STAGE2_ID_STAGE2 -+ || *((short *) (buffer + STAGE2_VER_MAJ_OFFS)) != COMPAT_VERSION) -+ { -+ errnum = ERR_BAD_VERSION; -+ return 1; - } -- else -- entryno = current_entryno; -+ -+ entryno_ptr = (int *) (buffer + STAGE2_SAVED_ENTRYNO); - -- /* Open the default file. */ -- saved_drive = boot_drive; -- saved_partition = install_partition; -- if (grub_open (default_file)) -+ /* Check if the saved entry number differs from current entry number. */ -+ if (*entryno_ptr != new_default) - { -- int len; -+ /* Overwrite the saved entry number. */ -+ *entryno_ptr = new_default; - -- disk_read_hook = disk_read_savesect_func; -- len = grub_read (buf, sizeof (buf)); -- disk_read_hook = 0; -- grub_close (); -+ /* Save the image in the disk. */ -+ if (! rawwrite (boot_drive, install_second_sector, buffer)) -+ return 1; - -- if (len != sizeof (buf)) -- { -- /* This is too small. Do not modify the file manually, please! */ -- errnum = ERR_READ; -- goto fail; -- } -+ /* Clear the cache. */ -+ buf_track = -1; -+ } - -- if (sector_count > 2) -- { -- /* Is this possible?! Too fragmented! */ -- errnum = ERR_FSYS_CORRUPT; -- goto fail; -- } -- -- /* Set up a string to be written. */ -- grub_memset (buf, '\n', sizeof (buf)); -- grub_sprintf (buf, "%d", entryno); -- -- if (saved_lengths[0] < sizeof (buf)) -- { -- /* The file is anchored to another file and the first few bytes -- are spanned in two sectors. Uggh... */ -- if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE, -- sect)) -- goto fail; -- grub_memmove (sect + saved_offsets[0], buf, saved_lengths[0]); -- if (! rawwrite (current_drive, saved_sectors[0], sect)) -- goto fail; -+ return 0; -+} -+#endif - -- if (! rawread (current_drive, saved_sectors[1], 0, SECTOR_SIZE, -- sect)) -- goto fail; -- grub_memmove (sect + saved_offsets[1], -- buf + saved_lengths[0], -- sizeof (buf) - saved_lengths[0]); -- if (! rawwrite (current_drive, saved_sectors[1], sect)) -- goto fail; -- } -+#if !defined(SUPPORT_DISKLESS) && defined(GRUB_UTIL) -+#define SECTOR_SIZE 0x200 -+/* -+ * Full implementation of new `savedefault' for GRUB shell. -+ * XXX This needs fixing for stage2 files which aren't accessible -+ * through a mounted filesystem. -+ */ -+static int -+savedefault_shell(char *arg, int flags) -+{ -+ char *stage2_os_file = "/boot/grub/stage2"; /* Default filename */ -+ FILE *fp; -+ char buffer[512]; -+ int *entryno_ptr; -+ int new_default = 0; -+ int old_default = 0; -+ -+ while (1) -+ { -+ if (grub_memcmp ("--stage2=", arg, sizeof ("--stage2=") - 1) == 0) -+ { -+ stage2_os_file = arg + sizeof ("--stage2=") - 1; -+ arg = skip_to (0, arg); -+ nul_terminate (stage2_os_file); -+ } -+ else if (grub_memcmp ("--default=", arg, sizeof ("--default=") - 1) == 0) -+ { -+ char *p = arg + sizeof ("--default=") - 1; -+ if (! safe_parse_maxint (&p, &new_default)) -+ return 1; -+ arg = skip_to (0, arg); -+ } -+ else if (grub_memcmp ("--once", arg, sizeof ("--once") - 1) == 0) -+ { -+ new_default <<= 8; -+ new_default |= STAGE2_ONCEONLY_ENTRY; -+ arg = skip_to (0, arg); -+ } - else -- { -- /* This is a simple case. It fits into a single sector. */ -- if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE, -- sect)) -- goto fail; -- grub_memmove (sect + saved_offsets[0], buf, sizeof (buf)); -- if (! rawwrite (current_drive, saved_sectors[0], sect)) -- goto fail; -- } -+ break; -+ } - -- /* Clear the cache. */ -- buf_track = -1; -+ if (! (fp = fopen(stage2_os_file, "r+"))) -+ { -+ errnum = ERR_FILE_NOT_FOUND; -+ return 1; -+ } -+ -+ if (fseek (fp, SECTOR_SIZE, SEEK_SET) != 0) -+ { -+ fclose (fp); -+ errnum = ERR_BAD_VERSION; -+ return 1; -+ } -+ -+ if (fread (buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) -+ { -+ fclose (fp); -+ errnum = ERR_READ; -+ return 1; - } - -- fail: -- saved_drive = tmp_drive; -- saved_partition = tmp_partition; -- return errnum; -+ /* Sanity check. */ -+ if (buffer[STAGE2_STAGE2_ID] != STAGE2_ID_STAGE2 -+ || *((short *) (buffer + STAGE2_VER_MAJ_OFFS)) != COMPAT_VERSION) -+ { -+ errnum = ERR_BAD_VERSION; -+ return 1; -+ } -+ -+ entryno_ptr = (int *) (buffer + STAGE2_SAVED_ENTRYNO); -+ if (new_default & STAGE2_ONCEONLY_ENTRY) -+ { -+ old_default=*entryno_ptr; -+ *entryno_ptr = new_default + (old_default & 0xFF); -+ } -+ else -+ { -+ *entryno_ptr = new_default; -+ } -+ -+ if (fseek (fp, SECTOR_SIZE, SEEK_SET) != 0) -+ { -+ fclose (fp); -+ errnum = ERR_BAD_VERSION; -+ return 1; -+ } -+ -+ if (fwrite (buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) -+ { -+ fclose (fp); -+ errnum = ERR_WRITE; -+ return 1; -+ } -+ -+ (void)fflush (fp); -+ fclose (fp); -+ return 0; -+} -+#undef SECTOR_SIZE -+#endif -+ -+/* savedefault */ -+static int -+savedefault_func (char *arg, int flags) -+{ -+#if !defined(SUPPORT_DISKLESS) -+#if !defined(GRUB_UTIL) -+#if !defined(PLATFORM_EFI) -+ /* This command is only useful when you boot an entry from the menu -+ interface. */ -+ if (! (flags & BUILTIN_SCRIPT)) -+ { -+ errnum = ERR_UNRECOGNIZED; -+ return 1; -+ } -+ -+ return savedefault_helper(current_entryno); -+#else /* defined(PLATFORM_EFI) */ -+ return grub_save_saved_default (current_entryno); -+#endif -+#else /* defined(GRUB_UTIL) */ -+ return savedefault_shell(arg, flags); -+#endif - #else /* ! SUPPORT_DISKLESS && ! GRUB_UTIL */ - errnum = ERR_UNRECOGNIZED; - return 1; -@@ -3368,10 +3790,14 @@ static struct builtin builtin_savedefault = - "savedefault", - savedefault_func, - BUILTIN_CMDLINE, -- "savedefault [NUM | `fallback']", -- "Save the current entry as the default boot entry if no argument is" -- " specified. If a number is specified, this number is saved. If" -- " `fallback' is used, next fallback entry is saved." -+#ifdef GRUB_UTIL -+ "savedefault [--stage2=STAGE2_FILE] [--default=DEFAULT] [--once]", -+ "Save DEFAULT as the default boot entry in STAGE2_FILE. If '--once'" -+ " is specified, the default is reset after the next reboot." -+#else -+ "savedefault", -+ "Save the current entry as the default boot entry." -+#endif - }; - - -@@ -3527,6 +3953,7 @@ static struct builtin builtin_serial = - }; - #endif /* SUPPORT_SERIAL */ - -+#ifndef PLATFORM_EFI - - /* setkey */ - struct keysym -@@ -3612,50 +4039,47 @@ static struct keysym keysym_table[] = - {"delete", 0, 0x7f, 0, 0x53} - }; - --static int --setkey_func (char *arg, int flags) -+static int find_key_code (char *key) - { -- char *to_key, *from_key; -- int to_code, from_code; -- int map_in_interrupt = 0; -- -- auto int find_key_code (char *key); -- auto int find_ascii_code (char *key); -- -- auto int find_key_code (char *key) -- { -- int i; -+ int i; - -- for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++) -- { -- if (keysym_table[i].unshifted_name && -- grub_strcmp (key, keysym_table[i].unshifted_name) == 0) -- return keysym_table[i].keycode; -- else if (keysym_table[i].shifted_name && -- grub_strcmp (key, keysym_table[i].shifted_name) == 0) -- return keysym_table[i].keycode; -- } -- -- return 0; -+ for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++) -+ { -+ if (keysym_table[i].unshifted_name && -+ grub_strcmp (key, keysym_table[i].unshifted_name) == 0) -+ return keysym_table[i].keycode; -+ else if (keysym_table[i].shifted_name && -+ grub_strcmp (key, keysym_table[i].shifted_name) == 0) -+ return keysym_table[i].keycode; - } - -- auto int find_ascii_code (char *key) -+ return 0; -+} -+ -+static int find_ascii_code (char *key) -+{ -+ int i; -+ -+ for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++) - { -- int i; -- -- for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++) -- { -- if (keysym_table[i].unshifted_name && -- grub_strcmp (key, keysym_table[i].unshifted_name) == 0) -- return keysym_table[i].unshifted_ascii; -- else if (keysym_table[i].shifted_name && -- grub_strcmp (key, keysym_table[i].shifted_name) == 0) -- return keysym_table[i].shifted_ascii; -- } -- -- return 0; -+ if (keysym_table[i].unshifted_name && -+ grub_strcmp (key, keysym_table[i].unshifted_name) == 0) -+ return keysym_table[i].unshifted_ascii; -+ else if (keysym_table[i].shifted_name && -+ grub_strcmp (key, keysym_table[i].shifted_name) == 0) -+ return keysym_table[i].shifted_ascii; - } - -+ return 0; -+} -+ -+static int -+setkey_func (char *arg, int flags) -+{ -+ char *to_key, *from_key; -+ int to_code, from_code; -+ int map_in_interrupt = 0; -+ - to_key = arg; - from_key = skip_to (0, to_key); - -@@ -3830,15 +4254,15 @@ setup_func (char *arg, int flags) - { - char tmp[16]; - grub_sprintf (tmp, ",%d", (partition >> 16) & 0xFF); -- grub_strncat (device, tmp, 256); -+ grub_strncat (device, tmp, 16); - } - if ((partition & 0x00FF00) != 0x00FF00) - { - char tmp[16]; - grub_sprintf (tmp, ",%c", 'a' + ((partition >> 8) & 0xFF)); -- grub_strncat (device, tmp, 256); -+ grub_strncat (device, tmp, 16); - } -- grub_strncat (device, ")", 256); -+ grub_strncat (device, ")", 16); - } - - int embed_stage1_5 (char *stage1_5, int drive, int partition) -@@ -3973,7 +4397,7 @@ setup_func (char *arg, int flags) - - /* The prefix was determined. */ - grub_sprintf (stage2, "%s%s", prefix, "/stage2"); -- grub_sprintf (config_filename, "%s%s", prefix, "/menu.lst"); -+ grub_sprintf (config_filename, "%s%s", prefix, "/grub.conf"); - *real_config_filename = 0; - - /* Check if stage2 exists. */ -@@ -4083,9 +4507,26 @@ static struct builtin builtin_setup = - " partition where GRUB images reside, specify the option `--stage2'" - " to tell GRUB the file name under your OS." - }; -+#endif /* ! PLATFORM_EFI */ -+ -+ -+static int -+silent_func (char *arg, int flags) -+{ -+ silent_grub = 1; -+ return 0; -+} -+ -+static struct builtin builtin_silent = -+{ -+ "silent", -+ silent_func, -+ BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, -+ "grub will attempt to avoid printing anything to the screen" -+}; - - --#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) -+#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS) - /* terminal */ - static int - terminal_func (char *arg, int flags) -@@ -4244,17 +4685,21 @@ terminal_func (char *arg, int flags) - end: - current_term = term_table + default_term; - current_term->flags = term_flags; -- -+ - if (lines) - max_lines = lines; - else -- /* 24 would be a good default value. */ -- max_lines = 24; -- -+ max_lines = current_term->max_lines; -+ - /* If the interface is currently the command-line, - restart it to repaint the screen. */ -- if (current_term != prev_term && (flags & BUILTIN_CMDLINE)) -+ if ((current_term != prev_term) && (flags & BUILTIN_CMDLINE)){ -+ if (prev_term->shutdown) -+ prev_term->shutdown(); -+ if (current_term->startup) -+ current_term->startup(); - grub_longjmp (restart_cmdline_env, 0); -+ } - - return 0; - } -@@ -4264,7 +4709,7 @@ static struct builtin builtin_terminal = - "terminal", - terminal_func, - BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, -- "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules]", -+ "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules] [graphics]", - "Select a terminal. When multiple terminals are specified, wait until" - " you push any key to continue. If both console and serial are specified," - " the terminal to which you input a key first will be selected. If no" -@@ -4276,7 +4721,7 @@ static struct builtin builtin_terminal = - " seconds. The option --lines specifies the maximum number of lines." - " The option --silent is used to suppress messages." - }; --#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */ -+#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */ - - - #ifdef SUPPORT_SERIAL -@@ -4462,6 +4907,7 @@ static struct builtin builtin_testload = - " step is to try loading a kernel." - }; - -+#ifndef PLATFORM_EFI - - /* testvbe MODE */ - static int -@@ -4566,6 +5012,7 @@ static struct builtin builtin_testvbe = - "testvbe MODE", - "Test the VBE mode MODE. Hit any key to return." - }; -+#endif /* !PLATFORM_EFI */ - - - #ifdef SUPPORT_NETBOOT -@@ -4598,6 +5045,15 @@ static struct builtin builtin_tftpserver = - static int - timeout_func (char *arg, int flags) - { -+ /* One-shot default shenanigans -- don't piss around with the menu! */ -+ if (grub_timeout != -1) -+ return 0; -+ if ((saved_entryno & STAGE2_ONCEONLY_ENTRY) != 0) -+ { -+ grub_timeout = 0; -+ return 0; -+ } -+ - if (! safe_parse_maxint (&arg, &grub_timeout)) - return 1; - -@@ -4661,6 +5117,7 @@ static struct builtin builtin_unhide = - " partition type code." - }; - -+#ifndef PLATFORM_EFI - - /* uppermem */ - static int -@@ -4790,11 +5247,34 @@ static struct builtin builtin_vbeprobe = - "Probe VBE information. If the mode number MODE is specified, show only" - " the information about only the mode." - }; -- -+#endif /* ! PLATFORM_EFI */ -+ -+ -+/* version */ -+static int -+version_func (char *arg, int flags) -+{ -+ grub_printf ("\n GNU GRUB version %s (%dK lower / %dK upper memory)\n\n", -+ version_string, mbi.mem_lower, mbi.mem_upper); -+ return 0; -+} -+ -+static struct builtin builtin_version = -+{ -+ "version", -+ version_func, -+ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, -+ "version", -+ "Display grub version." -+}; -+ - - /* The table of builtin commands. Sorted in dictionary order. */ - struct builtin *builtin_table[] = - { -+#ifdef SUPPORT_GRAPHICS -+ &builtin_background, -+#endif - &builtin_blocklist, - &builtin_boot, - #ifdef SUPPORT_NETBOOT -@@ -4802,25 +5282,37 @@ struct builtin *builtin_table[] = - #endif /* SUPPORT_NETBOOT */ - &builtin_cat, - &builtin_chainloader, -+ &builtin_clear, - &builtin_cmp, - &builtin_color, - &builtin_configfile, - &builtin_debug, - &builtin_default, --#ifdef GRUB_UTIL -+#if defined(GRUB_UTIL) || defined(PLATFORM_EFI) - &builtin_device, --#endif /* GRUB_UTIL */ -+#endif /* defined(GRUB_UTIL) || defined(PLATFORM_EFI) */ - #ifdef SUPPORT_NETBOOT - &builtin_dhcp, - #endif /* SUPPORT_NETBOOT */ -+#ifndef PLATFORM_EFI - &builtin_displayapm, -+#endif - &builtin_displaymem, - #ifdef GRUB_UTIL - &builtin_dump, - #endif /* GRUB_UTIL */ -+#ifdef PLATFORM_EFI -+ &builtin_efimap, -+#endif -+#ifndef PLATFORM_EFI - &builtin_embed, -+#endif - &builtin_fallback, - &builtin_find, -+ &builtin_findiso, -+#ifdef SUPPORT_GRAPHICS -+ &builtin_foreground, -+#endif - &builtin_fstest, - &builtin_geometry, - &builtin_halt, -@@ -4830,27 +5322,35 @@ struct builtin *builtin_table[] = - #ifdef SUPPORT_NETBOOT - &builtin_ifconfig, - #endif /* SUPPORT_NETBOOT */ -+#ifndef PLATFORM_EFI - &builtin_impsprobe, -+#endif - &builtin_initrd, -+#ifndef PLATFORM_EFI - &builtin_install, - &builtin_ioprobe, -+#endif - &builtin_kernel, - &builtin_lock, - &builtin_makeactive, -+#ifndef PLATFORM_EFI - &builtin_map, -+#endif - #ifdef USE_MD5_PASSWORDS - &builtin_md5crypt, - #endif /* USE_MD5_PASSWORDS */ -+#ifndef PLATFORM_EFI - &builtin_module, - &builtin_modulenounzip, -+#endif - &builtin_pager, - &builtin_partnew, - &builtin_parttype, - &builtin_password, - &builtin_pause, --#ifdef GRUB_UTIL -+#if defined(GRUB_UTIL) || defined(PLATFORM_EFI) - &builtin_quit, --#endif /* GRUB_UTIL */ -+#endif /* defined(GRUB_UTIL) || defined(PLATFORM_EFI) */ - #ifdef SUPPORT_NETBOOT - &builtin_rarp, - #endif /* SUPPORT_NETBOOT */ -@@ -4862,23 +5362,35 @@ struct builtin *builtin_table[] = - #ifdef SUPPORT_SERIAL - &builtin_serial, - #endif /* SUPPORT_SERIAL */ -+#ifndef PLATFORM_EFI - &builtin_setkey, - &builtin_setup, --#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) -+#endif -+ &builtin_silent, -+#ifdef SUPPORT_GRAPHICS -+ &builtin_splashimage, -+#endif /* SUPPORT_GRAPHICS */ -+#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS) - &builtin_terminal, --#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */ -+#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */ - #ifdef SUPPORT_SERIAL - &builtin_terminfo, - #endif /* SUPPORT_SERIAL */ - &builtin_testload, -+#ifndef PLATFORM_EFI - &builtin_testvbe, -+#endif - #ifdef SUPPORT_NETBOOT - &builtin_tftpserver, - #endif /* SUPPORT_NETBOOT */ - &builtin_timeout, - &builtin_title, - &builtin_unhide, -+#ifndef PLATFORM_EFI - &builtin_uppermem, - &builtin_vbeprobe, -+#endif -+ &builtin_verbose, -+ &builtin_version, - 0 - }; -diff --git a/stage2/char_io.c b/stage2/char_io.c -index c86c240..073201a 100644 ---- a/stage2/char_io.c -+++ b/stage2/char_io.c -@@ -35,29 +35,37 @@ struct term_entry term_table[] = - { - "console", - 0, -+ 24, - console_putchar, - console_checkkey, - console_getkey, -+ console_keystatus, - console_getxy, - console_gotoxy, - console_cls, - console_setcolorstate, - console_setcolor, -- console_setcursor -+ console_setcursor, -+ 0, -+ 0 - }, - #ifdef SUPPORT_SERIAL - { - "serial", - /* A serial device must be initialized. */ - TERM_NEED_INIT, -+ 24, - serial_putchar, - serial_checkkey, - serial_getkey, -+ 0, - serial_getxy, - serial_gotoxy, - serial_cls, - serial_setcolorstate, - 0, -+ 0, -+ 0, - 0 - }, - #endif /* SUPPORT_SERIAL */ -@@ -65,17 +73,39 @@ struct term_entry term_table[] = - { - "hercules", - 0, -+ 24, - hercules_putchar, - console_checkkey, - console_getkey, -+ console_keystatus, - hercules_getxy, - hercules_gotoxy, - hercules_cls, - hercules_setcolorstate, - hercules_setcolor, -- hercules_setcursor -+ hercules_setcursor, -+ 0, -+ 0 - }, - #endif /* SUPPORT_HERCULES */ -+#ifdef SUPPORT_GRAPHICS -+ { "graphics", -+ TERM_NEED_INIT, /* flags */ -+ 30, /* number of lines */ -+ graphics_putchar, /* putchar */ -+ console_checkkey, /* checkkey */ -+ console_getkey, /* getkey */ -+ console_keystatus, /* keystatus */ -+ graphics_getxy, /* getxy */ -+ graphics_gotoxy, /* gotoxy */ -+ graphics_cls, /* cls */ -+ graphics_setcolorstate, /* setcolorstate */ -+ graphics_setcolor, /* setcolor */ -+ graphics_setcursor, /* nocursor */ -+ graphics_init, /* initialize */ -+ graphics_end /* shutdown */ -+ }, -+#endif /* SUPPORT_GRAPHICS */ - /* This must be the last entry. */ - { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } - }; -@@ -101,16 +131,16 @@ print_error (void) - } - - char * --convert_to_ascii (char *buf, int c,...) -+convert_to_ascii (char *buf, int c, unsigned int num) - { -- unsigned long num = *((&c) + 1), mult = 10; -+ unsigned int mult = 10; - char *ptr = buf; - - #ifndef STAGE1_5 - if (c == 'x' || c == 'X') - mult = 16; - -- if ((num & 0x80000000uL) && c == 'd') -+ if ((int) num < 0 && c == 'd') - { - num = (~num) + 1; - *(ptr++) = '-'; -@@ -149,87 +179,266 @@ grub_putstr (const char *str) - grub_putchar (*str++); - } - --void --grub_printf (const char *format,...) -+static void write_char(char **str, char c, int *count) - { -- int *dataptr = (int *) &format; -- char c, str[16]; -- -- dataptr++; -- -- while ((c = *(format++)) != 0) -- { -- if (c != '%') -- grub_putchar (c); -- else -- switch (c = *(format++)) -- { --#ifndef STAGE1_5 -- case 'd': -- case 'x': -- case 'X': --#endif -- case 'u': -- *convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0; -- grub_putstr (str); -- break; -- --#ifndef STAGE1_5 -- case 'c': -- grub_putchar ((*(dataptr++)) & 0xff); -- break; -+ if (str && *str) -+ *(*str)++ = c; -+ else -+ putchar(c); -+ (*count)++; -+} - -- case 's': -- grub_putstr ((char *) *(dataptr++)); -- break; --#endif -- } -+static void write_str(char **str, char *s, int *count) -+{ -+ if (s) { -+ while (*s) -+ write_char(str, *s++, count); -+ } else { -+ write_str(str, "(nil)", count); - } - } - --#ifndef STAGE1_5 -+#define format_ascii(buf, val, is_hex, is_cap, num_pad_chars) ({ \ -+ int _n = sizeof ((buf)) - 2; \ -+ typeof(val) _nval = (val); \ -+ int _negative = 0; \ -+ int _mult = is_hex ? 16 : 10; \ -+ char _a = is_cap ? 'A' : 'a'; \ -+ int _pad = num_pad_chars; \ -+ char hex[] = "0123456789abcdef"; \ -+ memset((buf), '\0', sizeof ((buf))); \ -+ if (!(_nval > 0LL)) \ -+ _negative = 1; \ -+ if (_nval == 0LL) \ -+ _negative = 0; \ -+ if (_negative) \ -+ _nval = (_nval ^ -1); \ -+ do { \ -+ int _dig = _nval % _mult; \ -+ (buf)[_n--] = ((_dig > 9) ? _dig + _a - 10 : '0'+_dig); \ -+ if (_pad > 0) _pad--; \ -+ } while (_nval /= _mult); \ -+ while (_pad--) \ -+ (buf)[_n--] = '0'; \ -+ if (_negative) \ -+ (buf)[_n--] = '-'; \ -+ _mult = 0; \ -+ _n++; \ -+ while (_n < sizeof ((buf))) \ -+ (buf)[_mult++] = (buf)[_n++]; \ -+ if (_negative && _mult > 1) \ -+ ((buf)[_mult-2])++; \ -+ }) -+ - int --grub_sprintf (char *buffer, const char *format, ...) -+grub_vsprintf (char *str, const char *fmt, va_list args) - { -- /* XXX hohmuth -- ugly hack -- should unify with printf() */ -- int *dataptr = (int *) &format; -- char c, *ptr, str[16]; -- char *bp = buffer; -- -- dataptr++; -- -- while ((c = *format++) != 0) -- { -- if (c != '%') -- *bp++ = c; /* putchar(c); */ -- else -- switch (c = *(format++)) -- { -- case 'd': case 'u': case 'x': -- *convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0; -- -- ptr = str; -+ char c; -+ char buf[40]; -+ int pos = 0; -+ -+ int count = 0; -+ -+ char *str_arg; -+ int int_arg; -+ unsigned char uchar_arg; -+ unsigned ushort_arg; -+ unsigned int uint_arg; -+ signed long long_arg; -+ unsigned long ulong_arg; -+ signed long long longlong_arg; -+ unsigned long long ulonglong_arg; -+ -+ c = *fmt++; -+ if (!c) -+ return 0; -+ -+ int is_fmt = 0, is_long = 0, is_signed = 1, is_cap = 0, is_zero_padded = 0; -+ int num_pad_chars = 0; -+ int restart = 1; -+ do { -+ if (restart) { -+ restart = 0; -+ is_fmt = 0; -+ is_long = 0; -+ is_cap = 0; -+ is_signed = 1; -+ is_zero_padded = 0; -+ num_pad_chars = 0; -+ buf[0] = '\0'; -+ pos = 0; -+ } -+ -+ if (!is_fmt) { -+ if (c == '%') { -+ is_fmt = 1; -+ buf[pos++] = c; -+ buf[pos] = '\0'; -+ continue; -+ } else { -+ write_char(&str, c, &count); -+ continue; -+ } -+ } -+ -+ /* below here we only ever hit when is_fmt is 1 */ -+ switch (c) { -+ /* first, modifiers */ -+ case '%': -+ if (pos != 0) -+ write_str(&str, buf, &count); -+ write_char(&str, c, &count); -+ restart = 1; -+ continue; -+ case '0': -+ if (!is_zero_padded) { -+ buf[pos++] = c; -+ buf[pos] = '\0'; -+ is_zero_padded++; -+ continue; -+ } -+ case '1': -+ case '2': -+ case '3': -+ case '4': -+ case '5': -+ case '6': -+ case '7': -+ case '8': -+ case '9': -+ buf[pos++] = c; -+ buf[pos] = '\0'; -+ num_pad_chars *= 10; -+ num_pad_chars += c - '0'; -+ continue; -+ case 'l': -+ buf[pos++] = c; -+ buf[pos] = '\0'; -+ is_long++; -+ continue; -+ case 'L': -+ buf[pos++] = c; -+ buf[pos] = '\0'; -+ is_long = 2; -+ continue; -+ -+ /* below here are things we actually have to print */ -+ case 'c': -+ int_arg = va_arg(args, int) & 0xff; -+ if (int_arg == 0) { -+ char *tmp_str = "\x00"; -+ write_str(&tmp_str, buf, &count); -+ } else { -+ write_char(&str, int_arg, &count); -+ } -+ restart = 1; -+ continue; -+ case 'd': -+ if (is_long == 0) { -+ int_arg = va_arg(args, signed int); -+ format_ascii(buf, int_arg, 0, 0, 0); -+ } else if (is_long == 1) { -+ long_arg = va_arg(args, signed long); -+ format_ascii(buf, long_arg, 0, 0, 0); -+ } else { -+ longlong_arg = va_arg(args, signed long long); -+ format_ascii(buf, longlong_arg, 0, 0, 0); -+ } -+ write_str(&str, buf, &count); -+ restart = 1; -+ continue; -+ case 's': -+ str_arg = va_arg(args, char *); -+ write_str(&str, str_arg, &count); -+ restart = 1; -+ continue; -+ case 'u': -+ case 'U': -+ if (is_long == 0) { -+ uint_arg = va_arg(args, unsigned int); -+ format_ascii(buf, uint_arg, 0, 0, 0); -+ } else if (is_long == 1) { -+ ulong_arg = va_arg(args, unsigned long); -+ format_ascii(buf, ulong_arg, 0, 0, 0); -+ } else { -+ ulonglong_arg = va_arg(args, unsigned long long); -+ format_ascii(buf, ulonglong_arg, 0, 0, 0); -+ } -+ write_str(&str, buf, &count); -+ restart = 1; -+ continue; -+ case 'P': -+ is_cap = 1; -+ case 'p': -+ ulong_arg = va_arg(args, unsigned long); -+ is_zero_padded = 1; -+ format_ascii(buf, ulong_arg, 1, is_cap, sizeof(ulong_arg)); -+ write_str(&str, is_cap ? "0X" : "0x", &count); -+ write_str(&str, buf, &count); -+ restart = 1; -+ continue; -+ case 'X': -+ is_cap = 1; -+ case 'x': -+ if (num_pad_chars == 2) { -+ int i; -+ char hex[] = "0123456789abcdef"; -+ uint_arg = va_arg(args, unsigned int); -+ uchar_arg = uint_arg & 0xff; -+ format_ascii(buf, uchar_arg, 1, is_cap, num_pad_chars); -+ } else if (num_pad_chars == 4) { -+ uint_arg = va_arg(args, unsigned int); -+ ushort_arg = uint_arg & 0xffff; -+ format_ascii(buf, ushort_arg, 1, is_cap, num_pad_chars); -+ } else if (is_long == 0) { -+ uint_arg = va_arg(args, unsigned int); -+ format_ascii(buf, uint_arg, 1, is_cap, num_pad_chars); -+ } else if (is_long == 1) { -+ ulong_arg = va_arg(args, unsigned long); -+ format_ascii(buf, ulong_arg, 1, is_cap, num_pad_chars); -+ } else { -+ ulonglong_arg = va_arg(args, unsigned long long); -+ format_ascii(buf, ulonglong_arg, 1, is_cap, num_pad_chars); -+ } -+ write_str(&str, buf, &count); -+ restart = 1; -+ continue; -+ default: -+ buf[pos++] = c; -+ buf[pos] = '\0'; -+ write_str(&str, buf, &count); -+ restart = 1; -+ continue; -+ } -+ } while ((c = *fmt++)); -+ -+ if (str) -+ *str = '\0'; -+ return count; -+} - -- while (*ptr) -- *bp++ = *(ptr++); /* putchar(*(ptr++)); */ -- break; -+void -+grub_printf (char *fmt, ...) -+{ -+ va_list ap; - -- case 'c': *bp++ = (*(dataptr++))&0xff; -- /* putchar((*(dataptr++))&0xff); */ -- break; -+ va_start (ap, fmt); -+ grub_vsprintf (0, fmt, ap); -+ va_end (ap); -+} - -- case 's': -- ptr = (char *) (*(dataptr++)); -+#ifndef STAGE1_5 -+int -+grub_sprintf (char *str, const char *fmt, ...) -+{ -+ va_list ap; -+ int ret; - -- while ((c = *ptr++) != 0) -- *bp++ = c; /* putchar(c); */ -- break; -- } -- } -+ va_start (ap, fmt); -+ ret = grub_vsprintf (str, fmt, ap); -+ va_end (ap); - -- *bp = 0; -- return bp - buffer; -+ return ret; - } - - -@@ -898,7 +1107,6 @@ safe_parse_maxint (char **str_ptr, int *myint_ptr) - } - #endif /* STAGE1_5 */ - --#if !defined(STAGE1_5) || defined(FSYS_FAT) - int - grub_tolower (int c) - { -@@ -907,7 +1115,6 @@ grub_tolower (int c) - - return c; - } --#endif /* ! STAGE1_5 || FSYS_FAT */ - - int - grub_isspace (int c) -@@ -1004,6 +1211,16 @@ checkkey (void) - { - return current_term->checkkey (); - } -+ -+/* Return keyboard modifier status. */ -+int -+keystatus (void) -+{ -+ if (current_term->keystatus) -+ return current_term->keystatus (); -+ else -+ return 0; -+} - #endif /* ! STAGE1_5 */ - - /* Display an ASCII character. */ -@@ -1046,13 +1263,15 @@ grub_putchar (int c) - the following grub_printf call will print newlines. */ - count_lines = -1; - -+ grub_printf("\n"); - if (current_term->setcolorstate) - current_term->setcolorstate (COLOR_STATE_HIGHLIGHT); - -- grub_printf ("\n[Hit return to continue]"); -+ grub_printf ("[Hit return to continue]"); - - if (current_term->setcolorstate) - current_term->setcolorstate (COLOR_STATE_NORMAL); -+ - - do - { -@@ -1090,7 +1309,7 @@ void - cls (void) - { - /* If the terminal is dumb, there is no way to clean the terminal. */ -- if (current_term->flags & TERM_DUMB) -+ if (current_term->flags & TERM_DUMB) - grub_putchar ('\n'); - else - current_term->cls (); -@@ -1125,6 +1344,26 @@ substring (const char *s1, const char *s2) - return 1; - } - -+int -+subcasestring (const char *s1, const char *s2) -+{ -+ while (tolower(*s1) == tolower(*s2)) -+ { -+ /* The strings match exactly. */ -+ if (! *(s1++)) -+ return 0; -+ s2 ++; -+ } -+ -+ /* S1 is a substring of S2. */ -+ if (*s1 == 0) -+ return -1; -+ -+ /* S1 isn't a substring. */ -+ return 1; -+} -+ -+ - #ifndef STAGE1_5 - /* Terminate the string STR with NUL. */ - int -@@ -1172,41 +1411,180 @@ grub_strlen (const char *str) - - return len; - } --#endif /* ! STAGE1_5 */ - -+/* this function "borrowed" from dietlibc */ - int --memcheck (int addr, int len) -+grub_strspn(const char *s, const char *accept) - { --#ifdef GRUB_UTIL -- auto int start_addr (void); -- auto int end_addr (void); -- -- auto int start_addr (void) -+ int l=0; -+ int a=1,i,al=grub_strlen(accept); -+ -+ while((a)&&(*s)) -+ { -+ for(a=i=0;(!a)&&(i<al);i++) -+ if (*s==accept[i]) a=1; -+ if (a) l++; -+ s++; -+ } -+ return l; -+} -+ -+/* this function "borrowed" from dietlibc */ -+int -+grub_strcspn(const char *s, const char *reject) -+{ -+ int l=0; -+ int a=1,i,al=grub_strlen(reject); -+ -+ while((a)&&(*s)) -+ { -+ for(i=0;(a)&&(i<al);i++) -+ if (*s==reject[i]) a=0; -+ if (a) l++; -+ s++; -+ } -+ return l; -+} -+ -+/* this function "borrowed" from dietlibc */ -+char * -+grub_strtok_r(char *s, const char *delim, char **ptrptr) { -+ char *tmp=0; -+ -+ if (s==0) s=*ptrptr; -+ s+=grub_strspn(s,delim); /* overread leading delimiter */ -+ if (*s) { -+ tmp=s; -+ s+=grub_strcspn(s,delim); -+ if (*s) *s++=0; /* not the end ? => terminate it */ -+ } -+ *ptrptr=s; -+ return tmp; -+} -+ -+char * -+grub_strchr (const char *s, int c) -+{ -+ while (*s) - { -- int ret; -+ if (*s == c) -+ return (char *) s; -+ s++; -+ } -+ -+ return 0; -+} -+ -+char * -+grub_strnchr (const char *s, int c) -+{ -+ while (*s) -+ { -+ if (*s != c) -+ return (char *) s; -+ s++; -+ } -+ -+ return 0; -+} -+ -+char * -+grub_strrchr (const char *s, int c) -+{ -+ char *p = 0; -+ -+ while (*s) -+ { -+ if (*s == c) -+ p = (char *) s; -+ s++; -+ } -+ -+ return p; -+} -+ -+int -+grub_strnlen (const char *s, int n) -+{ -+ int i; -+ -+ if (n == 0) -+ return 0; -+ -+ for (i = 0; s[i] != '\0' && i < n; i++) -+ ; -+ return i; -+} -+ -+char * -+grub_strncpy(char *new, const char *s, int n) -+{ -+ int i; -+ -+ for (i = 0; s[i] != '\0' && i < n; i++) -+ new[i] = s[i]; -+ return new; -+} -+ -+int -+grub_strncasecmp(const char *s0, const char *s1, int n) -+{ -+ int c0, c1; -+ -+ if (s0 == s1 || n == 0) -+ return 0; -+ -+ do { -+ c0 = *s0 & ~0x20; -+ c1 = *s1 & ~0x20; -+ -+ if (--n == 0 || c0 == '\0') -+ break; -+ -+ *s0++; -+ *s1++; -+ } while (c0 == c1); -+ -+ return (c0 > c1 ? 1 : c0 < c1 ? -1 : 0); -+} -+ -+#endif /* ! STAGE1_5 */ -+ -+#ifdef GRUB_UTIL -+static int memcheck_start_addr (void) -+{ -+ int ret; - # if defined(HAVE_START_SYMBOL) -- asm volatile ("movl $start, %0" : "=a" (ret)); -+ asm volatile ("movl $start, %0" : "=a" (ret)); - # elif defined(HAVE_USCORE_START_SYMBOL) -- asm volatile ("movl $_start, %0" : "=a" (ret)); -+ asm volatile ("movl $_start, %0" : "=a" (ret)); - # endif -- return ret; -- } -+ return ret; -+} - -- auto int end_addr (void) -- { -- int ret; -+static int memcheck_end_addr (void) -+{ -+ int ret; - # if defined(HAVE_END_SYMBOL) -- asm volatile ("movl $end, %0" : "=a" (ret)); -+ asm volatile ("movl $end, %0" : "=a" (ret)); - # elif defined(HAVE_USCORE_END_SYMBOL) -- asm volatile ("movl $_end, %0" : "=a" (ret)); -+ asm volatile ("movl $_end, %0" : "=a" (ret)); - # endif -- return ret; -- } -+ return ret; -+} -+#endif /* GRUB_UTIL */ - -- if (start_addr () <= addr && end_addr () > addr + len) -+int -+memcheck (int addr, int len) -+{ -+#ifdef GRUB_UTIL -+ if (memcheck_start_addr () <= addr && memcheck_end_addr () > addr + len) - return ! errnum; - #endif /* GRUB_UTIL */ - -+#ifdef PLATFORM_EFI -+ return 1; -+#else - if ((addr < RAW_ADDR (0x1000)) - || (addr < RAW_ADDR (0x100000) - && RAW_ADDR (mbi.mem_lower * 1024) < (addr + len)) -@@ -1215,12 +1593,23 @@ memcheck (int addr, int len) - errnum = ERR_WONT_FIT; - - return ! errnum; -+#endif -+} -+ -+void -+grub_memcpy(void *dest, const void *src, int len) -+{ -+ int i; -+ register char *d = (char*)dest, *s = (char*)src; -+ -+ for (i = 0; i < len; i++) -+ d[i] = s[i]; - } - - void * - grub_memmove (void *to, const void *from, int len) - { -- if (memcheck ((int) to, len)) -+ if (memcheck ((unsigned long) to, len)) - { - /* This assembly code is stolen from - linux-2.2.2/include/asm-i386/string.h. This is not very fast -@@ -1258,7 +1647,7 @@ grub_memset (void *start, int c, int len) - { - char *p = start; - -- if (memcheck ((int) start, len)) -+ if (memcheck ((unsigned long) start, len)) - { - while (len -- > 0) - *p ++ = c; -@@ -1274,6 +1663,26 @@ grub_strcpy (char *dest, const char *src) - grub_memmove (dest, src, grub_strlen (src) + 1); - return dest; - } -+ -+char * -+grub_stpncpy (char *dest, const char *src, int n) -+{ -+ char *res; -+ -+ res = NULL; -+ while (n != 0) { -+ *dest = *src; -+ if (*src != 0) -+ src++; -+ else if (res == NULL) -+ res = dest; -+ dest++; -+ n--; -+ } -+ if (res == NULL) -+ res = dest; -+ return res; -+} - #endif /* ! STAGE1_5 */ - - #ifndef GRUB_UTIL -diff --git a/stage2/cmdline.c b/stage2/cmdline.c -index a6ee309..cb41eda 100644 ---- a/stage2/cmdline.c -+++ b/stage2/cmdline.c -@@ -48,12 +48,17 @@ skip_to (int after_equal, char *cmdline) - - /* Print a helpful message for the command-line interface. */ - void --print_cmdline_message (int forever) -+print_cmdline_message (int type) - { - printf (" [ Minimal BASH-like line editing is supported. For the first word, TAB\n" - " lists possible command completions. Anywhere else TAB lists the possible\n" -- " completions of a device/filename.%s ]\n", -- (forever ? "" : " ESC at any time exits.")); -+ " completions of a device/filename."); -+ if (type == CMDLINE_NORMAL_MODE) -+ printf(" ESC at any time exits."); -+ if (type == CMDLINE_EDIT_MODE) -+ printf(" ESC at any time cancels. ENTER \n" -+ " at any time accepts your changes."); -+ printf("]\n"); - } - - /* Find the builtin whose command name is COMMAND and return the -@@ -128,7 +133,7 @@ enter_cmdline (char *heap, int forever) - print_network_configuration (); - grub_putchar ('\n'); - #endif -- print_cmdline_message (forever); -+ print_cmdline_message (forever ? CMDLINE_FOREVER_MODE : CMDLINE_NORMAL_MODE); - - while (1) - { -@@ -215,7 +220,7 @@ run_script (char *script, char *heap) - while (*cur_entry++) - ; - -- grub_memmove (heap, old_entry, (int) cur_entry - (int) old_entry); -+ grub_memmove (heap, old_entry, cur_entry - old_entry); - if (! *heap) - { - /* If there is no more command in SCRIPT... */ -@@ -232,12 +237,12 @@ run_script (char *script, char *heap) - builtin = find_command (heap); - if (! builtin) - { -- grub_printf ("%s\n", old_entry); -+ grub_verbose_printf ("%s\n", old_entry); - continue; - } - - if (! (builtin->flags & BUILTIN_NO_ECHO)) -- grub_printf ("%s\n", old_entry); -+ grub_verbose_printf ("%s\n", old_entry); - - /* If BUILTIN cannot be run in the command-line, skip it. */ - if (! (builtin->flags & BUILTIN_CMDLINE)) -diff --git a/stage2/common.c b/stage2/common.c -index 09f9e31..e96bec2 100644 ---- a/stage2/common.c -+++ b/stage2/common.c -@@ -32,7 +32,7 @@ - struct multiboot_info mbi; - unsigned long saved_drive; - unsigned long saved_partition; --unsigned long cdrom_drive; -+unsigned long cdrom_drive = 0x100; - #ifndef STAGE1_5 - unsigned long saved_mem_upper; - -@@ -114,7 +114,7 @@ mmap_avail_at (unsigned long bottom) - { - for (cont = 0, addr = mbi.mmap_addr; - addr < mbi.mmap_addr + mbi.mmap_length; -- addr += *((unsigned long *) addr) + 4) -+ addr += *((unsigned int *) addr) + 4) - { - struct AddrRangeDesc *desc = (struct AddrRangeDesc *) addr; - -@@ -183,11 +183,11 @@ init_bios_info (void) - cont = get_mmap_entry ((void *) addr, cont); - - /* If the returned buffer's length is zero, quit. */ -- if (! *((unsigned long *) addr)) -+ if (! *((unsigned int *) addr)) - break; - -- mbi.mmap_length += *((unsigned long *) addr) + 4; -- addr += *((unsigned long *) addr) + 4; -+ mbi.mmap_length += *((unsigned int *) addr) + 4; -+ addr += *((unsigned int *) addr) + 4; - } - while (cont); - -@@ -207,7 +207,7 @@ init_bios_info (void) - /* Find the maximum available address. Ignore any memory holes. */ - for (max_addr = 0, addr = mbi.mmap_addr; - addr < mbi.mmap_addr + mbi.mmap_length; -- addr += *((unsigned long *) addr) + 4) -+ addr += *((unsigned int *) addr) + 4) - { - struct AddrRangeDesc *desc = (struct AddrRangeDesc *) addr; - -@@ -322,6 +322,9 @@ init_bios_info (void) - - /* Set cdrom drive. */ - { -+#ifdef PLATFORM_EFI -+ cdrom_drive = 0x100; -+#else - struct geometry geom; - - /* Get the geometry. */ -@@ -330,6 +333,7 @@ init_bios_info (void) - cdrom_drive = GRUB_INVALID_DRIVE; - else - cdrom_drive = boot_drive; -+#endif - } - - /* Start main routine here. */ -diff --git a/stage2/disk_io.c b/stage2/disk_io.c -index b9bc526..f3fed0e 100644 ---- a/stage2/disk_io.c -+++ b/stage2/disk_io.c -@@ -21,12 +21,17 @@ - - #include <shared.h> - #include <filesys.h> -+#include <gpt.h> - - #ifdef SUPPORT_NETBOOT - # define GRUB 1 - # include <etherboot.h> - #endif - -+#ifdef PLATFORM_EFI -+#include "efistubs.h" -+#endif -+ - #ifdef GRUB_UTIL - # include <device.h> - #endif -@@ -48,6 +53,9 @@ int fsmax; - struct fsys_entry fsys_table[NUM_FSYS + 1] = - { - /* TFTP should come first because others don't handle net device. */ -+# ifdef PLATFORM_EFI -+ {"efitftp", efi_tftp_mount, efi_tftp_read, efi_tftp_dir, efi_tftp_close, 0}, -+# endif - # ifdef FSYS_TFTP - {"tftp", tftp_mount, tftp_read, tftp_dir, tftp_close, 0}, - # endif -@@ -75,6 +83,9 @@ struct fsys_entry fsys_table[NUM_FSYS + 1] = - # ifdef FSYS_UFS2 - {"ufs2", ufs2_mount, ufs2_read, ufs2_dir, 0, ufs2_embed}, - # endif -+# ifdef PLATFORM_EFI -+ {"uefi", uefi_mount, uefi_read, uefi_dir, uefi_close, 0}, -+# endif - # ifdef FSYS_ISO9660 - {"iso9660", iso9660_mount, iso9660_read, iso9660_dir, 0, 0}, - # endif -@@ -127,8 +138,8 @@ struct geometry buf_geom; - int filepos; - int filemax; - --static inline unsigned long --log2 (unsigned long word) -+static inline unsigned int -+grub_log2 (unsigned int word) - { - asm volatile ("bsfl %1,%0" - : "=r" (word) -@@ -140,7 +151,7 @@ int - rawread (int drive, int sector, int byte_offset, int byte_len, char *buf) - { - int slen, sectors_per_vtrack; -- int sector_size_bits = log2 (buf_geom.sector_size); -+ int sector_size_bits = grub_log2 (buf_geom.sector_size); - - if (byte_len <= 0) - return 1; -@@ -163,7 +174,7 @@ rawread (int drive, int sector, int byte_offset, int byte_len, char *buf) - } - buf_drive = drive; - buf_track = -1; -- sector_size_bits = log2 (buf_geom.sector_size); -+ sector_size_bits = grub_log2 (buf_geom.sector_size); - } - - /* Make sure that SECTOR is valid. */ -@@ -297,7 +308,7 @@ devread (int sector, int byte_offset, int byte_len, char *buf) - * Check partition boundaries - */ - if (sector < 0 -- || ((sector + ((byte_offset + byte_len - 1) >> SECTOR_BITS)) -+ || ((sector + ((byte_offset + byte_len - 1) >> get_sector_bits(current_drive))) - >= part_length)) - { - errnum = ERR_OUTSIDE_PART; -@@ -307,8 +318,8 @@ devread (int sector, int byte_offset, int byte_len, char *buf) - /* - * Get the read to the beginning of a partition. - */ -- sector += byte_offset >> SECTOR_BITS; -- byte_offset &= SECTOR_SIZE - 1; -+ sector += byte_offset >> get_sector_bits(current_drive); -+ byte_offset &= get_sector_size(current_drive) - 1; - - #if !defined(STAGE1_5) - if (disk_read_hook && debug) -@@ -347,7 +358,7 @@ rawwrite (int drive, int sector, char *buf) - sector = 1; - } - -- memmove ((char *) SCRATCHADDR, buf, SECTOR_SIZE); -+ memmove ((char *) SCRATCHADDR, buf, get_sector_size(drive)); - if (biosdisk (BIOSDISK_WRITE, drive, &buf_geom, - sector, 1, SCRATCHSEG)) - { -@@ -373,23 +384,23 @@ devwrite (int sector, int sector_count, char *buf) - embed a Stage 1.5 into a partition instead of a MBR, use system - calls directly instead of biosdisk, because of the bug in - Linux. *sigh* */ -- return write_to_partition (device_map, current_drive, current_partition, -- sector, sector_count, buf); -+ int ret; -+ ret = write_to_partition (device_map, current_drive, current_partition, -+ sector, sector_count, buf); -+ if (ret != -1) -+ return ret; - } -- else - #endif /* GRUB_UTIL && __linux__ */ -- { -- int i; -- -- for (i = 0; i < sector_count; i++) -- { -- if (! rawwrite (current_drive, part_start + sector + i, -- buf + (i << SECTOR_BITS))) -- return 0; -+ int i; - -- } -- return 1; -- } -+ for (i = 0; i < sector_count; i++) -+ { -+ if (! rawwrite (current_drive, part_start + sector + i, -+ buf + (i << get_sector_bits(current_drive)))) -+ return 0; -+ -+ } -+ return 1; - } - - static int -@@ -400,7 +411,7 @@ sane_partition (void) - return 1; - - if (!(current_partition & 0xFF000000uL) -- && ((current_drive & 0xFFFFFF7F) < 8 -+ && ((current_drive & 0xFFFFFF7F) < MAX_HD_NUM - || current_drive == cdrom_drive) - && (current_partition & 0xFF) == 0xFF - && ((current_partition & 0xFF00) == 0xFF00 -@@ -458,7 +469,7 @@ make_saved_active (void) - } - - /* Read the MBR in the scratch space. */ -- if (! rawread (saved_drive, 0, 0, SECTOR_SIZE, mbr)) -+ if (! rawread (saved_drive, 0, 0, get_sector_size(saved_drive), mbr)) - return 0; - - /* If the partition is an extended partition, setting the active -@@ -502,8 +513,8 @@ int - set_partition_hidden_flag (int hidden) - { - unsigned long part = 0xFFFFFF; -- unsigned long start, len, offset, ext_offset; -- int entry, type; -+ unsigned long start, len, offset, ext_offset, gpt_offset; -+ int entry, type, gpt_count, gpt_size; - char mbr[512]; - - /* The drive must be a hard disk. */ -@@ -524,8 +535,15 @@ set_partition_hidden_flag (int hidden) - /* Look for the partition. */ - while (next_partition (current_drive, 0xFFFFFF, &part, &type, - &start, &len, &offset, &entry, -- &ext_offset, mbr)) -- { -+ &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr)) -+ { -+ /* The partition may not be a GPT partition. */ -+ if (gpt_offset != 0) -+ { -+ errnum = ERR_BAD_ARGUMENT; -+ return 1; -+ } -+ - if (part == current_partition) - { - /* Found. */ -@@ -577,11 +595,14 @@ next_partition (unsigned long drive, unsigned long dest, - unsigned long *partition, int *type, - unsigned long *start, unsigned long *len, - unsigned long *offset, int *entry, -- unsigned long *ext_offset, char *buf) -+ unsigned long *ext_offset, -+ unsigned long *gpt_offset, int *gpt_count, -+ int *gpt_size, char *buf) - { - /* Forward declarations. */ - auto int next_bsd_partition (void); - auto int next_pc_slice (void); -+ auto int next_gpt_slice(void); - - /* Get next BSD partition in current PC slice. */ - int next_bsd_partition (void) -@@ -601,7 +622,7 @@ next_partition (unsigned long drive, unsigned long dest, - - /* Read the BSD label. */ - if (! rawread (drive, *start + BSD_LABEL_SECTOR, -- 0, SECTOR_SIZE, buf)) -+ 0, get_sector_size(drive), buf)) - return 0; - - /* Check if it is valid. */ -@@ -656,7 +677,7 @@ next_partition (unsigned long drive, unsigned long dest, - } - - /* Read the MBR or the boot sector of the extended partition. */ -- if (! rawread (drive, *offset, 0, SECTOR_SIZE, buf)) -+ if (! rawread (drive, *offset, 0, get_sector_size(drive), buf)) - return 0; - - /* Check if it is valid. */ -@@ -666,6 +687,42 @@ next_partition (unsigned long drive, unsigned long dest, - return 0; - } - -+ /* If this is a GPT partition table, read it as such. */ -+ if (*entry == -1 && *offset == 0 && -+ (PC_SLICE_TYPE (buf, 0) == PC_SLICE_TYPE_GPT || -+ PC_SLICE_TYPE (buf, 0) == PC_SLICE_TYPE_NONE)) -+ { -+ struct grub_gpt_header *hdr = (struct grub_gpt_header *) buf; -+ -+ /* Read in the GPT Partition table header. */ -+ if (! rawread (drive, 1, 0, get_sector_size(drive), buf)) -+ return 0; -+ -+ if (hdr->magic == GPT_HEADER_MAGIC && hdr->version == 0x10000) -+ { -+ /* Let gpt_offset point to the first entry in the GPT -+ partition table. This can also be used by callers of -+ next_partition to determine if a entry comes from a -+ GPT partition table or not. */ -+ *gpt_offset = hdr->partitions; -+ *gpt_count = hdr->maxpart; -+ *gpt_size = hdr->partentry_size; -+ -+ return next_gpt_slice(); -+ } -+ else -+ { -+ /* This is not a valid header for a GPT partition table. -+ Re-read the MBR or the boot sector of the extended -+ partition. */ -+ if (! rawread (drive, *offset, 0, get_sector_size(drive), buf)) -+ return 0; -+ } -+ } -+ -+ /* Not a GPT partition. */ -+ *gpt_offset = 0; -+ - /* Increase the entry number. */ - (*entry)++; - -@@ -710,6 +767,43 @@ next_partition (unsigned long drive, unsigned long dest, - return 1; - } - -+ /* Get the next GPT slice. */ -+ int next_gpt_slice (void) -+ { -+ struct grub_gpt_partentry *gptentry = (struct grub_gpt_partentry *) buf; -+ /* Make GPT partitions show up as PC slices. */ -+ int pc_slice_no = (*partition & 0xFF0000) >> 16; -+ -+ /* If this is the first time... */ -+ if (pc_slice_no == 0xFF) -+ { -+ pc_slice_no = -1; -+ *entry = -1; -+ } -+ -+ do { -+ (*entry)++; -+ -+ if (*entry >= *gpt_count) -+ { -+ errnum = ERR_NO_PART; -+ return 0; -+ } -+ /* Read in the GPT Partition table entry. */ -+ if (! rawread (drive, (*gpt_offset) + GPT_ENTRY_SECTOR (drive, *gpt_size, *entry), GPT_ENTRY_INDEX (drive, *gpt_size, *entry), *gpt_size, buf)) -+ return 0; -+ } while (! (gptentry->type1 && gptentry->type2)); -+ -+ pc_slice_no++; -+ *start = gptentry->start; -+ *len = gptentry->end - gptentry->start + 1; -+ *type = PC_SLICE_TYPE_EXT2FS; -+ *entry = pc_slice_no; -+ *partition = (*entry << 16) | 0xFFFF; -+ -+ return 1; -+ } -+ - /* Start the body of this function. */ - - #ifndef STAGE1_5 -@@ -717,6 +811,9 @@ next_partition (unsigned long drive, unsigned long dest, - return 0; - #endif - -+ if (*partition != 0xFFFFFF && *gpt_offset != 0) -+ return next_gpt_slice (); -+ - /* If previous partition is a BSD partition or a PC slice which - contains BSD partitions... */ - if ((*partition != 0xFFFFFF && IS_PC_SLICE_TYPE_BSD (*type & 0xff)) -@@ -755,8 +852,11 @@ real_open_partition (int flags) - unsigned long dest_partition = current_partition; - unsigned long part_offset; - unsigned long ext_offset; -+ unsigned long gpt_offset; -+ int gpt_count; -+ int gpt_size; - int entry; -- char buf[SECTOR_SIZE]; -+ char buf[4096]; - int bsd_part, pc_slice; - - /* For simplicity. */ -@@ -766,7 +866,8 @@ real_open_partition (int flags) - int ret = next_partition (current_drive, dest_partition, - ¤t_partition, ¤t_slice, - &part_start, &part_length, -- &part_offset, &entry, &ext_offset, buf); -+ &part_offset, &entry, &ext_offset, -+ &gpt_offset, &gpt_count, &gpt_size, buf); - bsd_part = (current_partition >> 8) & 0xFF; - pc_slice = current_partition >> 16; - return ret; -@@ -926,6 +1027,17 @@ open_partition (void) - return real_open_partition (0); - } - -+#if !defined(PLATFORM_EFI) && !defined(GRUB_UTIL) -+int get_sector_size (int drive) -+{ -+ return SECTOR_SIZE; -+} -+int get_sector_bits (int drive) -+{ -+ return SECTOR_BITS; -+} -+#endif /* !defined(PLATFORM_EFI) && !defined(GRUB_UTIL) */ -+ - - #ifndef STAGE1_5 - /* XX used for device completion in 'set_device' and 'print_completions' */ -@@ -978,7 +1090,7 @@ set_device (char *device) - if (*device != ',' && *device != ')') - { - char ch = *device; --#ifdef SUPPORT_NETBOOT -+#if defined(SUPPORT_NETBOOT) || defined(PLATFORM_EFI) - if (*device == 'f' || *device == 'h' - || (*device == 'n' && network_ready) - || (*device == 'c' && cdrom_drive != GRUB_INVALID_DRIVE)) -@@ -1002,14 +1114,14 @@ set_device (char *device) - - if ((*device == 'f' - || *device == 'h' --#ifdef SUPPORT_NETBOOT -+#if defined(SUPPORT_NETBOOT) || defined(PLATFORM_EFI) - || (*device == 'n' && network_ready) - #endif - || (*device == 'c' && cdrom_drive != GRUB_INVALID_DRIVE)) - && (device += 2, (*(device - 1) != 'd'))) - errnum = ERR_NUMBER_PARSING; -- --#ifdef SUPPORT_NETBOOT -+ -+#if defined(SUPPORT_NETBOOT) || defined(PLATFORM_EFI) - if (ch == 'n' && network_ready) - current_drive = NETWORK_DRIVE; - else -@@ -1131,7 +1243,7 @@ set_bootdev (int hdbias) - if ((saved_drive & 0x80) && cur_part_addr) - { - if (rawread (saved_drive, cur_part_offset, -- 0, SECTOR_SIZE, (char *) SCRATCHADDR)) -+ 0, get_sector_size(saved_drive), (char *) SCRATCHADDR)) - { - char *dst, *src; - -@@ -1243,6 +1355,12 @@ setup_part (char *filename) - - - #ifndef STAGE1_5 -+char * -+get_fsys_type (void) -+{ -+ return fsys_table[fsys_type].name; -+} -+ - /* - * This prints the filesystem type or gives relevant information. - */ -@@ -1376,7 +1494,7 @@ print_completions (int is_filename, int is_completion) - - if (!ptr - || *(ptr-1) != 'd' --#ifdef SUPPORT_NETBOOT -+#if defined(SUPPORT_NETBOOT) || defined(PLATFORM_EFI) - || *(ptr-2) != 'n' - #endif /* SUPPORT_NETBOOT */ - || *(ptr-2) != 'c') -@@ -1385,7 +1503,7 @@ print_completions (int is_filename, int is_completion) - i < (ptr && (*(ptr-1) == 'd' && *(ptr-2) == 'f') ? 1:2); - i++) - { -- for (j = 0; j < 8; j++) -+ for (j = 0; j < MAX_HD_NUM; j++) - { - disk_no = (i * 0x80) + j; - if ((disk_choice || disk_no == current_drive) -@@ -1407,7 +1525,7 @@ print_completions (int is_filename, int is_completion) - || (*(ptr-1) == 'd' && *(ptr-2) == 'c'))) - print_a_completion ("cd"); - --# ifdef SUPPORT_NETBOOT -+# if defined(SUPPORT_NETBOOT) || defined(PLATFORM_EFI) - if (network_ready - && (disk_choice || NETWORK_DRIVE == current_drive) - && (!ptr -@@ -1596,7 +1714,7 @@ grub_open (char *filename) - - BLK_BLKLENGTH (list_addr) = tmp; - -- filemax += (tmp * SECTOR_SIZE); -+ filemax += (tmp * get_sector_size(current_drive)); - list_addr += BLK_BLKLIST_INC_VAL; - - if (*ptr != ',') -@@ -1673,6 +1791,7 @@ grub_read (char *buf, int len) - if (block_file) - { - int size, off, ret = 0; -+ int sector_size = get_sector_size(current_drive); - - while (len && !errnum) - { -@@ -1687,10 +1806,10 @@ grub_read (char *buf, int len) - /* run BLK_CUR_FILEPOS up to filepos */ - while (filepos > BLK_CUR_FILEPOS) - { -- if ((filepos - (BLK_CUR_FILEPOS & ~(SECTOR_SIZE - 1))) -- >= SECTOR_SIZE) -+ if ((filepos - (BLK_CUR_FILEPOS & ~(sector_size - 1))) -+ >= sector_size) - { -- BLK_CUR_FILEPOS += SECTOR_SIZE; -+ BLK_CUR_FILEPOS += sector_size; - BLK_CUR_BLKNUM++; - - if (BLK_CUR_BLKNUM >= BLK_BLKLENGTH (BLK_CUR_BLKLIST)) -@@ -1703,9 +1822,9 @@ grub_read (char *buf, int len) - BLK_CUR_FILEPOS = filepos; - } - -- off = filepos & (SECTOR_SIZE - 1); -+ off = filepos & (sector_size - 1); - size = ((BLK_BLKLENGTH (BLK_CUR_BLKLIST) - BLK_CUR_BLKNUM) -- * SECTOR_SIZE) - off; -+ * sector_size) - off; - if (size > len) - size = len; - -diff --git a/stage2/efistubs.c b/stage2/efistubs.c -new file mode 100644 -index 0000000..29b086a ---- /dev/null -+++ b/stage2/efistubs.c -@@ -0,0 +1,7 @@ -+ -+#include "shared.h" -+#include "efistubs.h" -+ -+#if defined(PLATFORM_EFI) -+int network_ready = 0; -+#endif /* defined(PLATFORM_EFI) */ -diff --git a/stage2/efistubs.h b/stage2/efistubs.h -new file mode 100644 -index 0000000..97e407d ---- /dev/null -+++ b/stage2/efistubs.h -@@ -0,0 +1,8 @@ -+#ifndef EFISTUBS_H -+#define EFISTUBS_H 1 -+ -+#if defined(PLATFORM_EFI) -+extern int network_ready; -+#endif /* defined(PLATFORM_EFI) */ -+ -+#endif /* EFISTUBS_H */ -diff --git a/stage2/fat.h b/stage2/fat.h -index 7fed6ba..f154eed 100644 ---- a/stage2/fat.h -+++ b/stage2/fat.h -@@ -92,7 +92,7 @@ struct fat_bpb { - #define FAT_DIRENTRY_FIRST_CLUSTER(entry) \ - ((*((unsigned short *) (entry+26)))+(*((unsigned short *) (entry+20)) << 16)) - #define FAT_DIRENTRY_FILELENGTH(entry) \ -- (*((unsigned long *) (entry+28))) -+ (*((unsigned int *) (entry+28))) - - #define FAT_LONGDIR_ID(entry) \ - (*((unsigned char *) (entry))) -diff --git a/stage2/filesys.h b/stage2/filesys.h -index bbad8b9..79e5f1f 100644 ---- a/stage2/filesys.h -+++ b/stage2/filesys.h -@@ -40,6 +40,16 @@ int ufs2_embed (int *start_sector, int needed_sectors); - #define FSYS_UFS2_NUM 0 - #endif - -+#ifdef PLATFORM_EFI -+#define FSYS_UEFI_NUM 1 -+int uefi_mount (void); -+int uefi_read (char *buf, int len); -+int uefi_dir (char *dirname); -+void uefi_close (void); -+#else -+#define FSYS_UEFI_NUM 0 -+#endif -+ - #ifdef FSYS_FAT - #define FSYS_FAT_NUM 1 - int fat_mount (void); -@@ -115,6 +125,17 @@ void tftp_close (void); - #define FSYS_TFTP_NUM 0 - #endif - -+#ifdef PLATFORM_EFI -+#define FSYS_EFI_TFTP_NUM 1 -+int efi_tftp_mount (void); -+int efi_tftp_read (char *buf, int len); -+int efi_tftp_dir (char *dirname); -+void efi_tftp_close (void); -+#else -+#define FSYS_EFI_TFTP_NUM 0 -+#endif -+ -+ - #ifdef FSYS_ISO9660 - #define FSYS_ISO9660_NUM 1 - int iso9660_mount (void); -@@ -128,7 +149,8 @@ int iso9660_dir (char *dirname); - #define NUM_FSYS \ - (FSYS_FFS_NUM + FSYS_FAT_NUM + FSYS_EXT2FS_NUM + FSYS_MINIX_NUM \ - + FSYS_REISERFS_NUM + FSYS_VSTAFS_NUM + FSYS_JFS_NUM + FSYS_XFS_NUM \ -- + FSYS_TFTP_NUM + FSYS_ISO9660_NUM + FSYS_UFS2_NUM) -+ + FSYS_TFTP_NUM + FSYS_EFI_TFTP_NUM + FSYS_ISO9660_NUM + FSYS_UFS2_NUM \ -+ + FSYS_UEFI_NUM) - #endif - - /* defines for the block filesystem info area */ -@@ -137,8 +159,8 @@ int iso9660_dir (char *dirname); - #define BLK_CUR_BLKLIST (*((int*)(FSYS_BUF+4))) - #define BLK_CUR_BLKNUM (*((int*)(FSYS_BUF+8))) - #define BLK_MAX_ADDR (FSYS_BUF+0x7FF9) --#define BLK_BLKSTART(l) (*((int*)l)) --#define BLK_BLKLENGTH(l) (*((int*)(l+4))) -+#define BLK_BLKSTART(l) (*((int*)(unsigned long)l)) -+#define BLK_BLKLENGTH(l) (*((int*)(unsigned long)(l+4))) - #define BLK_BLKLIST_START (FSYS_BUF+12) - #define BLK_BLKLIST_INC_VAL 8 - #endif /* NO_BLOCK_FILES */ -diff --git a/stage2/fsys_ext2fs.c b/stage2/fsys_ext2fs.c -index 560048f..01386d1 100644 ---- a/stage2/fsys_ext2fs.c -+++ b/stage2/fsys_ext2fs.c -@@ -25,7 +25,7 @@ - static int mapblock1, mapblock2; - - /* sizes are always in bytes, BLOCK values are always in DEV_BSIZE (sectors) */ --#define DEV_BSIZE 512 -+#define DEV_BSIZE get_sector_size(current_drive) - - /* include/linux/fs.h */ - #define BLOCK_SIZE 1024 /* initial block size for superblock read */ -@@ -33,6 +33,7 @@ static int mapblock1, mapblock2; - #define WHICH_SUPER 1 - /* kind of from fs/ext2/super.c */ - #define SBLOCK (WHICH_SUPER * BLOCK_SIZE / DEV_BSIZE) /* = 2 */ -+#define SBOFF ((WHICH_SUPER * BLOCK_SIZE) % DEV_BSIZE) - - /* include/asm-i386/types.h */ - typedef __signed__ char __s8; -@@ -41,6 +42,7 @@ typedef __signed__ short __s16; - typedef unsigned short __u16; - typedef __signed__ int __s32; - typedef unsigned int __u32; -+typedef unsigned long long __u64; - - /* - * Constants relative to the data blocks, from ext2_fs.h -@@ -51,7 +53,7 @@ typedef unsigned int __u32; - #define EXT2_TIND_BLOCK (EXT2_DIND_BLOCK + 1) - #define EXT2_N_BLOCKS (EXT2_TIND_BLOCK + 1) - --/* include/linux/ext2_fs.h */ -+/* lib/ext2fs/ext2_fs.h from e2fsprogs */ - struct ext2_super_block - { - __u32 s_inodes_count; /* Inodes count */ -@@ -61,9 +63,9 @@ struct ext2_super_block - __u32 s_free_inodes_count; /* Free inodes count */ - __u32 s_first_data_block; /* First Data Block */ - __u32 s_log_block_size; /* Block size */ -- __s32 s_log_frag_size; /* Fragment size */ -+ __s32 s_obso_log_frag_size; /* Obsoleted Fragment size */ - __u32 s_blocks_per_group; /* # Blocks per group */ -- __u32 s_frags_per_group; /* # Fragments per group */ -+ __u32 s_obso_frags_per_group; /* Obsoleted Fragments per group */ - __u32 s_inodes_per_group; /* # Inodes per group */ - __u32 s_mtime; /* Mount time */ - __u32 s_wtime; /* Write time */ -@@ -72,17 +74,76 @@ struct ext2_super_block - __u16 s_magic; /* Magic signature */ - __u16 s_state; /* File system state */ - __u16 s_errors; /* Behaviour when detecting errors */ -- __u16 s_pad; -+ __u16 s_minor_rev_level; /* minor revision level */ - __u32 s_lastcheck; /* time of last check */ - __u32 s_checkinterval; /* max. time between checks */ - __u32 s_creator_os; /* OS */ - __u32 s_rev_level; /* Revision level */ - __u16 s_def_resuid; /* Default uid for reserved blocks */ - __u16 s_def_resgid; /* Default gid for reserved blocks */ -- __u32 s_reserved[235]; /* Padding to the end of the block */ -- }; -- --struct ext2_group_desc -+ /* -+ * These fields are for EXT2_DYNAMIC_REV superblocks only. -+ * -+ * Note: the difference between the compatible feature set and -+ * the incompatible feature set is that if there is a bit set -+ * in the incompatible feature set that the kernel doesn't -+ * know about, it should refuse to mount the filesystem. -+ * -+ * e2fsck's requirements are more strict; if it doesn't know -+ * about a feature in either the compatible or incompatible -+ * feature set, it must abort and not try to meddle with -+ * things it doesn't understand... -+ */ -+ __u32 s_first_ino; /* First non-reserved inode */ -+ __u16 s_inode_size; /* size of inode structure */ -+ __u16 s_block_group_nr; /* block group # of this superblock */ -+ __u32 s_feature_compat; /* compatible feature set */ -+ __u32 s_feature_incompat; /* incompatible feature set */ -+ __u32 s_feature_ro_compat; /* readonly-compatible feature set */ -+ __u8 s_uuid[16]; /* 128-bit uuid for volume */ -+ char s_volume_name[16]; /* volume name */ -+ char s_last_mounted[64]; /* directory where last mounted */ -+ __u32 s_algorithm_usage_bitmap; /* For compression */ -+ /* -+ * Performance hints. Directory preallocation should only -+ * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on. -+ */ -+ __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/ -+ __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */ -+ __u16 s_reserved_gdt_blocks;/* Per group table for online growth */ -+ /* -+ * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set. -+ */ -+ __u8 s_journal_uuid[16]; /* uuid of journal superblock */ -+ __u32 s_journal_inum; /* inode number of journal file */ -+ __u32 s_journal_dev; /* device number of journal file */ -+ __u32 s_last_orphan; /* start of list of inodes to delete */ -+ __u32 s_hash_seed[4]; /* HTREE hash seed */ -+ __u8 s_def_hash_version; /* Default hash version to use */ -+ __u8 s_jnl_backup_type; /* Default type of journal backup */ -+ __u16 s_desc_size; /* size of group descriptor */ -+ __u32 s_default_mount_opts; -+ __u32 s_first_meta_bg; /* First metablock group */ -+ __u32 s_mkfs_time; /* When the filesystem was created */ -+ __u32 s_jnl_blocks[17]; /* Backup of the journal inode */ -+ /* 64bit desc support valid if EXT4_FEATURE_INCOMPAT_64BIT */ -+ __u32 s_blocks_count_hi; /* Blocks count */ -+ __u32 s_r_blocks_count_hi; /* Reserved blocks count */ -+ __u32 s_free_blocks_count_hi; /* Free blocks count */ -+ __u16 s_min_extra_isize; /* All inodes have at least # bytes */ -+ __u16 s_max_extra_isize; /* New inodes should reverve # bytes */ -+ __u32 s_flags; /* Miscellaneous flags */ -+ __u16 s_raid_stride; /* Raid stride */ -+ __u16 s_mmp_interval; /* # seconds to wait MMP checking */ -+ __u64 s_mmp_block; /* Block for multi-mount protection */ -+ __u32 s_raid_stripe_width; /* Blocks on all data disks (N*stride)*/ -+ __u8 s_log_groups_per_flex;/* FLEX_BG group size*/ -+ __u8 s_reserved_char_pad; -+ __u16 s_reserved_pad; -+ __u32 s_reserved[162]; /* Padding to the end of the block */ -+}; -+ -+struct ext4_group_desc - { - __u32 bg_block_bitmap; /* Blocks bitmap block */ - __u32 bg_inode_bitmap; /* Inodes bitmap block */ -@@ -90,8 +151,18 @@ struct ext2_group_desc - __u16 bg_free_blocks_count; /* Free blocks count */ - __u16 bg_free_inodes_count; /* Free inodes count */ - __u16 bg_used_dirs_count; /* Directories count */ -- __u16 bg_pad; -- __u32 bg_reserved[3]; -+ __u16 bg_flags; /* EXT4_BG_flags (INODE_UNINIT, etc) */ -+ __u32 bg_reserved[2]; /* Likely block/inode bitmap checksum */ -+ __u16 bg_itable_unused; /* Unused inodes count */ -+ __u16 bg_checksum; /* crc16(sb_uuid+group+desc) */ -+ __u32 bg_block_bitmap_hi; /* Blocks bitmap block MSB */ -+ __u32 bg_inode_bitmap_hi; /* Inodes bitmap block MSB */ -+ __u32 bg_inode_table_hi; /* Inodes table block MSB */ -+ __u16 bg_free_blocks_count_hi;/* Free blocks count MSB */ -+ __u16 bg_free_inodes_count_hi;/* Free inodes count MSB */ -+ __u16 bg_used_dirs_count_hi; /* Directories count MSB */ -+ __u16 bg_itable_unused_hi; /* Unused inodes count MSB */ -+ __u32 bg_reserved2[3]; - }; - - struct ext2_inode -@@ -129,22 +200,22 @@ struct ext2_inode - __u32 i_block[EXT2_N_BLOCKS]; /* 40: Pointers to blocks */ - __u32 i_version; /* File version (for NFS) */ - __u32 i_file_acl; /* File ACL */ -- __u32 i_dir_acl; /* Directory ACL */ -- __u32 i_faddr; /* Fragment address */ -+ __u32 i_size_high; -+ __u32 i_obso_faddr; /* Obsoleted fragment address */ - union - { - struct - { -- __u8 l_i_frag; /* Fragment number */ -- __u8 l_i_fsize; /* Fragment size */ -- __u16 i_pad1; -- __u32 l_i_reserved2[2]; -+ __u16 l_i_blocks_high; /* were l_i_reserved1 */ -+ __u16 l_i_file_acl_high; -+ __u16 l_i_uid_high; /* these 2 fields */ -+ __u16 l_i_gid_high; /* were reserved2[0] */ -+ __u32 l_i_reserved2; - } - linux2; - struct - { -- __u8 h_i_frag; /* Fragment number */ -- __u8 h_i_fsize; /* Fragment size */ -+ __u16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */ - __u16 h_i_mode_high; - __u16 h_i_uid_high; - __u16 h_i_gid_high; -@@ -153,16 +224,36 @@ struct ext2_inode - hurd2; - struct - { -- __u8 m_i_frag; /* Fragment number */ -- __u8 m_i_fsize; /* Fragment size */ -- __u16 m_pad1; -+ __u16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */ -+ __u16 m_i_file_acl_high; - __u32 m_i_reserved2[2]; - } - masix2; - } - osd2; /* OS dependent 2 */ -+ __u16 i_extra_isize; -+ __u16 i_pad1; -+ __u32 i_ctime_extra; /* extra Change time (nsec << 2 | epoch) */ -+ __u32 i_mtime_extra; /* extra Modification time(nsec << 2 | epoch) */ -+ __u32 i_atime_extra; /* extra Access time (nsec << 2 | epoch) */ -+ __u32 i_crtime; /* File Creation time */ -+ __u32 i_crtime_extra; /* extra FileCreationtime (nsec << 2 | epoch) */ -+ __u32 i_version_hi; /* high 32 bits for 64-bit version */ - }; - -+#define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 /* extents support */ -+#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 /* grub not supported*/ -+#define EXT4_FEATURE_INCOMPAT_MMP 0x0100 -+#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200 -+ -+#define EXT4_HAS_INCOMPAT_FEATURE(sb,mask) \ -+ ( sb->s_feature_incompat & mask ) -+ -+#define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */ -+#define EXT4_HUGE_FILE_FL 0x00040000 /* Set to each huge file */ -+ -+#define EXT4_MIN_DESC_SIZE 32 -+ - /* linux/limits.h */ - #define NAME_MAX 255 /* # chars in a file name */ - -@@ -180,6 +271,57 @@ struct ext2_dir_entry - char name[EXT2_NAME_LEN]; /* File name */ - }; - -+/* linux/ext4_fs_extents.h */ -+/* This is the extent on-disk structure. -+ * It's used at the bottom of the tree. -+ */ -+struct ext4_extent -+ { -+ __u32 ee_block; /* first logical block extent covers */ -+ __u16 ee_len; /* number of blocks covered by extent */ -+ __u16 ee_start_hi; /* high 16 bits of physical block */ -+ __u32 ee_start_lo; /* low 32 bits of physical block */ -+ }; -+ -+/* -+ * This is index on-disk structure. -+ * It's used at all the levels except the bottom. -+ */ -+struct ext4_extent_idx -+ { -+ __u32 ei_block; /* index covers logical blocks from 'block' */ -+ __u32 ei_leaf_lo; /* pointer to the physical block of the next * -+ * level. leaf or next index could be there */ -+ __u16 ei_leaf_hi; /* high 16 bits of physical block */ -+ __u16 ei_unused; -+ }; -+ -+/* -+ * Each block (leaves and indexes), even inode-stored has header. -+ */ -+struct ext4_extent_header -+ { -+ __u16 eh_magic; /* probably will support different formats */ -+ __u16 eh_entries; /* number of valid entries */ -+ __u16 eh_max; /* capacity of store in entries */ -+ __u16 eh_depth; /* has tree real underlying blocks? */ -+ __u32 eh_generation; /* generation of the tree */ -+ }; -+ -+#define EXT4_EXT_MAGIC (0xf30a) -+#define EXT_FIRST_EXTENT(__hdr__) \ -+ ((struct ext4_extent *) (((char *) (__hdr__)) + \ -+ sizeof(struct ext4_extent_header))) -+#define EXT_FIRST_INDEX(__hdr__) \ -+ ((struct ext4_extent_idx *) (((char *) (__hdr__)) + \ -+ sizeof(struct ext4_extent_header))) -+#define EXT_LAST_EXTENT(__hdr__) \ -+ (EXT_FIRST_EXTENT((__hdr__)) + (__u16)((__hdr__)->eh_entries) - 1) -+#define EXT_LAST_INDEX(__hdr__) \ -+ (EXT_FIRST_INDEX((__hdr__)) + (__u16)((__hdr__)->eh_entries) - 1) -+ -+ -+ - /* linux/ext2fs.h */ - /* - * EXT2_DIR_PAD defines the directory entries boundaries -@@ -206,25 +348,37 @@ struct ext2_dir_entry - ((struct ext2_super_block *)(FSYS_BUF)) - #define GROUP_DESC \ - ((struct ext2_group_desc *) \ -- ((int)SUPERBLOCK + sizeof(struct ext2_super_block))) -+ ((unsigned long)SUPERBLOCK + sizeof(struct ext2_super_block))) - #define INODE \ -- ((struct ext2_inode *)((int)GROUP_DESC + EXT2_BLOCK_SIZE(SUPERBLOCK))) -+ ((struct ext2_inode *)((unsigned long)GROUP_DESC + EXT2_BLOCK_SIZE(SUPERBLOCK))) - #define DATABLOCK1 \ -- ((int)((int)INODE + sizeof(struct ext2_inode))) -+ ((unsigned long)INODE + sizeof(struct ext2_inode)) - #define DATABLOCK2 \ -- ((int)((int)DATABLOCK1 + EXT2_BLOCK_SIZE(SUPERBLOCK))) -+ ((unsigned long)DATABLOCK1 + EXT2_BLOCK_SIZE(SUPERBLOCK)) - - /* linux/ext2_fs.h */ - #define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (__u32)) - #define EXT2_ADDR_PER_BLOCK_BITS(s) (log2(EXT2_ADDR_PER_BLOCK(s))) - -+#define EXT2_INODE_SIZE(s) (SUPERBLOCK->s_inode_size) -+#define EXT2_INODES_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s)) -+ - /* linux/ext2_fs.h */ - #define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10) - /* kind of from ext2/super.c */ - #define EXT2_BLOCK_SIZE(s) (1 << EXT2_BLOCK_SIZE_BITS(s)) - /* linux/ext2fs.h */ -+/* sizeof(struct ext2_group_desc) is changed in ext4 -+ * in kernel code, ext2/3 uses sizeof(struct ext2_group_desc) to calculate -+ * number of desc per block, while ext4 uses superblock->s_desc_size in stead -+ * superblock->s_desc_size is not available in ext2/3 -+ * */ -+#define EXT2_DESC_SIZE(s) \ -+ (EXT4_HAS_INCOMPAT_FEATURE(s,EXT4_FEATURE_INCOMPAT_64BIT)? \ -+ s->s_desc_size : EXT4_MIN_DESC_SIZE) - #define EXT2_DESC_PER_BLOCK(s) \ -- (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc)) -+ (EXT2_BLOCK_SIZE(s) / EXT2_DESC_SIZE(s)) -+ - /* linux/stat.h */ - #define S_IFMT 00170000 - #define S_IFLNK 0120000 -@@ -239,8 +393,8 @@ struct ext2_dir_entry - * ffz = Find First Zero in word. Undefined if no zero exists, - * so code should check against ~0UL first.. - */ --static __inline__ unsigned long --ffz (unsigned long word) -+static __inline__ unsigned int -+ffz (unsigned int word) - { - __asm__ ("bsfl %1,%0" - : "=r" (word) -@@ -260,7 +414,7 @@ ext2fs_mount (void) - && (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_EXT2FS)) - && (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_OTHER))) - || part_length < (SBLOCK + (sizeof (struct ext2_super_block) / DEV_BSIZE)) -- || !devread (SBLOCK, 0, sizeof (struct ext2_super_block), -+ || !devread (SBLOCK, SBOFF, sizeof (struct ext2_super_block), - (char *) SUPERBLOCK) - || SUPERBLOCK->s_magic != EXT2_SUPER_MAGIC) - retval = 0; -@@ -276,7 +430,7 @@ ext2_rdfsb (int fsblock, int buffer) - printf ("fsblock %d buffer %d\n", fsblock, buffer); - #endif /* E2DEBUG */ - return devread (fsblock * (EXT2_BLOCK_SIZE (SUPERBLOCK) / DEV_BSIZE), 0, -- EXT2_BLOCK_SIZE (SUPERBLOCK), (char *) buffer); -+ EXT2_BLOCK_SIZE (SUPERBLOCK), (char *) (unsigned long) buffer); - } - - /* from -@@ -386,6 +540,122 @@ ext2fs_block_map (int logical_block) - [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)]; - } - -+/* extent binary search index -+ * find closest index in the current level extent tree -+ * kind of from ext4_ext_binsearch_idx in ext4/extents.c -+ */ -+static struct ext4_extent_idx* -+ext4_ext_binsearch_idx(struct ext4_extent_header* eh, int logical_block) -+{ -+ struct ext4_extent_idx *r, *l, *m; -+ l = EXT_FIRST_INDEX(eh) + 1; -+ r = EXT_LAST_INDEX(eh); -+ while (l <= r) -+ { -+ m = l + (r - l) / 2; -+ if (logical_block < m->ei_block) -+ r = m - 1; -+ else -+ l = m + 1; -+ } -+ return (struct ext4_extent_idx*)(l - 1); -+} -+ -+/* extent binary search -+ * find closest extent in the leaf level -+ * kind of from ext4_ext_binsearch in ext4/extents.c -+ */ -+static struct ext4_extent* -+ext4_ext_binsearch(struct ext4_extent_header* eh, int logical_block) -+{ -+ struct ext4_extent *r, *l, *m; -+ l = EXT_FIRST_EXTENT(eh) + 1; -+ r = EXT_LAST_EXTENT(eh); -+ while (l <= r) -+ { -+ m = l + (r - l) / 2; -+ if (logical_block < m->ee_block) -+ r = m - 1; -+ else -+ l = m + 1; -+ } -+ return (struct ext4_extent*)(l - 1); -+} -+ -+/* Maps extents enabled logical block into physical block via an inode. -+ * EXT4_HUGE_FILE_FL should be checked before calling this. -+ */ -+static int -+ext4fs_block_map (int logical_block) -+{ -+ struct ext4_extent_header *eh; -+ struct ext4_extent *ex, *extent; -+ struct ext4_extent_idx *ei, *index; -+ int depth; -+ int i; -+ -+#ifdef E2DEBUG -+ unsigned char *i; -+ for (i = (unsigned char *) INODE; -+ i < ((unsigned char *) INODE + sizeof (struct ext2_inode)); -+ i++) -+ { -+ printf ("%c", "0123456789abcdef"[*i >> 4]); -+ printf ("%c", "0123456789abcdef"[*i % 16]); -+ if (!((i + 1 - (unsigned char *) INODE) % 16)) -+ { -+ printf ("\n"); -+ } -+ else -+ { -+ printf (" "); -+ } -+ } -+ printf ("logical block %d\n", logical_block); -+#endif /* E2DEBUG */ -+ eh = (struct ext4_extent_header*)INODE->i_block; -+ if (eh->eh_magic != EXT4_EXT_MAGIC) -+ { -+ errnum = ERR_FSYS_CORRUPT; -+ return -1; -+ } -+ while((depth = eh->eh_depth) != 0) -+ { /* extent index */ -+ if (eh->eh_magic != EXT4_EXT_MAGIC) -+ { -+ errnum = ERR_FSYS_CORRUPT; -+ return -1; -+ } -+ ei = ext4_ext_binsearch_idx(eh, logical_block); -+ if (ei->ei_leaf_hi) -+ {/* 64bit physical block number not supported */ -+ errnum = ERR_FILELENGTH; -+ return -1; -+ } -+ if (!ext2_rdfsb(ei->ei_leaf_lo, DATABLOCK1)) -+ { -+ errnum = ERR_FSYS_CORRUPT; -+ return -1; -+ } -+ eh = (struct ext4_extent_header*)DATABLOCK1; -+ } -+ -+ /* depth==0, we come to the leaf */ -+ ex = ext4_ext_binsearch(eh, logical_block); -+ if (ex->ee_start_hi) -+ {/* 64bit physical block number not supported */ -+ errnum = ERR_FILELENGTH; -+ return -1; -+ } -+ if ((ex->ee_block + ex->ee_len) < logical_block) -+ { -+ errnum = ERR_FSYS_CORRUPT; -+ return -1; -+ } -+ return ex->ee_start_lo + logical_block - ex->ee_block; -+ -+} -+ - /* preconditions: all preconds of ext2fs_block_map */ - int - ext2fs_read (char *buf, int len) -@@ -420,6 +690,11 @@ ext2fs_read (char *buf, int len) - /* find the (logical) block component of our location */ - logical_block = filepos >> EXT2_BLOCK_SIZE_BITS (SUPERBLOCK); - offset = filepos & (EXT2_BLOCK_SIZE (SUPERBLOCK) - 1); -+ /* map extents enabled logical block number to physical fs on-disk block number */ -+ if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK,EXT4_FEATURE_INCOMPAT_EXTENTS) -+ && INODE->i_flags & EXT4_EXTENTS_FL) -+ map = ext4fs_block_map (logical_block); -+ else - map = ext2fs_block_map (logical_block); - #ifdef E2DEBUG - printf ("map=%d\n", map); -@@ -504,7 +779,7 @@ ext2fs_dir (char *dirname) - int desc; /* index within that group */ - int ino_blk; /* fs pointer of the inode's information */ - int str_chk = 0; /* used to hold the results of a string compare */ -- struct ext2_group_desc *gdp; -+ struct ext4_group_desc *ext4_gdp; - struct ext2_inode *raw_inode; /* inode info corresponding to current_ino */ - - char linkbuf[PATH_MAX]; /* buffer for following symbolic links */ -@@ -546,18 +821,25 @@ ext2fs_dir (char *dirname) - #endif /* E2DEBUG */ - if (!ext2_rdfsb ( - (WHICH_SUPER + group_desc + SUPERBLOCK->s_first_data_block), -- (int) GROUP_DESC)) -+ (unsigned long) GROUP_DESC)) - { - return 0; - } -- gdp = GROUP_DESC; -- ino_blk = gdp[desc].bg_inode_table + -+ ext4_gdp = (struct ext4_group_desc *)( (__u8*)GROUP_DESC + -+ desc * EXT2_DESC_SIZE(SUPERBLOCK)); -+ if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK, EXT4_FEATURE_INCOMPAT_64BIT) -+ && (! ext4_gdp->bg_inode_table_hi)) -+ {/* 64bit itable not supported */ -+ errnum = ERR_FILELENGTH; -+ return -1; -+ } -+ ino_blk = ext4_gdp->bg_inode_table + - (((current_ino - 1) % (SUPERBLOCK->s_inodes_per_group)) -- >> log2 (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode))); -+ >> log2 (EXT2_INODES_PER_BLOCK (SUPERBLOCK))); - #ifdef E2DEBUG - printf ("inode table fsblock=%d\n", ino_blk); - #endif /* E2DEBUG */ -- if (!ext2_rdfsb (ino_blk, (int) INODE)) -+ if (!ext2_rdfsb (ino_blk, (unsigned long) INODE)) - { - return 0; - } -@@ -565,13 +847,12 @@ ext2fs_dir (char *dirname) - /* reset indirect blocks! */ - mapblock2 = mapblock1 = -1; - -- raw_inode = INODE + -- ((current_ino - 1) -- & (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode) - 1)); -+ raw_inode = (struct ext2_inode *)((char *)INODE + -+ ((current_ino - 1) & (EXT2_INODES_PER_BLOCK (SUPERBLOCK) - 1)) * -+ EXT2_INODE_SIZE (SUPERBLOCK)); - #ifdef E2DEBUG - printf ("ipb=%d, sizeof(inode)=%d\n", -- (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)), -- sizeof (struct ext2_inode)); -+ EXT2_INODES_PER_BLOCK (SUPERBLOCK), EXT2_INODE_SIZE (SUPERBLOCK)); - printf ("inode=%x, raw_inode=%x\n", INODE, raw_inode); - printf ("offset into inode table block=%d\n", (int) raw_inode - (int) INODE); - for (i = (unsigned char *) INODE; i <= (unsigned char *) raw_inode; -@@ -629,7 +910,10 @@ ext2fs_dir (char *dirname) - } - linkbuf[filemax + len] = '\0'; - -- /* Read the symlink data. */ -+ /* Read the symlink data. -+ * Slow symlink is extents enabled -+ * But since grub_read invokes ext2fs_read, nothing to change here -+ */ - if (! ext2_is_fast_symlink ()) - { - /* Read the necessary blocks, and reset the file pointer. */ -@@ -640,7 +924,9 @@ ext2fs_dir (char *dirname) - } - else - { -- /* Copy the data directly from the inode. */ -+ /* Copy the data directly from the inode. -+ * Fast symlink is not extents enabled -+ */ - len = filemax; - memmove (linkbuf, (char *) INODE->i_block, len); - } -@@ -674,6 +960,13 @@ ext2fs_dir (char *dirname) - errnum = ERR_BAD_FILETYPE; - return 0; - } -+ /* if file is too large, just stop and report an error*/ -+ if ( (INODE->i_flags & EXT4_HUGE_FILE_FL) && !(INODE->i_size_high)) -+ { -+ /* file too large, stop reading */ -+ errnum = ERR_FILELENGTH; -+ return 0; -+ } - - filemax = (INODE->i_size); - return 1; -@@ -728,17 +1021,28 @@ ext2fs_dir (char *dirname) - } - - /* else, find the (logical) block component of our location */ -+ /* ext4 logical block number the same as ext2/3 */ - blk = loc >> EXT2_BLOCK_SIZE_BITS (SUPERBLOCK); - - /* we know which logical block of the directory entry we are looking - for, now we have to translate that to the physical (fs) block on - the disk */ -+ /* map extents enabled logical block number to physical fs on-disk block number */ -+ if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK,EXT4_FEATURE_INCOMPAT_EXTENTS) -+ && INODE->i_flags & EXT4_EXTENTS_FL) -+ map = ext4fs_block_map (blk); -+ else - map = ext2fs_block_map (blk); - #ifdef E2DEBUG - printf ("fs block=%d\n", map); - #endif /* E2DEBUG */ - mapblock2 = -1; -- if ((map < 0) || !ext2_rdfsb (map, DATABLOCK2)) -+ if (map < 0) -+ { -+ *rest = ch; -+ return 0; -+ } -+ if (!ext2_rdfsb (map, DATABLOCK2)) - { - errnum = ERR_FSYS_CORRUPT; - *rest = ch; -diff --git a/stage2/fsys_fat.c b/stage2/fsys_fat.c -index f40e658..f1157f4 100644 ---- a/stage2/fsys_fat.c -+++ b/stage2/fsys_fat.c -@@ -49,13 +49,13 @@ struct fat_superblock - /* pointer(s) into filesystem info buffer for DOS stuff */ - #define FAT_SUPER ( (struct fat_superblock *) \ - ( FSYS_BUF + 32256) )/* 512 bytes long */ --#define FAT_BUF ( FSYS_BUF + 30208 ) /* 4 sector FAT buffer */ --#define NAME_BUF ( FSYS_BUF + 29184 ) /* Filename buffer (833 bytes) */ -+#define FAT_BUF ( FSYS_BUF + 28160 ) /* 4 sector FAT buffer */ -+#define NAME_BUF ( FSYS_BUF + 27136 ) /* Filename buffer (833 bytes) */ - --#define FAT_CACHE_SIZE 2048 -+#define FAT_CACHE_SIZE 4096 - --static __inline__ unsigned long --log2 (unsigned long word) -+static __inline__ unsigned int -+grub_log2 (unsigned int word) - { - __asm__ ("bsfl %1,%0" - : "=r" (word) -@@ -68,9 +68,12 @@ fat_mount (void) - { - struct fat_bpb bpb; - __u32 magic, first_fat; -+ int sector_size; - - /* Check partition type for harddisk */ - if (((current_drive & 0x80) || (current_slice != 0)) -+ && (current_slice != PC_SLICE_TYPE_EXT2FS) -+ && (current_slice != PC_SLICE_TYPE_LINUX_RAID) - && ! IS_PC_SLICE_TYPE_FAT (current_slice) - && (! IS_PC_SLICE_TYPE_BSD_WITH_FS (current_slice, FS_MSDOS))) - return 0; -@@ -79,14 +82,16 @@ fat_mount (void) - if (! devread (0, 0, sizeof (bpb), (char *) &bpb)) - return 0; - -+ sector_size = get_sector_size(current_drive); -+ - /* Check if the number of sectors per cluster is zero here, to avoid - zero division. */ - if (bpb.sects_per_clust == 0) - return 0; - -- FAT_SUPER->sectsize_bits = log2 (FAT_CVT_U16 (bpb.bytes_per_sect)); -+ FAT_SUPER->sectsize_bits = grub_log2 (FAT_CVT_U16 (bpb.bytes_per_sect)); - FAT_SUPER->clustsize_bits -- = FAT_SUPER->sectsize_bits + log2 (bpb.sects_per_clust); -+ = FAT_SUPER->sectsize_bits + grub_log2 (bpb.sects_per_clust); - - /* Fill in info about super block */ - FAT_SUPER->num_sectors = FAT_CVT_U16 (bpb.short_sectors) -@@ -106,7 +111,7 @@ fat_mount (void) - FAT_SUPER->data_offset = - FAT_SUPER->root_offset - + ((FAT_SUPER->root_max - 1) >> FAT_SUPER->sectsize_bits) + 1; -- FAT_SUPER->num_clust = -+ FAT_SUPER->num_clust = - 2 + ((FAT_SUPER->num_sectors - FAT_SUPER->data_offset) - / bpb.sects_per_clust); - FAT_SUPER->sects_per_clust = bpb.sects_per_clust; -@@ -153,11 +158,11 @@ fat_mount (void) - /* Now do some sanity checks */ - - if (FAT_CVT_U16(bpb.bytes_per_sect) != (1 << FAT_SUPER->sectsize_bits) -- || FAT_CVT_U16(bpb.bytes_per_sect) != SECTOR_SIZE -+ || FAT_CVT_U16(bpb.bytes_per_sect) != sector_size - || bpb.sects_per_clust != (1 << (FAT_SUPER->clustsize_bits - - FAT_SUPER->sectsize_bits)) - || FAT_SUPER->num_clust <= 2 -- || (FAT_SUPER->fat_size * FAT_SUPER->num_clust / (2 * SECTOR_SIZE) -+ || (FAT_SUPER->fat_size * FAT_SUPER->num_clust / (2 * sector_size) - > FAT_SUPER->fat_length)) - return 0; - -@@ -201,6 +206,7 @@ fat_read (char *buf, int len) - int offset; - int ret = 0; - int size; -+ int sector_size = get_sector_size(current_drive); - - if (FAT_SUPER->file_cluster < 0) - { -@@ -236,10 +242,10 @@ fat_read (char *buf, int len) - if (cached_pos < 0 || - (cached_pos + FAT_SUPER->fat_size) > 2*FAT_CACHE_SIZE) - { -- FAT_SUPER->cached_fat = (fat_entry & ~(2*SECTOR_SIZE - 1)); -+ FAT_SUPER->cached_fat = (fat_entry & ~(2*sector_size - 1)); - cached_pos = (fat_entry - FAT_SUPER->cached_fat); - sector = FAT_SUPER->fat_offset -- + FAT_SUPER->cached_fat / (2*SECTOR_SIZE); -+ + FAT_SUPER->cached_fat / (2*sector_size); - if (!devread (sector, 0, FAT_CACHE_SIZE, (char*) FAT_BUF)) - return 0; - } -@@ -257,6 +263,8 @@ fat_read (char *buf, int len) - return ret; - if (next_cluster < 2 || next_cluster >= FAT_SUPER->num_clust) - { -+ grub_printf("next_cluster: %d FAT_SUPER->num_clust: %d\n", -+ next_cluster, FAT_SUPER->num_clust); - errnum = ERR_FSYS_CORRUPT; - return 0; - } -@@ -340,7 +348,8 @@ fat_dir (char *dirname) - /* Directories don't have a file size */ - filemax = MAXINT; - -- for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/'; rest++); -+ for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/'; rest++) -+ *rest = tolower(*rest); - - *rest = 0; - -@@ -432,7 +441,7 @@ fat_dir (char *dirname) - goto print_filename; - # endif /* STAGE1_5 */ - -- if (substring (dirname, filename) == 0) -+ if (subcasestring (dirname, filename) == 0) - break; - } - } -@@ -459,7 +468,7 @@ fat_dir (char *dirname) - if (do_possibilities) - { - print_filename: -- if (substring (dirname, filename) <= 0) -+ if (subcasestring (dirname, filename) <= 0) - { - if (print_possibilities > 0) - print_possibilities = -print_possibilities; -@@ -469,7 +478,7 @@ fat_dir (char *dirname) - } - # endif /* STAGE1_5 */ - -- if (substring (dirname, filename) == 0) -+ if (subcasestring (dirname, filename) == 0) - break; - } - -diff --git a/stage2/fsys_iso9660.c b/stage2/fsys_iso9660.c -index 90e4aa8..858238b 100644 ---- a/stage2/fsys_iso9660.c -+++ b/stage2/fsys_iso9660.c -@@ -56,8 +56,8 @@ struct iso_inode_info { - #define NAME_BUF ((unsigned char *)(FSYS_BUF + 8192)) - - --static inline unsigned long --log2 (unsigned long word) -+static inline unsigned int -+grub_log2 (unsigned int word) - { - asm volatile ("bsfl %1,%0" - : "=r" (word) -@@ -68,7 +68,7 @@ log2 (unsigned long word) - static int - iso9660_devread (int sector, int byte_offset, int byte_len, char *buf) - { -- unsigned short sector_size_lg2 = log2(buf_geom.sector_size); -+ unsigned short sector_size_lg2 = grub_log2(buf_geom.sector_size); - - /* - * We have to use own devread() function since BIOS return wrong geometry -@@ -81,8 +81,6 @@ iso9660_devread (int sector, int byte_offset, int byte_len, char *buf) - if (byte_len <= 0) - return 1; - -- sector += (byte_offset >> sector_size_lg2); -- byte_offset &= (buf_geom.sector_size - 1); - asm volatile ("shl%L0 %1,%0" - : "=r"(sector) - : "Ic"((int8_t)(ISO_SECTOR_BITS - sector_size_lg2)), -diff --git a/stage2/fsys_jfs.c b/stage2/fsys_jfs.c -index 307f836..d63b1de 100644 ---- a/stage2/fsys_jfs.c -+++ b/stage2/fsys_jfs.c -@@ -207,19 +207,20 @@ int - jfs_mount (void) - { - struct jfs_superblock super; -+ int sector_bits = get_sector_bits(current_drive); - -- if (part_length < MINJFS >> SECTOR_BITS -- || !devread (SUPER1_OFF >> SECTOR_BITS, 0, -+ if (part_length < MINJFS >> sector_bits -+ || !devread (SUPER1_OFF >> sector_bits, 0, - sizeof(struct jfs_superblock), (char *)&super) - || (super.s_magic != JFS_MAGIC) -- || !devread ((AITBL_OFF >> SECTOR_BITS) + FILESYSTEM_I, -+ || !devread ((AITBL_OFF >> sector_bits) + FILESYSTEM_I, - 0, DISIZE, (char*)fileset)) { - return 0; - } - - jfs.bsize = super.s_bsize; - jfs.l2bsize = super.s_l2bsize; -- jfs.bdlog = jfs.l2bsize - SECTOR_BITS; -+ jfs.bdlog = jfs.l2bsize - sector_bits; - - return 1; - } -@@ -387,9 +388,10 @@ int - jfs_embed (int *start_sector, int needed_sectors) - { - struct jfs_superblock super; -+ int sector_bits = get_sector_bits(current_drive); - - if (needed_sectors > 63 -- || !devread (SUPER1_OFF >> SECTOR_BITS, 0, -+ || !devread (SUPER1_OFF >> sector_bits, 0, - sizeof (struct jfs_superblock), - (char *)&super) - || (super.s_magic != JFS_MAGIC)) { -diff --git a/stage2/fsys_minix.c b/stage2/fsys_minix.c -index 5c76796..175ecf2 100644 ---- a/stage2/fsys_minix.c -+++ b/stage2/fsys_minix.c -@@ -138,11 +138,11 @@ struct minix_dir_entry { - #define SUPERBLOCK \ - ((struct minix_super_block *)(FSYS_BUF)) - #define INODE \ -- ((struct minix_inode *)((int) SUPERBLOCK + BLOCK_SIZE)) -+ ((struct minix_inode *)((unsigned long) SUPERBLOCK + BLOCK_SIZE)) - #define DATABLOCK1 \ -- ((int)((int)INODE + sizeof(struct minix_inode))) -+ ((unsigned long)INODE + sizeof(struct minix_inode)) - #define DATABLOCK2 \ -- ((int)((int)DATABLOCK1 + BLOCK_SIZE)) -+ ((unsigned long)DATABLOCK1 + BLOCK_SIZE) - - /* linux/stat.h */ - #define S_IFMT 00170000 -@@ -193,7 +193,7 @@ static int - minix_rdfsb (int fsblock, int buffer) - { - return devread (fsblock * (BLOCK_SIZE / DEV_BSIZE), 0, -- BLOCK_SIZE, (char *) buffer); -+ BLOCK_SIZE, (char *) (unsigned long) buffer); - } - - /* Maps LOGICAL_BLOCK (the file offset divided by the blocksize) into -@@ -336,7 +336,7 @@ minix_dir (char *dirname) - - ino_blk = (2 + SUPERBLOCK->s_imap_blocks + SUPERBLOCK->s_zmap_blocks - + (current_ino - 1) / MINIX_INODES_PER_BLOCK); -- if (! minix_rdfsb (ino_blk, (int) INODE)) -+ if (! minix_rdfsb (ino_blk, (unsigned long) INODE)) - return 0; - - /* reset indirect blocks! */ -diff --git a/stage2/fsys_reiserfs.c b/stage2/fsys_reiserfs.c -index 93ec5f8..f46fcb2 100644 ---- a/stage2/fsys_reiserfs.c -+++ b/stage2/fsys_reiserfs.c -@@ -292,7 +292,6 @@ struct reiserfs_de_head - - /* The size of the node cache */ - #define FSYSREISER_CACHE_SIZE 24*1024 --#define FSYSREISER_MIN_BLOCKSIZE SECTOR_SIZE - #define FSYSREISER_MAX_BLOCKSIZE FSYSREISER_CACHE_SIZE / 3 - - /* Info about currently opened file */ -@@ -341,19 +340,19 @@ struct fsys_reiser_info - /* The cached s+tree blocks in FSYS_BUF, see below - * for a more detailed description. - */ --#define ROOT ((char *) ((int) FSYS_BUF)) -+#define ROOT ((char *) ((unsigned long) FSYS_BUF)) - #define CACHE(i) (ROOT + ((i) << INFO->fullblocksize_shift)) - #define LEAF CACHE (DISK_LEAF_NODE_LEVEL) - - #define BLOCKHEAD(cache) ((struct block_head *) cache) --#define ITEMHEAD ((struct item_head *) ((int) LEAF + BLKH_SIZE)) --#define KEY(cache) ((struct key *) ((int) cache + BLKH_SIZE)) -+#define ITEMHEAD ((struct item_head *) ((unsigned long) LEAF + BLKH_SIZE)) -+#define KEY(cache) ((struct key *) ((unsigned long) cache + BLKH_SIZE)) - #define DC(cache) ((struct disk_child *) \ -- ((int) cache + BLKH_SIZE + KEY_SIZE * nr_item)) -+ ((unsigned long) cache + BLKH_SIZE + KEY_SIZE * nr_item)) - /* The fsys_reiser_info block. - */ - #define INFO \ -- ((struct fsys_reiser_info *) ((int) FSYS_BUF + FSYSREISER_CACHE_SIZE)) -+ ((struct fsys_reiser_info *) ((unsigned long) FSYS_BUF + FSYSREISER_CACHE_SIZE)) - /* - * The journal cache. For each transaction it contains the number of - * blocks followed by the real block numbers of this transaction. -@@ -366,8 +365,8 @@ struct fsys_reiser_info - #define JOURNAL_END ((__u32 *) (FSYS_BUF + FSYS_BUFLEN)) - - --static __inline__ unsigned long --log2 (unsigned long word) -+static __inline__ unsigned int -+grub_log2 (unsigned int word) - { - __asm__ ("bsfl %1,%0" - : "=r" (word) -@@ -569,9 +568,11 @@ int - reiserfs_mount (void) - { - struct reiserfs_super_block super; -- int superblock = REISERFS_DISK_OFFSET_IN_BYTES >> SECTOR_BITS; -+ int sector_bits = get_sector_bits(current_drive); -+ int sector_size = get_sector_size(current_drive); -+ int superblock = REISERFS_DISK_OFFSET_IN_BYTES >> sector_bits; - -- if (part_length < superblock + (sizeof (super) >> SECTOR_BITS) -+ if (part_length < superblock + (sizeof (super) >> sector_bits) - || ! devread (superblock, 0, sizeof (struct reiserfs_super_block), - (char *) &super) - || (substring (REISER3FS_SUPER_MAGIC_STRING, super.s_magic) > 0 -@@ -582,8 +583,8 @@ reiserfs_mount (void) - <= REISERFS_DISK_OFFSET_IN_BYTES)) - { - /* Try old super block position */ -- superblock = REISERFS_OLD_DISK_OFFSET_IN_BYTES >> SECTOR_BITS; -- if (part_length < superblock + (sizeof (super) >> SECTOR_BITS) -+ superblock = REISERFS_OLD_DISK_OFFSET_IN_BYTES >> sector_bits; -+ if (part_length < superblock + (sizeof (super) >> sector_bits) - || ! devread (superblock, 0, sizeof (struct reiserfs_super_block), - (char *) &super)) - return 0; -@@ -594,7 +595,7 @@ reiserfs_mount (void) - { - /* pre journaling super block ? */ - if (substring (REISERFS_SUPER_MAGIC_STRING, -- (char*) ((int) &super + 20)) > 0) -+ (char*) ((unsigned long) &super + 20)) > 0) - return 0; - - super.s_blocksize = REISERFS_OLD_BLOCKSIZE; -@@ -609,8 +610,8 @@ reiserfs_mount (void) - - INFO->version = super.s_version; - INFO->blocksize = super.s_blocksize; -- INFO->fullblocksize_shift = log2 (super.s_blocksize); -- INFO->blocksize_shift = INFO->fullblocksize_shift - SECTOR_BITS; -+ INFO->fullblocksize_shift = grub_log2 (super.s_blocksize); -+ INFO->blocksize_shift = INFO->fullblocksize_shift - sector_bits; - INFO->cached_slots = - (FSYSREISER_CACHE_SIZE >> INFO->fullblocksize_shift) - 1; - -@@ -622,9 +623,9 @@ reiserfs_mount (void) - /* Clear node cache. */ - memset (INFO->blocks, 0, sizeof (INFO->blocks)); - -- if (super.s_blocksize < FSYSREISER_MIN_BLOCKSIZE -+ if (super.s_blocksize < get_sector_size(current_drive) - || super.s_blocksize > FSYSREISER_MAX_BLOCKSIZE -- || (SECTOR_SIZE << INFO->blocksize_shift) != super.s_blocksize) -+ || (sector_size << INFO->blocksize_shift) != super.s_blocksize) - return 0; - - /* Initialize journal code. If something fails we end with zero -@@ -1215,9 +1216,10 @@ int - reiserfs_embed (int *start_sector, int needed_sectors) - { - struct reiserfs_super_block super; -+ int sector_bits = get_sector_bits(current_drive); - int num_sectors; -- -- if (! devread (REISERFS_DISK_OFFSET_IN_BYTES >> SECTOR_BITS, 0, -+ -+ if (! devread (REISERFS_DISK_OFFSET_IN_BYTES >> sector_bits, 0, - sizeof (struct reiserfs_super_block), (char *) &super)) - return 0; - -@@ -1229,9 +1231,9 @@ reiserfs_embed (int *start_sector, int needed_sectors) - * the journal log */ - super.s_journal_block * super.s_blocksize - > REISERFS_DISK_OFFSET_IN_BYTES)) -- num_sectors = (REISERFS_DISK_OFFSET_IN_BYTES >> SECTOR_BITS) - 1; -+ num_sectors = (REISERFS_DISK_OFFSET_IN_BYTES >> sector_bits) - 1; - else -- num_sectors = (REISERFS_OLD_DISK_OFFSET_IN_BYTES >> SECTOR_BITS) - 1; -+ num_sectors = (REISERFS_OLD_DISK_OFFSET_IN_BYTES >> sector_bits) - 1; - - return (needed_sectors <= num_sectors); - } -diff --git a/stage2/fsys_uefi.c b/stage2/fsys_uefi.c -new file mode 100644 -index 0000000..58b7050 ---- /dev/null -+++ b/stage2/fsys_uefi.c -@@ -0,0 +1,265 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2001 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 "shared.h" -+#include "filesys.h" -+ -+#ifdef PLATFORM_EFI -+#undef GRUB_UTIL -+ -+#include <grub/types.h> -+#include <grub/misc.h> -+#include <grub/efi/efi.h> -+#include <grub/efi/misc.h> -+#include <grub/efi/api.h> -+ -+static grub_efi_simple_file_system_t *file_system; -+static grub_efi_guid_t fsinfo_guid = GRUB_EFI_DEVICE_PATH_GUID; -+grub_efi_file_t *root = NULL; -+grub_efi_file_t *file = NULL; -+ -+typedef struct { -+ grub_efi_uint64_t size; -+ grub_efi_uint64_t filesize; -+ grub_efi_uint64_t physicalsize; -+ grub_efi_time_t createtime; -+ grub_efi_time_t accesstime; -+ grub_efi_time_t modifytime; -+ grub_efi_uint64_t attribute; -+ grub_efi_char16_t filename[]; -+} grub_efi_file_info_t; -+ -+int -+uefi_mount (void) -+{ -+ grub_efi_handle_t dev_handle = grub_efidisk_get_current_bdev_handle(); -+ grub_efi_status_t status; -+ -+ if (!dev_handle) -+ return 0; -+ -+ file_system = grub_efi_open_protocol (dev_handle, &simple_file_system_guid, -+ GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL); -+ -+ if (!file_system) -+ return 0; -+ -+ status = Call_Service_2 (file_system->open_volume, file_system, &root); -+ -+ if (status != GRUB_EFI_SUCCESS) -+ return 0; -+ -+ return 1; -+} -+ -+int -+uefi_dir (char *dirname) -+{ -+ grub_efi_status_t status; -+ grub_efi_char16_t *file_name_w = NULL; -+ grub_efi_char16_t *dir_name_w = NULL; -+ grub_efi_file_info_t *fileinfo = NULL; -+ grub_efi_uintn_t buffersize = 0; -+ grub_efi_file_t *directory = NULL; -+ int i, dirlen = 0, ret = 0; -+ -+ file_name_w = grub_malloc (2 * strlen(dirname) + 2); -+ if (!file_name_w) -+ goto done; -+ -+ for (i=0; i<strlen(dirname); i++) { -+ file_name_w[i] = dirname[i]; -+ if (file_name_w[i] == '/') { -+ file_name_w[i] = '\'; -+ dirlen = i; -+ } -+ } -+ -+ file_name_w[i] = '\0'; -+ -+ status = Call_Service_5 (root->open, root, &file, file_name_w, -+ GRUB_EFI_FILE_MODE_READ, 0); -+ -+ if (status != GRUB_EFI_SUCCESS) -+ goto done; -+ -+ if (dirname[i-1] == '/') { -+ if (print_possibilities) -+ grub_printf("\n"); -+ -+ while (1) { -+ int filenamelen; -+ -+ status = Call_Service_3 (file->read, file, &buffersize, fileinfo); -+ -+ if (status == GRUB_EFI_BUFFER_TOO_SMALL) { -+ fileinfo = grub_malloc(buffersize); -+ continue; -+ } else if (status) { -+ goto done; -+ } else if (buffersize == 0) { -+ ret = 1; -+ if (print_possibilities) -+ grub_printf("\n"); -+ goto done; -+ } -+ -+ filenamelen = fileinfo->size - sizeof(*fileinfo); -+ -+ if (print_possibilities) { -+ for (i=0; i<filenamelen/2; i++) -+ grub_printf("%c", (char)fileinfo->filename[i]); -+ } -+ grub_printf(" "); -+ } -+ } else { -+ char *data = NULL; -+ dir_name_w = grub_malloc (2 * dirlen + 2); -+ if (!dir_name_w) -+ goto done; -+ -+ for (i=0; i<dirlen; i++) -+ dir_name_w[i] = file_name_w[i]; -+ -+ dir_name_w[i] = '\0'; -+ -+ status = Call_Service_5 (root->open, root, &directory, dir_name_w, -+ GRUB_EFI_FILE_MODE_READ, 0); -+ -+ while (1) { -+ int filenamelen; -+ int invalid = 0; -+ -+ status = Call_Service_3 (directory->read, directory, &buffersize, fileinfo); -+ -+ if (status == GRUB_EFI_BUFFER_TOO_SMALL) { -+ fileinfo = grub_malloc(buffersize); -+ continue; -+ } else if (status) { -+ goto done; -+ } else if (buffersize == 0) { -+ goto done; -+ } -+ -+ filenamelen = fileinfo->size - sizeof(*fileinfo); -+ -+ if (filenamelen != ((strlen(dirname) - dirlen) * 2)) -+ continue; -+ -+ for (i=0; i<filenamelen/2; i++) { -+ if (fileinfo->filename[i] != file_name_w[i + dirlen + 1]) { -+ if (fileinfo->filename[i] > 0xff || -+ (grub_tolower(fileinfo->filename[i]) != -+ grub_tolower(file_name_w[i + dirlen + 1]))) -+ invalid = 1; -+ } -+ } -+ -+ if (!invalid) -+ break; -+ } -+ -+ if (fileinfo->filesize < 256 && fileinfo->filesize > 3) -+ { -+ data = grub_malloc(fileinfo->filesize); -+ filepos = 0; -+ -+ uefi_read(data, fileinfo->filesize); -+ -+ /* -+ * UEFI doesn't really support symlinks. Apple's UEFI driver exposes -+ * them as files containing the path of the target. This provides -+ * hacky support in the absence of a real driver. -+ */ -+ if (data[0] == '.' && data[1] == '.' && data[2] == '/') -+ { -+ int j; -+ char *tmpdir = grub_malloc(dirlen + fileinfo->filesize); -+ -+ for (j=0; j<dirlen+1; j++) -+ tmpdir[j] = dirname[j]; -+ for (j=0; j<fileinfo->filesize; j++) -+ tmpdir[j+dirlen+1] = data[j]; -+ tmpdir[j+dirlen+1] = '\0'; -+ -+ /* Open the new file */ -+ ret = uefi_dir(tmpdir); -+ grub_free (tmpdir); -+ grub_free (data); -+ goto done; -+ } -+ } -+ -+ if (data) -+ grub_free(data); -+ ret = 1; -+ filemax = fileinfo->filesize; -+ filepos = 0; -+ } -+ -+ done: -+ if (fileinfo) -+ grub_free (fileinfo); -+ if (dir_name_w) -+ grub_free (dir_name_w); -+ if (file_name_w) -+ grub_free (file_name_w); -+ -+ return ret; -+} -+ -+void -+uefi_close (void) -+{ -+ grub_efi_status_t status = 0; -+ -+ if (file) -+ status = Call_Service_1 (file->close, file); -+ -+ file = NULL; -+} -+ -+int -+uefi_read (char *addr, int len) -+{ -+ grub_efi_status_t status; -+ grub_efi_uintn_t length = len; -+ -+ errnum = 0; -+ -+ status = Call_Service_2 (file->set_position, file, filepos); -+ -+ if (status != GRUB_EFI_SUCCESS) -+ goto out; -+ -+ status = Call_Service_3 (file->read, file, &length, addr); -+ -+ len = length; -+ -+ if (status == GRUB_EFI_SUCCESS) { -+ filepos += len; -+ return len; -+ } -+ -+ out: -+ errnum = ERR_FILE_NOT_FOUND; -+ -+ return 0; -+} -+#endif -diff --git a/stage2/fsys_vstafs.c b/stage2/fsys_vstafs.c -index a116717..652e784 100644 ---- a/stage2/fsys_vstafs.c -+++ b/stage2/fsys_vstafs.c -@@ -30,8 +30,8 @@ static struct dir_entry *vstafs_nextdir (void); - - - #define FIRST_SECTOR ((struct first_sector *) FSYS_BUF) --#define FILE_INFO ((struct fs_file *) (int) FIRST_SECTOR + 8192) --#define DIRECTORY_BUF ((struct dir_entry *) (int) FILE_INFO + 512) -+#define FILE_INFO ((struct fs_file *) (unsigned long) FIRST_SECTOR + 8192) -+#define DIRECTORY_BUF ((struct dir_entry *) (unsigned long) FILE_INFO + 512) - - #define ROOT_SECTOR 1 - -@@ -186,35 +186,35 @@ vstafs_dir (char *dirname) - int - vstafs_read (char *addr, int len) - { -- struct alloc *a; -+ struct alloc *al; - int size, ret = 0, offset, curr_len = 0; -- int curr_ext; -+ int this_ext; - char extent; - int ext_size; - char *curr_pos; - - get_file_info (f_sector); - size = FILE_INFO->len-VSTAFS_START_DATA; -- a = FILE_INFO->blocks; -+ al = FILE_INFO->blocks; - - if (filepos > 0) - { -- if (filepos < a[0].a_len * 512 - VSTAFS_START_DATA) -+ if (filepos < al[0].a_len * 512 - VSTAFS_START_DATA) - { - offset = filepos + VSTAFS_START_DATA; - extent = 0; -- curr_len = a[0].a_len * 512 - offset - filepos; -+ curr_len = al[0].a_len * 512 - offset - filepos; - } - else - { -- ext_size = a[0].a_len * 512 - VSTAFS_START_DATA; -+ ext_size = al[0].a_len * 512 - VSTAFS_START_DATA; - offset = filepos - ext_size; - extent = 1; - do - { - curr_len -= ext_size; - offset -= ext_size; -- ext_size = a[extent+1].a_len * 512; -+ ext_size = al[extent+1].a_len * 512; - } - while (extent < FILE_INFO->extents && offset>ext_size); - } -@@ -223,16 +223,16 @@ vstafs_read (char *addr, int len) - { - offset = VSTAFS_START_DATA; - extent = 0; -- curr_len = a[0].a_len * 512 - offset; -+ curr_len = al[0].a_len * 512 - offset; - } - - curr_pos = addr; - if (curr_len > len) - curr_len = len; - -- for (curr_ext=extent; -- curr_ext < FILE_INFO->extents; -- curr_len = a[curr_ext].a_len * 512, curr_pos += curr_len, curr_ext++) -+ for (this_ext=extent; -+ this_ext < FILE_INFO->extents; -+ curr_len = al[this_ext].a_len * 512, curr_pos += curr_len, this_ext++) - { - ret += curr_len; - size -= curr_len; -@@ -242,7 +242,7 @@ vstafs_read (char *addr, int len) - curr_len += size; - } - -- devread (a[curr_ext].a_start,offset, curr_len, curr_pos); -+ devread (al[this_ext].a_start,offset, curr_len, curr_pos); - offset = 0; - } - -diff --git a/stage2/fsys_xfs.c b/stage2/fsys_xfs.c -index 76c4c13..226e343 100644 ---- a/stage2/fsys_xfs.c -+++ b/stage2/fsys_xfs.c -@@ -97,19 +97,23 @@ ino2offset (xfs_ino_t ino) - return ino & XFS_INO_MASK(XFS_INO_OFFSET_BITS); - } - --static inline __const__ xfs_uint16_t --le16 (xfs_uint16_t x) -+static inline xfs_uint16_t __attribute__((__const__)) -+le16 (xfs_uint16_t x) - { -+#if 1 -+ return ((x & 0xff00) >> 8) | ((x & 0xff) << 8); -+#else - __asm__("xchgb %b0,%h0" \ - : "=q" (x) \ - : "0" (x)); \ - return x; -+#endif - } - --static inline __const__ xfs_uint32_t -+static inline xfs_uint32_t __attribute__((__const__)) - le32 (xfs_uint32_t x) - { --#if 0 -+#if 1 - /* 386 doesn't have bswap. */ - __asm__("bswap %0" : "=r" (x) : "0" (x)); - #else -@@ -122,7 +126,7 @@ le32 (xfs_uint32_t x) - return x; - } - --static inline __const__ xfs_uint64_t -+static inline xfs_uint64_t __attribute__((__const__)) - le64 (xfs_uint64_t x) - { - xfs_uint32_t h = x >> 32; -@@ -187,12 +191,12 @@ fsb2daddr (xfs_fsblock_t fsbno) - } - - #undef offsetof --#define offsetof(t,m) ((int)&(((t *)0)->m)) -+#define offsetof(t,m) __builtin_offsetof(t, m) - --static inline int -+static inline xfs_uint64_t - btroot_maxrecs (void) - { -- int tmp = icore.di_forkoff ? (icore.di_forkoff << 3) : xfs.isize; -+ xfs_uint64_t tmp = icore.di_forkoff ? (icore.di_forkoff << 3) : xfs.isize; - - return (tmp - sizeof(xfs_bmdr_block_t) - offsetof(xfs_dinode_t, di_u)) / - (sizeof (xfs_bmbt_key_t) + sizeof (xfs_bmbt_ptr_t)); -@@ -465,7 +469,7 @@ xfs_mount (void) - - xfs.bsize = le32 (super.sb_blocksize); - xfs.blklog = super.sb_blocklog; -- xfs.bdlog = xfs.blklog - SECTOR_BITS; -+ xfs.bdlog = xfs.blklog - get_sector_bits(current_drive); - xfs.rootino = le64 (super.sb_rootino); - xfs.isize = le16 (super.sb_inodesize); - xfs.agblocks = le32 (super.sb_agblocks); -diff --git a/stage2/gpt.h b/stage2/gpt.h -new file mode 100644 -index 0000000..ad6d8f1 ---- /dev/null -+++ b/stage2/gpt.h -@@ -0,0 +1,69 @@ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2002,2005,2006 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 _GPT_H -+#define _GPT_H -+ -+typedef signed char grub_int8_t; -+typedef signed short grub_int16_t; -+typedef signed int grub_int32_t; -+typedef signed long long int grub_int64_t; -+typedef unsigned char grub_uint8_t; -+typedef unsigned short grub_uint16_t; -+typedef unsigned int grub_uint32_t; -+typedef unsigned long long int grub_uint64_t; -+ -+struct grub_gpt_header -+{ -+ grub_uint64_t magic; -+ grub_uint32_t version; -+ grub_uint32_t headersize; -+ grub_uint32_t crc32; -+ grub_uint32_t unused1; -+ grub_uint64_t primary; -+ grub_uint64_t backup; -+ grub_uint64_t start; -+ grub_uint64_t end; -+ grub_uint8_t guid[16]; -+ grub_uint64_t partitions; -+ grub_uint32_t maxpart; -+ grub_uint32_t partentry_size; -+ grub_uint32_t partentry_crc32; -+} __attribute__ ((packed)); -+ -+struct grub_gpt_partentry -+{ -+ grub_uint64_t type1; -+ grub_uint64_t type2; -+ grub_uint8_t guid[16]; -+ grub_uint64_t start; -+ grub_uint64_t end; -+ grub_uint8_t attrib; -+ char name[72]; -+} __attribute__ ((packed)); -+ -+#define GPT_HEADER_MAGIC 0x5452415020494645ULL -+ -+#define GPT_ENTRY_SECTOR(drive,size,entry) \ -+ ((((entry) * (size) + 1) & ~(get_sector_size(drive) - 1)) \ -+ >> get_sector_bits(drive)) -+#define GPT_ENTRY_INDEX(drive, size,entry) \ -+ ((((entry) * (size) + 1) & (get_sector_size(drive) - 1)) - 1) -+ -+#endif /* _GPT_H */ -diff --git a/stage2/graphics.c b/stage2/graphics.c -new file mode 100644 -index 0000000..81109ae ---- /dev/null -+++ b/stage2/graphics.c -@@ -0,0 +1,573 @@ -+/* graphics.c - graphics mode support for GRUB */ -+/* Implemented as a terminal type by Jeremy Katz katzj@redhat.com based -+ * on a patch by Paulo César Pereira de Andrade pcpa@conectiva.com.br -+ */ -+/* -+ * GRUB -- GRand Unified Bootloader -+ * Copyright (C) 2001,2002 Red Hat, Inc. -+ * Portions copyright (C) 2000 Conectiva, 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. -+ */ -+ -+ -+ -+#ifdef SUPPORT_GRAPHICS -+ -+#include <term.h> -+#include <shared.h> -+#include <graphics.h> -+ -+int saved_videomode; -+unsigned char *font8x16; -+ -+int graphics_inited = 0; -+static char splashimage[64]; -+ -+#define VSHADOW VSHADOW1 -+unsigned char VSHADOW1[38400]; -+unsigned char VSHADOW2[38400]; -+unsigned char VSHADOW4[38400]; -+unsigned char VSHADOW8[38400]; -+ -+/* constants to define the viewable area */ -+const int x0 = 0; -+const int x1 = 80; -+const int y0 = 0; -+const int y1 = 30; -+ -+/* text buffer has to be kept around so that we can write things as we -+ * scroll and the like */ -+unsigned short text[80 * 30]; -+ -+/* why do these have to be kept here? */ -+int foreground = (63 << 16) | (63 << 8) | (63), background = 0, border = 0; -+ -+/* current position */ -+static int fontx = 0; -+static int fonty = 0; -+ -+/* global state so that we don't try to recursively scroll or cursor */ -+static int no_scroll = 0; -+ -+/* color state */ -+static int graphics_standard_color = A_NORMAL; -+static int graphics_normal_color = A_NORMAL; -+static int graphics_highlight_color = A_REVERSE; -+static int graphics_current_color = A_NORMAL; -+static color_state graphics_color_state = COLOR_STATE_STANDARD; -+ -+ -+/* graphics local functions */ -+static void graphics_setxy(int col, int row); -+static void graphics_scroll(void); -+ -+/* FIXME: where do these really belong? */ -+static inline void outb(unsigned short port, unsigned char val) -+{ -+ __asm __volatile ("outb %0,%1"::"a" (val), "d" (port)); -+} -+ -+static void MapMask(int value) { -+ outb(0x3c4, 2); -+ outb(0x3c5, value); -+} -+ -+/* bit mask register */ -+static void BitMask(int value) { -+ outb(0x3ce, 8); -+ outb(0x3cf, value); -+} -+ -+ -+ -+/* Set the splash image */ -+void graphics_set_splash(char *splashfile) { -+ grub_strcpy(splashimage, splashfile); -+} -+ -+/* Get the current splash image */ -+char *graphics_get_splash(void) { -+ return splashimage; -+} -+ -+/* Initialize a vga16 graphics display with the palette based off of -+ * the image in splashimage. If the image doesn't exist, leave graphics -+ * mode. */ -+int graphics_init() -+{ -+ if (!read_image(splashimage)) { -+ current_term = term_table; -+ grub_printf("failed to read image\n"); -+ return 0; -+ } -+ -+ font8x16 = (unsigned char*)graphics_get_font(); -+ -+ graphics_inited = 1; -+ -+ /* make sure that the highlight color is set correctly */ -+ graphics_highlight_color = ((graphics_normal_color >> 4) | -+ ((graphics_normal_color & 0xf) << 4)); -+ -+ return 1; -+} -+ -+/* Leave graphics mode */ -+void graphics_end(void) -+{ -+ if (graphics_inited) { -+ set_videomode(saved_videomode); -+ graphics_inited = 0; -+ } -+} -+ -+/* Print ch on the screen. Handle any needed scrolling or the like */ -+void graphics_putchar(int ch) { -+ ch &= 0xff; -+ -+ graphics_cursor(0); -+ -+ if (ch == '\n') { -+ if (fonty + 1 < y1) -+ graphics_setxy(fontx, fonty + 1); -+ else -+ graphics_scroll(); -+ graphics_cursor(1); -+ return; -+ } else if (ch == '\r') { -+ graphics_setxy(x0, fonty); -+ graphics_cursor(1); -+ return; -+ } -+ -+ graphics_cursor(0); -+ -+ text[fonty * 80 + fontx] = ch; -+ text[fonty * 80 + fontx] &= 0x00ff; -+ if (graphics_current_color & 0xf0) -+ text[fonty * 80 + fontx] |= 0x100; -+ -+ graphics_cursor(0); -+ -+ if ((fontx + 1) >= x1) { -+ graphics_setxy(x0, fonty); -+ if (fonty + 1 < y1) -+ graphics_setxy(x0, fonty + 1); -+ else -+ graphics_scroll(); -+ } else { -+ graphics_setxy(fontx + 1, fonty); -+ } -+ -+ graphics_cursor(1); -+} -+ -+/* get the current location of the cursor */ -+int graphics_getxy(void) { -+ return (fontx << 8) | fonty; -+} -+ -+void graphics_gotoxy(int x, int y) { -+ graphics_cursor(0); -+ -+ graphics_setxy(x, y); -+ -+ graphics_cursor(1); -+} -+ -+void graphics_cls(void) { -+ int i; -+ unsigned char *mem, *s1, *s2, *s4, *s8; -+ -+ graphics_cursor(0); -+ graphics_gotoxy(x0, y0); -+ -+ mem = (unsigned char*)VIDEOMEM; -+ s1 = (unsigned char*)VSHADOW1; -+ s2 = (unsigned char*)VSHADOW2; -+ s4 = (unsigned char*)VSHADOW4; -+ s8 = (unsigned char*)VSHADOW8; -+ -+ for (i = 0; i < 80 * 30; i++) -+ text[i] = ' '; -+ graphics_cursor(1); -+ -+ BitMask(0xff); -+ -+ /* plano 1 */ -+ MapMask(1); -+ grub_memcpy(mem, s1, 38400); -+ -+ /* plano 2 */ -+ MapMask(2); -+ grub_memcpy(mem, s2, 38400); -+ -+ /* plano 3 */ -+ MapMask(4); -+ grub_memcpy(mem, s4, 38400); -+ -+ /* plano 4 */ -+ MapMask(8); -+ grub_memcpy(mem, s8, 38400); -+ -+ MapMask(15); -+ -+} -+ -+void graphics_setcolorstate (color_state state) { -+ switch (state) { -+ case COLOR_STATE_STANDARD: -+ graphics_current_color = graphics_standard_color; -+ break; -+ case COLOR_STATE_NORMAL: -+ graphics_current_color = graphics_normal_color; -+ break; -+ case COLOR_STATE_HIGHLIGHT: -+ graphics_current_color = graphics_highlight_color; -+ break; -+ default: -+ graphics_current_color = graphics_standard_color; -+ break; -+ } -+ -+ graphics_color_state = state; -+} -+ -+void graphics_setcolor (int normal_color, int highlight_color) { -+ graphics_normal_color = normal_color; -+ graphics_highlight_color = highlight_color; -+ -+ graphics_setcolorstate (graphics_color_state); -+} -+ -+int graphics_setcursor (int on) { -+ /* FIXME: we don't have a cursor in graphics */ -+ return 0; -+} -+ -+/* Open the file, and search for a valid XPM header. Return 1 if one is found, -+ * leaving the current position as the start of the next line. Else, -+ * return 0. -+ */ -+static int xpm_open(char *s) { -+ char buf, prev, target[]="/* XPM */\n"; -+ int pos=0; -+ -+ if (!grub_open(s)) -+ return 0; -+ -+ prev='\n'; -+ buf=0; -+ do { -+ if (grub_read(&buf, 1) != 1) { -+ grub_close(); -+ return 0; -+ } -+ if ((pos == 0 && prev == '\n') || pos > 0) { -+ if (buf == target[pos]) -+ pos++; -+ else -+ pos=0; -+ } -+ prev=buf; -+ } while (target[pos]); -+ return 1; -+} -+ -+/* Read in the splashscreen image and set the palette up appropriately. -+ * Format of splashscreen is an xpm (can be gzipped) with 16 colors and -+ * 640x480. */ -+int read_image(char *s) -+{ -+ char buf[32], pal[16]; -+ unsigned char c, base, mask, *s1, *s2, *s4, *s8; -+ unsigned i, len, idx, colors, x, y, width, height; -+ -+ if (!xpm_open(s)) -+ return 0; -+ -+ saved_videomode = set_videomode(0x12); -+ -+ /* parse info */ -+ while (grub_read(&c, 1)) { -+ if (c == '"') -+ break; -+ } -+ -+ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) -+ ; -+ -+ i = 0; -+ width = c - '0'; -+ while (grub_read(&c, 1)) { -+ if (c >= '0' && c <= '9') -+ width = width * 10 + c - '0'; -+ else -+ break; -+ } -+ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) -+ ; -+ -+ height = c - '0'; -+ while (grub_read(&c, 1)) { -+ if (c >= '0' && c <= '9') -+ height = height * 10 + c - '0'; -+ else -+ break; -+ } -+ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) -+ ; -+ -+ colors = c - '0'; -+ while (grub_read(&c, 1)) { -+ if (c >= '0' && c <= '9') -+ colors = colors * 10 + c - '0'; -+ else -+ break; -+ } -+ -+ base = 0; -+ while (grub_read(&c, 1) && c != '"') -+ ; -+ -+ /* palette */ -+ for (i = 0, idx = 1; i < colors; i++) { -+ len = 0; -+ -+ while (grub_read(&c, 1) && c != '"') -+ ; -+ grub_read(&c, 1); /* char */ -+ base = c; -+ grub_read(buf, 4); /* \t c # */ -+ -+ while (grub_read(&c, 1) && c != '"') { -+ if (len < sizeof(buf)) -+ buf[len++] = c; -+ } -+ -+ if (len == 6 && idx < 15) { -+ int r = ((hex(buf[0]) << 4) | hex(buf[1])) >> 2; -+ int g = ((hex(buf[2]) << 4) | hex(buf[3])) >> 2; -+ int b = ((hex(buf[4]) << 4) | hex(buf[5])) >> 2; -+ -+ pal[idx] = base; -+ graphics_set_palette(idx, r, g, b); -+ ++idx; -+ } -+ } -+ -+ x = y = len = 0; -+ -+ s1 = (unsigned char*)VSHADOW1; -+ s2 = (unsigned char*)VSHADOW2; -+ s4 = (unsigned char*)VSHADOW4; -+ s8 = (unsigned char*)VSHADOW8; -+ -+ for (i = 0; i < 38400; i++) -+ s1[i] = s2[i] = s4[i] = s8[i] = 0; -+ -+ /* parse xpm data */ -+ while (y < height) { -+ while (1) { -+ if (!grub_read(&c, 1)) { -+ grub_close(); -+ return 0; -+ } -+ if (c == '"') -+ break; -+ } -+ -+ while (grub_read(&c, 1) && c != '"') { -+ for (i = 1; i < 15; i++) -+ if (pal[i] == c) { -+ c = i; -+ break; -+ } -+ -+ mask = 0x80 >> (x & 7); -+ if (c & 1) -+ s1[len + (x >> 3)] |= mask; -+ if (c & 2) -+ s2[len + (x >> 3)] |= mask; -+ if (c & 4) -+ s4[len + (x >> 3)] |= mask; -+ if (c & 8) -+ s8[len + (x >> 3)] |= mask; -+ -+ if (++x >= 640) { -+ x = 0; -+ -+ if (y < 480) -+ len += 80; -+ ++y; -+ } -+ } -+ } -+ -+ grub_close(); -+ -+ graphics_set_palette(0, (background >> 16), (background >> 8) & 63, -+ background & 63); -+ graphics_set_palette(15, (foreground >> 16), (foreground >> 8) & 63, -+ foreground & 63); -+ graphics_set_palette(0x11, (border >> 16), (border >> 8) & 63, -+ border & 63); -+ -+ return 1; -+} -+ -+ -+/* Convert a character which is a hex digit to the appropriate integer */ -+int hex(int v) -+{ -+ if (v >= 'A' && v <= 'F') -+ return (v - 'A' + 10); -+ if (v >= 'a' && v <= 'f') -+ return (v - 'a' + 10); -+ return (v - '0'); -+} -+ -+ -+/* move the graphics cursor location to col, row */ -+static void graphics_setxy(int col, int row) { -+ if (col >= x0 && col < x1) { -+ fontx = col; -+ cursorX = col << 3; -+ } -+ if (row >= y0 && row < y1) { -+ fonty = row; -+ cursorY = row << 4; -+ } -+} -+ -+/* scroll the screen */ -+static void graphics_scroll(void) { -+ int i, j; -+ -+ /* we don't want to scroll recursively... that would be bad */ -+ if (no_scroll) -+ return; -+ no_scroll = 1; -+ -+ /* move everything up a line */ -+ for (j = y0 + 1; j < y1; j++) { -+ graphics_gotoxy(x0, j - 1); -+ for (i = x0; i < x1; i++) { -+ graphics_putchar(text[j * 80 + i]); -+ } -+ } -+ -+ /* last line should be blank */ -+ graphics_gotoxy(x0, y1 - 1); -+ for (i = x0; i < x1; i++) -+ graphics_putchar(' '); -+ graphics_setxy(x0, y1 - 1); -+ -+ no_scroll = 0; -+} -+ -+ -+void graphics_cursor(int set) { -+ unsigned char *pat, *mem, *ptr, chr[16 << 2]; -+ int i, ch, invert, offset; -+ -+ if (set && no_scroll) -+ return; -+ -+ offset = cursorY * 80 + fontx; -+ ch = text[fonty * 80 + fontx] & 0xff; -+ invert = (text[fonty * 80 + fontx] & 0xff00) != 0; -+ pat = font8x16 + (ch << 4); -+ -+ mem = (unsigned char*)VIDEOMEM + offset; -+ -+ if (!set) { -+ for (i = 0; i < 16; i++) { -+ unsigned char mask = pat[i]; -+ -+ if (!invert) { -+ chr[i ] = ((unsigned char*)VSHADOW1)[offset]; -+ chr[16 + i] = ((unsigned char*)VSHADOW2)[offset]; -+ chr[32 + i] = ((unsigned char*)VSHADOW4)[offset]; -+ chr[48 + i] = ((unsigned char*)VSHADOW8)[offset]; -+ -+ /* FIXME: if (shade) */ -+ if (1) { -+ if (ch == DISP_VERT || ch == DISP_LL || -+ ch == DISP_UR || ch == DISP_LR) { -+ unsigned char pmask = ~(pat[i] >> 1); -+ -+ chr[i ] &= pmask; -+ chr[16 + i] &= pmask; -+ chr[32 + i] &= pmask; -+ chr[48 + i] &= pmask; -+ } -+ if (i > 0 && ch != DISP_VERT) { -+ unsigned char pmask = ~(pat[i - 1] >> 1); -+ -+ chr[i ] &= pmask; -+ chr[16 + i] &= pmask; -+ chr[32 + i] &= pmask; -+ chr[48 + i] &= pmask; -+ if (ch == DISP_HORIZ || ch == DISP_UR || ch == DISP_LR) { -+ pmask = ~pat[i - 1]; -+ -+ chr[i ] &= pmask; -+ chr[16 + i] &= pmask; -+ chr[32 + i] &= pmask; -+ chr[48 + i] &= pmask; -+ } -+ } -+ } -+ chr[i ] |= mask; -+ chr[16 + i] |= mask; -+ chr[32 + i] |= mask; -+ chr[48 + i] |= mask; -+ -+ offset += 80; -+ } -+ else { -+ chr[i ] = ~mask; -+ chr[16 + i] = ~mask; -+ chr[32 + i] = ~mask; -+ chr[48 + i] = ~mask; -+ } -+ } -+ } -+ else { -+ MapMask(15); -+ ptr = mem; -+ for (i = 0; i < 16; i++, ptr += 80) { -+ cursorBuf[i] = pat[i]; -+ *ptr = ~pat[i]; -+ } -+ return; -+ } -+ -+ offset = 0; -+ for (i = 1; i < 16; i <<= 1, offset += 16) { -+ int j; -+ -+ MapMask(i); -+ ptr = mem; -+ for (j = 0; j < 16; j++, ptr += 80) -+ *ptr = chr[j + offset]; -+ } -+ -+ MapMask(15); -+} -+ -+#endif /* SUPPORT_GRAPHICS */ -diff --git a/stage2/graphics.h b/stage2/graphics.h -new file mode 100644 -index 0000000..a4cd9e8 ---- /dev/null -+++ b/stage2/graphics.h -@@ -0,0 +1,42 @@ -+/* graphics.h - graphics console interface */ -+/* -+ * 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 GRAPHICS_H -+#define GRAPHICS_H -+ -+/* magic constant */ -+#define VIDEOMEM 0xA0000 -+ -+/* function prototypes */ -+char *graphics_get_splash(void); -+ -+int read_image(char *s); -+void graphics_cursor(int set); -+ -+/* function prototypes for asm functions */ -+void * graphics_get_font(); -+void graphics_set_palette(int idx, int red, int green, int blue); -+void set_int1c_handler(); -+void unset_int1c_handler(); -+ -+extern short cursorX, cursorY; -+extern char cursorBuf[16]; -+ -+#endif /* GRAPHICS_H */ -diff --git a/stage2/gunzip.c b/stage2/gunzip.c -index 8835089..45a2312 100644 ---- a/stage2/gunzip.c -+++ b/stage2/gunzip.c -@@ -141,7 +141,7 @@ static int gzip_filepos; - static int gzip_filemax; - static int gzip_fsmax; - static int saved_filepos; --static unsigned long gzip_crc; -+static unsigned int gzip_crc; - - /* internal extra variables for use of inflate code */ - static int block_type; -@@ -169,7 +169,14 @@ linalloc (int size) - static void - reset_linalloc (void) - { -+#ifdef PLATFORM_EFI -+ unsigned int top = (mbi.mem_upper << 10) + 0x100000; -+ if (top > GRUB_SCRATCH_MEM_SIZE) -+ top = GRUB_SCRATCH_MEM_SIZE; -+ linalloc_topaddr = RAW_ADDR (top); -+#else - linalloc_topaddr = RAW_ADDR ((mbi.mem_upper << 10) + 0x100000); -+#endif - } - - -@@ -253,7 +260,7 @@ bad_field (int len) - - typedef unsigned char uch; - typedef unsigned short ush; --typedef unsigned long ulg; -+typedef unsigned int ulg; - - /* - * Window Size -@@ -316,8 +323,8 @@ gunzip_test_header (void) - return 0; - } - -- gzip_crc = *((unsigned long *) buf); -- gzip_fsmax = gzip_filemax = *((unsigned long *) (buf + 4)); -+ gzip_crc = *((unsigned int *) buf); -+ gzip_fsmax = gzip_filemax = *((unsigned int *) (buf + 4)); - - initialize_tables (); - -diff --git a/stage2/iso9660.h b/stage2/iso9660.h -index 4a6a8cc..c311ecf 100644 ---- a/stage2/iso9660.h -+++ b/stage2/iso9660.h -@@ -73,11 +73,11 @@ typedef union { - - typedef struct __iso_16bit { - u_int16_t l, b; --} iso_16bit_t __attribute__ ((packed)); -+} iso_16bit_t; - - typedef struct __iso_32bit { - u_int32_t l, b; --} iso_32bit_t __attribute__ ((packed)); -+} iso_32bit_t; - - typedef u_int8_t iso_date_t[7]; - -diff --git a/stage2/mb_info.h b/stage2/mb_info.h -index 1e1e63b..3a8dcfb 100644 ---- a/stage2/mb_info.h -+++ b/stage2/mb_info.h -@@ -44,10 +44,10 @@ struct mod_list - - struct AddrRangeDesc - { -- unsigned long size; -+ unsigned int size; - unsigned long long BaseAddr; - unsigned long long Length; -- unsigned long Type; -+ unsigned int Type; - - /* unspecified optional padding... */ - } __attribute__ ((packed)); -diff --git a/stage2/pc_slice.h b/stage2/pc_slice.h -index a38d97f..2206e82 100644 ---- a/stage2/pc_slice.h -+++ b/stage2/pc_slice.h -@@ -38,50 +38,50 @@ - */ - - #define PC_MBR_CHECK_SIG(mbr_ptr) \ -- ( *( (unsigned short *) (((int) mbr_ptr) + PC_MBR_SIG_OFFSET) ) \ -+ ( *( (unsigned short *) (((unsigned long) mbr_ptr) + PC_MBR_SIG_OFFSET) ) \ - == PC_MBR_SIGNATURE ) - - #define PC_MBR_SIG(mbr_ptr) \ -- ( *( (unsigned short *) (((int) mbr_ptr) + PC_MBR_SIG_OFFSET) ) ) -+ ( *( (unsigned short *) (((unsigned long) mbr_ptr) + PC_MBR_SIG_OFFSET) ) ) - - #define PC_SLICE_FLAG(mbr_ptr, part) \ -- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET \ -+ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET \ - + (part << 4)) ) ) - - #define PC_SLICE_HEAD(mbr_ptr, part) \ -- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 1 \ -+ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 1 \ - + (part << 4)) ) ) - - #define PC_SLICE_SEC(mbr_ptr, part) \ -- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 2 \ -+ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 2 \ - + (part << 4)) ) ) - - #define PC_SLICE_CYL(mbr_ptr, part) \ -- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 3 \ -+ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 3 \ - + (part << 4)) ) ) - - #define PC_SLICE_TYPE(mbr_ptr, part) \ -- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 4 \ -+ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 4 \ - + (part << 4)) ) ) - - #define PC_SLICE_EHEAD(mbr_ptr, part) \ -- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 5 \ -+ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 5 \ - + (part << 4)) ) ) - - #define PC_SLICE_ESEC(mbr_ptr, part) \ -- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 6 \ -+ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 6 \ - + (part << 4)) ) ) - - #define PC_SLICE_ECYL(mbr_ptr, part) \ -- ( *( (unsigned char *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 7 \ -+ ( *( (unsigned char *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 7 \ - + (part << 4)) ) ) - - #define PC_SLICE_START(mbr_ptr, part) \ -- ( *( (unsigned long *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 8 \ -+ ( *( (unsigned int *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 8 \ - + (part << 4)) ) ) - - #define PC_SLICE_LENGTH(mbr_ptr, part) \ -- ( *( (unsigned long *) (((int) mbr_ptr) + PC_SLICE_OFFSET + 12 \ -+ ( *( (unsigned int *) (((unsigned long) mbr_ptr) + PC_SLICE_OFFSET + 12 \ - + (part << 4)) ) ) - - -@@ -115,6 +115,8 @@ - #define PC_SLICE_TYPE_LINUX_EXTENDED 0x85 - #define PC_SLICE_TYPE_VSTAFS 0x9e - #define PC_SLICE_TYPE_DELL_UTIL 0xde -+#define PC_SLICE_TYPE_GPT 0xee -+#define PC_SLICE_TYPE_EFI 0xef - #define PC_SLICE_TYPE_LINUX_RAID 0xfd - - -@@ -129,7 +131,8 @@ - || _type == PC_SLICE_TYPE_FAT16_LBA \ - || _type == PC_SLICE_TYPE_FAT32 \ - || _type == PC_SLICE_TYPE_FAT32_LBA \ -- || _type == PC_SLICE_TYPE_DELL_UTIL; }) -+ || _type == PC_SLICE_TYPE_DELL_UTIL \ -+ || _type == PC_SLICE_TYPE_EFI; }) - - #define IS_PC_SLICE_TYPE_EXTENDED(type) \ - (((type) == PC_SLICE_TYPE_EXTENDED) \ -@@ -177,40 +180,40 @@ - */ - - #define BSD_LABEL_CHECK_MAG(l_ptr) \ -- ( *( (unsigned long *) (((int) l_ptr) + BSD_LABEL_MAG_OFFSET) ) \ -- == ( (unsigned long) BSD_LABEL_MAGIC ) ) -+ ( *( (unsigned int *) (((unsigned long) l_ptr) + BSD_LABEL_MAG_OFFSET) ) \ -+ == ( (unsigned int) BSD_LABEL_MAGIC ) ) - - #define BSD_LABEL_MAG(l_ptr) \ -- ( *( (unsigned long *) (((int) l_ptr) + BSD_LABEL_MAG_OFFSET) ) ) -+ ( *( (unsigned int *) (((unsigned long) l_ptr) + BSD_LABEL_MAG_OFFSET) ) ) - - #define BSD_LABEL_DTYPE(l_ptr) \ -- ( *( (unsigned short *) (((int) l_ptr) + BSD_LABEL_MAG_OFFSET + 4) ) ) -+ ( *( (unsigned short *) (((unsigned long) l_ptr) + BSD_LABEL_MAG_OFFSET + 4) ) ) - - #define BSD_LABEL_NPARTS(l_ptr) \ -- ( *( (unsigned short *) (((int) l_ptr) + BSD_LABEL_NPARTS_OFFSET) ) ) -+ ( *( (unsigned short *) (((unsigned long) l_ptr) + BSD_LABEL_NPARTS_OFFSET) ) ) - - #define BSD_PART_LENGTH(l_ptr, part) \ -- ( *( (unsigned long *) (((int) l_ptr) + BSD_PART_OFFSET \ -+ ( *( (unsigned int *) (((unsigned long) l_ptr) + BSD_PART_OFFSET \ - + (part << 4)) ) ) - - #define BSD_PART_START(l_ptr, part) \ -- ( *( (unsigned long *) (((int) l_ptr) + BSD_PART_OFFSET + 4 \ -+ ( *( (unsigned int *) (((unsigned long) l_ptr) + BSD_PART_OFFSET + 4 \ - + (part << 4)) ) ) - - #define BSD_PART_FRAG_SIZE(l_ptr, part) \ -- ( *( (unsigned long *) (((int) l_ptr) + BSD_PART_OFFSET + 8 \ -+ ( *( (unsigned int *) (((unsigned long) l_ptr) + BSD_PART_OFFSET + 8 \ - + (part << 4)) ) ) - - #define BSD_PART_TYPE(l_ptr, part) \ -- ( *( (unsigned char *) (((int) l_ptr) + BSD_PART_OFFSET + 12 \ -+ ( *( (unsigned char *) (((unsigned long) l_ptr) + BSD_PART_OFFSET + 12 \ - + (part << 4)) ) ) - - #define BSD_PART_FRAGS_PER_BLOCK(l_ptr, part) \ -- ( *( (unsigned char *) (((int) l_ptr) + BSD_PART_OFFSET + 13 \ -+ ( *( (unsigned char *) (((unsigned long) l_ptr) + BSD_PART_OFFSET + 13 \ - + (part << 4)) ) ) - - #define BSD_PART_EXTRA(l_ptr, part) \ -- ( *( (unsigned short *) (((int) l_ptr) + BSD_PART_OFFSET + 14 \ -+ ( *( (unsigned short *) (((unsigned long) l_ptr) + BSD_PART_OFFSET + 14 \ - + (part << 4)) ) ) - - -diff --git a/stage2/serial.c b/stage2/serial.c -index 16c376f..37b9532 100644 ---- a/stage2/serial.c -+++ b/stage2/serial.c -@@ -37,7 +37,7 @@ static int keep_track = 1; - - /* Hardware-dependent definitions. */ - --#ifndef GRUB_UTIL -+#if ! defined (GRUB_UTIL) && ! defined (PLATFORM_EFI) - /* The structure for speed vs. divisor. */ - struct divisor - { -@@ -187,7 +187,7 @@ serial_hw_init (unsigned short port, unsigned int speed, - - return 1; - } --#endif /* ! GRUB_UTIL */ -+#endif /* ! defined (GRUB_UTIL) && ! defined (PLATFORM_EFI) */ - - - /* Generic definitions. */ -diff --git a/stage2/sha256crypt.c b/stage2/sha256crypt.c -new file mode 100644 -index 0000000..db168a2 ---- /dev/null -+++ b/stage2/sha256crypt.c -@@ -0,0 +1,723 @@ -+/* SHA256-based Unix crypt implementation. -+ Released into the Public Domain by Ulrich Drepper drepper@redhat.com. -+ Adapted for grub by Miloslav Trmac mitr@redhat.com. */ -+ -+#include <stdbool.h> -+#include <stddef.h> -+ -+#include <shared.h> -+ -+typedef unsigned int uint32_t; -+typedef size_t uintptr_t; -+#define alloca(SIZE) (__builtin_alloca (SIZE)) -+#define MIN(A, B) ((A) < (B) ? (A) : (B)) -+#define MAX(A, B) ((A) > (B) ? (A) : (B)) -+ -+/* Structure to save state of computation between the single steps. */ -+struct sha256_ctx -+{ -+ uint32_t H[8]; -+ -+ uint32_t total[2]; -+ uint32_t buflen; -+ char buffer[128]; /* NB: always correctly aligned for uint32_t. */ -+}; -+ -+ -+#if 1 /* __BYTE_ORDER == __LITTLE_ENDIAN */ -+# define SWAP(n) \ -+ (((n) << 24) | (((n) & 0xff00) << 8) | (((n) >> 8) & 0xff00) | ((n) >> 24)) -+#else -+# define SWAP(n) (n) -+#endif -+ -+ -+/* This array contains the bytes used to pad the buffer to the next -+ 64-byte boundary. (FIPS 180-2:5.1.1) */ -+static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; -+ -+ -+/* Constants for SHA256 from FIPS 180-2:4.2.2. */ -+static const uint32_t K[64] = -+ { -+ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, -+ 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, -+ 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, -+ 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, -+ 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, -+ 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, -+ 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, -+ 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, -+ 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, -+ 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, -+ 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, -+ 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, -+ 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, -+ 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, -+ 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, -+ 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 -+ }; -+ -+ -+/* Process LEN bytes of BUFFER, accumulating context into CTX. -+ It is assumed that LEN % 64 == 0. */ -+static void -+sha256_process_block (const void *buffer, size_t len, struct sha256_ctx *ctx) -+{ -+ const uint32_t *words = buffer; -+ size_t nwords = len / sizeof (uint32_t); -+ uint32_t a = ctx->H[0]; -+ uint32_t b = ctx->H[1]; -+ uint32_t c = ctx->H[2]; -+ uint32_t d = ctx->H[3]; -+ uint32_t e = ctx->H[4]; -+ uint32_t f = ctx->H[5]; -+ uint32_t g = ctx->H[6]; -+ uint32_t h = ctx->H[7]; -+ -+ /* First increment the byte count. FIPS 180-2 specifies the possible -+ length of the file up to 2^64 bits. Here we only compute the -+ number of bytes. Do a double word increment. */ -+ ctx->total[0] += len; -+ if (ctx->total[0] < len) -+ ++ctx->total[1]; -+ -+ /* Process all bytes in the buffer with 64 bytes in each round of -+ the loop. */ -+ while (nwords > 0) -+ { -+ uint32_t W[64]; -+ uint32_t a_save = a; -+ uint32_t b_save = b; -+ uint32_t c_save = c; -+ uint32_t d_save = d; -+ uint32_t e_save = e; -+ uint32_t f_save = f; -+ uint32_t g_save = g; -+ uint32_t h_save = h; -+ unsigned int t; -+ -+ /* Operators defined in FIPS 180-2:4.1.2. */ -+#define Ch(x, y, z) ((x & y) ^ (~x & z)) -+#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z)) -+#define S0(x) (CYCLIC (x, 2) ^ CYCLIC (x, 13) ^ CYCLIC (x, 22)) -+#define S1(x) (CYCLIC (x, 6) ^ CYCLIC (x, 11) ^ CYCLIC (x, 25)) -+#define R0(x) (CYCLIC (x, 7) ^ CYCLIC (x, 18) ^ (x >> 3)) -+#define R1(x) (CYCLIC (x, 17) ^ CYCLIC (x, 19) ^ (x >> 10)) -+ -+ /* It is unfortunate that C does not provide an operator for -+ cyclic rotation. Hope the C compiler is smart enough. */ -+#define CYCLIC(w, s) ((w >> s) | (w << (32 - s))) -+ -+ /* Compute the message schedule according to FIPS 180-2:6.2.2 step 2. */ -+ for (t = 0; t < 16; ++t) -+ { -+ W[t] = SWAP (*words); -+ ++words; -+ } -+ for (t = 16; t < 64; ++t) -+ W[t] = R1 (W[t - 2]) + W[t - 7] + R0 (W[t - 15]) + W[t - 16]; -+ -+ /* The actual computation according to FIPS 180-2:6.2.2 step 3. */ -+ for (t = 0; t < 64; ++t) -+ { -+ uint32_t T1 = h + S1 (e) + Ch (e, f, g) + K[t] + W[t]; -+ uint32_t T2 = S0 (a) + Maj (a, b, c); -+ h = g; -+ g = f; -+ f = e; -+ e = d + T1; -+ d = c; -+ c = b; -+ b = a; -+ a = T1 + T2; -+ } -+ -+ /* Add the starting values of the context according to FIPS 180-2:6.2.2 -+ step 4. */ -+ a += a_save; -+ b += b_save; -+ c += c_save; -+ d += d_save; -+ e += e_save; -+ f += f_save; -+ g += g_save; -+ h += h_save; -+ -+ /* Prepare for the next round. */ -+ nwords -= 16; -+ } -+ -+ /* Put checksum in context given as argument. */ -+ ctx->H[0] = a; -+ ctx->H[1] = b; -+ ctx->H[2] = c; -+ ctx->H[3] = d; -+ ctx->H[4] = e; -+ ctx->H[5] = f; -+ ctx->H[6] = g; -+ ctx->H[7] = h; -+} -+ -+ -+/* Initialize structure containing state of computation. -+ (FIPS 180-2:5.3.2) */ -+static void -+sha256_init_ctx (struct sha256_ctx *ctx) -+{ -+ ctx->H[0] = 0x6a09e667; -+ ctx->H[1] = 0xbb67ae85; -+ ctx->H[2] = 0x3c6ef372; -+ ctx->H[3] = 0xa54ff53a; -+ ctx->H[4] = 0x510e527f; -+ ctx->H[5] = 0x9b05688c; -+ ctx->H[6] = 0x1f83d9ab; -+ ctx->H[7] = 0x5be0cd19; -+ -+ ctx->total[0] = ctx->total[1] = 0; -+ ctx->buflen = 0; -+} -+ -+ -+/* Process the remaining bytes in the internal buffer and the usual -+ prolog according to the standard and write the result to RESBUF. -+ -+ IMPORTANT: On some systems it is required that RESBUF is correctly -+ aligned for a 32 bits value. */ -+static void * -+sha256_finish_ctx (struct sha256_ctx *ctx, void *resbuf) -+{ -+ /* Take yet unprocessed bytes into account. */ -+ uint32_t bytes = ctx->buflen; -+ size_t pad; -+ unsigned int i; -+ -+ /* Now count remaining bytes. */ -+ ctx->total[0] += bytes; -+ if (ctx->total[0] < bytes) -+ ++ctx->total[1]; -+ -+ pad = bytes >= 56 ? 64 + 56 - bytes : 56 - bytes; -+ memcpy (&ctx->buffer[bytes], fillbuf, pad); -+ -+ /* Put the 64-bit file length in *bits* at the end of the buffer. */ -+ *(uint32_t *) &ctx->buffer[bytes + pad + 4] = SWAP (ctx->total[0] << 3); -+ *(uint32_t *) &ctx->buffer[bytes + pad] = SWAP ((ctx->total[1] << 3) | -+ (ctx->total[0] >> 29)); -+ -+ /* Process last bytes. */ -+ sha256_process_block (ctx->buffer, bytes + pad + 8, ctx); -+ -+ /* Put result from CTX in first 32 bytes following RESBUF. */ -+ for (i = 0; i < 8; ++i) -+ ((uint32_t *) resbuf)[i] = SWAP (ctx->H[i]); -+ -+ return resbuf; -+} -+ -+ -+static void -+sha256_process_bytes (const void *buffer, size_t len, struct sha256_ctx *ctx) -+{ -+ /* When we already have some bits in our internal buffer concatenate -+ both inputs first. */ -+ if (ctx->buflen != 0) -+ { -+ size_t left_over = ctx->buflen; -+ size_t add = 128 - left_over > len ? len : 128 - left_over; -+ -+ memcpy (&ctx->buffer[left_over], buffer, add); -+ ctx->buflen += add; -+ -+ if (ctx->buflen > 64) -+ { -+ sha256_process_block (ctx->buffer, ctx->buflen & ~63, ctx); -+ -+ ctx->buflen &= 63; -+ /* The regions in the following copy operation cannot overlap. */ -+ memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~63], -+ ctx->buflen); -+ } -+ -+ buffer = (const char *) buffer + add; -+ len -= add; -+ } -+ -+ /* Process available complete blocks. */ -+ if (len >= 64) -+ { -+/* To check alignment gcc has an appropriate operator. Other -+ compilers don't. */ -+#if __GNUC__ >= 2 -+# define UNALIGNED_P(p) (((uintptr_t) p) % __alignof__ (uint32_t) != 0) -+#else -+# define UNALIGNED_P(p) (((uintptr_t) p) % sizeof (uint32_t) != 0) -+#endif -+ if (UNALIGNED_P (buffer)) -+ while (len > 64) -+ { -+ sha256_process_block (memcpy (ctx->buffer, buffer, 64), 64, ctx); -+ buffer = (const char *) buffer + 64; -+ len -= 64; -+ } -+ else -+ { -+ sha256_process_block (buffer, len & ~63, ctx); -+ buffer = (const char *) buffer + (len & ~63); -+ len &= 63; -+ } -+ } -+ -+ /* Move remaining bytes into internal buffer. */ -+ if (len > 0) -+ { -+ size_t left_over = ctx->buflen; -+ -+ memcpy (&ctx->buffer[left_over], buffer, len); -+ left_over += len; -+ if (left_over >= 64) -+ { -+ sha256_process_block (ctx->buffer, 64, ctx); -+ left_over -= 64; -+ memcpy (ctx->buffer, &ctx->buffer[64], left_over); -+ } -+ ctx->buflen = left_over; -+ } -+} -+ -+ -+/* Define our magic string to mark salt for SHA256 "encryption" -+ replacement. */ -+static const char sha256_salt_prefix[] = "$5$"; -+ -+/* Prefix for optional rounds specification. */ -+static const char sha256_rounds_prefix[] = "rounds="; -+ -+/* Maximum salt string length. */ -+#define SALT_LEN_MAX 16 -+/* Default number of rounds if not explicitly specified. */ -+#define ROUNDS_DEFAULT 5000 -+/* Minimum number of rounds. */ -+#define ROUNDS_MIN 1000 -+/* Maximum number of rounds. */ -+#define ROUNDS_MAX 999999999 -+ -+/* Table with characters for base64 transformation. */ -+static const char b64t[64] = -+"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; -+ -+ -+static char * -+sha256_crypt_r (const char *key, const char *salt, char *buffer, int buflen) -+{ -+ unsigned char alt_result[32] -+ __attribute__ ((__aligned__ (__alignof__ (uint32_t)))); -+ unsigned char temp_result[32] -+ __attribute__ ((__aligned__ (__alignof__ (uint32_t)))); -+ struct sha256_ctx ctx; -+ struct sha256_ctx alt_ctx; -+ size_t salt_len; -+ size_t key_len; -+ size_t cnt; -+ char *cp; -+ char *copied_key = NULL; -+ char *copied_salt = NULL; -+ char *p_bytes; -+ char *s_bytes; -+ /* Default number of rounds. */ -+ size_t rounds = ROUNDS_DEFAULT; -+ bool rounds_custom = false; -+ -+ /* Find beginning of salt string. The prefix should normally always -+ be present. Just in case it is not. */ -+ if (grub_memcmp (sha256_salt_prefix, salt, -+ sizeof (sha256_salt_prefix) - 1) == 0) -+ /* Skip salt prefix. */ -+ salt += sizeof (sha256_salt_prefix) - 1; -+ -+ if (grub_memcmp (salt, sha256_rounds_prefix, -+ sizeof (sha256_rounds_prefix) - 1) == 0) -+ { -+ const char *num = salt + sizeof (sha256_rounds_prefix) - 1; -+ char *endp = (char *)num; -+ int srounds = 0; -+ if (*endp == '0' && tolower (endp[1]) == 'x') -+ /* This would be interpreted as hexadecimal by safe_parse_maxint(). */ -+ endp++; -+ else -+ /* On error, endp and srounds is not changed. */ -+ safe_parse_maxint(&endp, &srounds); -+ if (*endp == '$') -+ { -+ salt = endp + 1; -+ rounds = MAX (ROUNDS_MIN, MIN (srounds, ROUNDS_MAX)); -+ rounds_custom = true; -+ } -+ } -+ -+ salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX); -+ key_len = strlen (key); -+ -+ if ((key - (char *) 0) % __alignof__ (uint32_t) != 0) -+ { -+ char *tmp = (char *) alloca (key_len + __alignof__ (uint32_t)); -+ key = copied_key = -+ memcpy (tmp + __alignof__ (uint32_t) -+ - (tmp - (char *) 0) % __alignof__ (uint32_t), -+ key, key_len); -+ } -+ -+ if ((salt - (char *) 0) % __alignof__ (uint32_t) != 0) -+ { -+ char *tmp = (char *) alloca (salt_len + __alignof__ (uint32_t)); -+ salt = copied_salt = -+ memcpy (tmp + __alignof__ (uint32_t) -+ - (tmp - (char *) 0) % __alignof__ (uint32_t), -+ salt, salt_len); -+ } -+ -+ /* Prepare for the real work. */ -+ sha256_init_ctx (&ctx); -+ -+ /* Add the key string. */ -+ sha256_process_bytes (key, key_len, &ctx); -+ -+ /* The last part is the salt string. This must be at most 16 -+ characters and it ends at the first `$' character (for -+ compatibility with existing implementations). */ -+ sha256_process_bytes (salt, salt_len, &ctx); -+ -+ -+ /* Compute alternate SHA256 sum with input KEY, SALT, and KEY. The -+ final result will be added to the first context. */ -+ sha256_init_ctx (&alt_ctx); -+ -+ /* Add key. */ -+ sha256_process_bytes (key, key_len, &alt_ctx); -+ -+ /* Add salt. */ -+ sha256_process_bytes (salt, salt_len, &alt_ctx); -+ -+ /* Add key again. */ -+ sha256_process_bytes (key, key_len, &alt_ctx); -+ -+ /* Now get result of this (32 bytes) and add it to the other -+ context. */ -+ sha256_finish_ctx (&alt_ctx, alt_result); -+ -+ /* Add for any character in the key one byte of the alternate sum. */ -+ for (cnt = key_len; cnt > 32; cnt -= 32) -+ sha256_process_bytes (alt_result, 32, &ctx); -+ sha256_process_bytes (alt_result, cnt, &ctx); -+ -+ /* Take the binary representation of the length of the key and for every -+ 1 add the alternate sum, for every 0 the key. */ -+ for (cnt = key_len; cnt > 0; cnt >>= 1) -+ if ((cnt & 1) != 0) -+ sha256_process_bytes (alt_result, 32, &ctx); -+ else -+ sha256_process_bytes (key, key_len, &ctx); -+ -+ /* Create intermediate result. */ -+ sha256_finish_ctx (&ctx, alt_result); -+ -+ /* Start computation of P byte sequence. */ -+ sha256_init_ctx (&alt_ctx); -+ -+ /* For every character in the password add the entire password. */ -+ for (cnt = 0; cnt < key_len; ++cnt) -+ sha256_process_bytes (key, key_len, &alt_ctx); -+ -+ /* Finish the digest. */ -+ sha256_finish_ctx (&alt_ctx, temp_result); -+ -+ /* Create byte sequence P. */ -+ cp = p_bytes = alloca (key_len); -+ for (cnt = key_len; cnt >= 32; cnt -= 32) -+ { -+ memcpy (cp, temp_result, 32); -+ cp += 32; -+ } -+ memcpy (cp, temp_result, cnt); -+ -+ /* Start computation of S byte sequence. */ -+ sha256_init_ctx (&alt_ctx); -+ -+ /* For every character in the password add the entire password. */ -+ for (cnt = 0; cnt < 16 + alt_result[0]; ++cnt) -+ sha256_process_bytes (salt, salt_len, &alt_ctx); -+ -+ /* Finish the digest. */ -+ sha256_finish_ctx (&alt_ctx, temp_result); -+ -+ /* Create byte sequence S. */ -+ cp = s_bytes = alloca (salt_len); -+ for (cnt = salt_len; cnt >= 32; cnt -= 32) -+ { -+ memcpy (cp, temp_result, 32); -+ cp += 32; -+ } -+ memcpy (cp, temp_result, cnt); -+ -+ /* Repeatedly run the collected hash value through SHA256 to burn -+ CPU cycles. */ -+ for (cnt = 0; cnt < rounds; ++cnt) -+ { -+ /* New context. */ -+ sha256_init_ctx (&ctx); -+ -+ /* Add key or last result. */ -+ if ((cnt & 1) != 0) -+ sha256_process_bytes (p_bytes, key_len, &ctx); -+ else -+ sha256_process_bytes (alt_result, 32, &ctx); -+ -+ /* Add salt for numbers not divisible by 3. */ -+ if (cnt % 3 != 0) -+ sha256_process_bytes (s_bytes, salt_len, &ctx); -+ -+ /* Add key for numbers not divisible by 7. */ -+ if (cnt % 7 != 0) -+ sha256_process_bytes (p_bytes, key_len, &ctx); -+ -+ /* Add key or last result. */ -+ if ((cnt & 1) != 0) -+ sha256_process_bytes (alt_result, 32, &ctx); -+ else -+ sha256_process_bytes (p_bytes, key_len, &ctx); -+ -+ /* Create intermediate result. */ -+ sha256_finish_ctx (&ctx, alt_result); -+ } -+ -+ /* Now we can construct the result string. It consists of three -+ parts. */ -+ cp = stpncpy (buffer, sha256_salt_prefix, MAX (0, buflen)); -+ buflen -= sizeof (sha256_salt_prefix) - 1; -+ -+ if (rounds_custom) -+ { -+ char sbuf[64]; -+ grub_sprintf (sbuf, "%s%llu$", sha256_rounds_prefix, -+ (unsigned long long)rounds); -+ size_t n = strlen (sbuf); -+ memcpy (cp, sbuf, MIN (MAX (0, buflen), n)); -+ cp += n; -+ buflen -= n; -+ } -+ -+ cp = stpncpy (cp, salt, MIN ((size_t) MAX (0, buflen), salt_len)); -+ buflen -= MIN ((size_t) MAX (0, buflen), salt_len); -+ -+ if (buflen > 0) -+ { -+ *cp++ = '$'; -+ --buflen; -+ } -+ -+#define b64_from_24bit(B2, B1, B0, N) \ -+ do { \ -+ unsigned int w = ((B2) << 16) | ((B1) << 8) | (B0); \ -+ int n = (N); \ -+ while (n-- > 0 && buflen > 0) \ -+ { \ -+ *cp++ = b64t[w & 0x3f]; \ -+ --buflen; \ -+ w >>= 6; \ -+ } \ -+ } while (0) -+ -+ b64_from_24bit (alt_result[0], alt_result[10], alt_result[20], 4); -+ b64_from_24bit (alt_result[21], alt_result[1], alt_result[11], 4); -+ b64_from_24bit (alt_result[12], alt_result[22], alt_result[2], 4); -+ b64_from_24bit (alt_result[3], alt_result[13], alt_result[23], 4); -+ b64_from_24bit (alt_result[24], alt_result[4], alt_result[14], 4); -+ b64_from_24bit (alt_result[15], alt_result[25], alt_result[5], 4); -+ b64_from_24bit (alt_result[6], alt_result[16], alt_result[26], 4); -+ b64_from_24bit (alt_result[27], alt_result[7], alt_result[17], 4); -+ b64_from_24bit (alt_result[18], alt_result[28], alt_result[8], 4); -+ b64_from_24bit (alt_result[9], alt_result[19], alt_result[29], 4); -+ b64_from_24bit (0, alt_result[31], alt_result[30], 3); -+ if (buflen <= 0) -+ buffer = NULL; -+ else -+ *cp = '\0'; /* Terminate the string. */ -+ -+ /* Clear the buffer for the intermediate result so that people -+ attaching to processes or reading core dumps cannot get any -+ information. We do it in this way to clear correct_words[] -+ inside the SHA256 implementation as well. */ -+ sha256_init_ctx (&ctx); -+ sha256_finish_ctx (&ctx, alt_result); -+ memset (temp_result, '\0', sizeof (temp_result)); -+ memset (p_bytes, '\0', key_len); -+ memset (s_bytes, '\0', salt_len); -+ memset (&ctx, '\0', sizeof (ctx)); -+ memset (&alt_ctx, '\0', sizeof (alt_ctx)); -+ if (copied_key != NULL) -+ memset (copied_key, '\0', key_len); -+ if (copied_salt != NULL) -+ memset (copied_salt, '\0', salt_len); -+ -+ return buffer; -+} -+ -+ -+/* This entry point is equivalent to the `crypt' function in Unix -+ libcs. */ -+char * -+sha256_crypt (const char *key, const char *salt) -+{ -+ static char buffer[sizeof (sha256_salt_prefix) - 1 -+ + sizeof (sha256_rounds_prefix) + 9 + 1 -+ + 256 + 1 + 43 + 1]; /* 256 bytes for salt */ -+ int needed = (sizeof (sha256_salt_prefix) - 1 -+ + sizeof (sha256_rounds_prefix) + 9 + 1 -+ + strlen (salt) + 1 + 43 + 1); -+ -+ if (sizeof (buffer) < needed) -+ return NULL; -+ -+ return sha256_crypt_r (key, salt, buffer, sizeof (buffer)); -+} -+ -+ -+#ifdef TEST -+static const struct -+{ -+ const char *input; -+ const char result[32]; -+} tests[] = -+ { -+ /* Test vectors from FIPS 180-2: appendix B.1. */ -+ { "abc", -+ "\xba\x78\x16\xbf\x8f\x01\xcf\xea\x41\x41\x40\xde\x5d\xae\x22\x23" -+ "\xb0\x03\x61\xa3\x96\x17\x7a\x9c\xb4\x10\xff\x61\xf2\x00\x15\xad" }, -+ /* Test vectors from FIPS 180-2: appendix B.2. */ -+ { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", -+ "\x24\x8d\x6a\x61\xd2\x06\x38\xb8\xe5\xc0\x26\x93\x0c\x3e\x60\x39" -+ "\xa3\x3c\xe4\x59\x64\xff\x21\x67\xf6\xec\xed\xd4\x19\xdb\x06\xc1" }, -+ /* Test vectors from the NESSIE project. */ -+ { "", -+ "\xe3\xb0\xc4\x42\x98\xfc\x1c\x14\x9a\xfb\xf4\xc8\x99\x6f\xb9\x24" -+ "\x27\xae\x41\xe4\x64\x9b\x93\x4c\xa4\x95\x99\x1b\x78\x52\xb8\x55" }, -+ { "a", -+ "\xca\x97\x81\x12\xca\x1b\xbd\xca\xfa\xc2\x31\xb3\x9a\x23\xdc\x4d" -+ "\xa7\x86\xef\xf8\x14\x7c\x4e\x72\xb9\x80\x77\x85\xaf\xee\x48\xbb" }, -+ { "message digest", -+ "\xf7\x84\x6f\x55\xcf\x23\xe1\x4e\xeb\xea\xb5\xb4\xe1\x55\x0c\xad" -+ "\x5b\x50\x9e\x33\x48\xfb\xc4\xef\xa3\xa1\x41\x3d\x39\x3c\xb6\x50" }, -+ { "abcdefghijklmnopqrstuvwxyz", -+ "\x71\xc4\x80\xdf\x93\xd6\xae\x2f\x1e\xfa\xd1\x44\x7c\x66\xc9\x52" -+ "\x5e\x31\x62\x18\xcf\x51\xfc\x8d\x9e\xd8\x32\xf2\xda\xf1\x8b\x73" }, -+ { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", -+ "\x24\x8d\x6a\x61\xd2\x06\x38\xb8\xe5\xc0\x26\x93\x0c\x3e\x60\x39" -+ "\xa3\x3c\xe4\x59\x64\xff\x21\x67\xf6\xec\xed\xd4\x19\xdb\x06\xc1" }, -+ { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", -+ "\xdb\x4b\xfc\xbd\x4d\xa0\xcd\x85\xa6\x0c\x3c\x37\xd3\xfb\xd8\x80" -+ "\x5c\x77\xf1\x5f\xc6\xb1\xfd\xfe\x61\x4e\xe0\xa7\xc8\xfd\xb4\xc0" }, -+ { "123456789012345678901234567890123456789012345678901234567890" -+ "12345678901234567890", -+ "\xf3\x71\xbc\x4a\x31\x1f\x2b\x00\x9e\xef\x95\x2d\xd8\x3c\xa8\x0e" -+ "\x2b\x60\x02\x6c\x8e\x93\x55\x92\xd0\xf9\xc3\x08\x45\x3c\x81\x3e" } -+ }; -+#define ntests (sizeof (tests) / sizeof (tests[0])) -+ -+ -+static const struct -+{ -+ const char *salt; -+ const char *input; -+ const char *expected; -+} tests2[] = -+{ -+ { "$5$saltstring", "Hello world!", -+ "$5$saltstring$5B8vYYiY.CVt1RlTTf8KbXBH3hsxY/GNooZaBBGWEc5" }, -+ { "$5$rounds=10000$saltstringsaltstring", "Hello world!", -+ "$5$rounds=10000$saltstringsaltst$3xv.VbSHBb41AL9AvLeujZkZRBAwqFMz2." -+ "opqey6IcA" }, -+ { "$5$rounds=5000$toolongsaltstring", "This is just a test", -+ "$5$rounds=5000$toolongsaltstrin$Un/5jzAHMgOGZ5.mWJpuVolil07guHPvOW8" -+ "mGRcvxa5" }, -+ { "$5$rounds=1400$anotherlongsaltstring", -+ "a very much longer text to encrypt. This one even stretches over more" -+ "than one line.", -+ "$5$rounds=1400$anotherlongsalts$Rx.j8H.h8HjEDGomFU8bDkXm3XIUnzyxf12" -+ "oP84Bnq1" }, -+ { "$5$rounds=77777$short", -+ "we have a short salt string but not a short password", -+ "$5$rounds=77777$short$JiO1O3ZpDAxGJeaDIuqCoEFysAe1mZNJRs3pw0KQRd/" }, -+ { "$5$rounds=123456$asaltof16chars..", "a short string", -+ "$5$rounds=123456$asaltof16chars..$gP3VQ/6X7UUEW3HkBn2w1/Ptq2jxPyzV/" -+ "cZKmF/wJvD" }, -+ { "$5$rounds=10$roundstoolow", "the minimum number is still observed", -+ "$5$rounds=1000$roundstoolow$yfvwcWrQ8l/K0DAWyuPMDNHpIVlTQebY9l/gL97" -+ "2bIC" }, -+}; -+#define ntests2 (sizeof (tests2) / sizeof (tests2[0])) -+ -+ -+int -+sha256_test (void) -+{ -+ struct sha256_ctx ctx; -+ char sum[32]; -+ int result = 0; -+ int cnt, i; -+ -+ for (cnt = 0; cnt < (int) ntests; ++cnt) -+ { -+ sha256_init_ctx (&ctx); -+ sha256_process_bytes (tests[cnt].input, strlen (tests[cnt].input), &ctx); -+ sha256_finish_ctx (&ctx, sum); -+ if (memcmp (tests[cnt].result, sum, 32) != 0) -+ { -+ printf ("test %d run %d failed\n", cnt, 1); -+ result = 1; -+ } -+ -+ sha256_init_ctx (&ctx); -+ for (i = 0; tests[cnt].input[i] != '\0'; ++i) -+ sha256_process_bytes (&tests[cnt].input[i], 1, &ctx); -+ sha256_finish_ctx (&ctx, sum); -+ if (memcmp (tests[cnt].result, sum, 32) != 0) -+ { -+ printf ("test %d run %d failed\n", cnt, 2); -+ result = 1; -+ } -+ } -+ -+ /* Test vector from FIPS 180-2: appendix B.3. */ -+ char buf[1000]; -+ memset (buf, 'a', sizeof (buf)); -+ sha256_init_ctx (&ctx); -+ for (i = 0; i < 1000; ++i) -+ sha256_process_bytes (buf, sizeof (buf), &ctx); -+ sha256_finish_ctx (&ctx, sum); -+ static const char expected[32] = -+ "\xcd\xc7\x6e\x5c\x99\x14\xfb\x92\x81\xa1\xc7\xe2\x84\xd7\x3e\x67" -+ "\xf1\x80\x9a\x48\xa4\x97\x20\x0e\x04\x6d\x39\xcc\xc7\x11\x2c\xd0"; -+ if (memcmp (expected, sum, 32) != 0) -+ { -+ printf ("test %d failed\n", cnt); -+ result = 1; -+ } -+ -+ for (cnt = 0; cnt < ntests2; ++cnt) -+ { -+ char *cp = sha256_crypt (tests2[cnt].input, tests2[cnt].salt); -+ -+ if (strcmp (cp, tests2[cnt].expected) != 0) -+ { -+ printf ("test %d: expected "%s", got "%s"\n", -+ cnt, tests2[cnt].expected, cp); -+ result = 1; -+ } -+ } -+ -+ if (result == 0) -+ printf ("all tests OK\n"); -+ -+ return result; -+} -+#endif -diff --git a/stage2/sha512crypt.c b/stage2/sha512crypt.c -new file mode 100644 -index 0000000..ff6cd26 ---- /dev/null -+++ b/stage2/sha512crypt.c -@@ -0,0 +1,795 @@ -+/* SHA512-based Unix crypt implementation. -+ Released into the Public Domain by Ulrich Drepper drepper@redhat.com. -+ Adapted for grub by Miloslav Trmac mitr@redhat.com. */ -+ -+#include <stdbool.h> -+#include <stddef.h> -+ -+#include <shared.h> -+ -+typedef unsigned long long uint64_t; -+typedef size_t uintptr_t; -+#define alloca(SIZE) (__builtin_alloca (SIZE)) -+#define UINT64_C(X) X ## ULL -+#define MIN(a, b) ((a) < (b) ? (a) : (b)) -+#define MAX(a, b) ((a) > (b) ? (a) : (b)) -+ -+/* Structure to save state of computation between the single steps. */ -+struct sha512_ctx -+{ -+ uint64_t H[8]; -+ -+ uint64_t total[2]; -+ uint64_t buflen; -+ char buffer[256]; /* NB: always correctly aligned for uint64_t. */ -+}; -+ -+ -+#if 1 /* __BYTE_ORDER == __LITTLE_ENDIAN */ -+# define SWAP(n) \ -+ (((n) << 56) \ -+ | (((n) & 0xff00) << 40) \ -+ | (((n) & 0xff0000) << 24) \ -+ | (((n) & 0xff000000) << 8) \ -+ | (((n) >> 8) & 0xff000000) \ -+ | (((n) >> 24) & 0xff0000) \ -+ | (((n) >> 40) & 0xff00) \ -+ | ((n) >> 56)) -+#else -+# define SWAP(n) (n) -+#endif -+ -+ -+/* This array contains the bytes used to pad the buffer to the next -+ 64-byte boundary. (FIPS 180-2:5.1.2) */ -+static const unsigned char fillbuf[128] = { 0x80, 0 /* , 0, 0, ... */ }; -+ -+ -+/* Constants for SHA512 from FIPS 180-2:4.2.3. */ -+static const uint64_t K[80] = -+ { -+ UINT64_C (0x428a2f98d728ae22), UINT64_C (0x7137449123ef65cd), -+ UINT64_C (0xb5c0fbcfec4d3b2f), UINT64_C (0xe9b5dba58189dbbc), -+ UINT64_C (0x3956c25bf348b538), UINT64_C (0x59f111f1b605d019), -+ UINT64_C (0x923f82a4af194f9b), UINT64_C (0xab1c5ed5da6d8118), -+ UINT64_C (0xd807aa98a3030242), UINT64_C (0x12835b0145706fbe), -+ UINT64_C (0x243185be4ee4b28c), UINT64_C (0x550c7dc3d5ffb4e2), -+ UINT64_C (0x72be5d74f27b896f), UINT64_C (0x80deb1fe3b1696b1), -+ UINT64_C (0x9bdc06a725c71235), UINT64_C (0xc19bf174cf692694), -+ UINT64_C (0xe49b69c19ef14ad2), UINT64_C (0xefbe4786384f25e3), -+ UINT64_C (0x0fc19dc68b8cd5b5), UINT64_C (0x240ca1cc77ac9c65), -+ UINT64_C (0x2de92c6f592b0275), UINT64_C (0x4a7484aa6ea6e483), -+ UINT64_C (0x5cb0a9dcbd41fbd4), UINT64_C (0x76f988da831153b5), -+ UINT64_C (0x983e5152ee66dfab), UINT64_C (0xa831c66d2db43210), -+ UINT64_C (0xb00327c898fb213f), UINT64_C (0xbf597fc7beef0ee4), -+ UINT64_C (0xc6e00bf33da88fc2), UINT64_C (0xd5a79147930aa725), -+ UINT64_C (0x06ca6351e003826f), UINT64_C (0x142929670a0e6e70), -+ UINT64_C (0x27b70a8546d22ffc), UINT64_C (0x2e1b21385c26c926), -+ UINT64_C (0x4d2c6dfc5ac42aed), UINT64_C (0x53380d139d95b3df), -+ UINT64_C (0x650a73548baf63de), UINT64_C (0x766a0abb3c77b2a8), -+ UINT64_C (0x81c2c92e47edaee6), UINT64_C (0x92722c851482353b), -+ UINT64_C (0xa2bfe8a14cf10364), UINT64_C (0xa81a664bbc423001), -+ UINT64_C (0xc24b8b70d0f89791), UINT64_C (0xc76c51a30654be30), -+ UINT64_C (0xd192e819d6ef5218), UINT64_C (0xd69906245565a910), -+ UINT64_C (0xf40e35855771202a), UINT64_C (0x106aa07032bbd1b8), -+ UINT64_C (0x19a4c116b8d2d0c8), UINT64_C (0x1e376c085141ab53), -+ UINT64_C (0x2748774cdf8eeb99), UINT64_C (0x34b0bcb5e19b48a8), -+ UINT64_C (0x391c0cb3c5c95a63), UINT64_C (0x4ed8aa4ae3418acb), -+ UINT64_C (0x5b9cca4f7763e373), UINT64_C (0x682e6ff3d6b2b8a3), -+ UINT64_C (0x748f82ee5defb2fc), UINT64_C (0x78a5636f43172f60), -+ UINT64_C (0x84c87814a1f0ab72), UINT64_C (0x8cc702081a6439ec), -+ UINT64_C (0x90befffa23631e28), UINT64_C (0xa4506cebde82bde9), -+ UINT64_C (0xbef9a3f7b2c67915), UINT64_C (0xc67178f2e372532b), -+ UINT64_C (0xca273eceea26619c), UINT64_C (0xd186b8c721c0c207), -+ UINT64_C (0xeada7dd6cde0eb1e), UINT64_C (0xf57d4f7fee6ed178), -+ UINT64_C (0x06f067aa72176fba), UINT64_C (0x0a637dc5a2c898a6), -+ UINT64_C (0x113f9804bef90dae), UINT64_C (0x1b710b35131c471b), -+ UINT64_C (0x28db77f523047d84), UINT64_C (0x32caab7b40c72493), -+ UINT64_C (0x3c9ebe0a15c9bebc), UINT64_C (0x431d67c49c100d4c), -+ UINT64_C (0x4cc5d4becb3e42b6), UINT64_C (0x597f299cfc657e2a), -+ UINT64_C (0x5fcb6fab3ad6faec), UINT64_C (0x6c44198c4a475817) -+ }; -+ -+ -+/* Process LEN bytes of BUFFER, accumulating context into CTX. -+ It is assumed that LEN % 128 == 0. */ -+static void -+sha512_process_block (const void *buffer, size_t len, struct sha512_ctx *ctx) -+{ -+ const uint64_t *words = buffer; -+ size_t nwords = len / sizeof (uint64_t); -+ uint64_t a = ctx->H[0]; -+ uint64_t b = ctx->H[1]; -+ uint64_t c = ctx->H[2]; -+ uint64_t d = ctx->H[3]; -+ uint64_t e = ctx->H[4]; -+ uint64_t f = ctx->H[5]; -+ uint64_t g = ctx->H[6]; -+ uint64_t h = ctx->H[7]; -+ -+ /* First increment the byte count. FIPS 180-2 specifies the possible -+ length of the file up to 2^128 bits. Here we only compute the -+ number of bytes. Do a double word increment. */ -+ ctx->total[0] += len; -+ if (ctx->total[0] < len) -+ ++ctx->total[1]; -+ -+ /* Process all bytes in the buffer with 128 bytes in each round of -+ the loop. */ -+ while (nwords > 0) -+ { -+ uint64_t W[80]; -+ uint64_t a_save = a; -+ uint64_t b_save = b; -+ uint64_t c_save = c; -+ uint64_t d_save = d; -+ uint64_t e_save = e; -+ uint64_t f_save = f; -+ uint64_t g_save = g; -+ uint64_t h_save = h; -+ unsigned int t; -+ -+ /* Operators defined in FIPS 180-2:4.1.2. */ -+#define Ch(x, y, z) ((x & y) ^ (~x & z)) -+#define Maj(x, y, z) ((x & y) ^ (x & z) ^ (y & z)) -+#define S0(x) (CYCLIC (x, 28) ^ CYCLIC (x, 34) ^ CYCLIC (x, 39)) -+#define S1(x) (CYCLIC (x, 14) ^ CYCLIC (x, 18) ^ CYCLIC (x, 41)) -+#define R0(x) (CYCLIC (x, 1) ^ CYCLIC (x, 8) ^ (x >> 7)) -+#define R1(x) (CYCLIC (x, 19) ^ CYCLIC (x, 61) ^ (x >> 6)) -+ -+ /* It is unfortunate that C does not provide an operator for -+ cyclic rotation. Hope the C compiler is smart enough. */ -+#define CYCLIC(w, s) ((w >> s) | (w << (64 - s))) -+ -+ /* Compute the message schedule according to FIPS 180-2:6.3.2 step 2. */ -+ for (t = 0; t < 16; ++t) -+ { -+ W[t] = SWAP (*words); -+ ++words; -+ } -+ for (t = 16; t < 80; ++t) -+ W[t] = R1 (W[t - 2]) + W[t - 7] + R0 (W[t - 15]) + W[t - 16]; -+ -+ /* The actual computation according to FIPS 180-2:6.3.2 step 3. */ -+ for (t = 0; t < 80; ++t) -+ { -+ uint64_t T1 = h + S1 (e) + Ch (e, f, g) + K[t] + W[t]; -+ uint64_t T2 = S0 (a) + Maj (a, b, c); -+ h = g; -+ g = f; -+ f = e; -+ e = d + T1; -+ d = c; -+ c = b; -+ b = a; -+ a = T1 + T2; -+ } -+ -+ /* Add the starting values of the context according to FIPS 180-2:6.3.2 -+ step 4. */ -+ a += a_save; -+ b += b_save; -+ c += c_save; -+ d += d_save; -+ e += e_save; -+ f += f_save; -+ g += g_save; -+ h += h_save; -+ -+ /* Prepare for the next round. */ -+ nwords -= 16; -+ } -+ -+ /* Put checksum in context given as argument. */ -+ ctx->H[0] = a; -+ ctx->H[1] = b; -+ ctx->H[2] = c; -+ ctx->H[3] = d; -+ ctx->H[4] = e; -+ ctx->H[5] = f; -+ ctx->H[6] = g; -+ ctx->H[7] = h; -+} -+ -+ -+/* Initialize structure containing state of computation. -+ (FIPS 180-2:5.3.3) */ -+static void -+sha512_init_ctx (struct sha512_ctx *ctx) -+{ -+ ctx->H[0] = UINT64_C (0x6a09e667f3bcc908); -+ ctx->H[1] = UINT64_C (0xbb67ae8584caa73b); -+ ctx->H[2] = UINT64_C (0x3c6ef372fe94f82b); -+ ctx->H[3] = UINT64_C (0xa54ff53a5f1d36f1); -+ ctx->H[4] = UINT64_C (0x510e527fade682d1); -+ ctx->H[5] = UINT64_C (0x9b05688c2b3e6c1f); -+ ctx->H[6] = UINT64_C (0x1f83d9abfb41bd6b); -+ ctx->H[7] = UINT64_C (0x5be0cd19137e2179); -+ -+ ctx->total[0] = ctx->total[1] = 0; -+ ctx->buflen = 0; -+} -+ -+ -+/* Process the remaining bytes in the internal buffer and the usual -+ prolog according to the standard and write the result to RESBUF. -+ -+ IMPORTANT: On some systems it is required that RESBUF is correctly -+ aligned for a 32 bits value. */ -+static void * -+sha512_finish_ctx (struct sha512_ctx *ctx, void *resbuf) -+{ -+ /* Take yet unprocessed bytes into account. */ -+ uint64_t bytes = ctx->buflen; -+ size_t pad; -+ unsigned int i; -+ -+ /* Now count remaining bytes. */ -+ ctx->total[0] += bytes; -+ if (ctx->total[0] < bytes) -+ ++ctx->total[1]; -+ -+ pad = bytes >= 112 ? 128 + 112 - bytes : 112 - bytes; -+ memcpy (&ctx->buffer[bytes], fillbuf, pad); -+ -+ /* Put the 128-bit file length in *bits* at the end of the buffer. */ -+ *(uint64_t *) &ctx->buffer[bytes + pad + 8] = SWAP (ctx->total[0] << 3); -+ *(uint64_t *) &ctx->buffer[bytes + pad] = SWAP ((ctx->total[1] << 3) | -+ (ctx->total[0] >> 61)); -+ -+ /* Process last bytes. */ -+ sha512_process_block (ctx->buffer, bytes + pad + 16, ctx); -+ -+ /* Put result from CTX in first 64 bytes following RESBUF. */ -+ for (i = 0; i < 8; ++i) -+ ((uint64_t *) resbuf)[i] = SWAP (ctx->H[i]); -+ -+ return resbuf; -+} -+ -+ -+static void -+sha512_process_bytes (const void *buffer, size_t len, struct sha512_ctx *ctx) -+{ -+ /* When we already have some bits in our internal buffer concatenate -+ both inputs first. */ -+ if (ctx->buflen != 0) -+ { -+ size_t left_over = ctx->buflen; -+ size_t add = 256 - left_over > len ? len : 256 - left_over; -+ -+ memcpy (&ctx->buffer[left_over], buffer, add); -+ ctx->buflen += add; -+ -+ if (ctx->buflen > 128) -+ { -+ sha512_process_block (ctx->buffer, ctx->buflen & ~127, ctx); -+ -+ ctx->buflen &= 127; -+ /* The regions in the following copy operation cannot overlap. */ -+ memcpy (ctx->buffer, &ctx->buffer[(left_over + add) & ~127], -+ ctx->buflen); -+ } -+ -+ buffer = (const char *) buffer + add; -+ len -= add; -+ } -+ -+ /* Process available complete blocks. */ -+ if (len >= 128) -+ { -+/* To check alignment gcc has an appropriate operator. Other -+ compilers don't. */ -+# if __GNUC__ >= 2 -+# define UNALIGNED_P(p) (((uintptr_t) p) % __alignof__ (uint64_t) != 0) -+# else -+# define UNALIGNED_P(p) (((uintptr_t) p) % sizeof (uint64_t) != 0) -+# endif -+ if (UNALIGNED_P (buffer)) -+ while (len > 128) -+ { -+ sha512_process_block (memcpy (ctx->buffer, buffer, 128), 128, -+ ctx); -+ buffer = (const char *) buffer + 128; -+ len -= 128; -+ } -+ else -+ { -+ sha512_process_block (buffer, len & ~127, ctx); -+ buffer = (const char *) buffer + (len & ~127); -+ len &= 127; -+ } -+ } -+ -+ /* Move remaining bytes into internal buffer. */ -+ if (len > 0) -+ { -+ size_t left_over = ctx->buflen; -+ -+ memcpy (&ctx->buffer[left_over], buffer, len); -+ left_over += len; -+ if (left_over >= 128) -+ { -+ sha512_process_block (ctx->buffer, 128, ctx); -+ left_over -= 128; -+ memcpy (ctx->buffer, &ctx->buffer[128], left_over); -+ } -+ ctx->buflen = left_over; -+ } -+} -+ -+ -+/* Define our magic string to mark salt for SHA512 "encryption" -+ replacement. */ -+static const char sha512_salt_prefix[] = "$6$"; -+ -+/* Prefix for optional rounds specification. */ -+static const char sha512_rounds_prefix[] = "rounds="; -+ -+/* Maximum salt string length. */ -+#define SALT_LEN_MAX 16 -+/* Default number of rounds if not explicitly specified. */ -+#define ROUNDS_DEFAULT 5000 -+/* Minimum number of rounds. */ -+#define ROUNDS_MIN 1000 -+/* Maximum number of rounds. */ -+#define ROUNDS_MAX 999999999 -+ -+/* Table with characters for base64 transformation. */ -+static const char b64t[64] = -+"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; -+ -+ -+static char * -+sha512_crypt_r (const char *key, const char *salt, char *buffer, int buflen) -+{ -+ unsigned char alt_result[64] -+ __attribute__ ((__aligned__ (__alignof__ (uint64_t)))); -+ unsigned char temp_result[64] -+ __attribute__ ((__aligned__ (__alignof__ (uint64_t)))); -+ struct sha512_ctx ctx; -+ struct sha512_ctx alt_ctx; -+ size_t salt_len; -+ size_t key_len; -+ size_t cnt; -+ char *cp; -+ char *copied_key = NULL; -+ char *copied_salt = NULL; -+ char *p_bytes; -+ char *s_bytes; -+ /* Default number of rounds. */ -+ size_t rounds = ROUNDS_DEFAULT; -+ bool rounds_custom = false; -+ -+ /* Find beginning of salt string. The prefix should normally always -+ be present. Just in case it is not. */ -+ if (grub_memcmp (sha512_salt_prefix, salt, -+ sizeof (sha512_salt_prefix) - 1) == 0) -+ /* Skip salt prefix. */ -+ salt += sizeof (sha512_salt_prefix) - 1; -+ -+ if (grub_memcmp (salt, sha512_rounds_prefix, -+ sizeof (sha512_rounds_prefix) - 1) == 0) -+ { -+ const char *num = salt + sizeof (sha512_rounds_prefix) - 1; -+ char *endp = (char *)num; -+ int srounds = 0; -+ if (*endp == '0' && tolower (endp[1]) == 'x') -+ /* This would be interpreted as hexadecimal by safe_parse_maxint(). */ -+ endp++; -+ else -+ /* On error, endp and srounds is not changed. */ -+ safe_parse_maxint(&endp, &srounds); -+ if (*endp == '$') -+ { -+ salt = endp + 1; -+ rounds = MAX (ROUNDS_MIN, MIN (srounds, ROUNDS_MAX)); -+ rounds_custom = true; -+ } -+ } -+ -+ salt_len = MIN (strcspn (salt, "$"), SALT_LEN_MAX); -+ key_len = strlen (key); -+ -+ if ((key - (char *) 0) % __alignof__ (uint64_t) != 0) -+ { -+ char *tmp = (char *) alloca (key_len + __alignof__ (uint64_t)); -+ key = copied_key = -+ memcpy (tmp + __alignof__ (uint64_t) -+ - (tmp - (char *) 0) % __alignof__ (uint64_t), -+ key, key_len); -+ } -+ -+ if ((salt - (char *) 0) % __alignof__ (uint64_t) != 0) -+ { -+ char *tmp = (char *) alloca (salt_len + __alignof__ (uint64_t)); -+ salt = copied_salt = -+ memcpy (tmp + __alignof__ (uint64_t) -+ - (tmp - (char *) 0) % __alignof__ (uint64_t), -+ salt, salt_len); -+ } -+ -+ /* Prepare for the real work. */ -+ sha512_init_ctx (&ctx); -+ -+ /* Add the key string. */ -+ sha512_process_bytes (key, key_len, &ctx); -+ -+ /* The last part is the salt string. This must be at most 16 -+ characters and it ends at the first `$' character (for -+ compatibility with existing implementations). */ -+ sha512_process_bytes (salt, salt_len, &ctx); -+ -+ -+ /* Compute alternate SHA512 sum with input KEY, SALT, and KEY. The -+ final result will be added to the first context. */ -+ sha512_init_ctx (&alt_ctx); -+ -+ /* Add key. */ -+ sha512_process_bytes (key, key_len, &alt_ctx); -+ -+ /* Add salt. */ -+ sha512_process_bytes (salt, salt_len, &alt_ctx); -+ -+ /* Add key again. */ -+ sha512_process_bytes (key, key_len, &alt_ctx); -+ -+ /* Now get result of this (64 bytes) and add it to the other -+ context. */ -+ sha512_finish_ctx (&alt_ctx, alt_result); -+ -+ /* Add for any character in the key one byte of the alternate sum. */ -+ for (cnt = key_len; cnt > 64; cnt -= 64) -+ sha512_process_bytes (alt_result, 64, &ctx); -+ sha512_process_bytes (alt_result, cnt, &ctx); -+ -+ /* Take the binary representation of the length of the key and for every -+ 1 add the alternate sum, for every 0 the key. */ -+ for (cnt = key_len; cnt > 0; cnt >>= 1) -+ if ((cnt & 1) != 0) -+ sha512_process_bytes (alt_result, 64, &ctx); -+ else -+ sha512_process_bytes (key, key_len, &ctx); -+ -+ /* Create intermediate result. */ -+ sha512_finish_ctx (&ctx, alt_result); -+ -+ /* Start computation of P byte sequence. */ -+ sha512_init_ctx (&alt_ctx); -+ -+ /* For every character in the password add the entire password. */ -+ for (cnt = 0; cnt < key_len; ++cnt) -+ sha512_process_bytes (key, key_len, &alt_ctx); -+ -+ /* Finish the digest. */ -+ sha512_finish_ctx (&alt_ctx, temp_result); -+ -+ /* Create byte sequence P. */ -+ cp = p_bytes = alloca (key_len); -+ for (cnt = key_len; cnt >= 64; cnt -= 64) -+ { -+ memcpy (cp, temp_result, 64); -+ cp += 64; -+ } -+ memcpy (cp, temp_result, cnt); -+ -+ /* Start computation of S byte sequence. */ -+ sha512_init_ctx (&alt_ctx); -+ -+ /* For every character in the password add the entire password. */ -+ for (cnt = 0; cnt < 16 + alt_result[0]; ++cnt) -+ sha512_process_bytes (salt, salt_len, &alt_ctx); -+ -+ /* Finish the digest. */ -+ sha512_finish_ctx (&alt_ctx, temp_result); -+ -+ /* Create byte sequence S. */ -+ cp = s_bytes = alloca (salt_len); -+ for (cnt = salt_len; cnt >= 64; cnt -= 64) -+ { -+ memcpy (cp, temp_result, 64); -+ cp += 64; -+ } -+ memcpy (cp, temp_result, cnt); -+ -+ /* Repeatedly run the collected hash value through SHA512 to burn -+ CPU cycles. */ -+ for (cnt = 0; cnt < rounds; ++cnt) -+ { -+ /* New context. */ -+ sha512_init_ctx (&ctx); -+ -+ /* Add key or last result. */ -+ if ((cnt & 1) != 0) -+ sha512_process_bytes (p_bytes, key_len, &ctx); -+ else -+ sha512_process_bytes (alt_result, 64, &ctx); -+ -+ /* Add salt for numbers not divisible by 3. */ -+ if (cnt % 3 != 0) -+ sha512_process_bytes (s_bytes, salt_len, &ctx); -+ -+ /* Add key for numbers not divisible by 7. */ -+ if (cnt % 7 != 0) -+ sha512_process_bytes (p_bytes, key_len, &ctx); -+ -+ /* Add key or last result. */ -+ if ((cnt & 1) != 0) -+ sha512_process_bytes (alt_result, 64, &ctx); -+ else -+ sha512_process_bytes (p_bytes, key_len, &ctx); -+ -+ /* Create intermediate result. */ -+ sha512_finish_ctx (&ctx, alt_result); -+ } -+ -+ /* Now we can construct the result string. It consists of three -+ parts. */ -+ cp = stpncpy (buffer, sha512_salt_prefix, MAX (0, buflen)); -+ buflen -= sizeof (sha512_salt_prefix) - 1; -+ -+ if (rounds_custom) -+ { -+ char sbuf[64]; -+ grub_sprintf (sbuf, "%s%llu$", sha512_rounds_prefix, -+ (unsigned long long)rounds); -+ size_t n = strlen (sbuf); -+ memcpy (cp, sbuf, MIN (MAX (0, buflen), n)); -+ cp += n; -+ buflen -= n; -+ } -+ -+ cp = stpncpy (cp, salt, MIN ((size_t) MAX (0, buflen), salt_len)); -+ buflen -= MIN ((size_t) MAX (0, buflen), salt_len); -+ -+ if (buflen > 0) -+ { -+ *cp++ = '$'; -+ --buflen; -+ } -+ -+#define b64_from_24bit(B2, B1, B0, N) \ -+ do { \ -+ unsigned int w = ((B2) << 16) | ((B1) << 8) | (B0); \ -+ int n = (N); \ -+ while (n-- > 0 && buflen > 0) \ -+ { \ -+ *cp++ = b64t[w & 0x3f]; \ -+ --buflen; \ -+ w >>= 6; \ -+ } \ -+ } while (0) -+ -+ b64_from_24bit (alt_result[0], alt_result[21], alt_result[42], 4); -+ b64_from_24bit (alt_result[22], alt_result[43], alt_result[1], 4); -+ b64_from_24bit (alt_result[44], alt_result[2], alt_result[23], 4); -+ b64_from_24bit (alt_result[3], alt_result[24], alt_result[45], 4); -+ b64_from_24bit (alt_result[25], alt_result[46], alt_result[4], 4); -+ b64_from_24bit (alt_result[47], alt_result[5], alt_result[26], 4); -+ b64_from_24bit (alt_result[6], alt_result[27], alt_result[48], 4); -+ b64_from_24bit (alt_result[28], alt_result[49], alt_result[7], 4); -+ b64_from_24bit (alt_result[50], alt_result[8], alt_result[29], 4); -+ b64_from_24bit (alt_result[9], alt_result[30], alt_result[51], 4); -+ b64_from_24bit (alt_result[31], alt_result[52], alt_result[10], 4); -+ b64_from_24bit (alt_result[53], alt_result[11], alt_result[32], 4); -+ b64_from_24bit (alt_result[12], alt_result[33], alt_result[54], 4); -+ b64_from_24bit (alt_result[34], alt_result[55], alt_result[13], 4); -+ b64_from_24bit (alt_result[56], alt_result[14], alt_result[35], 4); -+ b64_from_24bit (alt_result[15], alt_result[36], alt_result[57], 4); -+ b64_from_24bit (alt_result[37], alt_result[58], alt_result[16], 4); -+ b64_from_24bit (alt_result[59], alt_result[17], alt_result[38], 4); -+ b64_from_24bit (alt_result[18], alt_result[39], alt_result[60], 4); -+ b64_from_24bit (alt_result[40], alt_result[61], alt_result[19], 4); -+ b64_from_24bit (alt_result[62], alt_result[20], alt_result[41], 4); -+ b64_from_24bit (0, 0, alt_result[63], 2); -+ -+ if (buflen <= 0) -+ buffer = NULL; -+ else -+ *cp = '\0'; /* Terminate the string. */ -+ -+ /* Clear the buffer for the intermediate result so that people -+ attaching to processes or reading core dumps cannot get any -+ information. We do it in this way to clear correct_words[] -+ inside the SHA512 implementation as well. */ -+ sha512_init_ctx (&ctx); -+ sha512_finish_ctx (&ctx, alt_result); -+ memset (temp_result, '\0', sizeof (temp_result)); -+ memset (p_bytes, '\0', key_len); -+ memset (s_bytes, '\0', salt_len); -+ memset (&ctx, '\0', sizeof (ctx)); -+ memset (&alt_ctx, '\0', sizeof (alt_ctx)); -+ if (copied_key != NULL) -+ memset (copied_key, '\0', key_len); -+ if (copied_salt != NULL) -+ memset (copied_salt, '\0', salt_len); -+ -+ return buffer; -+} -+ -+ -+/* This entry point is equivalent to the `crypt' function in Unix -+ libcs. */ -+char * -+sha512_crypt (const char *key, const char *salt) -+{ -+ /* We don't want to have an arbitrary limit in the size of the -+ password. We can compute an upper bound for the size of the -+ result in advance and so we can prepare the buffer we pass to -+ `sha512_crypt_r'. */ -+ static char buffer[sizeof (sha512_salt_prefix) - 1 -+ + sizeof (sha512_rounds_prefix) + 9 + 1 -+ + 256 + 1 + 86 + 1]; /* 256 bytes for salt */ -+ int needed = (sizeof (sha512_salt_prefix) - 1 -+ + sizeof (sha512_rounds_prefix) + 9 + 1 -+ + strlen (salt) + 1 + 86 + 1); -+ -+ if (sizeof (buffer) < needed) -+ return NULL; -+ -+ return sha512_crypt_r (key, salt, buffer, sizeof (buffer)); -+} -+ -+ -+#ifdef TEST -+static const struct -+{ -+ const char *input; -+ const char result[64]; -+} tests[] = -+ { -+ /* Test vectors from FIPS 180-2: appendix C.1. */ -+ { "abc", -+ "\xdd\xaf\x35\xa1\x93\x61\x7a\xba\xcc\x41\x73\x49\xae\x20\x41\x31" -+ "\x12\xe6\xfa\x4e\x89\xa9\x7e\xa2\x0a\x9e\xee\xe6\x4b\x55\xd3\x9a" -+ "\x21\x92\x99\x2a\x27\x4f\xc1\xa8\x36\xba\x3c\x23\xa3\xfe\xeb\xbd" -+ "\x45\x4d\x44\x23\x64\x3c\xe8\x0e\x2a\x9a\xc9\x4f\xa5\x4c\xa4\x9f" }, -+ /* Test vectors from FIPS 180-2: appendix C.2. */ -+ { "abcdefghbcdefghicdefghijdefghijkefghijklfghijklmghijklmn" -+ "hijklmnoijklmnopjklmnopqklmnopqrlmnopqrsmnopqrstnopqrstu", -+ "\x8e\x95\x9b\x75\xda\xe3\x13\xda\x8c\xf4\xf7\x28\x14\xfc\x14\x3f" -+ "\x8f\x77\x79\xc6\xeb\x9f\x7f\xa1\x72\x99\xae\xad\xb6\x88\x90\x18" -+ "\x50\x1d\x28\x9e\x49\x00\xf7\xe4\x33\x1b\x99\xde\xc4\xb5\x43\x3a" -+ "\xc7\xd3\x29\xee\xb6\xdd\x26\x54\x5e\x96\xe5\x5b\x87\x4b\xe9\x09" }, -+ /* Test vectors from the NESSIE project. */ -+ { "", -+ "\xcf\x83\xe1\x35\x7e\xef\xb8\xbd\xf1\x54\x28\x50\xd6\x6d\x80\x07" -+ "\xd6\x20\xe4\x05\x0b\x57\x15\xdc\x83\xf4\xa9\x21\xd3\x6c\xe9\xce" -+ "\x47\xd0\xd1\x3c\x5d\x85\xf2\xb0\xff\x83\x18\xd2\x87\x7e\xec\x2f" -+ "\x63\xb9\x31\xbd\x47\x41\x7a\x81\xa5\x38\x32\x7a\xf9\x27\xda\x3e" }, -+ { "a", -+ "\x1f\x40\xfc\x92\xda\x24\x16\x94\x75\x09\x79\xee\x6c\xf5\x82\xf2" -+ "\xd5\xd7\xd2\x8e\x18\x33\x5d\xe0\x5a\xbc\x54\xd0\x56\x0e\x0f\x53" -+ "\x02\x86\x0c\x65\x2b\xf0\x8d\x56\x02\x52\xaa\x5e\x74\x21\x05\x46" -+ "\xf3\x69\xfb\xbb\xce\x8c\x12\xcf\xc7\x95\x7b\x26\x52\xfe\x9a\x75" }, -+ { "message digest", -+ "\x10\x7d\xbf\x38\x9d\x9e\x9f\x71\xa3\xa9\x5f\x6c\x05\x5b\x92\x51" -+ "\xbc\x52\x68\xc2\xbe\x16\xd6\xc1\x34\x92\xea\x45\xb0\x19\x9f\x33" -+ "\x09\xe1\x64\x55\xab\x1e\x96\x11\x8e\x8a\x90\x5d\x55\x97\xb7\x20" -+ "\x38\xdd\xb3\x72\xa8\x98\x26\x04\x6d\xe6\x66\x87\xbb\x42\x0e\x7c" }, -+ { "abcdefghijklmnopqrstuvwxyz", -+ "\x4d\xbf\xf8\x6c\xc2\xca\x1b\xae\x1e\x16\x46\x8a\x05\xcb\x98\x81" -+ "\xc9\x7f\x17\x53\xbc\xe3\x61\x90\x34\x89\x8f\xaa\x1a\xab\xe4\x29" -+ "\x95\x5a\x1b\xf8\xec\x48\x3d\x74\x21\xfe\x3c\x16\x46\x61\x3a\x59" -+ "\xed\x54\x41\xfb\x0f\x32\x13\x89\xf7\x7f\x48\xa8\x79\xc7\xb1\xf1" }, -+ { "abcdbcdecdefdefgefghfghighijhijkijkljklmklmnlmnomnopnopq", -+ "\x20\x4a\x8f\xc6\xdd\xa8\x2f\x0a\x0c\xed\x7b\xeb\x8e\x08\xa4\x16" -+ "\x57\xc1\x6e\xf4\x68\xb2\x28\xa8\x27\x9b\xe3\x31\xa7\x03\xc3\x35" -+ "\x96\xfd\x15\xc1\x3b\x1b\x07\xf9\xaa\x1d\x3b\xea\x57\x78\x9c\xa0" -+ "\x31\xad\x85\xc7\xa7\x1d\xd7\x03\x54\xec\x63\x12\x38\xca\x34\x45" }, -+ { "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789", -+ "\x1e\x07\xbe\x23\xc2\x6a\x86\xea\x37\xea\x81\x0c\x8e\xc7\x80\x93" -+ "\x52\x51\x5a\x97\x0e\x92\x53\xc2\x6f\x53\x6c\xfc\x7a\x99\x96\xc4" -+ "\x5c\x83\x70\x58\x3e\x0a\x78\xfa\x4a\x90\x04\x1d\x71\xa4\xce\xab" -+ "\x74\x23\xf1\x9c\x71\xb9\xd5\xa3\xe0\x12\x49\xf0\xbe\xbd\x58\x94" }, -+ { "123456789012345678901234567890123456789012345678901234567890" -+ "12345678901234567890", -+ "\x72\xec\x1e\xf1\x12\x4a\x45\xb0\x47\xe8\xb7\xc7\x5a\x93\x21\x95" -+ "\x13\x5b\xb6\x1d\xe2\x4e\xc0\xd1\x91\x40\x42\x24\x6e\x0a\xec\x3a" -+ "\x23\x54\xe0\x93\xd7\x6f\x30\x48\xb4\x56\x76\x43\x46\x90\x0c\xb1" -+ "\x30\xd2\xa4\xfd\x5d\xd1\x6a\xbb\x5e\x30\xbc\xb8\x50\xde\xe8\x43" } -+ }; -+#define ntests (sizeof (tests) / sizeof (tests[0])) -+ -+ -+static const struct -+{ -+ const char *salt; -+ const char *input; -+ const char *expected; -+} tests2[] = -+{ -+ { "$6$saltstring", "Hello world!", -+ "$6$saltstring$svn8UoSVapNtMuq1ukKS4tPQd8iKwSMHWjl/O817G3uBnIFNjnQJu" -+ "esI68u4OTLiBFdcbYEdFCoEOfaS35inz1" }, -+ { "$6$rounds=10000$saltstringsaltstring", "Hello world!", -+ "$6$rounds=10000$saltstringsaltst$OW1/O6BYHV6BcXZu8QVeXbDWra3Oeqh0sb" -+ "HbbMCVNSnCM/UrjmM0Dp8vOuZeHBy/YTBmSK6H9qs/y3RnOaw5v." }, -+ { "$6$rounds=5000$toolongsaltstring", "This is just a test", -+ "$6$rounds=5000$toolongsaltstrin$lQ8jolhgVRVhY4b5pZKaysCLi0QBxGoNeKQ" -+ "zQ3glMhwllF7oGDZxUhx1yxdYcz/e1JSbq3y6JMxxl8audkUEm0" }, -+ { "$6$rounds=1400$anotherlongsaltstring", -+ "a very much longer text to encrypt. This one even stretches over more" -+ "than one line.", -+ "$6$rounds=1400$anotherlongsalts$POfYwTEok97VWcjxIiSOjiykti.o/pQs.wP" -+ "vMxQ6Fm7I6IoYN3CmLs66x9t0oSwbtEW7o7UmJEiDwGqd8p4ur1" }, -+ { "$6$rounds=77777$short", -+ "we have a short salt string but not a short password", -+ "$6$rounds=77777$short$WuQyW2YR.hBNpjjRhpYD/ifIw05xdfeEyQoMxIXbkvr0g" -+ "ge1a1x3yRULJ5CCaUeOxFmtlcGZelFl5CxtgfiAc0" }, -+ { "$6$rounds=123456$asaltof16chars..", "a short string", -+ "$6$rounds=123456$asaltof16chars..$BtCwjqMJGx5hrJhZywWvt0RLE8uZ4oPwc" -+ "elCjmw2kSYu.Ec6ycULevoBK25fs2xXgMNrCzIMVcgEJAstJeonj1" }, -+ { "$6$rounds=10$roundstoolow", "the minimum number is still observed", -+ "$6$rounds=1000$roundstoolow$kUMsbe306n21p9R.FRkW3IGn.S9NPN0x50YhH1x" -+ "hLsPuWGsUSklZt58jaTfF4ZEQpyUNGc0dqbpBYYBaHHrsX." }, -+}; -+#define ntests2 (sizeof (tests2) / sizeof (tests2[0])) -+ -+ -+int -+sha512_test (void) -+{ -+ struct sha512_ctx ctx; -+ char sum[64]; -+ int result = 0; -+ int cnt, i; -+ -+ for (cnt = 0; cnt < (int) ntests; ++cnt) -+ { -+ sha512_init_ctx (&ctx); -+ sha512_process_bytes (tests[cnt].input, strlen (tests[cnt].input), &ctx); -+ sha512_finish_ctx (&ctx, sum); -+ if (memcmp (tests[cnt].result, sum, 64) != 0) -+ { -+ printf ("test %d run %d failed\n", cnt, 1); -+ result = 1; -+ } -+ -+ sha512_init_ctx (&ctx); -+ for (i = 0; tests[cnt].input[i] != '\0'; ++i) -+ sha512_process_bytes (&tests[cnt].input[i], 1, &ctx); -+ sha512_finish_ctx (&ctx, sum); -+ if (memcmp (tests[cnt].result, sum, 64) != 0) -+ { -+ printf ("test %d run %d failed\n", cnt, 2); -+ result = 1; -+ } -+ } -+ -+ /* Test vector from FIPS 180-2: appendix C.3. */ -+ char buf[1000]; -+ memset (buf, 'a', sizeof (buf)); -+ sha512_init_ctx (&ctx); -+ for (i = 0; i < 1000; ++i) -+ sha512_process_bytes (buf, sizeof (buf), &ctx); -+ sha512_finish_ctx (&ctx, sum); -+ static const char expected[64] = -+ "\xe7\x18\x48\x3d\x0c\xe7\x69\x64\x4e\x2e\x42\xc7\xbc\x15\xb4\x63" -+ "\x8e\x1f\x98\xb1\x3b\x20\x44\x28\x56\x32\xa8\x03\xaf\xa9\x73\xeb" -+ "\xde\x0f\xf2\x44\x87\x7e\xa6\x0a\x4c\xb0\x43\x2c\xe5\x77\xc3\x1b" -+ "\xeb\x00\x9c\x5c\x2c\x49\xaa\x2e\x4e\xad\xb2\x17\xad\x8c\xc0\x9b"; -+ if (memcmp (expected, sum, 64) != 0) -+ { -+ printf ("test %d failed\n", cnt); -+ result = 1; -+ } -+ -+ for (cnt = 0; cnt < ntests2; ++cnt) -+ { -+ char *cp = sha512_crypt (tests2[cnt].input, tests2[cnt].salt); -+ -+ if (strcmp (cp, tests2[cnt].expected) != 0) -+ { -+ printf ("test %d: expected "%s", got "%s"\n", -+ cnt, tests2[cnt].expected, cp); -+ result = 1; -+ } -+ } -+ -+ if (result == 0) -+ printf ("all tests OK\n"); -+ -+ return result; -+} -+#endif -diff --git a/stage2/shared.h b/stage2/shared.h -index 77eef11..b56b44b 100644 ---- a/stage2/shared.h -+++ b/stage2/shared.h -@@ -35,9 +35,10 @@ - #endif - - /* Maybe redirect memory requests through grub_scratch_mem. */ --#ifdef GRUB_UTIL --extern char *grub_scratch_mem; --# define RAW_ADDR(x) ((x) + (int) grub_scratch_mem) -+#if defined(GRUB_UTIL) || defined(PLATFORM_EFI) -+#define GRUB_SCRATCH_MEM_SIZE 0x400000 -+extern void *grub_scratch_mem; -+# define RAW_ADDR(x) ((x) + (unsigned long) grub_scratch_mem) - # define RAW_SEG(x) (RAW_ADDR ((x) << 4) >> 4) - #else - # define RAW_ADDR(x) (x) -@@ -56,15 +57,15 @@ extern char *grub_scratch_mem; - #define NEW_HEAPSIZE 1500 - - /* 512-byte scratch area */ --#define SCRATCHADDR RAW_ADDR (0x77e00) --#define SCRATCHSEG RAW_SEG (0x77e0) -+#define SCRATCHADDR RAW_ADDR (0x77000) -+#define SCRATCHSEG RAW_SEG (0x7700) - - /* -- * This is the location of the raw device buffer. It is 31.5K -+ * This is the location of the raw device buffer. It is 28K - * in size. - */ - --#define BUFFERLEN 0x7e00 -+#define BUFFERLEN 0x7000 - #define BUFFERADDR RAW_ADDR (0x70000) - #define BUFFERSEG RAW_SEG (0x7000) - -@@ -79,6 +80,8 @@ extern char *grub_scratch_mem; - #define BIOSDISK_FLAG_LBA_EXTENSION 0x1 - #define BIOSDISK_FLAG_CDROM 0x2 - -+#define MAX_HD_NUM 128 -+ - /* - * This is the filesystem (not raw device) buffer. - * It is 32K in size, do not overrun! -@@ -127,7 +130,7 @@ extern char *grub_scratch_mem; - #define MENU_BUFLEN (0x8000 + PASSWORD_BUF - MENU_BUF) - - /* The size of the drive map. */ --#define DRIVE_MAP_SIZE 8 -+#define DRIVE_MAP_SIZE 128 - - /* The size of the key map. */ - #define KEY_MAP_SIZE 128 -@@ -160,16 +163,18 @@ extern char *grub_scratch_mem; - #define LINUX_VID_MODE_ASK 0xFFFD - - #define LINUX_CL_OFFSET 0x9000 --#define LINUX_CL_END_OFFSET 0x90FF --#define LINUX_SETUP_MOVE_SIZE 0x9100 -+#define LINUX_CL_END_OFFSET 0x97FF -+#define LINUX_SETUP_MOVE_SIZE 0x9800 - #define LINUX_CL_MAGIC 0xA33F - - /* - * General disk stuff - */ - -+#ifndef PLATFORM_EFI - #define SECTOR_SIZE 0x200 - #define SECTOR_BITS 9 -+#endif /* PLATFORM_EFI */ - #define BIOS_FLAG_FIXED_DISK 0x80 - - #define BOOTSEC_LOCATION RAW_ADDR (0x7C00) -@@ -200,6 +205,8 @@ extern char *grub_scratch_mem; - #define STAGE2_FORCE_LBA 0x11 - #define STAGE2_VER_STR_OFFS 0x12 - -+#define STAGE2_ONCEONLY_ENTRY 0x10000 -+ - /* Stage 2 identifiers */ - #define STAGE2_ID_STAGE2 0 - #define STAGE2_ID_FFS_STAGE1_5 1 -@@ -360,7 +367,7 @@ extern char *grub_scratch_mem; - #define memcpy grub_memmove /* we don't need a separate memcpy */ - #define memset grub_memset - #define isspace grub_isspace --#define printf grub_printf -+#define printf(format...) grub_printf(format) - #define sprintf grub_sprintf - #undef putchar - #define putchar grub_putchar -@@ -371,14 +378,24 @@ extern char *grub_scratch_mem; - #define tolower grub_tolower - #define strlen grub_strlen - #define strcpy grub_strcpy -+#define stpncpy grub_stpncpy -+#define strspn grub_strspn -+#define strcspn grub_strcspn -+#define strtok_r grub_strtok_r -+#define strchr grub_strchr -+#define strrchr grub_strrchr -+#define strnchr grub_strnchr -+#define strncpy grub_strncpy -+#define strncasecmp grub_strncasecmp - #endif /* WITHOUT_LIBC_STUBS */ - -- - #ifndef ASM_FILE - /* - * Below this should be ONLY defines and other constructs for C code. - */ - -+#include <stdarg.h> -+ - /* multiboot stuff */ - - #include "mb_header.h" -@@ -400,30 +417,33 @@ struct linux_kernel_header - unsigned short root_dev; /* Default root device number */ - unsigned short boot_flag; /* 0xAA55 magic number */ - unsigned short jump; /* Jump instruction */ -- unsigned long header; /* Magic signature "HdrS" */ -+ unsigned int header; /* Magic signature "HdrS" */ - unsigned short version; /* Boot protocol version supported */ -- unsigned long realmode_swtch; /* Boot loader hook */ -- unsigned long start_sys; /* Points to kernel version string */ -+ unsigned int realmode_swtch; /* Boot loader hook */ -+ unsigned int start_sys; /* Points to kernel version string */ - unsigned char type_of_loader; /* Boot loader identifier */ - unsigned char loadflags; /* Boot protocol option flags */ - unsigned short setup_move_size; /* Move to high memory size */ -- unsigned long code32_start; /* Boot loader hook */ -- unsigned long ramdisk_image; /* initrd load address */ -- unsigned long ramdisk_size; /* initrd size */ -- unsigned long bootsect_kludge; /* obsolete */ -+ unsigned int code32_start; /* Boot loader hook */ -+ unsigned int ramdisk_image; /* initrd load address */ -+ unsigned int ramdisk_size; /* initrd size */ -+ unsigned int bootsect_kludge; /* obsolete */ - unsigned short heap_end_ptr; /* Free memory after setup end */ - unsigned short pad1; /* Unused */ - char *cmd_line_ptr; /* Points to the kernel command line */ -- unsigned long initrd_addr_max; /* The highest address of initrd */ -+ unsigned int initrd_addr_max; /* The highest address of initrd */ -+ unsigned int kernel_alignment; /* Physical addr alignment required for kernel */ -+ unsigned int relocatable_kernel; /* Whether kernel is relocatable or not */ -+ unsigned int cmdline_size; /* Maximum size of the kernel command line */ - } __attribute__ ((packed)); - - /* Memory map address range descriptor used by GET_MMAP_ENTRY. */ - struct mmar_desc - { -- unsigned long desc_len; /* Size of this descriptor. */ -+ unsigned int desc_len; /* Size of this descriptor. */ - unsigned long long addr; /* Base address. */ - unsigned long long length; /* Length in bytes. */ -- unsigned long type; /* Type of address range. */ -+ unsigned int type; /* Type of address range. */ - } __attribute__ ((packed)); - - /* VBE controller information. */ -@@ -600,6 +620,7 @@ typedef enum - { - PASSWORD_PLAIN, - PASSWORD_MD5, -+ PASSWORD_ENCRYPTED, - PASSWORD_UNSUPPORTED - } - password_t; -@@ -627,8 +648,16 @@ extern void (*disk_read_func) (int, int, int); - #ifndef STAGE1_5 - /* The flag for debug mode. */ - extern int debug; -+extern int debug_graphics; - #endif /* STAGE1_5 */ - -+/* Verbose mode flag. */ -+extern int grub_verbose; -+#define verbose_printf(format...) \ -+ do { if (grub_verbose) printf(format); } while (0) -+#define grub_verbose_printf(format...) \ -+ do { if (grub_verbose) grub_printf(format); } while (0) -+ - extern unsigned long current_drive; - extern unsigned long current_partition; - -@@ -666,6 +695,8 @@ extern struct geometry buf_geom; - extern int filepos; - extern int filemax; - -+extern int silent_grub; -+ - /* - * Common BIOS/boot data. - */ -@@ -804,11 +835,17 @@ int getkey (void); - available. */ - int checkkey (void); - -+/* Return keyboard modifier status. */ -+int -+keystatus (void); -+ - /* Low-level disk I/O */ - int get_diskinfo (int drive, struct geometry *geometry); - int biosdisk (int subfunc, int drive, struct geometry *geometry, - int sector, int nsec, int segment); - void stop_floppy (void); -+int get_sector_size (int drive); -+int get_sector_bits (int drive); - - /* Command-line interface functions. */ - #ifndef STAGE1_5 -@@ -860,17 +897,25 @@ void init_builtins (void); - void init_config (void); - char *skip_to (int after_equal, char *cmdline); - struct builtin *find_command (char *command); --void print_cmdline_message (int forever); - void enter_cmdline (char *heap, int forever); - int run_script (char *script, char *heap); -+ -+/* the flags for the cmdline message */ -+#define CMDLINE_FOREVER_MODE 0x0 -+#define CMDLINE_NORMAL_MODE 0x1 -+#define CMDLINE_EDIT_MODE 0x2 -+ -+void print_cmdline_message (int type); - #endif - - /* C library replacement functions with identical semantics. */ --void grub_printf (const char *format,...); -+int grub_vsprintf (char *str, const char *fmt, va_list args); -+void grub_printf (char *format,...); - int grub_sprintf (char *buffer, const char *format, ...); - int grub_tolower (int c); - int grub_isspace (int c); - int grub_strncat (char *s1, const char *s2, int n); -+void grub_memcpy(void *dest, const void *src, int len); - void *grub_memmove (void *to, const void *from, int len); - void *grub_memset (void *start, int c, int len); - int grub_strncat (char *s1, const char *s2, int n); -@@ -879,9 +924,19 @@ int grub_memcmp (const char *s1, const char *s2, int n); - int grub_strcmp (const char *s1, const char *s2); - int grub_strlen (const char *str); - char *grub_strcpy (char *dest, const char *src); -+char *grub_stpncpy (char *dest, const char *src, int n); -+int grub_strspn(const char *s, const char *accept); -+int grub_strcspn(const char *s, const char *reject); -+char *grub_strtok_r(char *s, const char *delim, char **ptrptr); -+char *grub_strchr (const char *s, int c); -+char *grub_strrchr (const char *s, int c); -+char *grub_strnchr (const char *s, int c); -+int grub_strnlen (const char *s, int n); -+char *grub_strncpy (char *new, const char *s, int n); -+int grub_strncasecmp(const char *s0, const char *s1, int n); - - #ifndef GRUB_UTIL --typedef unsigned long grub_jmp_buf[6]; -+typedef unsigned long grub_jmp_buf[8]; - #else - /* In the grub shell, use the libc jmp_buf instead. */ - # include <setjmp.h> -@@ -904,10 +959,11 @@ extern grub_jmp_buf restart_cmdline_env; - /* misc */ - void init_page (void); - void print_error (void); --char *convert_to_ascii (char *buf, int c, ...); -+char *convert_to_ascii (char *buf, int c, unsigned int num); - int get_cmdline (char *prompt, char *cmdline, int maxlen, - int echo_char, int history); - int substring (const char *s1, const char *s2); -+int subcasestring (const char *s1, const char *s2); - int nul_terminate (char *str); - int get_based_digit (int c, int base); - int safe_parse_maxint (char **str_ptr, int *myint_ptr); -@@ -934,7 +990,9 @@ int next_partition (unsigned long drive, unsigned long dest, - unsigned long *partition, int *type, - unsigned long *start, unsigned long *len, - unsigned long *offset, int *entry, -- unsigned long *ext_offset, char *buf); -+ unsigned long *ext_offset, -+ unsigned long *gpt_offset, int *gpt_count, -+ int *gpt_size, char *buf); - - /* Sets device to the one represented by the SAVED_* parameters. */ - int make_saved_active (void); -@@ -962,6 +1020,8 @@ int dir (char *dirname); - - int set_bootdev (int hdbias); - -+char *get_fsys_type (void); -+ - /* Display statistics on the current active device. */ - void print_fsys_type (void); - -@@ -987,10 +1047,22 @@ int load_module (char *module, char *arg); - int load_initrd (char *initrd); - - int check_password(char *entered, char* expected, password_t type); -+ -+char *sha256_crypt (const char *key, const char *salt); -+char *sha512_crypt (const char *key, const char *salt); - #endif - - void init_bios_info (void); - -+#ifdef PLATFORM_EFI -+void grub_set_config_file (char *path_name); -+int grub_save_saved_default (int new_default); -+extern int check_device (const char *device); -+extern void assign_device_name (int drive, const char *device); -+#endif -+int grub_load_linux (char *kernel, char *arg); -+int grub_load_initrd (char *initrd); -+int grub_chainloader (char *filename); - #endif /* ASM_FILE */ - - #endif /* ! GRUB_SHARED_HEADER */ -diff --git a/stage2/smp-imps.h b/stage2/smp-imps.h -index c0fdce3..bae9b77 100644 ---- a/stage2/smp-imps.h -+++ b/stage2/smp-imps.h -@@ -196,7 +196,6 @@ struct imps_interrupt - - int imps_probe (void); - -- - /* - * Defines that use variables - */ -diff --git a/stage2/stage1_5.c b/stage2/stage1_5.c -index 5c45d4c..c2d9632 100644 ---- a/stage2/stage1_5.c -+++ b/stage2/stage1_5.c -@@ -30,7 +30,8 @@ disk_read_savesect_func (int sector, int offset, int length) - void - cmain (void) - { -- grub_printf ("\n\nGRUB loading, please wait...\n"); -+ if (0) -+ grub_printf ("\n\nGRUB loading, please wait...\n"); - - /* - * Here load the true second-stage boot-loader. -diff --git a/stage2/stage2.c b/stage2/stage2.c -index 4dbf6f5..cca4332 100644 ---- a/stage2/stage2.c -+++ b/stage2/stage2.c -@@ -22,6 +22,8 @@ - - grub_jmp_buf restart_env; - -+int silent_grub = 0; -+ - #if defined(PRESET_MENU_STRING) || defined(SUPPORT_DISKLESS) - - # if defined(PRESET_MENU_STRING) -@@ -233,6 +235,10 @@ run_menu (char *menu_entries, char *config_entries, int num_entries, - { - int c, time1, time2 = -1, first_entry = 0; - char *cur_entry = 0; -+ struct term_entry *prev_term = NULL; -+ -+ if (grub_verbose) -+ cls(); - - /* - * Main loop for menu UI. -@@ -254,18 +260,33 @@ restart: - interface. */ - if (grub_timeout < 0) - show_menu = 1; -- -+ - /* If SHOW_MENU is false, don't display the menu until ESC is pressed. */ - if (! show_menu) - { -+ /* Don't show the "Booting in blah seconds message" if the timeout is 0 */ -+ int print_message = grub_timeout != 0; -+ - /* Get current time. */ - while ((time1 = getrtsecs ()) == 0xFF) - ; - -+ if (print_message) -+ grub_printf("\rPress any key to enter the menu\n\n\n"); -+ - while (1) - { -- /* Check if ESC is pressed. */ -- if (checkkey () != -1 && ASCII_CHAR (getkey ()) == '\e') -+ /* Check if any key is pressed */ -+ if (checkkey () != -1) -+ { -+ grub_timeout = -1; -+ show_menu = 1; -+ getkey (); -+ break; -+ } -+ -+ /* See if a modifier key is held down. */ -+ if (keystatus () != 0) - { - grub_timeout = -1; - show_menu = 1; -@@ -287,8 +308,10 @@ restart: - grub_timeout--; - - /* Print a message. */ -- grub_printf ("\rPress `ESC' to enter the menu... %d ", -- grub_timeout); -+ if (print_message) -+ grub_printf ("\rBooting %s in %d seconds...", -+ get_entry(menu_entries, first_entry + entryno, 0), -+ grub_timeout); - } - } - } -@@ -319,7 +342,8 @@ restart: - if (config_entries) - printf ("\ - Press enter to boot the selected OS, 'e' to edit the\n\ -- commands before booting, or 'c' for a command-line."); -+ commands before booting, 'a' to modify the kernel arguments\n\ -+ before booting, or 'c' for a command-line."); - else - printf ("\ - Press 'b' to boot, 'e' to edit the selected command in the\n\ -@@ -514,7 +538,7 @@ restart: - if (c == 'O') - { - grub_memmove (cur_entry + 2, cur_entry, -- ((int) heap) - ((int) cur_entry)); -+ heap - cur_entry); - - cur_entry[0] = ' '; - cur_entry[1] = 0; -@@ -530,8 +554,8 @@ restart: - 0); - - grub_memmove (cur_entry, ptr, -- ((int) heap) - ((int) ptr)); -- heap -= (((int) ptr) - ((int) cur_entry)); -+ heap - ptr); -+ heap -= ptr - cur_entry; - - num_entries--; - -@@ -655,7 +679,7 @@ restart: - else - { - cls (); -- print_cmdline_message (0); -+ print_cmdline_message (CMDLINE_EDIT_MODE); - - new_heap = heap + NEW_HEAPSIZE + 1; - -@@ -681,7 +705,7 @@ restart: - - /* align rest of commands properly */ - grub_memmove (cur_entry + j, cur_entry + i, -- (int) heap - ((int) cur_entry + i)); -+ (unsigned long) heap - ((unsigned long) cur_entry + i)); - - /* copy command to correct area */ - grub_memmove (cur_entry, new_heap, j); -@@ -697,6 +721,98 @@ restart: - enter_cmdline (heap, 0); - goto restart; - } -+ if (config_entries && c == 'a') -+ { -+ int new_num_entries = 0, i = 0, j; -+ int needs_padding, amount; -+ char *new_heap; -+ char * entries; -+ char * entry_copy; -+ char * append_line; -+ char * start; -+ -+ entry_copy = new_heap = heap; -+ cur_entry = get_entry (config_entries, first_entry + entryno, -+ 1); -+ -+ do -+ { -+ while ((*(new_heap++) = cur_entry[i++]) != 0); -+ new_num_entries++; -+ } -+ while (config_entries && cur_entry[i]); -+ -+ /* this only needs to be done if config_entries is non-NULL, -+ but it doesn't hurt to do it always */ -+ *(new_heap++) = 0; -+ -+ new_heap = heap + NEW_HEAPSIZE + 1; -+ -+ entries = entry_copy; -+ while (*entries) -+ { -+ if ((strstr(entries, "kernel") == entries) && -+ isspace(entries[6])) -+ break; -+ -+ while (*entries) entries++; -+ entries++; -+ } -+ -+ if (!*entries) -+ goto restart; -+ -+ start = entries + 6; -+ -+ /* skip the white space */ -+ while (*start && isspace(*start)) start++; -+ /* skip the kernel name */ -+ while (*start && !isspace(*start)) start++; -+ -+ /* skip the white space */ -+ needs_padding = (!*start || !isspace(*start)); -+ while (*start && isspace(*start)) start++; -+ -+ append_line = new_heap; -+ grub_strcpy(append_line, start); -+ -+ cls(); -+ print_cmdline_message (CMDLINE_EDIT_MODE); -+ -+ if (get_cmdline(PACKAGE " append> ", -+ append_line, NEW_HEAPSIZE + 1, -+ 0, 1)) -+ goto restart; -+ -+ /* have new args; append_line points to the -+ new args and start points to the old -+ args */ -+ -+ i = grub_strlen(start); -+ j = grub_strlen(append_line); -+ -+ if (i > (j + needs_padding)) -+ amount = i; -+ else -+ amount = j + needs_padding; -+ -+ /* align rest of commands properly */ -+ memmove (start + j + needs_padding, start + i, -+ ((unsigned long) append_line) - ((unsigned long) start) - (amount)); -+ -+ if (needs_padding) -+ *start = ' '; -+ -+ /* copy command to correct area */ -+ memmove (start + needs_padding, append_line, j); -+ -+ /* set up this entry to boot */ -+ config_entries = NULL; -+ cur_entry = entry_copy; -+ heap = new_heap; -+ -+ break; -+ } - #ifdef GRUB_UTIL - if (c == 'q') - { -@@ -712,16 +828,31 @@ restart: - - boot_entry: - -- cls (); -- setcursor (1); -+ if (grub_verbose || show_menu) -+ { -+ cls (); -+ setcursor (1); -+ } -+ /* if our terminal needed initialization, we should shut it down -+ * before booting the kernel, but we want to save what it was so -+ * we can come back if needed */ -+ prev_term = current_term; -+ if (current_term->shutdown) -+ { -+ (*current_term->shutdown)(); -+ current_term = term_table; /* assumption: console is first */ -+ } -+ -+ if (silent_grub) -+ setcursor(0); - - while (1) - { - if (config_entries) -- printf (" Booting '%s'\n\n", -+ verbose_printf (" Booting '%s'\n\n", - get_entry (menu_entries, first_entry + entryno, 0)); - else -- printf (" Booting command-list\n\n"); -+ verbose_printf (" Booting command-list\n\n"); - - if (! cur_entry) - cur_entry = get_entry (config_entries, first_entry + entryno, 1); -@@ -748,6 +879,13 @@ restart: - break; - } - -+ /* if we get back here, we should go back to what our term was before */ -+ current_term = prev_term; -+ if (current_term->startup) -+ /* if our terminal fails to initialize, fall back to console since -+ * it should always work */ -+ if ((*current_term->startup)() == 0) -+ current_term = term_table; /* we know that console is first */ - show_menu = 1; - goto restart; - } -@@ -867,38 +1005,8 @@ cmain (void) - if (use_config_file) - #endif /* GRUB_UTIL */ - { -- char *default_file = (char *) DEFAULT_FILE_BUF; - int i; -- -- /* Get a saved default entry if possible. */ -- saved_entryno = 0; -- *default_file = 0; -- grub_strncat (default_file, config_file, DEFAULT_FILE_BUFLEN); -- for (i = grub_strlen(default_file); i >= 0; i--) -- if (default_file[i] == '/') -- { -- i++; -- break; -- } -- default_file[i] = 0; -- grub_strncat (default_file + i, "default", DEFAULT_FILE_BUFLEN - i); -- if (grub_open (default_file)) -- { -- char buf[10]; /* This is good enough. */ -- char *p = buf; -- int len; -- -- len = grub_read (buf, sizeof (buf)); -- if (len > 0) -- { -- buf[sizeof (buf) - 1] = 0; -- safe_parse_maxint (&p, &saved_entryno); -- } - -- grub_close (); -- } -- errnum = ERR_NONE; -- - do - { - /* STATE 0: Before any title command. -@@ -1050,11 +1158,16 @@ cmain (void) - while (is_preset); - } - -+ /* go ahead and make sure the terminal is setup */ -+ if (current_term->startup) -+ (*current_term->startup)(); -+ - if (! num_entries) - { - /* If no acceptable config file, goto command-line, starting - heap from where the config entries would have been stored - if there were any. */ -+ grub_verbose = 1; - enter_cmdline (config_entries, 1); - } - else -diff --git a/stage2/start.S b/stage2/start.S -index 9a7d504..7a6652f 100644 ---- a/stage2/start.S -+++ b/stage2/start.S -@@ -39,6 +39,9 @@ - - /* Print message string */ - #define MSG(x) movw $ABS(x), %si; call message -+ -+ /* Print verbose message string */ -+#define VMSG(x) - - .file "start.S" - -@@ -67,9 +70,9 @@ _start: - - /* print a notification message on the screen */ - pushw %si -- MSG(notification_string) -+ VMSG(notification_string) - popw %si -- -+ - /* this sets up for the first run through "bootloop" */ - movw $ABS(firstlist - BOOTSEC_LISTSIZE), %di - -@@ -291,9 +294,9 @@ copy_buffer: - movsb /* this runs the actual copy */ - - /* restore addressing regs and print a dot with correct DS -- (MSG modifies SI, which is saved, and unused AX and BX) */ -+ (VMSG modifies SI, which is saved, and unused AX and BX) */ - popw %ds -- MSG(notification_step) -+ VMSG(notification_step) - popa - - /* check if finished with this dataset */ -@@ -310,7 +313,7 @@ copy_buffer: - - bootit: - /* print a newline */ -- MSG(notification_done) -+ VMSG(notification_done) - popw %dx /* this makes sure %dl is our "boot" drive */ - #ifdef STAGE1_5 - ljmp $0, $0x2200 -diff --git a/stage2/term.h b/stage2/term.h -index 8261c7c..803de58 100644 ---- a/stage2/term.h -+++ b/stage2/term.h -@@ -54,18 +54,28 @@ typedef enum - /* Set when the terminal needs to be initialized. */ - #define TERM_NEED_INIT (1 << 16) - -+/* Bitmasks for modifier keys returned by term->keystatus(). */ -+#define TERM_STATUS_ALT (1 << 3) -+#define TERM_STATUS_CTRL (1 << 2) -+#define TERM_STATUS_LEFT_SHIFT (1 << 1) -+#define TERM_STATUS_RIGHT_SHIFT (1 << 0) -+ - struct term_entry - { - /* The name of a terminal. */ - const char *name; - /* The feature flags defined above. */ - unsigned long flags; -+ /* Default for maximum number of lines if not specified */ -+ unsigned short max_lines; - /* Put a character. */ - void (*putchar) (int c); - /* Check if any input character is available. */ - int (*checkkey) (void); - /* Get a character. */ - int (*getkey) (void); -+ /* Get keyboard modifier status. */ -+ int (*keystatus) (void); - /* Get the cursor position. The return value is ((X << 8) | Y). */ - int (*getxy) (void); - /* Go to the position (X, Y). */ -@@ -79,6 +89,11 @@ struct term_entry - void (*setcolor) (int normal_color, int highlight_color); - /* Turn on/off the cursor. */ - int (*setcursor) (int on); -+ -+ /* function to start a terminal */ -+ int (*startup) (void); -+ /* function to use to shutdown a terminal */ -+ void (*shutdown) (void); - }; - - /* This lists up available terminals. */ -@@ -96,6 +111,7 @@ void console_putchar (int c); - #ifndef STAGE1_5 - int console_checkkey (void); - int console_getkey (void); -+int console_keystatus (void); - int console_getxy (void); - void console_gotoxy (int x, int y); - void console_cls (void); -@@ -124,4 +140,23 @@ void hercules_setcolor (int normal_color, int highlight_color); - int hercules_setcursor (int on); - #endif - -+#ifdef SUPPORT_GRAPHICS -+extern int foreground, background, border, graphics_inited; -+ -+void graphics_set_splash(char *splashfile); -+int set_videomode (int mode); -+void graphics_putchar (int c); -+int graphics_getxy(void); -+void graphics_gotoxy(int x, int y); -+void graphics_cls(void); -+void graphics_setcolorstate (color_state state); -+void graphics_setcolor (int normal_color, int highlight_color); -+int graphics_setcursor (int on); -+int graphics_init(void); -+void graphics_end(void); -+ -+int hex(int v); -+void graphics_set_palette(int idx, int red, int green, int blue); -+#endif /* SUPPORT_GRAPHICS */ -+ - #endif /* ! GRUB_TERM_HEADER */ -diff --git a/stage2/tparm.c b/stage2/tparm.c -index ff78d53..408b284 100644 ---- a/stage2/tparm.c -+++ b/stage2/tparm.c -@@ -320,7 +320,7 @@ parse_format(const char *s, char *format, int *len) - #define isLOWER(c) ((c) >= 'a' && (c) <= 'z') - - static inline char * --tparam_internal(const char *string, int *dataptr) -+tparam_internal(const char *string, va_list args) - { - #define NUM_VARS 26 - char *p_is_s[9]; -@@ -461,9 +461,9 @@ tparam_internal(const char *string, int *dataptr) - * a char* and an int may not be the same size on the stack. - */ - if (p_is_s[i] != 0) { -- p_is_s[i] = (char *)(*(dataptr++)); -+ p_is_s[i] = va_arg (args, char *); - } else { -- param[i] = (int)(*(dataptr++)); -+ param[i] = va_arg (args, int); - } - } - -@@ -716,11 +716,11 @@ char * - grub_tparm(const char *string,...) - { - char *result; -- int *dataptr = (int *) &string; -+ va_list ap; - -- dataptr++; -- -- result = tparam_internal(string, dataptr); -+ va_start (ap, string); -+ result = tparam_internal(string, ap); -+ va_end(ap); - - return result; - } -diff --git a/test b/test -new file mode 100644 -index 0000000..b182379 ---- /dev/null -+++ b/test -@@ -0,0 +1 @@ -+fo of fo -diff --git a/util/.gitignore b/util/.gitignore -new file mode 100644 -index 0000000..6687356 ---- /dev/null -+++ b/util/.gitignore -@@ -0,0 +1,7 @@ -+Makefile.in -+Makefile -+.deps -+grub-image -+grub-install -+grub-md5-crypt -+grub-terminfo -diff --git a/util/Makefile.am b/util/Makefile.am -index 2e04711..fa545b1 100644 ---- a/util/Makefile.am -+++ b/util/Makefile.am -@@ -1,6 +1,7 @@ -+if !PLATFORM_EFI -+ - bin_PROGRAMS = mbchk --sbin_SCRIPTS = grub-install grub-md5-crypt grub-terminfo \ -- grub-set-default -+sbin_SCRIPTS = grub-install grub-md5-crypt grub-terminfo grub-crypt - noinst_SCRIPTS = grub-image mkbimage - - EXTRA_DIST = mkbimage -@@ -10,3 +11,9 @@ AM_CFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/docs - - mbchk_SOURCES = mbchk.c - mbchk_LDADD = ../lib/libcommon.a -+ -+else -+ -+sbin_SCRIPTS = grub-md5-crypt grub-terminfo grub-crypt -+ -+endif -diff --git a/util/Makefile.in b/util/Makefile.in -deleted file mode 100644 -index e700cf7..0000000 ---- a/util/Makefile.in -+++ /dev/null -@@ -1,478 +0,0 @@ --# Makefile.in generated by automake 1.9.4 from Makefile.am. --# @configure_input@ -- --# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, --# 2003, 2004 Free Software Foundation, Inc. --# This Makefile.in is free software; the Free Software Foundation --# gives unlimited permission to copy and/or distribute it, --# with or without modifications, as long as this notice is preserved. -- --# This program is distributed in the hope that it will be useful, --# but WITHOUT ANY WARRANTY, to the extent permitted by law; without --# even the implied warranty of MERCHANTABILITY or FITNESS FOR A --# PARTICULAR PURPOSE. -- --@SET_MAKE@ -- -- --SOURCES = $(mbchk_SOURCES) -- --srcdir = @srcdir@ --top_srcdir = @top_srcdir@ --VPATH = @srcdir@ --pkgdatadir = $(datadir)/@PACKAGE@ --pkglibdir = $(libdir)/@PACKAGE@ --pkgincludedir = $(includedir)/@PACKAGE@ --top_builddir = .. --am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd --INSTALL = @INSTALL@ --install_sh_DATA = $(install_sh) -c -m 644 --install_sh_PROGRAM = $(install_sh) -c --install_sh_SCRIPT = $(install_sh) -c --INSTALL_HEADER = $(INSTALL_DATA) --transform = $(program_transform_name) --NORMAL_INSTALL = : --PRE_INSTALL = : --POST_INSTALL = : --NORMAL_UNINSTALL = : --PRE_UNINSTALL = : --POST_UNINSTALL = : --build_triplet = @build@ --host_triplet = @host@ --bin_PROGRAMS = mbchk$(EXEEXT) --subdir = util --DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ -- $(srcdir)/grub-image.in $(srcdir)/grub-install.in \ -- $(srcdir)/grub-md5-crypt.in $(srcdir)/grub-set-default.in \ -- $(srcdir)/grub-terminfo.in --ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 --am__aclocal_m4_deps = $(top_srcdir)/acinclude.m4 \ -- $(top_srcdir)/configure.ac --am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ -- $(ACLOCAL_M4) --mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs --CONFIG_HEADER = $(top_builddir)/config.h --CONFIG_CLEAN_FILES = grub-image grub-install grub-md5-crypt \ -- grub-terminfo grub-set-default --am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)" --binPROGRAMS_INSTALL = $(INSTALL_PROGRAM) --PROGRAMS = $(bin_PROGRAMS) --am_mbchk_OBJECTS = mbchk.$(OBJEXT) --mbchk_OBJECTS = $(am_mbchk_OBJECTS) --mbchk_DEPENDENCIES = ../lib/libcommon.a --sbinSCRIPT_INSTALL = $(INSTALL_SCRIPT) --SCRIPTS = $(noinst_SCRIPTS) $(sbin_SCRIPTS) --DEFAULT_INCLUDES = -I. -I$(srcdir) -I$(top_builddir) --depcomp = $(SHELL) $(top_srcdir)/depcomp --am__depfiles_maybe = depfiles --COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ -- $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) --CCLD = $(CC) --LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ --SOURCES = $(mbchk_SOURCES) --DIST_SOURCES = $(mbchk_SOURCES) --ETAGS = etags --CTAGS = ctags --DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) --ACLOCAL = @ACLOCAL@ --AMDEP_FALSE = @AMDEP_FALSE@ --AMDEP_TRUE = @AMDEP_TRUE@ --AMTAR = @AMTAR@ --AUTOCONF = @AUTOCONF@ --AUTOHEADER = @AUTOHEADER@ --AUTOMAKE = @AUTOMAKE@ --AWK = @AWK@ --BUILD_EXAMPLE_KERNEL_FALSE = @BUILD_EXAMPLE_KERNEL_FALSE@ --BUILD_EXAMPLE_KERNEL_TRUE = @BUILD_EXAMPLE_KERNEL_TRUE@ --CC = @CC@ --CCAS = @CCAS@ --CCASFLAGS = @CCASFLAGS@ --CCDEPMODE = @CCDEPMODE@ --CFLAGS = @CFLAGS@ --CPP = @CPP@ --CPPFLAGS = @CPPFLAGS@ --CYGPATH_W = @CYGPATH_W@ --DEFS = @DEFS@ --DEPDIR = @DEPDIR@ --DISKLESS_SUPPORT_FALSE = @DISKLESS_SUPPORT_FALSE@ --DISKLESS_SUPPORT_TRUE = @DISKLESS_SUPPORT_TRUE@ --ECHO_C = @ECHO_C@ --ECHO_N = @ECHO_N@ --ECHO_T = @ECHO_T@ --EGREP = @EGREP@ --EXEEXT = @EXEEXT@ --FSYS_CFLAGS = @FSYS_CFLAGS@ --GRUB_CFLAGS = @GRUB_CFLAGS@ --GRUB_LIBS = @GRUB_LIBS@ --HERCULES_SUPPORT_FALSE = @HERCULES_SUPPORT_FALSE@ --HERCULES_SUPPORT_TRUE = @HERCULES_SUPPORT_TRUE@ --INSTALL_DATA = @INSTALL_DATA@ --INSTALL_PROGRAM = @INSTALL_PROGRAM@ --INSTALL_SCRIPT = @INSTALL_SCRIPT@ --INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ --LDFLAGS = @LDFLAGS@ --LIBOBJS = @LIBOBJS@ --LIBS = @LIBS@ --LTLIBOBJS = @LTLIBOBJS@ --MAINT = @MAINT@ --MAINTAINER_MODE_FALSE = @MAINTAINER_MODE_FALSE@ --MAINTAINER_MODE_TRUE = @MAINTAINER_MODE_TRUE@ --MAKEINFO = @MAKEINFO@ --NETBOOT_DRIVERS = @NETBOOT_DRIVERS@ --NETBOOT_SUPPORT_FALSE = @NETBOOT_SUPPORT_FALSE@ --NETBOOT_SUPPORT_TRUE = @NETBOOT_SUPPORT_TRUE@ --NET_CFLAGS = @NET_CFLAGS@ --NET_EXTRAFLAGS = @NET_EXTRAFLAGS@ --OBJCOPY = @OBJCOPY@ --OBJEXT = @OBJEXT@ --PACKAGE = @PACKAGE@ --PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ --PACKAGE_NAME = @PACKAGE_NAME@ --PACKAGE_STRING = @PACKAGE_STRING@ --PACKAGE_TARNAME = @PACKAGE_TARNAME@ --PACKAGE_VERSION = @PACKAGE_VERSION@ --PATH_SEPARATOR = @PATH_SEPARATOR@ --PERL = @PERL@ --RANLIB = @RANLIB@ --SERIAL_SPEED_SIMULATION_FALSE = @SERIAL_SPEED_SIMULATION_FALSE@ --SERIAL_SPEED_SIMULATION_TRUE = @SERIAL_SPEED_SIMULATION_TRUE@ --SERIAL_SUPPORT_FALSE = @SERIAL_SUPPORT_FALSE@ --SERIAL_SUPPORT_TRUE = @SERIAL_SUPPORT_TRUE@ --SET_MAKE = @SET_MAKE@ --SHELL = @SHELL@ --STAGE1_CFLAGS = @STAGE1_CFLAGS@ --STAGE2_CFLAGS = @STAGE2_CFLAGS@ --STRIP = @STRIP@ --VERSION = @VERSION@ --ac_ct_CC = @ac_ct_CC@ --ac_ct_OBJCOPY = @ac_ct_OBJCOPY@ --ac_ct_RANLIB = @ac_ct_RANLIB@ --ac_ct_STRIP = @ac_ct_STRIP@ --am__fastdepCC_FALSE = @am__fastdepCC_FALSE@ --am__fastdepCC_TRUE = @am__fastdepCC_TRUE@ --am__include = @am__include@ --am__leading_dot = @am__leading_dot@ --am__quote = @am__quote@ --am__tar = @am__tar@ --am__untar = @am__untar@ --bindir = @bindir@ --build = @build@ --build_alias = @build_alias@ --build_cpu = @build_cpu@ --build_os = @build_os@ --build_vendor = @build_vendor@ --datadir = @datadir@ --exec_prefix = @exec_prefix@ --host = @host@ --host_alias = @host_alias@ --host_cpu = @host_cpu@ --host_os = @host_os@ --host_vendor = @host_vendor@ --includedir = @includedir@ --infodir = @infodir@ --install_sh = @install_sh@ --libdir = @libdir@ --libexecdir = @libexecdir@ --localstatedir = @localstatedir@ --mandir = @mandir@ --mkdir_p = @mkdir_p@ --oldincludedir = @oldincludedir@ --prefix = @prefix@ --program_transform_name = @program_transform_name@ --sbindir = @sbindir@ --sharedstatedir = @sharedstatedir@ --sysconfdir = @sysconfdir@ --target_alias = @target_alias@ --sbin_SCRIPTS = grub-install grub-md5-crypt grub-terminfo \ -- grub-set-default -- --noinst_SCRIPTS = grub-image mkbimage --EXTRA_DIST = mkbimage -- --# XXX: Need to search for a header file in docs, because of multiboot.h. --AM_CFLAGS = -I$(top_srcdir)/lib -I$(top_srcdir)/docs --mbchk_SOURCES = mbchk.c --mbchk_LDADD = ../lib/libcommon.a --all: all-am -- --.SUFFIXES: --.SUFFIXES: .c .o .obj --$(srcdir)/Makefile.in: @MAINTAINER_MODE_TRUE@ $(srcdir)/Makefile.am $(am__configure_deps) -- @for dep in $?; do \ -- case '$(am__configure_deps)' in \ -- *$$dep*) \ -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ -- && exit 0; \ -- exit 1;; \ -- esac; \ -- done; \ -- echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu util/Makefile'; \ -- cd $(top_srcdir) && \ -- $(AUTOMAKE) --gnu util/Makefile --.PRECIOUS: Makefile --Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status -- @case '$?' in \ -- *config.status*) \ -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ -- *) \ -- echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ -- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ -- esac; -- --$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -- --$(top_srcdir)/configure: @MAINTAINER_MODE_TRUE@ $(am__configure_deps) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh --$(ACLOCAL_M4): @MAINTAINER_MODE_TRUE@ $(am__aclocal_m4_deps) -- cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh --grub-image: $(top_builddir)/config.status $(srcdir)/grub-image.in -- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ --grub-install: $(top_builddir)/config.status $(srcdir)/grub-install.in -- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ --grub-md5-crypt: $(top_builddir)/config.status $(srcdir)/grub-md5-crypt.in -- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ --grub-terminfo: $(top_builddir)/config.status $(srcdir)/grub-terminfo.in -- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ --grub-set-default: $(top_builddir)/config.status $(srcdir)/grub-set-default.in -- cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ --install-binPROGRAMS: $(bin_PROGRAMS) -- @$(NORMAL_INSTALL) -- test -z "$(bindir)" || $(mkdir_p) "$(DESTDIR)$(bindir)" -- @list='$(bin_PROGRAMS)'; for p in $$list; do \ -- p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \ -- if test -f $$p \ -- ; then \ -- f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \ -- echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \ -- $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \ -- else :; fi; \ -- done -- --uninstall-binPROGRAMS: -- @$(NORMAL_UNINSTALL) -- @list='$(bin_PROGRAMS)'; for p in $$list; do \ -- f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \ -- echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \ -- rm -f "$(DESTDIR)$(bindir)/$$f"; \ -- done -- --clean-binPROGRAMS: -- -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) --mbchk$(EXEEXT): $(mbchk_OBJECTS) $(mbchk_DEPENDENCIES) -- @rm -f mbchk$(EXEEXT) -- $(LINK) $(mbchk_LDFLAGS) $(mbchk_OBJECTS) $(mbchk_LDADD) $(LIBS) --install-sbinSCRIPTS: $(sbin_SCRIPTS) -- @$(NORMAL_INSTALL) -- test -z "$(sbindir)" || $(mkdir_p) "$(DESTDIR)$(sbindir)" -- @list='$(sbin_SCRIPTS)'; for p in $$list; do \ -- if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ -- if test -f $$d$$p; then \ -- f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ -- echo " $(sbinSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(sbindir)/$$f'"; \ -- $(sbinSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(sbindir)/$$f"; \ -- else :; fi; \ -- done -- --uninstall-sbinSCRIPTS: -- @$(NORMAL_UNINSTALL) -- @list='$(sbin_SCRIPTS)'; for p in $$list; do \ -- f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \ -- echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \ -- rm -f "$(DESTDIR)$(sbindir)/$$f"; \ -- done -- --mostlyclean-compile: -- -rm -f *.$(OBJEXT) -- --distclean-compile: -- -rm -f *.tab.c -- --@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mbchk.Po@am__quote@ -- --.c.o: --@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ $<; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(COMPILE) -c $< -- --.c.obj: --@am__fastdepCC_TRUE@ if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" -c -o $@ `$(CYGPATH_W) '$<'`; \ --@am__fastdepCC_TRUE@ then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; fi --@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ --@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ --@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` --uninstall-info-am: -- --ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- mkid -fID $$unique --tags: TAGS -- --TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ -- test -n "$$unique" || unique=$$empty_fix; \ -- $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ -- $$tags $$unique; \ -- fi --ctags: CTAGS --CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ -- $(TAGS_FILES) $(LISP) -- tags=; \ -- here=`pwd`; \ -- list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ -- unique=`for i in $$list; do \ -- if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ -- done | \ -- $(AWK) ' { files[$$0] = 1; } \ -- END { for (i in files) print i; }'`; \ -- test -z "$(CTAGS_ARGS)$$tags$$unique" \ -- || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ -- $$tags $$unique -- --GTAGS: -- here=`$(am__cd) $(top_builddir) && pwd` \ -- && cd $(top_srcdir) \ -- && gtags -i $(GTAGS_ARGS) $$here -- --distclean-tags: -- -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -- --distdir: $(DISTFILES) -- @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ -- topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \ -- list='$(DISTFILES)'; for file in $$list; do \ -- case $$file in \ -- $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ -- $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \ -- esac; \ -- if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ -- dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \ -- if test "$$dir" != "$$file" && test "$$dir" != "."; then \ -- dir="/$$dir"; \ -- $(mkdir_p) "$(distdir)$$dir"; \ -- else \ -- dir=''; \ -- fi; \ -- if test -d $$d/$$file; then \ -- if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ -- cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ -- fi; \ -- cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ -- else \ -- test -f $(distdir)/$$file \ -- || cp -p $$d/$$file $(distdir)/$$file \ -- || exit 1; \ -- fi; \ -- done --check-am: all-am --check: check-am --all-am: Makefile $(PROGRAMS) $(SCRIPTS) --installdirs: -- for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(sbindir)"; do \ -- test -z "$$dir" || $(mkdir_p) "$$dir"; \ -- done --install: install-am --install-exec: install-exec-am --install-data: install-data-am --uninstall: uninstall-am -- --install-am: all-am -- @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am -- --installcheck: installcheck-am --install-strip: -- $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ -- install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ -- `test -z '$(STRIP)' || \ -- echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install --mostlyclean-generic: -- --clean-generic: -- --distclean-generic: -- -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -- --maintainer-clean-generic: -- @echo "This command is intended for maintainers to use" -- @echo "it deletes files that may require special tools to rebuild." --clean: clean-am -- --clean-am: clean-binPROGRAMS clean-generic mostlyclean-am -- --distclean: distclean-am -- -rm -rf ./$(DEPDIR) -- -rm -f Makefile --distclean-am: clean-am distclean-compile distclean-generic \ -- distclean-tags -- --dvi: dvi-am -- --dvi-am: -- --html: html-am -- --info: info-am -- --info-am: -- --install-data-am: -- --install-exec-am: install-binPROGRAMS install-sbinSCRIPTS -- --install-info: install-info-am -- --install-man: -- --installcheck-am: -- --maintainer-clean: maintainer-clean-am -- -rm -rf ./$(DEPDIR) -- -rm -f Makefile --maintainer-clean-am: distclean-am maintainer-clean-generic -- --mostlyclean: mostlyclean-am -- --mostlyclean-am: mostlyclean-compile mostlyclean-generic -- --pdf: pdf-am -- --pdf-am: -- --ps: ps-am -- --ps-am: -- --uninstall-am: uninstall-binPROGRAMS uninstall-info-am \ -- uninstall-sbinSCRIPTS -- --.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ -- clean-generic ctags distclean distclean-compile \ -- distclean-generic distclean-tags distdir dvi dvi-am html \ -- html-am info info-am install install-am install-binPROGRAMS \ -- install-data install-data-am install-exec install-exec-am \ -- install-info install-info-am install-man install-sbinSCRIPTS \ -- install-strip installcheck installcheck-am installdirs \ -- maintainer-clean maintainer-clean-generic mostlyclean \ -- mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ -- tags uninstall uninstall-am uninstall-binPROGRAMS \ -- uninstall-info-am uninstall-sbinSCRIPTS -- --# Tell versions [3.59,3.63) of GNU make to not export all variables. --# Otherwise a system limit (for SysV at least) may be exceeded. --.NOEXPORT: -diff --git a/util/grub-crypt.in b/util/grub-crypt.in -new file mode 100644 -index 0000000..e8783c8 ---- /dev/null -+++ b/util/grub-crypt.in -@@ -0,0 +1,80 @@ -+#! /usr/bin/python -+ -+'''Generate encrypted passwords for GRUB.''' -+ -+import crypt -+import getopt -+import getpass -+import sys -+ -+def usage(): -+ '''Output usage message to stderr and exit.''' -+ print >> sys.stderr, 'Usage: grub-crypt [OPTION]...' -+ print >> sys.stderr, 'Try `$progname --help' for more information.' -+ sys.exit(1) -+ -+def gen_salt(): -+ '''Generate a random salt.''' -+ ret = '' -+ with open('/dev/urandom', 'rb') as urandom: -+ while True: -+ byte = urandom.read(1) -+ if byte in ('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' -+ './0123456789'): -+ ret += byte -+ if len(ret) == 16: -+ break -+ return ret -+ -+def main(): -+ '''Top level.''' -+ crypt_type = '$6$' # SHA-256 -+ try: -+ opts, args = getopt.getopt(sys.argv[1:], 'hv', -+ ('help', 'version', 'md5', 'sha-256', -+ 'sha-512')) -+ except getopt.GetoptError, err: -+ print >> sys.stderr, str(err) -+ usage() -+ if args: -+ print >> sys.stderr, 'Unexpected argument `%s'' % (args[0],) -+ usage() -+ for (opt, _) in opts: -+ if opt in ('-h', '--help'): -+ print ( -+'''Usage: grub-crypt [OPTION]... -+Encrypt a password. -+ -+ -h, --help Print this message and exit -+ -v, --version Print the version information and exit -+ --md5 Use MD5 to encrypt the password -+ --sha-256 Use SHA-256 to encrypt the password -+ --sha-512 Use SHA-512 to encrypt the password (default) -+ -+Report bugs to bug-grub@gnu.org. -+EOF''') -+ sys.exit(0) -+ elif opt in ('-v', '--version'): -+ print 'grub-crypt (GNU GRUB @VERSION@)' -+ sys.exit(0) -+ elif opt == '--md5': -+ crypt_type = '$1$' -+ elif opt == '--sha-256': -+ crypt_type = '$5$' -+ elif opt == '--sha-512': -+ crypt_type = '$6$' -+ else: -+ assert False, 'Unhandled option' -+ password = getpass.getpass('Password: ') -+ password2 = getpass.getpass('Retype password: ') -+ if not password: -+ print >> sys.stderr, 'Empty password is not permitted.' -+ sys.exit(1) -+ if password != password2: -+ print >> sys.stderr, 'Sorry, passwords do not match.' -+ sys.exit(1) -+ salt = crypt_type + gen_salt() -+ print crypt.crypt(password, salt) -+ -+if __name__ == '__main__': -+ main() -diff --git a/util/grub-install.in b/util/grub-install.in -index 2e598b0..12539b8 100644 ---- a/util/grub-install.in -+++ b/util/grub-install.in -@@ -21,34 +21,36 @@ - prefix=@prefix@ - exec_prefix=@exec_prefix@ - sbindir=@sbindir@ --libdir=@libdir@ -+datadir=@datadir@ - PACKAGE=@PACKAGE@ - VERSION=@VERSION@ - host_cpu=@host_cpu@ - host_os=@host_os@ - host_vendor=@host_vendor@ --pkglibdir=${libdir}/${PACKAGE}/${host_cpu}-${host_vendor} -+pkgdatadir=${datadir}/${PACKAGE}/${host_cpu}-${host_vendor} - - grub_shell=${sbindir}/grub --grub_set_default=${sbindir}/grub-set-default --log_file=/tmp/grub-install.log.$$ --img_file=/tmp/grub-install.img.$$ -+mdadm=${sbindir}/mdadm -+log_file=${TMPDIR:-/tmp}/grub-install.log.$$ -+img_file=${TMPDIR:-/tmp}/grub-install.img.$$ - rootdir= - grub_prefix=/boot/grub - -+install_drives= - install_device= - no_floppy= - force_lba= - recheck=no - debug=no -+justcopy=no - - # look for secure tempfile creation wrappers on this platform - if test -x /bin/tempfile; then - mklog="/bin/tempfile --prefix=grub" - mkimg="/bin/tempfile --prefix=grub" - elif test -x /bin/mktemp; then -- mklog="/bin/mktemp /tmp/grub-install.log.XXXXXX" -- mkimg="/bin/mktemp /tmp/grub-install.img.XXXXXX" -+ mklog="/bin/mktemp ${TMPDIR:-/tmp}/grub-install.log.XXXXXX" -+ mkimg="/bin/mktemp ${TMPDIR:-/tmp}/grub-install.img.XXXXXX" - else - mklog="" - mkimg="" -@@ -70,6 +72,8 @@ Install GRUB on your drive. - --force-lba force GRUB to use LBA mode even for a buggy - BIOS - --recheck probe a device map even if it already exists -+ This flag is unreliable and its use is -+ strongly discouraged. - - INSTALL_DEVICE can be a GRUB device name or a system device filename. - -@@ -96,17 +100,28 @@ convert () { - # Break the device name into the disk part and the partition part. - case "$host_os" in - linux*) -- tmp_disk=`echo "$1" | sed -e 's%([sh]d[a-z])[0-9]*$%\1%' \ -+ tmp_disk=`echo "$1" | grep -v '/mapper/control$' | -+ grep -v '/mapper/[[:alnum:]]+-[[:alnum:]]+$' | uniq | -+ sed -e 's%([shv]d[a-z])[0-9]*$%\1%' \ - -e 's%(d[0-9]*)p[0-9]*$%\1%' \ - -e 's%(fd[0-9]*)$%\1%' \ - -e 's%/part[0-9]*$%/disc%' \ -- -e 's%(c[0-7]d[0-9]*).*$%\1%'` -- tmp_part=`echo "$1" | sed -e 's%.*/[sh]d[a-z]([0-9]*)$%\1%' \ -+ -e 's%(c[0-7]d[0-9]*).*$%\1%' \ -+ -e 's%(/mapper/[[:alpha:]]+[[:digit:]]+)p[[:digit:]]+$%\1%' \ -+ -e 's%(/mapper/isw_[[:alpha:]_]+[[:alpha:]]+[[:digit:]]+)p[[:digit:]]+$%\1%' \ -+ -e 's%(/mapper/[[:alpha:]]+_[[:alpha:]]+)[[:digit:]]+$%\1%'` -+ tmp_part=`echo "$1" | grep -v '/mapper/control$' | -+ grep -v '/mapper/[[:alnum:]]+-[[:alnum:]]+$' | uniq | -+ sed -e 's%.*/[shv]d[a-z]([0-9]*)$%\1%' \ - -e 's%.*d[0-9]*p%%' \ - -e 's%.*/fd[0-9]*$%%' \ - -e 's%.*/floppy/[0-9]*$%%' \ - -e 's%.*/(disc|part([0-9]*))$%\2%' \ -- -e 's%.*c[0-7]d[0-9]*p%%'` -+ -e 's%.*c[0-7]d[0-9]*p%%' \ -+ -e 's%.*/mapper/[[:alpha:]]+[[:digit:]]+p([[:digit:]]+)$%\1%' \ -+ -e 's%.*/mapper/isw_[[:alpha:]_]+[[:alpha:]]+[[:digit:]]+p([[:digit:]]+)$%\1%' \ -+ -e 's%.*/mapper/[[:alpha:]]+_[[:alpha:]]+([[:digit:]]+)$%\1%' | -+ grep -v '.*/mapper/.*'` - ;; - gnu*) - tmp_disk=`echo "$1" | sed 's%([sh]d[0-9]*).*%\1%'` -@@ -196,7 +211,7 @@ resolve_symlink () { - while test -L $tmp_fname; do - tmp_new_fname=`ls -al $tmp_fname | sed -n 's%.*-> (.*)%\1%p'` - if test -z "$tmp_new_fname"; then -- echo "Unrecognized ls output" 2>&1 -+ echo "Unrecognized ls output" 1>&2 - exit 1 - fi - -@@ -211,6 +226,80 @@ resolve_symlink () { - echo "$tmp_fname" - } - -+# Usage: is_raid1_device devicename -+# Returns 0 if devicename is a raid1 md device, 1 if it is not. -+is_raid1_device () { -+ case "$host_os" in -+ linux*) -+ level=`$mdadm --query --detail $1 2>/dev/null | \ -+ awk '/Raid Level :/ {print $4}'` -+ if [ "$level" = "raid1" ]; then -+ return 0 -+ fi -+ ;; -+ esac -+ return 1 -+} -+ -+# Usage: find_real_devs device -+# Returns space separated list of devices for linux if device is -+# a raid1 device. In all other cases, the provided value is returned. -+find_real_devs () { -+ source_device=$1 -+ case "$host_os" in -+ linux*) -+ if is_raid1_device $source_device ; then -+ list="" -+ for device in `$mdadm --query --detail "${source_device}" | \ -+ awk '//dev/[^(md)]/ {print $7}'` ; do -+ list="$list $device" -+ done -+ echo $list -+ return 0 -+ fi -+ ;; -+ esac -+ echo $source_device -+ return 0 -+} -+ -+# Usage: stat_device file -+# Find major:minor of a device node. -+stat_device() { -+ majmin=`stat -c "%t:%T" "$1" 2>/dev/null` -+ if test -z "$majmin"; then -+ echo "Could not find device for $1" 1>&2 -+ exit 1 -+ fi -+ -+ echo "$majmin" -+} -+ -+# Usage: find_mapper_device file -+# Find a file in /dev/mapper with the same major:minor as the specified node. -+find_mapper_device() { -+ if [ -b "$1" ]; then -+ dev="$1" -+ else -+ mntpnt=`echo "$1" | sed 's,/,\\/,g'` -+ dev=`awk '($2 ~ /'$mntpnt'/) { print $1 }' /etc/mtab` -+ fi -+ if test -z "$dev"; then -+ echo "Could not find device for $1" 1>&2 -+ exit 1 -+ fi -+ -+ majmin=`stat_device $dev` -+ for x in /dev/mapper/* ; do -+ devmajmin=`stat_device "$x"` -+ if [ "$majmin" == "$devmajmin" ]; then -+ echo "$x" -+ return 0 -+ fi -+ done -+ return 1 -+} -+ - # Usage: find_device file - # Find block device on which the file resides. - find_device () { -@@ -219,15 +308,55 @@ find_device () { - tmp_fname=`df $1/ | sed -n 's%.*(/dev/[^ ]*).*%\1%p'` - - if test -z "$tmp_fname"; then -- echo "Could not find device for $1" 2>&1 -+ echo "Could not find device for $1" 1>&2 - exit 1 - fi - -- tmp_fname=`resolve_symlink $tmp_fname` -+ ret_fname=`resolve_symlink $tmp_fname` || exit 1 -+ tmp_fname=`find_mapper_device $ret_fname` -+ if test -n "$tmp_fname"; then -+ ret_fname="$tmp_fname" -+ fi -+ -+ echo "$ret_fname" -+ return 0 -+} -+ -+copy_images() { -+ # Copy the GRUB images to the GRUB directory. -+ for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do -+ rm -f $file || exit 1 -+ done -+ for file in \ -+ ${pkgdatadir}/stage1 ${pkgdatadir}/stage2 ${pkgdatadir}/*stage1_5; do -+ cp -f $file ${grubdir} 1>&2 || exit 1 -+ done -+} -+ -+ -+dump_boot_block () { -+ sync -+ $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file -+dump ${root_drive}${tmp} ${img_file} -+quit -+EOF -+} -+ -+ -+install_boot_block () { -+ # Before all invocations of the grub shell, call sync to make sure -+ # the raw device is in sync with any bufferring in filesystems. -+ sync - -- echo "$tmp_fname" -+ # Now perform the installation. -+ $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >>$log_file -+root $1 -+setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $2 -+quit -+EOF - } - -+ - # Check the arguments. - for option in "$@"; do - case "$option" in -@@ -247,6 +376,8 @@ for option in "$@"; do - force_lba="--force-lba" ;; - --recheck) - recheck=yes ;; -+ --just-copy) -+ justcopy=yes ;; - # This is an undocumented feature... - --debug) - debug=yes ;; -@@ -265,12 +396,6 @@ for option in "$@"; do - esac - done - --if test "x$install_device" = x; then -- echo "install_device not specified." 1>&2 -- usage -- exit 1 --fi -- - # If the debugging feature is enabled, print commands. - if test $debug = yes; then - set -x -@@ -293,6 +418,26 @@ esac - grubdir=${bootdir}/grub - device_map=${grubdir}/device.map - -+if [ "$recheck" == "yes" ]; then -+ if grep 'mapper' ${device_map} >/dev/null; then -+ echo 'grub-install does not support reprobing of device.map when' 1>&2 -+ echo 'using a device-mapper based boot device.' 1>&2 -+ exit 1 -+ fi -+fi -+ -+# if they just want the images copied, copy the images and then exit -+if test $justcopy = yes; then -+ copy_images -+ exit 0 -+fi -+ -+if test "x$install_device" = x; then -+ echo "install_device not specified." 1>&2 -+ usage -+ exit 1 -+fi -+ - # Check if GRUB is installed. - # This is necessary, because the user can specify "grub --read-only". - set $grub_shell dummy -@@ -303,17 +448,17 @@ else - exit 1 - fi - --if test -f "$pkglibdir/stage1"; then -+if test -f "$pkgdatadir/stage1"; then - : - else -- echo "${pkglibdir}/stage1: Not found." 1>&2 -+ echo "${pkgdatadir}/stage1: Not found." 1>&2 - exit 1 - fi - --if test -f "$pkglibdir/stage2"; then -+if test -f "$pkgdatadir/stage2"; then - : - else -- echo "${pkglibdir}/stage2: Not found." 1>&2 -+ echo "${pkgdatadir}/stage2: Not found." 1>&2 - exit 1 - fi - -@@ -324,9 +469,11 @@ fi - test -d "$bootdir" || mkdir "$bootdir" || exit 1 - test -d "$grubdir" || mkdir "$grubdir" || exit 1 - -+copy_images -+ - # If --recheck is specified, remove the device map, if present. - if test $recheck = yes; then -- rm -f $device_map -+ mv $device_map ${device_map}.backup - fi - - # Create the device map file if it is not present. -@@ -336,6 +483,10 @@ else - # Create a safe temporary file. - test -n "$mklog" && log_file=`$mklog` - -+ # Before all invocations of the grub shell, call sync to make sure -+ # the raw device is in sync with any bufferring in filesystems. -+ sync -+ - $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file - quit - EOF -@@ -351,34 +502,60 @@ fi - tmp=`sed -n '/^([fh]d[0-9]*)/s/(^(.*)).*/\1/p' $device_map \ - | sort | uniq -d | sed -n 1p` - if test -n "$tmp"; then -- echo "The drive $tmp is defined multiple times in the device map $device_map" 1>&2 -+ echo "The drive $tmp is defined multiple times in the new device map." 1>&2 -+ if test $recheck = yes; then -+ echo "Reverting to backed up copy." 1>&2 -+ mv ${device_map}.backup $device_map -+ fi -+ exit 1 -+fi -+ -+# Make sure device.map has at least one hd device -+grep -q "^(hd[0-9]+)" $device_map -+if [ "x$?" != "x0" ]; then -+ echo "No suitable drive was found in the generated device map." 1>&2 -+ if test $recheck = yes; then -+ echo "Reverting to backed up copy." 1>&2 -+ mv ${device_map}.backup $device_map -+ fi - exit 1 - fi - - # Check for INSTALL_DEVICE. - case "$install_device" in - /dev/*) -- install_device=`resolve_symlink "$install_device"` -- install_drive=`convert "$install_device"` -- # I don't know why, but some shells wouldn't die if exit is -- # called in a function. -- if test "x$install_drive" = x; then -+ install_device=`resolve_symlink "$install_device"` || exit 1 -+ for install_drive in `find_real_devs $install_device` ; do -+ install_drive=`convert $install_drive` || exit 1 -+ if is_raid1_device $install_device; then -+ install_drive=`echo $install_drive | sed 's/,[0-9]*)/)/'` -+ fi -+ if [ "x$install_drive" = "x" ]; then -+ exit 1 -+ fi -+ install_drives="${install_drives} ${install_drive}" -+ done -+ unset install_drive -+ -+ if test "x$install_drives" = x ; then - exit 1 - fi ;; - ([hf]d[0-9]*)) -- install_drive="$install_device" ;; -+ install_drives="$install_device" ;; - [hf]d[0-9]*) - # The GRUB format with no parenthesis. -- install_drive="($install_device)" ;; -+ install_drives="($install_device)" ;; - *) - echo "Format of install_device not recognized." 1>&2 - usage - exit 1 ;; - esac - -+unset install_device -+ - # Get the root drive. --root_device=`find_device ${rootdir}` --bootdir_device=`find_device ${bootdir}` -+root_device=`find_device ${rootdir}` || exit 1 -+bootdir_device=`find_device ${bootdir}` || exit 1 - - # Check if the boot directory is in the same device as the root directory. - if test "x$root_device" != "x$bootdir_device"; then -@@ -387,15 +564,8 @@ if test "x$root_device" != "x$bootdir_device"; then - grub_prefix="/grub" - fi - --# Convert the root device to a GRUB drive. --root_drive=`convert "$root_device"` --if test "x$root_drive" = x; then -- exit 1 --fi -- --# Check if the root directory exists in the same device as the grub --# directory. --grubdir_device=`find_device ${grubdir}` -+# Check if the root directory exists in the same device as the grub directory. -+grubdir_device=`find_device ${grubdir}` || exit 1 - - if test "x$grubdir_device" != "x$root_device"; then - # For now, cannot deal with this situation. -@@ -406,61 +576,71 @@ EOF - exit 1 - fi - --# Copy the GRUB images to the GRUB directory. --for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do -- rm -f $file || exit 1 --done --for file in \ -- ${pkglibdir}/stage1 ${pkglibdir}/stage2 ${pkglibdir}/*stage1_5; do -- cp -f $file ${grubdir} || exit 1 --done -- --# Make a default file. --${grub_set_default} --root-directory=${rootdir} default -- - # Make sure that GRUB reads the same images as the host OS. - test -n "$mkimg" && img_file=`$mkimg` - test -n "$mklog" && log_file=`$mklog` - -+# There's not a real root device, so just pick the first -+if is_raid1_device $root_device ; then -+ root_device=`find_real_devs $root_device | awk '{print $1}'` -+fi -+ -+# Convert the root deviceto a GRUB drive. -+root_drive=`convert "$root_device"` || exit 1 -+if [ "x$root_drive" = x ]; then -+ exit 1 -+fi -+ - for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do - count=5 - tmp=`echo $file | sed "s|^${grubdir}|${grub_prefix}|"` - while test $count -gt 0; do -- $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file --dump ${root_drive}${tmp} ${img_file} --quit --EOF -- if grep "Error [0-9]*: " $log_file >/dev/null; then -- : -- elif cmp $file $img_file >/dev/null; then -- break -- fi -- sleep 1 -- count=`expr $count - 1` -+ dump_boot_block $root_drive $img_file -+ if grep "Error [0-9]*: " $log_file >/dev/null; then -+ : -+ else -+ # Use sha1sum instead of cmp to avoid a dependency on diffutils. -+ sha1=`sha1sum $file | cut -d' ' -f 1` -+ sha2=`sha1sum $img_file | cut -d' ' -f 1` -+ if test -f $file -a -f $img_file -a "$sha1" = "$sha2"; then -+ break -+ fi -+ fi -+ sleep 1 -+ count=`expr $count - 1` - done - if test $count -eq 0; then -- echo "The file $file not read correctly." 1>&2 -- exit 1 -+ echo "The file $file not read correctly." 1>&2 -+ exit 1 - fi - done - - rm -f $img_file - rm -f $log_file - -+if ! test -e ${grubdir}/grub.conf ; then -+ test -e ${grubdir}/menu.lst && ln -s ./menu.lst ${grubdir}/grub.conf -+fi -+ - # Create a safe temporary file. - test -n "$mklog" && log_file=`$mklog` - --# Now perform the installation. --$grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file --root $root_drive --setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $install_drive --quit --EOF -+for install_drive in $install_drives; do -+ # Convert the root deviceto a GRUB drive. -+ root_drive=`convert "$root_device"` || exit 1 -+ if [ "x$root_drive" = x ]; then -+ exit 1 -+ fi -+ install_boot_block $root_drive $install_drive -+done - --if grep "Error [0-9]*: " $log_file >/dev/null || test $debug = yes; then -+if grep "Error [0-9]*: " $log_file >/dev/null ; then - cat $log_file 1>&2 - exit 1 - fi -+if test $debug = yes; then -+ cat $log_file 1>&2 -+fi - - rm -f $log_file - diff --git a/src/patches/grub-gentoo-14.patch b/src/patches/grub-gentoo-14.patch new file mode 100644 index 0000000..d2bb959 --- /dev/null +++ b/src/patches/grub-gentoo-14.patch @@ -0,0 +1,16087 @@ +diff -Nur grub-0.97/acinclude.m4 grub-0.97-patched/acinclude.m4 +--- grub-0.97/acinclude.m4 2004-04-27 22:48:06.000000000 +0200 ++++ grub-0.97-patched/acinclude.m4 2012-11-11 17:07:12.710729053 +0100 +@@ -57,7 +57,7 @@ + fi + grub_cv_prog_objcopy_absolute=yes + for link_addr in 2000 8000 7C00; do +- if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec]); then : ++ if AC_TRY_COMMAND([${CC-cc} ${CFLAGS} ${LDFLAGS} -nostdlib -Wl,-N -Wl,-Ttext -Wl,$link_addr conftest.o -o conftest.exec]); then : + else + AC_MSG_ERROR([${CC-cc} cannot link at address $link_addr]) + fi +diff -Nur grub-0.97/ChangeLog grub-0.97-patched/ChangeLog +--- grub-0.97/ChangeLog 2005-05-08 04:47:02.000000000 +0200 ++++ grub-0.97-patched/ChangeLog 2012-11-11 17:07:12.708728989 +0100 +@@ -1,3 +1,127 @@ ++2008-05-20 Robert Millan rmh@aybabtu.com ++ ++ * netboot/cs89x0.c: Fix license violation. ++ * netboot/cs89x0.h: Likewise. ++ ++2008-04-10 Pavel Roskin proski@gnu.org ++ ++ * configure.ac: Always use "_cv_" in cache variables for ++ compatibility with Autoconf 2.62. ++ ++2008-03-28 Robert Millan rmh@aybabtu.com ++ ++ Surpass 1 TiB disk addressing limit. Note: there are no plans to handle ++ the 2 TiB disk limit in GRUB Legacy, since that would need considerable ++ rework. If you have >2TiB disks, use GRUB 2 instead. ++ ++ * grub/asmstub.c (biosdisk): Add unsigned qualifier to `sector'. ++ * stage2/bios.c (biosdisk): Likewise. ++ * stage2/disk_io.c (rawread, devread, rawwrite, devwrite): Likewise. ++ * stage2/shared.h (rawread, devread, rawwrite, devwrite): Likewise. ++ * lib/device.c (get_drive_geometry): Replace BLKGETSIZE with ++ BLKGETSIZE64. ++ ++2007-10-29 Pavel Roskin proski@gnu.org ++ ++ * configure.ac: Test if '--build-id=none' is supported by the ++ linker and add it to LDFLAGS if possible. Build ID causes ++ objcopy to generate huge binary files. ++ * aclocal.m4 (grub_PROG_OBJCOPY_ABSOLUTE): Use LDFLAGS when ++ linking, so that build ID doesn't break the test. ++ * stage1/Makefile.am: Preserve LDFLAGS, use stage1_exec_LDFLAGS. ++ ++2007-02-22 Pavel Roskin proski@gnu.org ++ ++ * stage2/iso9660.h: Remove unnecessary packed attributes. ++ ++2007-02-22 Robert Millan rmh@aybabtu.com ++ ++ * util/mkbimage: Update my email address, and remove my name from ++ some places where unnecessary credit is given. ++ ++2006-09-10 Pavel Roskin proski@gnu.org ++ ++ * netboot/natsemi.c: Fix compile error with gcc 4.1.1. Cast ++ cannot make a variable volatile - it should be declared as such. ++ * netboot/sis900.c: Likewise. ++ ++2006-09-08 Pavel Roskin proski@gnu.org ++ ++ * netboot/etherboot.h: Remove incorrect extern declarations of ++ the variables later declared static. Move BOOTP_DATA_ADDR ... ++ * netboot/main.c: ... here. Eliminate end_of_rfc1533 - it's ++ write-only. ++ ++2006-06-24 Yoshinori K. Okuji okuji@enbug.org ++ ++ * docs/grub.texi: Changed the license term to the GNU Free ++ Documentation License 1.2. ++ ++ * docs/multiboot.texi: Reformatted to show the license term ++ and the version number explicitly. ++ ++ * docs/fdl.texi: New file. ++ ++ * docs/Makefile.am (grub_TEXINFOS): Added fdl.texi. ++ ++2006-06-24 Robert Millan robertmh@gnu.org ++ ++ * lib/device.c (write_to_partition): /dev/ataraid/ and /dev/rd/ ++ partitions have a "p" prefix. Add it. ++ ++2006-06-24 Robert Millan robertmh@gnu.org ++ ++ * lib/device.c (get_i2o_disk_name): New function. ++ (init_device_map) [__linux__]: Add support for I2O devices. ++ ++2006-05-02 Pavel Roskin proski@gnu.org ++ ++ * stage2/stage2.c (run_menu): Fix "savedefault" to save only top ++ level menu positions. Remember current position when calling a ++ submenu. Don't recalculate it when booting from a submenu. ++ ++ * grub/main.c (main): Make sure the boot drive number doesn't ++ exceed 255. ++ ++2006-05-02 Vesa Jaaskelainen chaac@nic.fi ++ ++ * stage2/shared.h (vbe_mode): Back ported aligment fix from GRUB 2 ++ to GRUB Legacy. Problem reported by Gerardo Richarte. ++ ++2006-04-23 Robert Millan robertmh@gnu.org ++ ++ * grub/asmstub.c (get_diskinfo): Optimize sysctl routine. ++ ++2006-04-20 Robert Millan robertmh@gnu.org ++ ++ Fixes for kernel of FreeBSD: ++ * grub/asmstub.c (get_diskinfo): Toggle "kern.geom.debugflags" sysctl ++ before opening a device for writing. ++ * util/grub-install.in: Devices don't have this "r" prefix anymore. ++ ++2006-04-16 Yoshinori K. Okuji okuji@enbug.org ++ ++ * docs/multiboot.texi: Correct the offset of address ++ fields. Reported by Jeroen Dekkers. ++ ++2006-03-21 Yoshinori K. Okuji okuji@enbug.org ++ ++ * stage2/builtins.c (setup_func): Specify the size of DEVICE to ++ grub_strncat instead of a strange number 256. Reported by Vitaly ++ Fertman vitaly@namesys.com. ++ ++2005-09-29 Yoshinori K. Okuji okuji@enbug.org ++ ++ * docs/multiboot.texi: Fix a bug in the byte order of ++ boot_device. I hope this won't affect any OS image. ++ Increased the version number to 0.6.94. ++ ++2005-09-28 Yoshinori K. Okuji okuji@enbug.org ++ ++ * stage2/boot.c (load_image): Even if an OS image is an ELF ++ object, use the a.out kludge if MULTIBOOT_AOUT_KLUDGE is ++ specified. ++ + 2005-05-08 Yoshinori K. Okuji okuji@enbug.org + + * configure.ac (AC_INIT): Upgraded to 0.97. +diff -Nur grub-0.97/configure.ac grub-0.97-patched/configure.ac +--- grub-0.97/configure.ac 2005-05-08 04:36:03.000000000 +0200 ++++ grub-0.97-patched/configure.ac 2012-11-11 17:07:12.752730394 +0100 +@@ -21,8 +21,12 @@ + AC_CANONICAL_HOST + + case "$host_cpu" in +-i[[3456]]86) host_cpu=i386 ;; +-x86_64) host_cpu=x86_64 ;; ++i[[3456]]86) ++ STAGE_MARCH="-march=$host_cpu" ++ host_cpu=i386 ;; ++x86_64) ++ STAGE_MARCH="-march=i686" ++ host_cpu=x86_64 ;; + *) AC_MSG_ERROR([unsupported CPU type]) ;; + esac + +@@ -56,12 +60,7 @@ + + AC_CHECK_TOOL(CC, gcc) + AC_PROG_CC +-# We need this for older versions of Autoconf. +-_AM_DEPENDENCIES(CC) +- +-dnl Because recent automake complains about AS, set it here. +-CCAS="$CC" +-AC_SUBST(CCAS) ++AM_PROG_AS + + AC_ARG_WITH(binutils, + [ --with-binutils=DIR search the directory DIR to find binutils]) +@@ -86,13 +85,13 @@ + fi + STAGE1_CFLAGS="-O2" + GRUB_CFLAGS="-O2" +- AC_CACHE_CHECK([whether optimization for size works], size_flag, [ ++ AC_CACHE_CHECK([whether optimization for size works], grub_cv_cc_Os, [ + saved_CFLAGS=$CFLAGS + CFLAGS="-Os -g" +- AC_TRY_COMPILE(, , size_flag=yes, size_flag=no) ++ AC_TRY_COMPILE(, , grub_cv_cc_Os=yes, grub_cv_cc_Os=no) + CFLAGS=$saved_CFLAGS + ]) +- if test "x$size_flag" = xyes; then ++ if test "x$grub_cv_cc_Os" = xyes; then + STAGE2_CFLAGS="-Os" + else + STAGE2_CFLAGS="-O2 -fno-strength-reduce -fno-unroll-loops" +@@ -100,21 +99,38 @@ + # OpenBSD has a GCC extension for protecting applications from + # stack smashing attacks, but GRUB doesn't want this feature. + AC_CACHE_CHECK([whether gcc has -fno-stack-protector], +- no_stack_protector_flag, [ ++ grub_cv_cc_no_stack_protector, [ + saved_CFLAGS=$CFLAGS + CFLAGS="-fno-stack-protector" + AC_TRY_COMPILE(, + , +- no_stack_protector_flag=yes, +- no_stack_protector_flag=no) ++ grub_cv_cc_no_stack_protector=yes, ++ grub_cv_cc_no_stack_protector=no) + CFLAGS=$saved_CFLAGS + ]) +- if test "x$no_stack_protector_flag" = xyes; then ++ if test "x$grub_cv_cc_no_stack_protector" = xyes; then + STAGE2_CFLAGS="$STAGE2_CFLAGS -fno-stack-protector" + fi ++ # Position Independent Executables, but GRUB doesn't want this feature. ++ AC_CACHE_CHECK([whether gcc has -fPIE on as default], grub_cv_cc_fpie, [ ++ AC_TRY_COMPILE(,[ ++ #if ! defined (__PIC__) || ! defined (__PIE__) ++ #error ++ #endif ++ ], ++ grub_cv_cc_fpie=yes, ++ grub_cv_cc_fpie=no) ++ ]) ++ if test "x$grub_cv_cc_fpie" = xyes; then ++ STAGE1_CFLAGS="$STAGE1_CFLAGS -nopie" ++ STAGE2_CFLAGS="$STAGE2_CFLAGS -nopie" ++ fi + fi + fi + ++STAGE1_CFLAGS="$STAGE1_CFLAGS -fno-strict-aliasing $STAGE_MARCH" ++STAGE2_CFLAGS="$STAGE2_CFLAGS -fno-strict-aliasing $STAGE_MARCH" ++GRUB_CFLAGS="$GRUB_CFLAGS -fno-strict-aliasing" + AC_SUBST(STAGE1_CFLAGS) + AC_SUBST(STAGE2_CFLAGS) + AC_SUBST(GRUB_CFLAGS) +@@ -123,33 +139,44 @@ + CPPFLAGS="$CPPFLAGS -Wall -Wmissing-prototypes -Wunused -Wshadow" + CPPFLAGS="$CPPFLAGS -Wpointer-arith" + +-AC_CACHE_CHECK([whether -Wundef works], undef_flag, [ ++AC_CACHE_CHECK([whether -Wundef works], grub_cv_cc_Wundef, [ + saved_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="-Wundef" +- AC_TRY_COMPILE(, , undef_flag=yes, undef_flag=no) ++ AC_TRY_COMPILE(, , grub_cv_cc_Wundef=yes, grub_cv_cc_Wundef=no) + CPPFLAGS="$saved_CPPFLAGS" + ]) + + # The options `-falign-*' are supported by gcc 3.0 or later. + # Probably it is sufficient to only check for -falign-loops. +-AC_CACHE_CHECK([whether -falign-loops works], [falign_loop_flag], [ ++AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [ + saved_CPPFLAGS="$CPPFLAGS" + CPPFLAGS="-falign-loops=1" +- AC_TRY_COMPILE(, , [falign_loop_flag=yes], [falign_loop_flag=no]) ++ AC_TRY_COMPILE(, , [grub_cv_cc_falign_loop=yes], [grub_cv_cc_falign_loop=no]) + CPPFLAGS="$saved_CPPFLAGS" + ]) + + # Force no alignment to save space. +-if test "x$falign_loop_flag" = xyes; then ++if test "x$grub_cv_cc_falign_loop" = xyes; then + CPPFLAGS="$CPPFLAGS -falign-jumps=1 -falign-loops=1 -falign-functions=1" + else + CPPFLAGS="$CPPFLAGS -malign-jumps=1 -malign-loops=1 -malign-functions=1" + fi + +-if test "x$undef_flag" = xyes; then ++if test "x$grub_cv_cc_Wundef" = xyes; then + CPPFLAGS="$CPPFLAGS -Wundef" + fi + ++# Check if build ID can be disabled in the linker ++AC_MSG_CHECKING([whether linker accepts `--build-id=none']) ++save_LDFLAGS="$LDFLAGS" ++LDFLAGS="$LDFLAGS -Wl,--build-id=none" ++AC_TRY_LINK(, , build_id_flag=yes, build_id_flag=no) ++AC_MSG_RESULT([$build_id_flag]) ++LDFLAGS="$save_LDFLAGS" ++if test "x$build_id_flag" = xyes; then ++ LDFLAGS="$LDFLAGS -Wl,--build-id=none" ++fi ++ + if test "x$with_binutils" != x; then + dnl AC_PATH_TOOL(OBJCOPY, objcopy, , "$with_binutils:$PATH") + AC_PATH_PROG(OBJCOPY, objcopy, , "$with_binutils:$PATH") +@@ -595,6 +622,11 @@ + [ --enable-diskless enable diskless support]) + AM_CONDITIONAL(DISKLESS_SUPPORT, test "x$enable_diskless" = xyes) + ++dnl Graphical splashscreen support ++AC_ARG_ENABLE(graphics, ++ [ --disable-graphics disable graphics terminal support]) ++AM_CONDITIONAL(GRAPHICS_SUPPORT, test "x$enable_graphics" != xno) ++ + dnl Hercules terminal + AC_ARG_ENABLE(hercules, + [ --disable-hercules disable hercules terminal support]) +diff -Nur grub-0.97/docs/fdl.texi grub-0.97-patched/docs/fdl.texi +--- grub-0.97/docs/fdl.texi 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/docs/fdl.texi 2012-11-11 17:07:12.712729117 +0100 +@@ -0,0 +1,452 @@ ++ ++@node GNU Free Documentation License ++@appendixsec GNU Free Documentation License ++ ++@cindex FDL, GNU Free Documentation License ++@center Version 1.2, November 2002 ++ ++@display ++Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc. ++51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA ++ ++Everyone is permitted to copy and distribute verbatim copies ++of this license document, but changing it is not allowed. ++@end display ++ ++@enumerate 0 ++@item ++PREAMBLE ++ ++The purpose of this License is to make a manual, textbook, or other ++functional and useful document @dfn{free} in the sense of freedom: to ++assure everyone the effective freedom to copy and redistribute it, ++with or without modifying it, either commercially or noncommercially. ++Secondarily, this License preserves for the author and publisher a way ++to get credit for their work, while not being considered responsible ++for modifications made by others. ++ ++This License is a kind of ``copyleft'', which means that derivative ++works of the document must themselves be free in the same sense. It ++complements the GNU General Public License, which is a copyleft ++license designed for free software. ++ ++We have designed this License in order to use it for manuals for free ++software, because free software needs free documentation: a free ++program should come with manuals providing the same freedoms that the ++software does. But this License is not limited to software manuals; ++it can be used for any textual work, regardless of subject matter or ++whether it is published as a printed book. We recommend this License ++principally for works whose purpose is instruction or reference. ++ ++@item ++APPLICABILITY AND DEFINITIONS ++ ++This License applies to any manual or other work, in any medium, that ++contains a notice placed by the copyright holder saying it can be ++distributed under the terms of this License. Such a notice grants a ++world-wide, royalty-free license, unlimited in duration, to use that ++work under the conditions stated herein. The ``Document'', below, ++refers to any such manual or work. Any member of the public is a ++licensee, and is addressed as ``you''. You accept the license if you ++copy, modify or distribute the work in a way requiring permission ++under copyright law. ++ ++A ``Modified Version'' of the Document means any work containing the ++Document or a portion of it, either copied verbatim, or with ++modifications and/or translated into another language. ++ ++A ``Secondary Section'' is a named appendix or a front-matter section ++of the Document that deals exclusively with the relationship of the ++publishers or authors of the Document to the Document's overall ++subject (or to related matters) and contains nothing that could fall ++directly within that overall subject. (Thus, if the Document is in ++part a textbook of mathematics, a Secondary Section may not explain ++any mathematics.) The relationship could be a matter of historical ++connection with the subject or with related matters, or of legal, ++commercial, philosophical, ethical or political position regarding ++them. ++ ++The ``Invariant Sections'' are certain Secondary Sections whose titles ++are designated, as being those of Invariant Sections, in the notice ++that says that the Document is released under this License. If a ++section does not fit the above definition of Secondary then it is not ++allowed to be designated as Invariant. The Document may contain zero ++Invariant Sections. If the Document does not identify any Invariant ++Sections then there are none. ++ ++The ``Cover Texts'' are certain short passages of text that are listed, ++as Front-Cover Texts or Back-Cover Texts, in the notice that says that ++the Document is released under this License. A Front-Cover Text may ++be at most 5 words, and a Back-Cover Text may be at most 25 words. ++ ++A ``Transparent'' copy of the Document means a machine-readable copy, ++represented in a format whose specification is available to the ++general public, that is suitable for revising the document ++straightforwardly with generic text editors or (for images composed of ++pixels) generic paint programs or (for drawings) some widely available ++drawing editor, and that is suitable for input to text formatters or ++for automatic translation to a variety of formats suitable for input ++to text formatters. A copy made in an otherwise Transparent file ++format whose markup, or absence of markup, has been arranged to thwart ++or discourage subsequent modification by readers is not Transparent. ++An image format is not Transparent if used for any substantial amount ++of text. A copy that is not ``Transparent'' is called ``Opaque''. ++ ++Examples of suitable formats for Transparent copies include plain ++@sc{ascii} without markup, Texinfo input format, La@TeX{} input ++format, @acronym{SGML} or @acronym{XML} using a publicly available ++@acronym{DTD}, and standard-conforming simple @acronym{HTML}, ++PostScript or @acronym{PDF} designed for human modification. Examples ++of transparent image formats include @acronym{PNG}, @acronym{XCF} and ++@acronym{JPG}. Opaque formats include proprietary formats that can be ++read and edited only by proprietary word processors, @acronym{SGML} or ++@acronym{XML} for which the @acronym{DTD} and/or processing tools are ++not generally available, and the machine-generated @acronym{HTML}, ++PostScript or @acronym{PDF} produced by some word processors for ++output purposes only. ++ ++The ``Title Page'' means, for a printed book, the title page itself, ++plus such following pages as are needed to hold, legibly, the material ++this License requires to appear in the title page. For works in ++formats which do not have any title page as such, ``Title Page'' means ++the text near the most prominent appearance of the work's title, ++preceding the beginning of the body of the text. ++ ++A section ``Entitled XYZ'' means a named subunit of the Document whose ++title either is precisely XYZ or contains XYZ in parentheses following ++text that translates XYZ in another language. (Here XYZ stands for a ++specific section name mentioned below, such as ``Acknowledgements'', ++``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' ++of such a section when you modify the Document means that it remains a ++section ``Entitled XYZ'' according to this definition. ++ ++The Document may include Warranty Disclaimers next to the notice which ++states that this License applies to the Document. These Warranty ++Disclaimers are considered to be included by reference in this ++License, but only as regards disclaiming warranties: any other ++implication that these Warranty Disclaimers may have is void and has ++no effect on the meaning of this License. ++ ++@item ++VERBATIM COPYING ++ ++You may copy and distribute the Document in any medium, either ++commercially or noncommercially, provided that this License, the ++copyright notices, and the license notice saying this License applies ++to the Document are reproduced in all copies, and that you add no other ++conditions whatsoever to those of this License. You may not use ++technical measures to obstruct or control the reading or further ++copying of the copies you make or distribute. However, you may accept ++compensation in exchange for copies. If you distribute a large enough ++number of copies you must also follow the conditions in section 3. ++ ++You may also lend copies, under the same conditions stated above, and ++you may publicly display copies. ++ ++@item ++COPYING IN QUANTITY ++ ++If you publish printed copies (or copies in media that commonly have ++printed covers) of the Document, numbering more than 100, and the ++Document's license notice requires Cover Texts, you must enclose the ++copies in covers that carry, clearly and legibly, all these Cover ++Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on ++the back cover. Both covers must also clearly and legibly identify ++you as the publisher of these copies. The front cover must present ++the full title with all words of the title equally prominent and ++visible. You may add other material on the covers in addition. ++Copying with changes limited to the covers, as long as they preserve ++the title of the Document and satisfy these conditions, can be treated ++as verbatim copying in other respects. ++ ++If the required texts for either cover are too voluminous to fit ++legibly, you should put the first ones listed (as many as fit ++reasonably) on the actual cover, and continue the rest onto adjacent ++pages. ++ ++If you publish or distribute Opaque copies of the Document numbering ++more than 100, you must either include a machine-readable Transparent ++copy along with each Opaque copy, or state in or with each Opaque copy ++a computer-network location from which the general network-using ++public has access to download using public-standard network protocols ++a complete Transparent copy of the Document, free of added material. ++If you use the latter option, you must take reasonably prudent steps, ++when you begin distribution of Opaque copies in quantity, to ensure ++that this Transparent copy will remain thus accessible at the stated ++location until at least one year after the last time you distribute an ++Opaque copy (directly or through your agents or retailers) of that ++edition to the public. ++ ++It is requested, but not required, that you contact the authors of the ++Document well before redistributing any large number of copies, to give ++them a chance to provide you with an updated version of the Document. ++ ++@item ++MODIFICATIONS ++ ++You may copy and distribute a Modified Version of the Document under ++the conditions of sections 2 and 3 above, provided that you release ++the Modified Version under precisely this License, with the Modified ++Version filling the role of the Document, thus licensing distribution ++and modification of the Modified Version to whoever possesses a copy ++of it. In addition, you must do these things in the Modified Version: ++ ++@enumerate A ++@item ++Use in the Title Page (and on the covers, if any) a title distinct ++from that of the Document, and from those of previous versions ++(which should, if there were any, be listed in the History section ++of the Document). You may use the same title as a previous version ++if the original publisher of that version gives permission. ++ ++@item ++List on the Title Page, as authors, one or more persons or entities ++responsible for authorship of the modifications in the Modified ++Version, together with at least five of the principal authors of the ++Document (all of its principal authors, if it has fewer than five), ++unless they release you from this requirement. ++ ++@item ++State on the Title page the name of the publisher of the ++Modified Version, as the publisher. ++ ++@item ++Preserve all the copyright notices of the Document. ++ ++@item ++Add an appropriate copyright notice for your modifications ++adjacent to the other copyright notices. ++ ++@item ++Include, immediately after the copyright notices, a license notice ++giving the public permission to use the Modified Version under the ++terms of this License, in the form shown in the Addendum below. ++ ++@item ++Preserve in that license notice the full lists of Invariant Sections ++and required Cover Texts given in the Document's license notice. ++ ++@item ++Include an unaltered copy of this License. ++ ++@item ++Preserve the section Entitled ``History'', Preserve its Title, and add ++to it an item stating at least the title, year, new authors, and ++publisher of the Modified Version as given on the Title Page. If ++there is no section Entitled ``History'' in the Document, create one ++stating the title, year, authors, and publisher of the Document as ++given on its Title Page, then add an item describing the Modified ++Version as stated in the previous sentence. ++ ++@item ++Preserve the network location, if any, given in the Document for ++public access to a Transparent copy of the Document, and likewise ++the network locations given in the Document for previous versions ++it was based on. These may be placed in the ``History'' section. ++You may omit a network location for a work that was published at ++least four years before the Document itself, or if the original ++publisher of the version it refers to gives permission. ++ ++@item ++For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve ++the Title of the section, and preserve in the section all the ++substance and tone of each of the contributor acknowledgements and/or ++dedications given therein. ++ ++@item ++Preserve all the Invariant Sections of the Document, ++unaltered in their text and in their titles. Section numbers ++or the equivalent are not considered part of the section titles. ++ ++@item ++Delete any section Entitled ``Endorsements''. Such a section ++may not be included in the Modified Version. ++ ++@item ++Do not retitle any existing section to be Entitled ``Endorsements'' or ++to conflict in title with any Invariant Section. ++ ++@item ++Preserve any Warranty Disclaimers. ++@end enumerate ++ ++If the Modified Version includes new front-matter sections or ++appendices that qualify as Secondary Sections and contain no material ++copied from the Document, you may at your option designate some or all ++of these sections as invariant. To do this, add their titles to the ++list of Invariant Sections in the Modified Version's license notice. ++These titles must be distinct from any other section titles. ++ ++You may add a section Entitled ``Endorsements'', provided it contains ++nothing but endorsements of your Modified Version by various ++parties---for example, statements of peer review or that the text has ++been approved by an organization as the authoritative definition of a ++standard. ++ ++You may add a passage of up to five words as a Front-Cover Text, and a ++passage of up to 25 words as a Back-Cover Text, to the end of the list ++of Cover Texts in the Modified Version. Only one passage of ++Front-Cover Text and one of Back-Cover Text may be added by (or ++through arrangements made by) any one entity. If the Document already ++includes a cover text for the same cover, previously added by you or ++by arrangement made by the same entity you are acting on behalf of, ++you may not add another; but you may replace the old one, on explicit ++permission from the previous publisher that added the old one. ++ ++The author(s) and publisher(s) of the Document do not by this License ++give permission to use their names for publicity for or to assert or ++imply endorsement of any Modified Version. ++ ++@item ++COMBINING DOCUMENTS ++ ++You may combine the Document with other documents released under this ++License, under the terms defined in section 4 above for modified ++versions, provided that you include in the combination all of the ++Invariant Sections of all of the original documents, unmodified, and ++list them all as Invariant Sections of your combined work in its ++license notice, and that you preserve all their Warranty Disclaimers. ++ ++The combined work need only contain one copy of this License, and ++multiple identical Invariant Sections may be replaced with a single ++copy. If there are multiple Invariant Sections with the same name but ++different contents, make the title of each such section unique by ++adding at the end of it, in parentheses, the name of the original ++author or publisher of that section if known, or else a unique number. ++Make the same adjustment to the section titles in the list of ++Invariant Sections in the license notice of the combined work. ++ ++In the combination, you must combine any sections Entitled ``History'' ++in the various original documents, forming one section Entitled ++``History''; likewise combine any sections Entitled ``Acknowledgements'', ++and any sections Entitled ``Dedications''. You must delete all ++sections Entitled ``Endorsements.'' ++ ++@item ++COLLECTIONS OF DOCUMENTS ++ ++You may make a collection consisting of the Document and other documents ++released under this License, and replace the individual copies of this ++License in the various documents with a single copy that is included in ++the collection, provided that you follow the rules of this License for ++verbatim copying of each of the documents in all other respects. ++ ++You may extract a single document from such a collection, and distribute ++it individually under this License, provided you insert a copy of this ++License into the extracted document, and follow this License in all ++other respects regarding verbatim copying of that document. ++ ++@item ++AGGREGATION WITH INDEPENDENT WORKS ++ ++A compilation of the Document or its derivatives with other separate ++and independent documents or works, in or on a volume of a storage or ++distribution medium, is called an ``aggregate'' if the copyright ++resulting from the compilation is not used to limit the legal rights ++of the compilation's users beyond what the individual works permit. ++When the Document is included in an aggregate, this License does not ++apply to the other works in the aggregate which are not themselves ++derivative works of the Document. ++ ++If the Cover Text requirement of section 3 is applicable to these ++copies of the Document, then if the Document is less than one half of ++the entire aggregate, the Document's Cover Texts may be placed on ++covers that bracket the Document within the aggregate, or the ++electronic equivalent of covers if the Document is in electronic form. ++Otherwise they must appear on printed covers that bracket the whole ++aggregate. ++ ++@item ++TRANSLATION ++ ++Translation is considered a kind of modification, so you may ++distribute translations of the Document under the terms of section 4. ++Replacing Invariant Sections with translations requires special ++permission from their copyright holders, but you may include ++translations of some or all Invariant Sections in addition to the ++original versions of these Invariant Sections. You may include a ++translation of this License, and all the license notices in the ++Document, and any Warranty Disclaimers, provided that you also include ++the original English version of this License and the original versions ++of those notices and disclaimers. In case of a disagreement between ++the translation and the original version of this License or a notice ++or disclaimer, the original version will prevail. ++ ++If a section in the Document is Entitled ``Acknowledgements'', ++``Dedications'', or ``History'', the requirement (section 4) to Preserve ++its Title (section 1) will typically require changing the actual ++title. ++ ++@item ++TERMINATION ++ ++You may not copy, modify, sublicense, or distribute the Document except ++as expressly provided for under this License. Any other attempt to ++copy, modify, sublicense or distribute the Document is void, and will ++automatically terminate your rights under this License. However, ++parties who have received copies, or rights, from you under this ++License will not have their licenses terminated so long as such ++parties remain in full compliance. ++ ++@item ++FUTURE REVISIONS OF THIS LICENSE ++ ++The Free Software Foundation may publish new, revised versions ++of the GNU Free Documentation License from time to time. Such new ++versions will be similar in spirit to the present version, but may ++differ in detail to address new problems or concerns. See ++@uref{http://www.gnu.org/copyleft/%7D. ++ ++Each version of the License is given a distinguishing version number. ++If the Document specifies that a particular numbered version of this ++License ``or any later version'' applies to it, you have the option of ++following the terms and conditions either of that specified version or ++of any later version that has been published (not as a draft) by the ++Free Software Foundation. If the Document does not specify a version ++number of this License, you may choose any version ever published (not ++as a draft) by the Free Software Foundation. ++@end enumerate ++ ++@page ++@appendixsubsec ADDENDUM: How to use this License for your documents ++ ++To use this License in a document you have written, include a copy of ++the License in the document and put the following copyright and ++license notices just after the title page: ++ ++@smallexample ++@group ++ Copyright (C) @var{year} @var{your name}. ++ Permission is granted to copy, distribute and/or modify this document ++ under the terms of the GNU Free Documentation License, Version 1.2 ++ or any later version published by the Free Software Foundation; ++ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover ++ Texts. A copy of the license is included in the section entitled ``GNU ++ Free Documentation License''. ++@end group ++@end smallexample ++ ++If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, ++replace the ``with...Texts.'' line with this: ++ ++@smallexample ++@group ++ with the Invariant Sections being @var{list their titles}, with ++ the Front-Cover Texts being @var{list}, and with the Back-Cover Texts ++ being @var{list}. ++@end group ++@end smallexample ++ ++If you have Invariant Sections without Cover Texts, or some other ++combination of the three, merge those two alternatives to suit the ++situation. ++ ++If your document contains nontrivial examples of program code, we ++recommend releasing these examples in parallel under your choice of ++free software license, such as the GNU General Public License, ++to permit their use in free software. ++ ++@c Local Variables: ++@c ispell-local-pdict: "ispell-dict" ++@c End: ++ +diff -Nur grub-0.97/docs/grub.8 grub-0.97-patched/docs/grub.8 +--- grub-0.97/docs/grub.8 2005-05-08 04:48:56.000000000 +0200 ++++ grub-0.97-patched/docs/grub.8 2012-11-11 17:07:12.715729211 +0100 +@@ -1,5 +1,5 @@ + ." DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. +-.TH GRUB "8" "May 2005" "grub (GNU GRUB 0.97)" FSF ++.TH GRUB "8" "June 2006" "grub (GNU GRUB 0.97)" FSF + .SH NAME + grub - the grub shell + .SH SYNOPSIS +diff -Nur grub-0.97/docs/grub.8.additions grub-0.97-patched/docs/grub.8.additions +--- grub-0.97/docs/grub.8.additions 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/docs/grub.8.additions 2012-11-11 17:07:12.702728798 +0100 +@@ -0,0 +1,3 @@ ++[SEE ALSO] ++.BR update-grub (8), ++.BR grub-install (8). +diff -Nur grub-0.97/docs/grub-install.8 grub-0.97-patched/docs/grub-install.8 +--- grub-0.97/docs/grub-install.8 2005-05-08 04:48:56.000000000 +0200 ++++ grub-0.97-patched/docs/grub-install.8 2012-11-11 17:07:12.713729149 +0100 +@@ -1,5 +1,5 @@ + ." DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. +-.TH GRUB-INSTALL "8" "May 2005" "grub-install (GNU GRUB 0.97)" FSF ++.TH GRUB-INSTALL "8" "June 2006" "grub-install (GNU GRUB 0.97)" FSF + .SH NAME + grub-install - install GRUB on your drive + .SH SYNOPSIS +diff -Nur grub-0.97/docs/grub-install.8.additions grub-0.97-patched/docs/grub-install.8.additions +--- grub-0.97/docs/grub-install.8.additions 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/docs/grub-install.8.additions 2012-11-11 17:07:12.703728829 +0100 +@@ -0,0 +1,3 @@ ++[SEE ALSO] ++.BR grub (8), ++.BR update-grub (8). +diff -Nur grub-0.97/docs/grub-md5-crypt.8 grub-0.97-patched/docs/grub-md5-crypt.8 +--- grub-0.97/docs/grub-md5-crypt.8 2005-05-08 04:48:56.000000000 +0200 ++++ grub-0.97-patched/docs/grub-md5-crypt.8 2012-11-11 17:07:12.713729149 +0100 +@@ -1,5 +1,5 @@ + ." DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. +-.TH GRUB-MD5-CRYPT "8" "May 2005" "grub-md5-crypt (GNU GRUB )" FSF ++.TH GRUB-MD5-CRYPT "8" "June 2006" "grub-md5-crypt (GNU GRUB )" FSF + .SH NAME + grub-md5-crypt - Encrypt a password in MD5 format + .SH SYNOPSIS +diff -Nur grub-0.97/docs/grub-terminfo.8 grub-0.97-patched/docs/grub-terminfo.8 +--- grub-0.97/docs/grub-terminfo.8 2005-05-08 04:48:56.000000000 +0200 ++++ grub-0.97-patched/docs/grub-terminfo.8 2012-11-11 17:07:12.714729180 +0100 +@@ -1,5 +1,5 @@ + ." DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. +-.TH GRUB-TERMINFO "8" "May 2005" "grub-terminfo (GNU GRUB 0.97)" FSF ++.TH GRUB-TERMINFO "8" "June 2006" "grub-terminfo (GNU GRUB 0.97)" FSF + .SH NAME + grub-terminfo - Generate a terminfo command from a terminfo name + .SH SYNOPSIS +diff -Nur grub-0.97/docs/grub.texi grub-0.97-patched/docs/grub.texi +--- grub-0.97/docs/grub.texi 2005-05-08 04:59:59.000000000 +0200 ++++ grub-0.97-patched/docs/grub.texi 2012-11-11 17:07:12.717729276 +0100 +@@ -2,22 +2,41 @@ + @c -*-texinfo-*- + @c %**start of header + @setfilename grub.info +-@settitle GRUB Manual +-@c %**end of header +- + @include version.texi +- ++@settitle GNU GRUB Manual @value{VERSION} + @c Unify all our little indices for now. + @syncodeindex fn cp + @syncodeindex vr cp + @syncodeindex ky cp + @syncodeindex pg cp + @syncodeindex tp cp ++@c %**end of header + + @footnotestyle separate + @paragraphindent 3 + @finalout + ++@copying ++This manual is for GNU GRUB (version @value{VERSION}, ++@value{UPDATED}). ++ ++Copyright @copyright{} 1999,2000,2001,2002,2004,2006 Free Software Foundation, Inc. ++ ++@quotation ++Permission is granted to copy, distribute and/or modify this document ++under the terms of the GNU Free Documentation License, Version 1.2 or ++any later version published by the Free Software Foundation; with no ++Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,'' ++and with the Back-Cover Texts as in (a) below. A copy of the ++license is included in the section entitled ``GNU Free Documentation ++License.'' ++ ++(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify ++this GNU Manual, like GNU software. Copies published by the Free ++Software Foundation raise funds for GNU development.'' ++@end quotation ++@end copying ++ + @dircategory Kernel + @direntry + * GRUB: (grub). The GRand Unified Bootloader +@@ -34,53 +53,16 @@ + + @setchapternewpage odd + +-@ifinfo +-Copyright @copyright{} 1999,2000,2001,2002,2004 Free Software Foundation, Inc. +- +-Permission is granted to make and distribute verbatim copies of +-this manual provided the copyright notice and this permission notice +-are preserved on all copies. +- +-@ignore +-Permission is granted to process this file through TeX and print the +-results, provided the printed document carries a copying permission +-notice identical to this one except for the removal of this paragraph +-(this paragraph not being relevant to the printed manual). +- +-@end ignore +- +-Permission is granted to copy and distribute modified versions of this +-manual under the conditions for verbatim copying, provided also that +-the entire resulting derived work is distributed under the terms of a +-permission notice identical to this one. +- +-Permission is granted to copy and distribute translations of this manual +-into another language, under the above conditions for modified versions. +-@end ifinfo +- + @titlepage + @sp 10 +-@title the GRUB manual ++@title the GNU GRUB manual + @subtitle The GRand Unified Bootloader, version @value{VERSION}, @value{UPDATED}. + @author Gordon Matzigkeit + @author Yoshinori K. Okuji + @c The following two commands start the copyright page. + @page + @vskip 0pt plus 1filll +-Copyright @copyright{} 1999,2000,2001,2002,2004 Free Software Foundation, Inc. +- +-Permission is granted to make and distribute verbatim copies of +-this manual provided the copyright notice and this permission notice +-are preserved on all copies. +-Permission is granted to copy and distribute modified versions of this +-manual under the conditions for verbatim copying, provided that the entire +-resulting derived work is distributed under the terms of a permission +-notice identical to this one. +- +-Permission is granted to copy and distribute translations of this manual +-into another language, under the above conditions for modified versions, +-except that this permission notice may be stated in a translation approved +-by Free Software Foundation. ++@insertcopying + @end titlepage + + @c Output the table of contents at the beginning. +@@ -91,12 +73,14 @@ + + @ifnottex + @node Top +-@top GRUB manual ++@top GNU GRUB manual + + This is the documentation of GNU GRUB, the GRand Unified Bootloader, + a flexible and powerful boot loader program for @sc{pc}s. + + This edition documents version @value{VERSION}. ++ ++@insertcopying + @end ifnottex + + @menu +@@ -124,6 +108,7 @@ + * Reporting bugs:: Where you should send a bug report + * Future:: Some future plans on GRUB + * Internals:: Hacking GRUB ++* Copying This Manual:: Copying This Manual + * Index:: + @end menu + +@@ -3965,6 +3950,16 @@ + @include internals.texi + + ++@node Copying This Manual ++@appendix Copying This Manual ++ ++@menu ++* GNU Free Documentation License:: License for copying this manual. ++@end menu ++ ++@include fdl.texi ++ ++ + @node Index + @unnumbered Index + +diff -Nur grub-0.97/docs/help2man grub-0.97-patched/docs/help2man +--- grub-0.97/docs/help2man 2003-07-09 13:45:36.000000000 +0200 ++++ grub-0.97-patched/docs/help2man 2012-11-11 17:07:12.701728766 +0100 +@@ -455,7 +455,9 @@ + $include{$sect} .= <<EOT; + The full documentation for + .B $program +-is maintained as a Texinfo manual. If the ++is maintained as a Texinfo manual in the ++.B grub-doc ++package. If the + .B info + and + .B $program +diff -Nur grub-0.97/docs/Makefile.am grub-0.97-patched/docs/Makefile.am +--- grub-0.97/docs/Makefile.am 2003-07-09 13:45:35.000000000 +0200 ++++ grub-0.97-patched/docs/Makefile.am 2012-11-11 17:07:12.711729085 +0100 +@@ -1,5 +1,5 @@ + info_TEXINFOS = grub.texi multiboot.texi +-grub_TEXINFOS = internals.texi ++grub_TEXINFOS = internals.texi fdl.texi + EXAMPLES = boot.S kernel.c multiboot.h + multiboot_TEXINFOS = boot.S.texi kernel.c.texi multiboot.h.texi + man_MANS = grub.8 mbchk.1 grub-install.8 grub-md5-crypt.8 grub-terminfo.8 +@@ -37,14 +37,14 @@ + $(SHELL) $(srcdir)/$(SRC2TEXI) $(srcdir) $< $@ + + if MAINTAINER_MODE +-$(srcdir)/grub.8: ../grub/grub $(srcdir)/$(HELP2MAN) ++$(srcdir)/grub.8: ../grub/grub $(srcdir)/$(HELP2MAN) $(srcdir)/grub.8.additions + $(PERL) $(srcdir)/$(HELP2MAN) --name="the grub shell" \ +- --section=8 --output=$@ $< ++ --section=8 --include=$@.additions --output=$@ $< + +-$(srcdir)/grub-install.8: ../util/grub-install $(srcdir)/$(HELP2MAN) ++$(srcdir)/grub-install.8: ../util/grub-install $(srcdir)/$(HELP2MAN) $(srcdir)/grub-install.8.additions + chmod 755 $< + $(PERL) $(srcdir)/$(HELP2MAN) --name="install GRUB on your drive" \ +- --section=8 --output=$@ $< ++ --section=8 --include=$@.additions --output=$@ $< + + $(srcdir)/mbchk.1: ../util/mbchk $(srcdir)/$(HELP2MAN) + $(PERL) $(srcdir)/$(HELP2MAN) \ +diff -Nur grub-0.97/docs/mbchk.1 grub-0.97-patched/docs/mbchk.1 +--- grub-0.97/docs/mbchk.1 2005-05-08 04:48:56.000000000 +0200 ++++ grub-0.97-patched/docs/mbchk.1 2012-11-11 17:07:12.717729276 +0100 +@@ -1,5 +1,5 @@ + ." DO NOT MODIFY THIS FILE! It was generated by help2man 1.23. +-.TH MBCHK "1" "May 2005" "mbchk (GNU GRUB 0.97)" FSF ++.TH MBCHK "1" "June 2006" "mbchk (GNU GRUB 0.97)" FSF + .SH NAME + mbchk - check the format of a Multiboot kernel + .SH SYNOPSIS +diff -Nur grub-0.97/docs/menu.lst grub-0.97-patched/docs/menu.lst +--- grub-0.97/docs/menu.lst 2004-05-11 14:11:17.000000000 +0200 ++++ grub-0.97-patched/docs/menu.lst 2012-11-11 17:07:07.225553829 +0100 +@@ -11,6 +11,9 @@ + # Fallback to the second entry. + fallback 1 + ++# Splash image to show behind grub. ++splashimage=(hd0,0)/boot/grub/splash.xpm.gz ++ + # For booting GNU/Hurd + title GNU/Hurd + root (hd0,0) +@@ -23,6 +26,11 @@ + kernel /vmlinuz root=/dev/hdb1 + #initrd /initrd.img + ++# For booting Gentoo with the static rescue shell ++title Gentoo (rescue shell) ++root (hd1,0) ++kernel /vmlinuz root=/dev/hdb1 init=/bin/bb ++ + # For booting GNU/kFreeBSD + title GNU/kFreeBSD + root (hd0,2,a) +diff -Nur grub-0.97/docs/menu.lst.orig grub-0.97-patched/docs/menu.lst.orig +--- grub-0.97/docs/menu.lst.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/docs/menu.lst.orig 2004-05-11 14:11:17.000000000 +0200 +@@ -0,0 +1,82 @@ ++# ++# Sample boot menu configuration file ++# ++ ++# Boot automatically after 30 secs. ++timeout 30 ++ ++# By default, boot the first entry. ++default 0 ++ ++# Fallback to the second entry. ++fallback 1 ++ ++# For booting GNU/Hurd ++title GNU/Hurd ++root (hd0,0) ++kernel /boot/gnumach.gz root=hd0s1 ++module /boot/serverboot.gz ++ ++# For booting GNU/Linux ++title GNU/Linux ++root (hd1,0) ++kernel /vmlinuz root=/dev/hdb1 ++#initrd /initrd.img ++ ++# For booting GNU/kFreeBSD ++title GNU/kFreeBSD ++root (hd0,2,a) ++kernel /boot/loader.gz ++ ++# For booting GNU/kNetBSD ++title GNU/kNetBSD ++root (hd0,2,a) ++kernel --type=netbsd /boot/knetbsd.gz ++ ++# For booting Mach (getting kernel from floppy) ++title Utah Mach4 multiboot ++root (hd0,2) ++pause Insert the diskette now!! ++kernel (fd0)/boot/kernel root=hd0s3 ++module (fd0)/boot/bootstrap ++ ++# For booting FreeBSD ++title FreeBSD ++root (hd0,2,a) ++kernel /boot/loader ++ ++# For booting NetBSD ++title NetBSD ++root (hd0,2,a) ++kernel --type=netbsd /netbsd ++ ++# For booting OpenBSD ++title OpenBSD ++root (hd0,2,a) ++kernel --type=netbsd /bsd ++ ++# For booting OS/2 ++title OS/2 ++root (hd0,1) ++makeactive ++# chainload OS/2 bootloader from the first sector ++chainloader +1 ++# This is similar to "chainload", but loads a specific file ++#chainloader /boot/chain.os2 ++ ++# For booting Windows NT or Windows95 ++title Windows NT / Windows 95 boot menu ++rootnoverify (hd0,0) ++makeactive ++chainloader +1 ++# For loading DOS if Windows NT is installed ++# chainload /bootsect.dos ++ ++# For installing GRUB into the hard disk ++title Install GRUB into the hard disk ++root (hd0,0) ++setup (hd0) ++ ++# Change the colors. ++title Change the colors ++color light-green/brown blink-red/blue +diff -Nur grub-0.97/docs/multiboot.texi grub-0.97-patched/docs/multiboot.texi +--- grub-0.97/docs/multiboot.texi 2003-07-09 13:45:36.000000000 +0200 ++++ grub-0.97-patched/docs/multiboot.texi 2012-11-11 17:07:12.718729309 +0100 +@@ -1,32 +1,28 @@ + \input texinfo @c -*-texinfo-*- +-@c -*-texinfo-*- + @c %**start of header + @setfilename multiboot.info +-@settitle Multiboot Specification +-@c %**end of header +- ++@set VERSION 0.6.95 ++@settitle Multiboot Specification version @value{VERSION} + @c Unify all our little indices for now. + @syncodeindex fn cp + @syncodeindex vr cp + @syncodeindex ky cp + @syncodeindex pg cp + @syncodeindex tp cp ++@c %**end of header + + @footnotestyle separate + @paragraphindent 3 + @finalout + ++@copying ++Copyright @copyright{} 1995,96 Bryan Ford <baford@@cs.utah.edu> + +-@dircategory Kernel +-@direntry +-* Multiboot Specification: (multiboot). Multiboot Specification. +-@end direntry ++Copyright @copyright{} 1995,96 Erich Stefan Boleyn <erich@@uruk.org> + +-@ifinfo +-Copyright @copyright{} 1995, 96 Bryan Ford <baford@@cs.utah.edu> +-Copyright @copyright{} 1995, 96 Erich Stefan Boleyn <erich@@uruk.org> +-Copyright @copyright{} 1999, 2000, 2001, 2002 Free Software Foundation, Inc. ++Copyright @copyright{} 1999,2000,2001,2002,2005,2006 Free Software Foundation, Inc. + ++@quotation + Permission is granted to make and distribute verbatim copies of + this manual provided the copyright notice and this permission notice + are preserved on all copies. +@@ -36,7 +32,6 @@ + results, provided the printed document carries a copying permission + notice identical to this one except for the removal of this paragraph + (this paragraph not being relevant to the printed manual). +- + @end ignore + + Permission is granted to copy and distribute modified versions of this +@@ -45,31 +40,23 @@ + permission notice identical to this one. + + Permission is granted to copy and distribute translations of this manual +-into another language, under the above conditions for modified versions. +-@end ifinfo ++into another language, under the above conditions for modified ++versions. ++@end quotation ++@end copying ++ ++@dircategory Kernel ++@direntry ++* Multiboot Specification: (multiboot). Multiboot Specification. ++@end direntry + + @titlepage + @sp 10 +-@title The Multiboot Specification ++@title The Multiboot Specification version @value{VERSION} + @author Yoshinori K. Okuji, Bryan Ford, Erich Stefan Boleyn, Kunihiro Ishiguro + @page +- + @vskip 0pt plus 1filll +-Copyright @copyright{} 1995, 96 Bryan Ford <baford@@cs.utah.edu> +-Copyright @copyright{} 1995, 96 Erich Stefan Boleyn <erich@@uruk.org> +-Copyright @copyright{} 1999, 2000, 2001, 2002 Free Software Foundation, Inc. +- +-Permission is granted to make and distribute verbatim copies of +-this manual provided the copyright notice and this permission notice +-are preserved on all copies. +- +-Permission is granted to copy and distribute modified versions of this +-manual under the conditions for verbatim copying, provided also that +-the entire resulting derived work is distributed under the terms of a +-permission notice identical to this one. +- +-Permission is granted to copy and distribute translations of this manual +-into another language, under the above conditions for modified versions. ++@insertcopying + @end titlepage + + @finalout +@@ -80,7 +67,9 @@ + @top Multiboot Specification + + This file documents Multiboot Specification, the proposal for the boot +-sequence standard. This edition documents version 0.6.93. ++sequence standard. This edition documents version @value{VERSION}. ++ ++@insertcopying + @end ifnottex + + @menu +@@ -426,7 +415,7 @@ + kernel. + + If bit 16 in the @samp{flags} word is set, then the fields at offsets +-8-24 in the Multiboot header are valid, and the boot loader should use ++12-28 in the Multiboot header are valid, and the boot loader should use + them instead of the fields in the actual executable header to calculate + where to load the OS image. This information does not need to be + provided if the kernel image is in @sc{elf} format, but it @emph{must} +@@ -677,7 +666,7 @@ + @example + @group + +-------+-------+-------+-------+ +-| drive | part1 | part2 | part3 | ++| part3 | part2 | part1 | drive | + +-------+-------+-------+-------+ + @end group + @end example +@@ -1197,6 +1186,17 @@ + @item + The maintainer changes to the GNU GRUB maintainer team + @email{bug-grub@@gnu.org}, from Bryan Ford and Erich Stefan Boleyn. ++ ++@item ++The byte order of the @samp{boot_device} in Multiboot information is ++reversed. This was a mistake. ++ ++@item ++The offset of the address fields were wrong. ++ ++@item ++The format is adapted to a newer Texinfo, and the version number is ++specified more explicitly in the title. + @end itemize + + @item 0.6 +diff -Nur grub-0.97/grub/asmstub.c grub-0.97-patched/grub/asmstub.c +--- grub-0.97/grub/asmstub.c 2005-02-16 21:45:14.000000000 +0100 ++++ grub-0.97-patched/grub/asmstub.c 2012-11-11 17:07:12.719729342 +0100 +@@ -42,6 +42,7 @@ + #include <sys/time.h> + #include <termios.h> + #include <signal.h> ++#include <sys/mman.h> + + #ifdef __linux__ + # include <sys/ioctl.h> /* ioctl */ +@@ -55,6 +56,10 @@ + # endif /* ! BLKFLSBUF */ + #endif /* __linux__ */ + ++#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__) ++# include <sys/sysctl.h> ++#endif ++ + /* We want to prevent any circularararity in our stubs, as well as + libc name clashes. */ + #define WITHOUT_LIBC_STUBS 1 +@@ -79,7 +84,7 @@ + struct apm_info apm_bios_info; + + /* Emulation requirements. */ +-char *grub_scratch_mem = 0; ++void *grub_scratch_mem = 0; + + struct geometry *disks = 0; + +@@ -103,14 +108,62 @@ + static unsigned int serial_speed; + #endif /* SIMULATE_SLOWNESS_OF_SERIAL */ + ++/* This allocates page-aligned storage of the specified size, which must be ++ * a multiple of the page size as determined by calling sysconf(_SC_PAGESIZE) ++ */ ++#ifdef __linux__ ++static void * ++grub_mmap_alloc(size_t len) ++{ ++ int mmap_flags = MAP_ANONYMOUS|MAP_PRIVATE; ++ ++#ifdef MAP_32BIT ++ mmap_flags |= MAP_32BIT; ++#endif ++ /* Mark the simulated stack executable, as GCC uses stack trampolines ++ * to implement nested functions. */ ++ return mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, mmap_flags, -1, 0); ++} ++#else /* !defined(__linux__) */ ++static void * ++grub_mmap_alloc(size_t len) ++{ ++ int fd = 0, offset = 0, ret = 0; ++ void *pa = MAP_FAILED; ++ char template[] = "/tmp/grub_mmap_alloc_XXXXXX"; ++ int e; ++ ++ fd = mkstemp(template); ++ if (fd < 0) ++ return pa; ++ ++ unlink(template); ++ ++ ret = ftruncate(fd, len); ++ if (ret < 0) ++ return pa; ++ ++ /* Mark the simulated stack executable, as GCC uses stack trampolines ++ * to implement nested functions. */ ++ pa = mmap(NULL, len, PROT_READ|PROT_WRITE|PROT_EXEC, ++ MAP_PRIVATE, fd, offset); ++ ++ e = errno; ++ close(fd); ++ errno = e; ++ return pa; ++} ++#endif /* defined(__linux__) */ ++ + /* The main entry point into this mess. */ + int + grub_stage2 (void) + { + /* These need to be static, because they survive our stack transitions. */ + static int status = 0; +- static char *realstack; +- char *scratch, *simstack; ++ static void *realstack; ++ void *simstack_alloc_base, *simstack; ++ size_t simstack_size, page_size; + int i; + + auto void doit (void); +@@ -142,9 +195,35 @@ + } + + assert (grub_scratch_mem == 0); +- scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15); +- assert (scratch); +- grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4); ++ ++ /* Allocate enough pages for 0x100000 + EXTENDED_SIZE + 15, and ++ * make sure the memory is aligned to a multiple of the system's ++ * page size */ ++ page_size = sysconf (_SC_PAGESIZE); ++ simstack_size = ( 0x100000 + EXTENDED_MEMSIZE + 15); ++ if (simstack_size % page_size) ++ { ++ /* If we're not on a page_size boundary, round up to the next one */ ++ simstack_size &= ~(page_size-1); ++ simstack_size += page_size; ++ } ++ ++ /* Add one for a PROT_NONE boundary page at each end. */ ++ simstack_size += 2 * page_size; ++ ++ simstack_alloc_base = grub_mmap_alloc(simstack_size); ++ assert (simstack_alloc_base != MAP_FAILED); ++ ++ /* mark pages above and below our simstack area as innaccessable. ++ * If the implementation we're using doesn't support that, then the ++ * new protection modes are undefined. It's safe to just ignore ++ * them, though. It'd be nice if we knew that we'd get a SEGV for ++ * touching the area, but that's all. it'd be nice to have. */ ++ mprotect (simstack_alloc_base, page_size, PROT_NONE); ++ mprotect ((void *)((unsigned long)simstack_alloc_base + ++ simstack_size - page_size), page_size, PROT_NONE); ++ ++ grub_scratch_mem = (void *)((unsigned long)simstack_alloc_base + page_size); + + /* FIXME: simulate the memory holes using mprot, if available. */ + +@@ -217,7 +296,7 @@ + device_map = 0; + free (disks); + disks = 0; +- free (scratch); ++ munmap(simstack_alloc_base, simstack_size); + grub_scratch_mem = 0; + + if (serial_device) +@@ -777,7 +856,39 @@ + + /* Open read/write, or read-only if that failed. */ + if (! read_only) +- disks[drive].flags = open (devname, O_RDWR); ++ { ++/* By default, kernel of FreeBSD does not allow overwriting MBR */ ++#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__) ++#define GEOM_SYSCTL "kern.geom.debugflags" ++ int old_flags, flags; ++ size_t sizeof_int = sizeof (int); ++ ++ if (sysctlbyname (GEOM_SYSCTL, &old_flags, &sizeof_int, NULL, 0) != 0) ++ grub_printf ("failed to get " GEOM_SYSCTL "sysctl: %s\n", strerror (errno)); ++ ++ if ((old_flags & 0x10) == 0) ++ { ++ /* "allow foot shooting", see geom(4) */ ++ flags = old_flags | 0x10; ++ ++ if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &flags, sizeof (int)) != 0) ++ { ++ flags = old_flags; ++ grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n", strerror (errno)); ++ } ++ } ++ else ++ flags = old_flags; ++#endif ++ disks[drive].flags = open (devname, O_RDWR); ++#if defined(__FreeBSD_kernel__) || defined(__FreeBSD__) ++ if (flags != old_flags) ++ { ++ if (sysctlbyname (GEOM_SYSCTL, NULL, NULL, &old_flags, sizeof (int)) != 0) ++ grub_printf ("failed to set " GEOM_SYSCTL "sysctl: %s\n", strerror (errno)); ++ } ++#endif ++ } + + if (disks[drive].flags == -1) + { +@@ -926,7 +1037,7 @@ + + int + biosdisk (int subfunc, int drive, struct geometry *geometry, +- int sector, int nsec, int segment) ++ unsigned int sector, int nsec, int segment) + { + char *buf; + int fd = geometry->flags; +diff -Nur grub-0.97/grub/asmstub.c.orig grub-0.97-patched/grub/asmstub.c.orig +--- grub-0.97/grub/asmstub.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/grub/asmstub.c.orig 2005-02-16 21:45:14.000000000 +0100 +@@ -0,0 +1,1275 @@ ++/* asmstub.c - a version of shared_src/asm.S that works under Unix */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 1999,2000,2001,2002,2004 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. ++ */ ++ ++/* Try to use glibc's transparant LFS support. */ ++#define _LARGEFILE_SOURCE 1 ++/* lseek becomes synonymous with lseek64. */ ++#define _FILE_OFFSET_BITS 64 ++ ++/* Simulator entry point. */ ++int grub_stage2 (void); ++ ++#include <stdlib.h> ++#include <string.h> ++#include <ctype.h> ++#include <assert.h> ++#include <stdio.h> ++#include <sys/types.h> ++#include <sys/stat.h> ++#include <fcntl.h> ++#include <time.h> ++#include <errno.h> ++#include <string.h> ++#include <unistd.h> ++#include <setjmp.h> ++#include <sys/time.h> ++#include <termios.h> ++#include <signal.h> ++ ++#ifdef __linux__ ++# include <sys/ioctl.h> /* ioctl */ ++# if !defined(__GLIBC__) || \ ++ ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1))) ++/* Maybe libc doesn't have large file support. */ ++# include <linux/unistd.h> /* _llseek */ ++# endif /* (GLIBC < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR < 1)) */ ++# ifndef BLKFLSBUF ++# define BLKFLSBUF _IO (0x12,97) /* flush buffer cache */ ++# endif /* ! BLKFLSBUF */ ++#endif /* __linux__ */ ++ ++/* We want to prevent any circularararity in our stubs, as well as ++ libc name clashes. */ ++#define WITHOUT_LIBC_STUBS 1 ++#include <shared.h> ++#include <device.h> ++#include <serial.h> ++#include <term.h> ++ ++/* Simulated memory sizes. */ ++#define EXTENDED_MEMSIZE (3 * 1024 * 1024) /* 3MB */ ++#define CONVENTIONAL_MEMSIZE (640 * 1024) /* 640kB */ ++ ++unsigned long install_partition = 0x20000; ++unsigned long boot_drive = 0; ++int saved_entryno = 0; ++char version_string[] = VERSION; ++char config_file[128] = "/boot/grub/menu.lst"; /* FIXME: arbitrary */ ++unsigned long linux_text_len = 0; ++char *linux_data_tmp_addr = 0; ++char *linux_data_real_addr = 0; ++unsigned short io_map[IO_MAP_SIZE]; ++struct apm_info apm_bios_info; ++ ++/* Emulation requirements. */ ++char *grub_scratch_mem = 0; ++ ++struct geometry *disks = 0; ++ ++/* The map between BIOS drives and UNIX device file names. */ ++char **device_map = 0; ++ ++/* The jump buffer for exiting correctly. */ ++static jmp_buf env_for_exit; ++ ++/* The current color for console. */ ++int console_current_color = A_NORMAL; ++ ++/* The file descriptor for a serial device. */ ++static int serial_fd = -1; ++ ++/* The file name of a serial device. */ ++static char *serial_device = 0; ++ ++#ifdef SIMULATE_SLOWNESS_OF_SERIAL ++/* The speed of a serial device. */ ++static unsigned int serial_speed; ++#endif /* SIMULATE_SLOWNESS_OF_SERIAL */ ++ ++/* The main entry point into this mess. */ ++int ++grub_stage2 (void) ++{ ++ /* These need to be static, because they survive our stack transitions. */ ++ static int status = 0; ++ static char *realstack; ++ char *scratch, *simstack; ++ int i; ++ ++ auto void doit (void); ++ ++ /* We need a nested function so that we get a clean stack frame, ++ regardless of how the code is optimized. */ ++ void doit (void) ++ { ++ /* Make sure our stack lives in the simulated memory area. */ ++ asm volatile ("movl %%esp, %0\n\tmovl %1, %%esp\n" ++ : "=&r" (realstack) : "r" (simstack)); ++ ++ /* Do a setjmp here for the stop command. */ ++ if (! setjmp (env_for_exit)) ++ { ++ /* Actually enter the generic stage2 code. */ ++ status = 0; ++ init_bios_info (); ++ } ++ else ++ { ++ /* If ERRNUM is non-zero, then set STATUS to non-zero. */ ++ if (errnum) ++ status = 1; ++ } ++ ++ /* Replace our stack before we use any local variables. */ ++ asm volatile ("movl %0, %%esp\n" : : "r" (realstack)); ++ } ++ ++ assert (grub_scratch_mem == 0); ++ scratch = malloc (0x100000 + EXTENDED_MEMSIZE + 15); ++ assert (scratch); ++ grub_scratch_mem = (char *) ((((int) scratch) >> 4) << 4); ++ ++ /* FIXME: simulate the memory holes using mprot, if available. */ ++ ++ assert (disks == 0); ++ disks = malloc (NUM_DISKS * sizeof (*disks)); ++ assert (disks); ++ /* Initialize DISKS. */ ++ for (i = 0; i < NUM_DISKS; i++) ++ disks[i].flags = -1; ++ ++ if (! init_device_map (&device_map, device_map_file, floppy_disks)) ++ return 1; ++ ++ /* Check some invariants. */ ++ assert ((SCRATCHSEG << 4) == SCRATCHADDR); ++ assert ((BUFFERSEG << 4) == BUFFERADDR); ++ assert (BUFFERADDR + BUFFERLEN == SCRATCHADDR); ++ assert (FSYS_BUF % 16 == 0); ++ assert (FSYS_BUF + FSYS_BUFLEN == BUFFERADDR); ++ ++#ifdef HAVE_LIBCURSES ++ /* Get into char-at-a-time mode. */ ++ if (use_curses) ++ { ++ initscr (); ++ cbreak (); ++ noecho (); ++ nonl (); ++ scrollok (stdscr, TRUE); ++ keypad (stdscr, TRUE); ++ wtimeout (stdscr, 100); ++ signal (SIGWINCH, SIG_IGN); ++ } ++#endif ++ ++ /* Make sure that actual writing is done. */ ++ sync (); ++ ++ /* Set our stack, and go for it. */ ++ simstack = (char *) PROTSTACKINIT; ++ doit (); ++ ++ /* I don't know if this is necessary really. */ ++ sync (); ++ ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ endwin (); ++#endif ++ ++ /* Close off the file descriptors we used. */ ++ for (i = 0; i < NUM_DISKS; i ++) ++ if (disks[i].flags != -1) ++ { ++#ifdef __linux__ ++ /* In Linux, invalidate the buffer cache. In other OSes, reboot ++ is one of the solutions... */ ++ ioctl (disks[i].flags, BLKFLSBUF, 0); ++#else ++# warning "In your operating system, the buffer cache will not be flushed." ++#endif ++ close (disks[i].flags); ++ } ++ ++ if (serial_fd >= 0) ++ close (serial_fd); ++ ++ /* Release memory. */ ++ restore_device_map (device_map); ++ device_map = 0; ++ free (disks); ++ disks = 0; ++ free (scratch); ++ grub_scratch_mem = 0; ++ ++ if (serial_device) ++ free (serial_device); ++ serial_device = 0; ++ ++ /* Ahh... at last we're ready to return to caller. */ ++ return status; ++} ++ ++/* Assign DRIVE to a device name DEVICE. */ ++void ++assign_device_name (int drive, const char *device) ++{ ++ /* If DRIVE is already assigned, free it. */ ++ if (device_map[drive]) ++ free (device_map[drive]); ++ ++ /* If the old one is already opened, close it. */ ++ if (disks[drive].flags != -1) ++ { ++ close (disks[drive].flags); ++ disks[drive].flags = -1; ++ } ++ ++ /* Assign DRIVE to DEVICE. */ ++ if (! device) ++ device_map[drive] = 0; ++ else ++ device_map[drive] = strdup (device); ++} ++ ++void ++stop (void) ++{ ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ endwin (); ++#endif ++ ++ /* Jump to doit. */ ++ longjmp (env_for_exit, 1); ++} ++ ++void ++grub_reboot (void) ++{ ++ stop (); ++} ++ ++void ++grub_halt (int no_apm) ++{ ++ stop (); ++} ++ ++/* calls for direct boot-loader chaining */ ++void ++chain_stage1 (unsigned long segment, unsigned long offset, ++ unsigned long part_table_addr) ++{ ++ stop (); ++} ++ ++ ++void ++chain_stage2 (unsigned long segment, unsigned long offset, int second_sector) ++{ ++ stop (); ++} ++ ++ ++/* do some funky stuff, then boot linux */ ++void ++linux_boot (void) ++{ ++ stop (); ++} ++ ++ ++/* For bzImage kernels. */ ++void ++big_linux_boot (void) ++{ ++ stop (); ++} ++ ++ ++/* booting a multiboot executable */ ++void ++multi_boot (int start, int mb_info) ++{ ++ stop (); ++} ++ ++/* sets it to linear or wired A20 operation */ ++void ++gateA20 (int linear) ++{ ++ /* Nothing to do in the simulator. */ ++} ++ ++/* Set up the int15 handler. */ ++void ++set_int15_handler (void) ++{ ++ /* Nothing to do in the simulator. */ ++} ++ ++/* Restore the original int15 handler. */ ++void ++unset_int15_handler (void) ++{ ++ /* Nothing to do in the simulator. */ ++} ++ ++/* The key map. */ ++unsigned short bios_key_map[KEY_MAP_SIZE + 1]; ++unsigned short ascii_key_map[KEY_MAP_SIZE + 1]; ++ ++/* Copy MAP to the drive map and set up the int13 handler. */ ++void ++set_int13_handler (unsigned short *map) ++{ ++ /* Nothing to do in the simulator. */ ++} ++ ++int ++get_code_end (void) ++{ ++ /* Just return a little area for simulation. */ ++ return BOOTSEC_LOCATION + (60 * 1024); ++} ++ ++ ++/* memory probe routines */ ++int ++get_memsize (int type) ++{ ++ if (! type) ++ return CONVENTIONAL_MEMSIZE >> 10; ++ else ++ return EXTENDED_MEMSIZE >> 10; ++} ++ ++ ++/* get_eisamemsize() : return packed EISA memory map, lower 16 bits is ++ * memory between 1M and 16M in 1K parts, upper 16 bits is ++ * memory above 16M in 64K parts. If error, return -1. ++ */ ++int ++get_eisamemsize (void) ++{ ++ return (EXTENDED_MEMSIZE >> 10); ++} ++ ++ ++#define MMAR_DESC_TYPE_AVAILABLE 1 /* available to OS */ ++#define MMAR_DESC_TYPE_RESERVED 2 /* not available */ ++#define MMAR_DESC_TYPE_ACPI_RECLAIM 3 /* usable by OS after reading ACPI */ ++#define MMAR_DESC_TYPE_ACPI_NVS 4 /* required to save between NVS sessions */ ++ ++#define MMAR_DESC_LENGTH 20 ++ ++/* Fetch the next entry in the memory map and return the continuation ++ value. DESC is a pointer to the descriptor buffer, and CONT is the ++ previous continuation value (0 to get the first entry in the ++ map). */ ++int ++get_mmap_entry (struct mmar_desc *desc, int cont) ++{ ++ /* Record the memory map statically. */ ++ static struct mmar_desc desc_table[] = ++ { ++ /* The conventional memory. */ ++ { ++ MMAR_DESC_LENGTH, ++ 0, ++ CONVENTIONAL_MEMSIZE, ++ MMAR_DESC_TYPE_AVAILABLE ++ }, ++ /* BIOS RAM and ROM (such as video memory). */ ++ { ++ MMAR_DESC_LENGTH, ++ CONVENTIONAL_MEMSIZE, ++ 0x100000 - CONVENTIONAL_MEMSIZE, ++ MMAR_DESC_TYPE_RESERVED ++ }, ++ /* The extended memory. */ ++ { ++ MMAR_DESC_LENGTH, ++ 0x100000, ++ EXTENDED_MEMSIZE, ++ MMAR_DESC_TYPE_AVAILABLE ++ } ++ }; ++ ++ int num = sizeof (desc_table) / sizeof (*desc_table); ++ ++ if (cont < 0 || cont >= num) ++ { ++ /* Should not happen. */ ++ desc->desc_len = 0; ++ } ++ else ++ { ++ /* Copy the entry. */ ++ *desc = desc_table[cont++]; ++ ++ /* If the next entry exists, return the index. */ ++ if (cont < num) ++ return cont; ++ } ++ ++ return 0; ++} ++ ++/* Track the int13 handler. */ ++void ++track_int13 (int drive) ++{ ++ /* Nothing to do in the simulator. */ ++} ++ ++/* Get the ROM configuration table. */ ++unsigned long ++get_rom_config_table (void) ++{ ++ return 0; ++} ++ ++/* Get APM BIOS information. */ ++void ++get_apm_info (void) ++{ ++ /* Nothing to do in the simulator. */ ++} ++ ++/* Get VBE controller information. */ ++int ++get_vbe_controller_info (struct vbe_controller *controller) ++{ ++ /* Always fails. */ ++ return 0; ++} ++ ++/* Get VBE mode information. */ ++int ++get_vbe_mode_info (int mode_number, struct vbe_mode *mode) ++{ ++ /* Always fails. */ ++ return 0; ++} ++ ++/* Set VBE mode. */ ++int ++set_vbe_mode (int mode_number) ++{ ++ /* Always fails. */ ++ return 0; ++} ++ ++/* low-level timing info */ ++int ++getrtsecs (void) ++{ ++ /* FIXME: exact value is not important, so just return time_t for now. */ ++ return time (0); ++} ++ ++int ++currticks (void) ++{ ++ struct timeval tv; ++ long csecs; ++ int ticks_per_csec, ticks_per_usec; ++ ++ /* Note: 18.2 ticks/sec. */ ++ ++ /* Get current time. */ ++ gettimeofday (&tv, 0); ++ ++ /* Compute centiseconds. */ ++ csecs = tv.tv_sec / 10; ++ ++ /* Ticks per centisecond. */ ++ ticks_per_csec = csecs * 182; ++ ++ /* Ticks per microsecond. */ ++ ticks_per_usec = (((tv.tv_sec - csecs * 10) * 1000000 + tv.tv_usec) ++ * 182 / 10000000); ++ ++ /* Sum them. */ ++ return ticks_per_csec + ticks_per_usec; ++} ++ ++/* displays an ASCII character. IBM displays will translate some ++ characters to special graphical ones */ ++void ++console_putchar (int c) ++{ ++ /* Curses doesn't have VGA fonts. */ ++ switch (c) ++ { ++ case DISP_UL: ++ c = ACS_ULCORNER; ++ break; ++ case DISP_UR: ++ c = ACS_URCORNER; ++ break; ++ case DISP_LL: ++ c = ACS_LLCORNER; ++ break; ++ case DISP_LR: ++ c = ACS_LRCORNER; ++ break; ++ case DISP_HORIZ: ++ c = ACS_HLINE; ++ break; ++ case DISP_VERT: ++ c = ACS_VLINE; ++ break; ++ case DISP_LEFT: ++ c = ACS_LARROW; ++ break; ++ case DISP_RIGHT: ++ c = ACS_RARROW; ++ break; ++ case DISP_UP: ++ c = ACS_UARROW; ++ break; ++ case DISP_DOWN: ++ c = ACS_DARROW; ++ break; ++ default: ++ break; ++ } ++ ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ { ++ /* In ncurses, a newline is treated badly, so we emulate it in our ++ own way. */ ++ if (c == '\n') ++ { ++ int x, y; ++ ++ getyx (stdscr, y, x); ++ if (y + 1 == LINES) ++ scroll (stdscr); ++ else ++ move (y + 1, x); ++ } ++ else if (isprint (c)) ++ { ++ int x, y; ++ ++ getyx (stdscr, y, x); ++ if (x + 1 == COLS) ++ { ++ console_putchar ('\r'); ++ console_putchar ('\n'); ++ } ++ addch (c | console_current_color); ++ } ++ else ++ { ++ addch (c); ++ } ++ ++#ifdef REFRESH_IMMEDIATELY ++ refresh (); ++#endif ++ } ++ else ++#endif ++ { ++ /* CR is not used in Unix. */ ++ if (c != '\r') ++ putchar (c); ++ } ++} ++ ++/* The store for ungetch simulation. This is necessary, because ++ ncurses-1.9.9g is still used in the world and its ungetch is ++ completely broken. */ ++#ifdef HAVE_LIBCURSES ++static int save_char = ERR; ++#endif ++ ++static int ++console_translate_key (int c) ++{ ++ switch (c) ++ { ++ case KEY_LEFT: ++ return 2; ++ case KEY_RIGHT: ++ return 6; ++ case KEY_UP: ++ return 16; ++ case KEY_DOWN: ++ return 14; ++ case KEY_DC: ++ return 4; ++ case KEY_BACKSPACE: ++ return 8; ++ case KEY_HOME: ++ return 1; ++ case KEY_END: ++ return 5; ++ case KEY_PPAGE: ++ return 7; ++ case KEY_NPAGE: ++ return 3; ++ default: ++ break; ++ } ++ ++ return c; ++} ++ ++/* like 'getkey', but doesn't wait, returns -1 if nothing available */ ++int ++console_checkkey (void) ++{ ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ { ++ int c; ++ ++ /* Check for SAVE_CHAR. This should not be true, because this ++ means checkkey is called twice continuously. */ ++ if (save_char != ERR) ++ return save_char; ++ ++ c = getch (); ++ /* If C is not ERR, then put it back in the input queue. */ ++ if (c != ERR) ++ save_char = c; ++ return console_translate_key (c); ++ } ++#endif ++ ++ /* Just pretend they hit the space bar, then read the real key when ++ they call getkey. */ ++ return ' '; ++} ++ ++/* returns packed BIOS/ASCII code */ ++int ++console_getkey (void) ++{ ++ int c; ++ ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ { ++ /* If checkkey has already got a character, then return it. */ ++ if (save_char != ERR) ++ { ++ c = save_char; ++ save_char = ERR; ++ return console_translate_key (c); ++ } ++ ++ wtimeout (stdscr, -1); ++ c = getch (); ++ wtimeout (stdscr, 100); ++ } ++ else ++#endif ++ c = getchar (); ++ ++ /* Quit if we get EOF. */ ++ if (c == -1) ++ stop (); ++ ++ return console_translate_key (c); ++} ++ ++/* returns packed values, LSB+1 is x, LSB is y */ ++int ++console_getxy (void) ++{ ++ int y, x; ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ getyx (stdscr, y, x); ++ else ++#endif ++ y = x = 0; ++ return (x << 8) | (y & 0xff); ++} ++ ++void ++console_gotoxy (int x, int y) ++{ ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ move (y, x); ++#endif ++} ++ ++/* low-level character I/O */ ++void ++console_cls (void) ++{ ++#ifdef HAVE_LIBCURSES ++ if (use_curses) ++ clear (); ++#endif ++} ++ ++void ++console_setcolorstate (color_state state) ++{ ++ console_current_color = ++ (state == COLOR_STATE_HIGHLIGHT) ? A_REVERSE : A_NORMAL; ++} ++ ++void ++console_setcolor (int normal_color, int highlight_color) ++{ ++ /* Nothing to do. */ ++} ++ ++int ++console_setcursor (int on) ++{ ++ return 1; ++} ++ ++/* Low-level disk I/O. Our stubbed version just returns a file ++ descriptor, not the actual geometry. */ ++int ++get_diskinfo (int drive, struct geometry *geometry) ++{ ++ /* FIXME: this function is truly horrid. We try opening the device, ++ then severely abuse the GEOMETRY->flags field to pass a file ++ descriptor to biosdisk. Thank God nobody's looking at this comment, ++ or my reputation would be ruined. --Gord */ ++ ++ /* See if we have a cached device. */ ++ if (disks[drive].flags == -1) ++ { ++ /* The unpartitioned device name: /dev/XdX */ ++ char *devname = device_map[drive]; ++ char buf[512]; ++ ++ if (! devname) ++ return -1; ++ ++ if (verbose) ++ grub_printf ("Attempt to open drive 0x%x (%s)\n", ++ drive, devname); ++ ++ /* Open read/write, or read-only if that failed. */ ++ if (! read_only) ++ disks[drive].flags = open (devname, O_RDWR); ++ ++ if (disks[drive].flags == -1) ++ { ++ if (read_only || errno == EACCES || errno == EROFS || errno == EPERM) ++ { ++ disks[drive].flags = open (devname, O_RDONLY); ++ if (disks[drive].flags == -1) ++ { ++ assign_device_name (drive, 0); ++ return -1; ++ } ++ } ++ else ++ { ++ assign_device_name (drive, 0); ++ return -1; ++ } ++ } ++ ++ /* Attempt to read the first sector. */ ++ if (read (disks[drive].flags, buf, 512) != 512) ++ { ++ close (disks[drive].flags); ++ disks[drive].flags = -1; ++ assign_device_name (drive, 0); ++ return -1; ++ } ++ ++ if (disks[drive].flags != -1) ++ get_drive_geometry (&disks[drive], device_map, drive); ++ } ++ ++ if (disks[drive].flags == -1) ++ return -1; ++ ++#ifdef __linux__ ++ /* In Linux, invalidate the buffer cache, so that left overs ++ from other program in the cache are flushed and seen by us */ ++ ioctl (disks[drive].flags, BLKFLSBUF, 0); ++#endif ++ ++ *geometry = disks[drive]; ++ return 0; ++} ++ ++/* Read LEN bytes from FD in BUF. Return less than or equal to zero if an ++ error occurs, otherwise return LEN. */ ++static int ++nread (int fd, char *buf, size_t len) ++{ ++ int size = len; ++ ++ while (len) ++ { ++ int ret = read (fd, buf, len); ++ ++ if (ret <= 0) ++ { ++ if (errno == EINTR) ++ continue; ++ else ++ return ret; ++ } ++ ++ len -= ret; ++ buf += ret; ++ } ++ ++ return size; ++} ++ ++/* Write LEN bytes from BUF to FD. Return less than or equal to zero if an ++ error occurs, otherwise return LEN. */ ++static int ++nwrite (int fd, char *buf, size_t len) ++{ ++ int size = len; ++ ++ while (len) ++ { ++ int ret = write (fd, buf, len); ++ ++ if (ret <= 0) ++ { ++ if (errno == EINTR) ++ continue; ++ else ++ return ret; ++ } ++ ++ len -= ret; ++ buf += ret; ++ } ++ ++ return size; ++} ++ ++/* Dump BUF in the format of hexadecimal numbers. */ ++static void ++hex_dump (void *buf, size_t size) ++{ ++ /* FIXME: How to determine which length is readable? */ ++#define MAX_COLUMN 70 ++ ++ /* use unsigned char for numerical computations */ ++ unsigned char *ptr = buf; ++ /* count the width of the line */ ++ int column = 0; ++ /* how many bytes written */ ++ int count = 0; ++ ++ while (size > 0) ++ { ++ /* high 4 bits */ ++ int hi = *ptr >> 4; ++ /* low 4 bits */ ++ int low = *ptr & 0xf; ++ ++ /* grub_printf does not handle prefix number, such as %2x, so ++ format the number by hand... */ ++ grub_printf ("%x%x", hi, low); ++ column += 2; ++ count++; ++ ptr++; ++ size--; ++ ++ /* Insert space or newline with the interval 4 bytes. */ ++ if (size != 0 && (count % 4) == 0) ++ { ++ if (column < MAX_COLUMN) ++ { ++ grub_printf (" "); ++ column++; ++ } ++ else ++ { ++ grub_printf ("\n"); ++ column = 0; ++ } ++ } ++ } ++ ++ /* Add a newline at the end for readability. */ ++ grub_printf ("\n"); ++} ++ ++int ++biosdisk (int subfunc, int drive, struct geometry *geometry, ++ int sector, int nsec, int segment) ++{ ++ char *buf; ++ int fd = geometry->flags; ++ ++ /* Get the file pointer from the geometry, and make sure it matches. */ ++ if (fd == -1 || fd != disks[drive].flags) ++ return BIOSDISK_ERROR_GEOMETRY; ++ ++ /* Seek to the specified location. */ ++#if defined(__linux__) && (!defined(__GLIBC__) || \ ++ ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))) ++ /* Maybe libc doesn't have large file support. */ ++ { ++ loff_t offset, result; ++ static int _llseek (uint filedes, ulong hi, ulong lo, ++ loff_t *res, uint wh); ++ _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo, ++ loff_t *, res, uint, wh); ++ ++ offset = (loff_t) sector * (loff_t) SECTOR_SIZE; ++ if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET)) ++ return -1; ++ } ++#else ++ { ++ off_t offset = (off_t) sector * (off_t) SECTOR_SIZE; ++ ++ if (lseek (fd, offset, SEEK_SET) != offset) ++ return -1; ++ } ++#endif ++ ++ buf = (char *) (segment << 4); ++ ++ switch (subfunc) ++ { ++ case BIOSDISK_READ: ++#ifdef __linux__ ++ if (sector == 0 && nsec > 1) ++ { ++ /* Work around a bug in linux's ez remapping. Linux remaps all ++ sectors that are read together with the MBR in one read. It ++ should only remap the MBR, so we split the read in two ++ parts. -jochen */ ++ if (nread (fd, buf, SECTOR_SIZE) != SECTOR_SIZE) ++ return -1; ++ buf += SECTOR_SIZE; ++ nsec--; ++ } ++#endif ++ if (nread (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE) ++ return -1; ++ break; ++ ++ case BIOSDISK_WRITE: ++ if (verbose) ++ { ++ grub_printf ("Write %d sectors starting from %d sector" ++ " to drive 0x%x (%s)\n", ++ nsec, sector, drive, device_map[drive]); ++ hex_dump (buf, nsec * SECTOR_SIZE); ++ } ++ if (! read_only) ++ if (nwrite (fd, buf, nsec * SECTOR_SIZE) != nsec * SECTOR_SIZE) ++ return -1; ++ break; ++ ++ default: ++ grub_printf ("unknown subfunc %d\n", subfunc); ++ break; ++ } ++ ++ return 0; ++} ++ ++ ++void ++stop_floppy (void) ++{ ++ /* NOTUSED */ ++} ++ ++/* Fetch a key from a serial device. */ ++int ++serial_hw_fetch (void) ++{ ++ fd_set fds; ++ struct timeval to; ++ char c; ++ ++ /* Wait only for the serial device. */ ++ FD_ZERO (&fds); ++ FD_SET (serial_fd, &fds); ++ ++ to.tv_sec = 0; ++ to.tv_usec = 0; ++ ++ if (select (serial_fd + 1, &fds, 0, 0, &to) > 0) ++ { ++ if (nread (serial_fd, &c, 1) != 1) ++ stop (); ++ ++ return c; ++ } ++ ++ return -1; ++} ++ ++/* Put a character to a serial device. */ ++void ++serial_hw_put (int c) ++{ ++ char ch = (char) c; ++ ++ if (nwrite (serial_fd, &ch, 1) != 1) ++ stop (); ++} ++ ++void ++serial_hw_delay (void) ++{ ++#ifdef SIMULATE_SLOWNESS_OF_SERIAL ++ struct timeval otv, tv; ++ ++ gettimeofday (&otv, 0); ++ ++ while (1) ++ { ++ long delta; ++ ++ gettimeofday (&tv, 0); ++ delta = tv.tv_usec - otv.tv_usec; ++ if (delta < 0) ++ delta += 1000000; ++ ++ if (delta >= 1000000 / (serial_speed >> 3)) ++ break; ++ } ++#endif /* SIMULATE_SLOWNESS_OF_SERIAL */ ++} ++ ++static speed_t ++get_termios_speed (int speed) ++{ ++ switch (speed) ++ { ++ case 2400: return B2400; ++ case 4800: return B4800; ++ case 9600: return B9600; ++ case 19200: return B19200; ++ case 38400: return B38400; ++#ifdef B57600 ++ case 57600: return B57600; ++#endif ++#ifdef B115200 ++ case 115200: return B115200; ++#endif ++ } ++ ++ return B0; ++} ++ ++/* Get the port number of the unit UNIT. In the grub shell, this doesn't ++ make sense. */ ++unsigned short ++serial_hw_get_port (int unit) ++{ ++ return 0; ++} ++ ++/* Initialize a serial device. In the grub shell, PORT is unused. */ ++int ++serial_hw_init (unsigned short port, unsigned int speed, ++ int word_len, int parity, int stop_bit_len) ++{ ++ struct termios termios; ++ speed_t termios_speed; ++ int i; ++ ++ /* Check if the file name is specified. */ ++ if (! serial_device) ++ return 0; ++ ++ /* If a serial device is already opened, close it first. */ ++ if (serial_fd >= 0) ++ close (serial_fd); ++ ++ /* Open the device file. */ ++ serial_fd = open (serial_device, ++ O_RDWR | O_NOCTTY ++#if defined(O_SYNC) ++ /* O_SYNC is used in Linux (and some others?). */ ++ | O_SYNC ++#elif defined(O_FSYNC) ++ /* O_FSYNC is used in FreeBSD. */ ++ | O_FSYNC ++#endif ++ ); ++ if (serial_fd < 0) ++ return 0; ++ ++ /* Get the termios parameters. */ ++ if (tcgetattr (serial_fd, &termios)) ++ goto fail; ++ ++ /* Raw mode. */ ++ cfmakeraw (&termios); ++ ++ /* Set the speed. */ ++ termios_speed = get_termios_speed (speed); ++ if (termios_speed == B0) ++ goto fail; ++ ++ cfsetispeed (&termios, termios_speed); ++ cfsetospeed (&termios, termios_speed); ++ ++ /* Set the word length. */ ++ termios.c_cflag &= ~CSIZE; ++ switch (word_len) ++ { ++ case UART_5BITS_WORD: ++ termios.c_cflag |= CS5; ++ break; ++ case UART_6BITS_WORD: ++ termios.c_cflag |= CS6; ++ break; ++ case UART_7BITS_WORD: ++ termios.c_cflag |= CS7; ++ break; ++ case UART_8BITS_WORD: ++ termios.c_cflag |= CS8; ++ break; ++ default: ++ goto fail; ++ } ++ ++ /* Set the parity. */ ++ switch (parity) ++ { ++ case UART_NO_PARITY: ++ termios.c_cflag &= ~PARENB; ++ break; ++ case UART_ODD_PARITY: ++ termios.c_cflag |= PARENB; ++ termios.c_cflag |= PARODD; ++ break; ++ case UART_EVEN_PARITY: ++ termios.c_cflag |= PARENB; ++ termios.c_cflag &= ~PARODD; ++ break; ++ default: ++ goto fail; ++ } ++ ++ /* Set the length of stop bit. */ ++ switch (stop_bit_len) ++ { ++ case UART_1_STOP_BIT: ++ termios.c_cflag &= ~CSTOPB; ++ break; ++ case UART_2_STOP_BITS: ++ termios.c_cflag |= CSTOPB; ++ break; ++ default: ++ goto fail; ++ } ++ ++ /* Set the parameters. */ ++ if (tcsetattr (serial_fd, TCSANOW, &termios)) ++ goto fail; ++ ++#ifdef SIMULATE_SLOWNESS_OF_SERIAL ++ serial_speed = speed; ++#endif /* SIMUATE_SLOWNESS_OF_SERIAL */ ++ ++ /* Get rid of the flag TERM_NEED_INIT from the serial terminal. */ ++ for (i = 0; term_table[i].name; i++) ++ { ++ if (strcmp (term_table[i].name, "serial") == 0) ++ { ++ term_table[i].flags &= ~(TERM_NEED_INIT); ++ break; ++ } ++ } ++ ++ return 1; ++ ++ fail: ++ close (serial_fd); ++ serial_fd = -1; ++ return 0; ++} ++ ++/* Set the file name of a serial device (or a pty device). This is a ++ function specific to the grub shell. */ ++void ++serial_set_device (const char *device) ++{ ++ if (serial_device) ++ free (serial_device); ++ ++ serial_device = strdup (device); ++} ++ ++/* There is no difference between console and hercules in the grub shell. */ ++void ++hercules_putchar (int c) ++{ ++ console_putchar (c); ++} ++ ++int ++hercules_getxy (void) ++{ ++ return console_getxy (); ++} ++ ++void ++hercules_gotoxy (int x, int y) ++{ ++ console_gotoxy (x, y); ++} ++ ++void ++hercules_cls (void) ++{ ++ console_cls (); ++} ++ ++void ++hercules_setcolorstate (color_state state) ++{ ++ console_setcolorstate (state); ++} ++ ++void ++hercules_setcolor (int normal_color, int highlight_color) ++{ ++ console_setcolor (normal_color, highlight_color); ++} ++ ++int ++hercules_setcursor (int on) ++{ ++ return 1; ++} +diff -Nur grub-0.97/grub/main.c grub-0.97-patched/grub/main.c +--- grub-0.97/grub/main.c 2003-07-09 13:45:36.000000000 +0200 ++++ grub-0.97-patched/grub/main.c 2012-11-11 17:07:12.720729374 +0100 +@@ -32,6 +32,7 @@ + #define WITHOUT_LIBC_STUBS 1 + #include <shared.h> + #include <term.h> ++#include <device.h> + + char *program_name = 0; + int use_config_file = 1; +@@ -140,10 +141,7 @@ + program_name = argv[0]; + default_boot_drive = boot_drive; + default_install_partition = install_partition; +- if (config_file) +- default_config_file = config_file; +- else +- default_config_file = "NONE"; ++ default_config_file = config_file; + + /* Parse command-line options. */ + do +@@ -192,6 +190,12 @@ + perror ("strtoul"); + exit (1); + } ++ if (boot_drive >= NUM_DISKS) ++ { ++ fprintf (stderr, "boot_drive should be from 0 to %d\n", ++ NUM_DISKS - 1); ++ exit (1); ++ } + break; + + case OPT_NO_CONFIG_FILE: +diff -Nur grub-0.97/grub/main.c.orig grub-0.97-patched/grub/main.c.orig +--- grub-0.97/grub/main.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/grub/main.c.orig 2003-07-09 13:45:36.000000000 +0200 +@@ -0,0 +1,265 @@ ++/* main.c - experimental GRUB stage2 that runs under Unix */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 1999,2000,2001,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. ++ */ ++ ++/* Simulator entry point. */ ++int grub_stage2 (void); ++ ++#include <stdio.h> ++#include <getopt.h> ++#include <unistd.h> ++#include <string.h> ++#include <stdlib.h> ++#include <limits.h> ++#include <setjmp.h> ++ ++#define WITHOUT_LIBC_STUBS 1 ++#include <shared.h> ++#include <term.h> ++ ++char *program_name = 0; ++int use_config_file = 1; ++int use_preset_menu = 0; ++#ifdef HAVE_LIBCURSES ++int use_curses = 1; ++#else ++int use_curses = 0; ++#endif ++int verbose = 0; ++int read_only = 0; ++int floppy_disks = 1; ++char *device_map_file = 0; ++static int default_boot_drive; ++static int default_install_partition; ++static char *default_config_file; ++ ++#define OPT_HELP -2 ++#define OPT_VERSION -3 ++#define OPT_HOLD -4 ++#define OPT_CONFIG_FILE -5 ++#define OPT_INSTALL_PARTITION -6 ++#define OPT_BOOT_DRIVE -7 ++#define OPT_NO_CONFIG_FILE -8 ++#define OPT_NO_CURSES -9 ++#define OPT_BATCH -10 ++#define OPT_VERBOSE -11 ++#define OPT_READ_ONLY -12 ++#define OPT_PROBE_SECOND_FLOPPY -13 ++#define OPT_NO_FLOPPY -14 ++#define OPT_DEVICE_MAP -15 ++#define OPT_PRESET_MENU -16 ++#define OPT_NO_PAGER -17 ++#define OPTSTRING "" ++ ++static struct option longopts[] = ++{ ++ {"batch", no_argument, 0, OPT_BATCH}, ++ {"boot-drive", required_argument, 0, OPT_BOOT_DRIVE}, ++ {"config-file", required_argument, 0, OPT_CONFIG_FILE}, ++ {"device-map", required_argument, 0, OPT_DEVICE_MAP}, ++ {"help", no_argument, 0, OPT_HELP}, ++ {"hold", optional_argument, 0, OPT_HOLD}, ++ {"install-partition", required_argument, 0, OPT_INSTALL_PARTITION}, ++ {"no-config-file", no_argument, 0, OPT_NO_CONFIG_FILE}, ++ {"no-curses", no_argument, 0, OPT_NO_CURSES}, ++ {"no-floppy", no_argument, 0, OPT_NO_FLOPPY}, ++ {"no-pager", no_argument, 0, OPT_NO_PAGER}, ++ {"preset-menu", no_argument, 0, OPT_PRESET_MENU}, ++ {"probe-second-floppy", no_argument, 0, OPT_PROBE_SECOND_FLOPPY}, ++ {"read-only", no_argument, 0, OPT_READ_ONLY}, ++ {"verbose", no_argument, 0, OPT_VERBOSE}, ++ {"version", no_argument, 0, OPT_VERSION}, ++ {0}, ++}; ++ ++ ++static void ++usage (int status) ++{ ++ if (status) ++ fprintf (stderr, "Try ``grub --help'' for more information.\n"); ++ else ++ printf ("\ ++Usage: grub [OPTION]...\n\ ++\n\ ++Enter the GRand Unified Bootloader command shell.\n\ ++\n\ ++ --batch turn on batch mode for non-interactive use\n\ ++ --boot-drive=DRIVE specify stage2 boot_drive [default=0x%x]\n\ ++ --config-file=FILE specify stage2 config_file [default=%s]\n\ ++ --device-map=FILE use the device map file FILE\n\ ++ --help display this message and exit\n\ ++ --hold wait until a debugger will attach\n\ ++ --install-partition=PAR specify stage2 install_partition [default=0x%x]\n\ ++ --no-config-file do not use the config file\n\ ++ --no-curses do not use curses\n\ ++ --no-floppy do not probe any floppy drive\n\ ++ --no-pager do not use internal pager\n\ ++ --preset-menu use the preset menu\n\ ++ --probe-second-floppy probe the second floppy drive\n\ ++ --read-only do not write anything to devices\n\ ++ --verbose print verbose messages\n\ ++ --version print version information and exit\n\ ++\n\ ++Report bugs to bug-grub@gnu.org.\n\ ++", ++ default_boot_drive, default_config_file, ++ default_install_partition); ++ ++ exit (status); ++} ++ ++ ++int ++main (int argc, char **argv) ++{ ++ int c; ++ int hold = 0; ++ ++ /* First of all, call sync so that all in-core data is scheduled to be ++ actually written to disks. This is very important because GRUB does ++ not use ordinary stdio interface but raw devices. */ ++ sync (); ++ ++ program_name = argv[0]; ++ default_boot_drive = boot_drive; ++ default_install_partition = install_partition; ++ if (config_file) ++ default_config_file = config_file; ++ else ++ default_config_file = "NONE"; ++ ++ /* Parse command-line options. */ ++ do ++ { ++ c = getopt_long (argc, argv, OPTSTRING, longopts, 0); ++ switch (c) ++ { ++ case EOF: ++ /* Fall through the bottom of the loop. */ ++ break; ++ ++ case OPT_HELP: ++ usage (0); ++ break; ++ ++ case OPT_VERSION: ++ printf ("grub (GNU GRUB " VERSION ")\n"); ++ exit (0); ++ break; ++ ++ case OPT_HOLD: ++ if (! optarg) ++ hold = -1; ++ else ++ hold = atoi (optarg); ++ break; ++ ++ case OPT_CONFIG_FILE: ++ strncpy (config_file, optarg, 127); /* FIXME: arbitrary */ ++ config_file[127] = '\0'; ++ break; ++ ++ case OPT_INSTALL_PARTITION: ++ install_partition = strtoul (optarg, 0, 0); ++ if (install_partition == ULONG_MAX) ++ { ++ perror ("strtoul"); ++ exit (1); ++ } ++ break; ++ ++ case OPT_BOOT_DRIVE: ++ boot_drive = strtoul (optarg, 0, 0); ++ if (boot_drive == ULONG_MAX) ++ { ++ perror ("strtoul"); ++ exit (1); ++ } ++ break; ++ ++ case OPT_NO_CONFIG_FILE: ++ use_config_file = 0; ++ break; ++ ++ case OPT_NO_CURSES: ++ use_curses = 0; ++ break; ++ ++ case OPT_NO_PAGER: ++ use_pager = 0; ++ break; ++ ++ case OPT_BATCH: ++ /* This is the same as "--no-config-file --no-curses --no-pager". */ ++ use_config_file = 0; ++ use_curses = 0; ++ use_pager = 0; ++ break; ++ ++ case OPT_READ_ONLY: ++ read_only = 1; ++ break; ++ ++ case OPT_VERBOSE: ++ verbose = 1; ++ break; ++ ++ case OPT_NO_FLOPPY: ++ floppy_disks = 0; ++ break; ++ ++ case OPT_PROBE_SECOND_FLOPPY: ++ floppy_disks = 2; ++ break; ++ ++ case OPT_DEVICE_MAP: ++ device_map_file = strdup (optarg); ++ break; ++ ++ case OPT_PRESET_MENU: ++ use_preset_menu = 1; ++ break; ++ ++ default: ++ usage (1); ++ } ++ } ++ while (c != EOF); ++ ++ /* Wait until the HOLD variable is cleared by an attached debugger. */ ++ if (hold && verbose) ++ printf ("Run "gdb %s %d", and set HOLD to zero.\n", ++ program_name, (int) getpid ()); ++ while (hold) ++ { ++ if (hold > 0) ++ hold--; ++ ++ sleep (1); ++ } ++ ++ /* If we don't have curses (!HAVE_LIBCURSES or --no-curses or ++ --batch) put terminal to dumb for better handling of line i/o */ ++ if (! use_curses) ++ current_term->flags = TERM_NO_EDIT | TERM_DUMB; ++ ++ /* Transfer control to the stage2 simulator. */ ++ exit (grub_stage2 ()); ++} +diff -Nur grub-0.97/lib/device.c grub-0.97-patched/lib/device.c +--- grub-0.97/lib/device.c 2005-03-28 01:14:25.000000000 +0200 ++++ grub-0.97-patched/lib/device.c 2012-11-11 17:07:12.748730268 +0100 +@@ -69,9 +69,9 @@ + # ifndef CDROM_GET_CAPABILITY + # define CDROM_GET_CAPABILITY 0x5331 /* get capabilities */ + # endif /* ! CDROM_GET_CAPABILITY */ +-# ifndef BLKGETSIZE +-# define BLKGETSIZE _IO(0x12,96) /* return device size */ +-# endif /* ! BLKGETSIZE */ ++# ifndef BLKGETSIZE64 ++# define BLKGETSIZE64 _IOR(0x12,114,size_t) /* return device size */ ++# endif /* ! BLKGETSIZE64 */ + #endif /* __linux__ */ + + /* Use __FreeBSD_kernel__ instead of __FreeBSD__ for compatibility with +@@ -131,6 +131,152 @@ + #include <shared.h> + #include <device.h> + ++#if defined(__linux__) ++/* The 2.6 kernel has removed all of the geometry handling for IDE drives ++ * that did fixups for LBA, etc. This means that the geometry we get ++ * with the ioctl has a good chance of being wrong. So, we get to ++ * also know about partition tables and try to read what the geometry ++ * is there. *grumble* Very closely based on code from cfdisk ++ */ ++static void get_kernel_geometry(int fd, long long *cyl, int *heads, int *sectors) { ++ struct hd_geometry hdg; ++ ++ if (ioctl (fd, HDIO_GETGEO, &hdg)) ++ return; ++ ++ *cyl = hdg.cylinders; ++ *heads = hdg.heads; ++ *sectors = hdg.sectors; ++} ++ ++struct partition { ++ unsigned char boot_ind; /* 0x80 - active */ ++ unsigned char head; /* starting head */ ++ unsigned char sector; /* starting sector */ ++ unsigned char cyl; /* starting cylinder */ ++ unsigned char sys_ind; /* What partition type */ ++ unsigned char end_head; /* end head */ ++ unsigned char end_sector; /* end sector */ ++ unsigned char end_cyl; /* end cylinder */ ++ unsigned char start4[4]; /* starting sector counting from 0 */ ++ unsigned char size4[4]; /* nr of sectors in partition */ ++}; ++ ++#define ALIGNMENT 2 ++typedef union { ++ struct { ++ unsigned char align[ALIGNMENT]; ++ unsigned char b[SECTOR_SIZE]; ++ } c; ++ struct { ++ unsigned char align[ALIGNMENT]; ++ unsigned char buffer[0x1BE]; ++ struct partition part[4]; ++ unsigned char magicflag[2]; ++ } p; ++} partition_table; ++ ++#define PART_TABLE_FLAG0 0x55 ++#define PART_TABLE_FLAG1 0xAA ++ ++static void ++get_partition_table_geometry(partition_table *bufp, long long *cyl, int *heads, ++ int *sectors) { ++ struct partition *p; ++ int i,h,s,hh,ss; ++ int first = 1; ++ int bad = 0; ++ ++ if (bufp->p.magicflag[0] != PART_TABLE_FLAG0 || ++ bufp->p.magicflag[1] != PART_TABLE_FLAG1) { ++ /* Matthew Wilcox: slightly friendlier version of ++ fatal(_("Bad signature on partition table"), 3); ++ */ ++ fprintf(stderr, "Unknown partition table signature\n"); ++ return; ++ } ++ ++ hh = ss = 0; ++ for (i=0; i<4; i++) { ++ p = &(bufp->p.part[i]); ++ if (p->sys_ind != 0) { ++ h = p->end_head + 1; ++ s = (p->end_sector & 077); ++ if (first) { ++ hh = h; ++ ss = s; ++ first = 0; ++ } else if (hh != h || ss != s) ++ bad = 1; ++ } ++ } ++ ++ if (!first && !bad) { ++ *heads = hh; ++ *sectors = ss; ++ } ++} ++ ++static long long my_lseek (unsigned int fd, long long offset, ++ unsigned int origin) ++{ ++#if defined(__linux__) && (!defined(__GLIBC__) || \ ++ ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))) ++ /* Maybe libc doesn't have large file support. */ ++ loff_t offset, result; ++ static int _llseek (uint filedes, ulong hi, ulong lo, ++ loff_t *res, uint wh); ++ _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo, ++ loff_t *, res, uint, wh); ++ ++ if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET) < 0) ++ return (long long) -1; ++ return result; ++#else ++ return lseek(fd, offset, SEEK_SET); ++#endif ++} ++ ++static void get_linux_geometry (int fd, struct geometry *geom) { ++ long long kern_cyl = 0; int kern_head = 0, kern_sectors = 0; ++ long long pt_cyl = 0; int pt_head = 0, pt_sectors = 0; ++ partition_table bufp; ++ char *buff, *buf_unaligned; ++ ++ buf_unaligned = malloc(sizeof(partition_table) + 4095); ++ buff = (char *) (((unsigned long)buf_unaligned + 4096 - 1) & ++ (~(4096-1))); ++ ++ get_kernel_geometry(fd, &kern_cyl, &kern_head, &kern_sectors); ++ ++ if (my_lseek (fd, 0*SECTOR_SIZE, SEEK_SET) < 0) { ++ fprintf(stderr, "Unable to seek"); ++ } ++ ++ if (read(fd, buff, SECTOR_SIZE) == SECTOR_SIZE) { ++ memcpy(bufp.c.b, buff, SECTOR_SIZE); ++ get_partition_table_geometry(&bufp, &pt_cyl, &pt_head, &pt_sectors); ++ } else { ++ fprintf(stderr, "Unable to read partition table: %s\n", strerror(errno)); ++ } ++ ++ if (pt_head && pt_sectors) { ++ int cyl_size; ++ ++ geom->heads = pt_head; ++ geom->sectors = pt_sectors; ++ cyl_size = pt_head * pt_sectors; ++ geom->cylinders = geom->total_sectors/cyl_size; ++ } else { ++ geom->heads = kern_head; ++ geom->sectors = kern_sectors; ++ geom->cylinders = kern_cyl; ++ } ++ ++ return; ++} ++#endif ++ + /* Get the geometry of a drive DRIVE. */ + void + get_drive_geometry (struct geometry *geom, char **map, int drive) +@@ -151,20 +297,16 @@ + #if defined(__linux__) + /* Linux */ + { +- struct hd_geometry hdg; +- unsigned long nr; ++ unsigned long long nr; + +- if (ioctl (fd, HDIO_GETGEO, &hdg)) +- goto fail; +- +- if (ioctl (fd, BLKGETSIZE, &nr)) ++ if (ioctl (fd, BLKGETSIZE64, &nr)) + goto fail; + + /* Got the geometry, so save it. */ +- geom->cylinders = hdg.cylinders; +- geom->heads = hdg.heads; +- geom->sectors = hdg.sectors; +- geom->total_sectors = nr; ++ get_linux_geometry(fd, geom); ++ if (!geom->heads && !geom->cylinders && !geom->sectors) ++ goto fail; ++ geom->total_sectors = nr / 512; + + goto success; + } +@@ -403,10 +545,28 @@ + } + + static void ++get_cciss_disk_name (char *name, int controller, int drive) ++{ ++ sprintf (name, "/dev/cciss/c%dd%d", controller, drive); ++} ++ ++static void ++get_ida_disk_name (char *name, int controller, int drive) ++{ ++ sprintf (name, "/dev/ida/c%dd%d", controller, drive); ++} ++ ++static void + get_ataraid_disk_name (char *name, int unit) + { + sprintf (name, "/dev/ataraid/d%c", unit + '0'); + } ++ ++static void ++get_i2o_disk_name (char *name, char unit) ++{ ++ sprintf (name, "/dev/i2o/hd%c", unit); ++} + #endif + + /* Check if DEVICE can be read. If an error occurs, return zero, +@@ -801,6 +961,97 @@ + } + } + } ++ ++ /* This is for I2O - we have /dev/i2o/hd<logical drive><partition> */ ++ { ++ int unit; ++ ++ for (unit = 'a'; unit < 'f'; unit++) ++ { ++ char name[24]; ++ ++ get_i2o_disk_name (name, unit); ++ if (check_device (name)) ++ { ++ (*map)[num_hd + 0x80] = strdup (name); ++ assert ((*map)[num_hd + 0x80]); ++ ++ /* If the device map file is opened, write the map. */ ++ if (fp) ++ fprintf (fp, "(hd%d)\t%s\n", num_hd, name); ++ ++ num_hd++; ++ } ++ } ++ } ++ ++ /* This is for CCISS, its like the DAC960 - we have ++ /dev/cciss/<controller>d<logical drive>p<partition> ++ ++ It currently supports up to 3 controllers, 10 logical volumes ++ and 10 partitions ++ ++ Code gratuitously copied from DAC960 above. ++ Horms horms@verge.net.au 23rd July 2004 ++ */ ++ { ++ int controller, drive; ++ ++ for (controller = 0; controller < 2; controller++) ++ { ++ for (drive = 0; drive < 9; drive++) ++ { ++ char name[24]; ++ ++ get_cciss_disk_name (name, controller, drive); ++ if (check_device (name)) ++ { ++ (*map)[num_hd + 0x80] = strdup (name); ++ assert ((*map)[num_hd + 0x80]); ++ ++ /* If the device map file is opened, write the map. */ ++ if (fp) ++ fprintf (fp, "(hd%d)\t%s\n", num_hd, name); ++ ++ num_hd++; ++ } ++ } ++ } ++ } ++ ++ /* This is for Compaq Smart Array, its like the DAC960 - we have ++ /dev/ida/<controller>d<logical drive>p<partition> ++ ++ It currently supports up to 3 controllers, 10 logical volumes ++ and 15 partitions ++ ++ Code gratuitously copied from DAC960 above. ++ Piotr Roszatycki dexter@debian.org ++ */ ++ { ++ int controller, drive; ++ ++ for (controller = 0; controller < 2; controller++) ++ { ++ for (drive = 0; drive < 9; drive++) ++ { ++ char name[24]; ++ ++ get_ida_disk_name (name, controller, drive); ++ if (check_device (name)) ++ { ++ (*map)[num_hd + 0x80] = strdup (name); ++ assert ((*map)[num_hd + 0x80]); ++ ++ /* If the device map file is opened, write the map. */ ++ if (fp) ++ fprintf (fp, "(hd%d)\t%s\n", num_hd, name); ++ ++ num_hd++; ++ } ++ } ++ } ++ } + #endif /* __linux__ */ + + /* OK, close the device map file if opened. */ +@@ -844,6 +1095,7 @@ + { + char dev[PATH_MAX]; /* XXX */ + int fd; ++ off_t offset = (off_t) sector * (off_t) SECTOR_SIZE; + + if ((partition & 0x00FF00) != 0x00FF00) + { +@@ -861,6 +1113,14 @@ + if (strcmp (dev + strlen(dev) - 5, "/disc") == 0) + strcpy (dev + strlen(dev) - 5, "/part"); + } ++ else ++ { ++ if ((strncmp (dev, "/dev/ataraid/", 13) == 0) || ++ (strncmp (dev, "/dev/ida/", 9) == 0) || ++ (strncmp (dev, "/dev/cciss/", 11) == 0) || ++ (strncmp (dev, "/dev/rd/", 8) == 0)) ++ strcpy (dev + strlen(dev), "p"); ++ } + sprintf (dev + strlen(dev), "%d", ((partition >> 16) & 0xFF) + 1); + + /* Open the partition. */ +@@ -870,35 +1130,13 @@ + errnum = ERR_NO_PART; + return 0; + } +- +-#if defined(__linux__) && (!defined(__GLIBC__) || \ +- ((__GLIBC__ < 2) || ((__GLIBC__ == 2) && (__GLIBC_MINOR__ < 1)))) +- /* Maybe libc doesn't have large file support. */ +- { +- loff_t offset, result; +- static int _llseek (uint filedes, ulong hi, ulong lo, +- loff_t *res, uint wh); +- _syscall5 (int, _llseek, uint, filedes, ulong, hi, ulong, lo, +- loff_t *, res, uint, wh); + +- offset = (loff_t) sector * (loff_t) SECTOR_SIZE; +- if (_llseek (fd, offset >> 32, offset & 0xffffffff, &result, SEEK_SET)) +- { +- errnum = ERR_DEV_VALUES; +- return 0; +- } +- } +-#else +- { +- off_t offset = (off_t) sector * (off_t) SECTOR_SIZE; + +- if (lseek (fd, offset, SEEK_SET) != offset) +- { +- errnum = ERR_DEV_VALUES; +- return 0; +- } +- } +-#endif ++ if (my_lseek(fd, offset, SEEK_SET) != offset) ++ { ++ errnum = ERR_DEV_VALUES; ++ return 0; ++ } + + if (write (fd, buf, size * SECTOR_SIZE) != (size * SECTOR_SIZE)) + { +diff -Nur grub-0.97/netboot/cs89x0.c grub-0.97-patched/netboot/cs89x0.c +--- grub-0.97/netboot/cs89x0.c 2003-07-09 13:45:37.000000000 +0200 ++++ grub-0.97-patched/netboot/cs89x0.c 2012-11-11 17:07:12.722729437 +0100 +@@ -1,3 +1,21 @@ ++/** ++ Per an email message from Russ Nelson nelson@crynwr.com on ++ 18 March 2008 this file is now licensed under GPL Version 2. ++ ++ From: Russ Nelson nelson@crynwr.com ++ Date: Tue, 18 Mar 2008 12:42:00 -0400 ++ Subject: Re: [Etherboot-developers] cs89x0 driver in etherboot ++ -- quote from email ++ As copyright holder, if I say it doesn't conflict with the GPL, ++ then it doesn't conflict with the GPL. ++ ++ However, there's no point in causing people's brains to overheat, ++ so yes, I grant permission for the code to be relicensed under the ++ GPLv2. Please make sure that this change in licensing makes its ++ way upstream. -russ ++ -- quote from email ++**/ ++ + /* cs89x0.c: A Crystal Semiconductor CS89[02]0 driver for etherboot. */ + /* + Permission is granted to distribute the enclosed cs89x0.[ch] driver +diff -Nur grub-0.97/netboot/cs89x0.h grub-0.97-patched/netboot/cs89x0.h +--- grub-0.97/netboot/cs89x0.h 2003-07-09 13:45:37.000000000 +0200 ++++ grub-0.97-patched/netboot/cs89x0.h 2012-11-11 17:07:12.723729469 +0100 +@@ -1,3 +1,21 @@ ++/** ++ Per an email message from Russ Nelson nelson@crynwr.com on ++ 18 March 2008 this file is now licensed under GPL Version 2. ++ ++ From: Russ Nelson nelson@crynwr.com ++ Date: Tue, 18 Mar 2008 12:42:00 -0400 ++ Subject: Re: [Etherboot-developers] cs89x0 driver in etherboot ++ -- quote from email ++ As copyright holder, if I say it doesn't conflict with the GPL, ++ then it doesn't conflict with the GPL. ++ ++ However, there's no point in causing people's brains to overheat, ++ so yes, I grant permission for the code to be relicensed under the ++ GPLv2. Please make sure that this change in licensing makes its ++ way upstream. -russ ++ -- quote from email ++**/ ++ + /* Copyright, 1988-1992, Russell Nelson, Crynwr Software + + This program is free software; you can redistribute it and/or modify +diff -Nur grub-0.97/netboot/etherboot.h grub-0.97-patched/netboot/etherboot.h +--- grub-0.97/netboot/etherboot.h 2003-07-09 13:45:37.000000000 +0200 ++++ grub-0.97-patched/netboot/etherboot.h 2012-11-11 17:07:12.723729469 +0100 +@@ -531,9 +531,6 @@ + extern int network_ready; + extern struct rom_info rom; + extern struct arptable_t arptable[MAX_ARP]; +-extern struct bootpd_t bootp_data; +-#define BOOTP_DATA_ADDR (&bootp_data) +-extern unsigned char *end_of_rfc1533; + + /* config.c */ + extern struct nic nic; +diff -Nur grub-0.97/netboot/main.c grub-0.97-patched/netboot/main.c +--- grub-0.97/netboot/main.c 2004-05-21 00:19:33.000000000 +0200 ++++ grub-0.97-patched/netboot/main.c 2012-11-11 17:07:12.724729500 +0100 +@@ -56,7 +56,8 @@ + static unsigned long netmask; + static struct bootpd_t bootp_data; + static unsigned long xid; +-static unsigned char *end_of_rfc1533 = NULL; ++ ++#define BOOTP_DATA_ADDR (&bootp_data) + + #ifndef NO_DHCP_SUPPORT + #endif /* NO_DHCP_SUPPORT */ +@@ -83,7 +84,9 @@ + RFC2132_MAX_SIZE,2, /* request as much as we can */ + ETH_MAX_MTU / 256, ETH_MAX_MTU % 256, + RFC2132_PARAM_LIST, 4, RFC1533_NETMASK, RFC1533_GATEWAY, +- RFC1533_HOSTNAME, RFC1533_EXTENSIONPATH ++ RFC1533_HOSTNAME, RFC1533_EXTENSIONPATH, ++ /* Vendor class identifier */ ++ RFC2132_VENDOR_CLASS_ID, 10, 'G', 'R', 'U', 'B', 'C', 'l', 'i', 'e', 'n', 't', + }; + + static const unsigned char dhcprequest[] = +@@ -103,6 +106,8 @@ + /* Etherboot vendortags */ + RFC1533_VENDOR_MAGIC, + RFC1533_VENDOR_CONFIGFILE, ++ /* Vendor class identifier */ ++ RFC2132_VENDOR_CLASS_ID, 10, 'G', 'R', 'U', 'B', 'C', 'l', 'i', 'e', 'n', 't', + }; + + #endif /* ! NO_DHCP_SUPPORT */ +@@ -701,7 +706,7 @@ + "adcw %%ax,%0\n\t" /* add carry of previous iteration */ + "loop 1b\n\t" + "adcw $0,%0" /* add carry of last iteration */ +- : "=b" (*sum), "=S"(start), "=c"(len) ++ : "=r" (*sum), "=S"(start), "=c"(len) + : "0"(*sum), "1"(start), "2"(len) + : "ax", "cc" + ); +@@ -967,7 +972,6 @@ + + if (block == 0) + { +- end_of_rfc1533 = NULL; + vendorext_isvalid = 0; + + if (grub_memcmp (p, rfc1533_cookie, 4)) +@@ -1021,7 +1025,7 @@ + } + else if (c == RFC1533_END) + { +- end_of_rfc1533 = endp = p; ++ endp = p; + continue; + } + else if (c == RFC1533_NETMASK) +diff -Nur grub-0.97/netboot/natsemi.c grub-0.97-patched/netboot/natsemi.c +--- grub-0.97/netboot/natsemi.c 2003-07-09 13:45:38.000000000 +0200 ++++ grub-0.97-patched/netboot/natsemi.c 2012-11-11 17:07:12.724729500 +0100 +@@ -608,7 +608,7 @@ + const char *p) /* Packet */ + { + u32 status, to, nstype; +- u32 tx_status; ++ volatile u32 tx_status; + + /* Stop the transmitter */ + outl(TxOff, ioaddr + ChipCmd); +@@ -647,7 +647,7 @@ + + to = currticks() + TX_TIMEOUT; + +- while ((((volatile u32) tx_status=txd.cmdsts) & OWN) && (currticks() < to)) ++ while (((tx_status=txd.cmdsts) & OWN) && (currticks() < to)) + /* wait */ ; + + if (currticks() >= to) { +diff -Nur grub-0.97/netboot/pci.c grub-0.97-patched/netboot/pci.c +--- grub-0.97/netboot/pci.c 2003-07-09 13:45:38.000000000 +0200 ++++ grub-0.97-patched/netboot/pci.c 2012-11-11 17:07:07.227553894 +0100 +@@ -105,13 +105,16 @@ + + save_flags(flags); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK +- "lcall (%%edi)" ++ "lcall (%%edi)\n\t" + #else +- "lcall *(%%edi)" ++ "lcall *(%%edi)\n\t" + #endif ++ "movl %%ebx, %1\n\t" /* capture what was in %ebx */ ++ "popl %%ebx\n\t" /* restore %ebx */ + : "=a" (return_code), +- "=b" (address), ++ "=r" (address), + "=c" (length), + "=d" (entry) + : "0" (service), +@@ -141,18 +144,21 @@ + + save_flags(flags); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ ++ "movl %3, %%ebx\n\t" /* put the value into ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK + "lcall (%%esi)\n\t" + #else + "lcall *(%%esi)\n\t" + #endif + "jc 1f\n\t" +- "xor %%ah, %%ah\n" ++ "popl %%ebx\n\t" /* restore %ebx */ ++ "xor %%ah, %%ah\n\t" + "1:" + : "=c" (*value), + "=a" (ret) + : "1" (PCIBIOS_READ_CONFIG_BYTE), +- "b" (bx), ++ "r" (bx), + "D" ((long) where), + "S" (&pci_indirect)); + restore_flags(flags); +@@ -168,18 +174,21 @@ + + save_flags(flags); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ ++ "movl %3, %%ebx\n\t" /* put the value into ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK + "lcall (%%esi)\n\t" + #else + "lcall *(%%esi)\n\t" + #endif + "jc 1f\n\t" +- "xor %%ah, %%ah\n" ++ "popl %%ebx\n\t" /* restore %ebx */ ++ "xor %%ah, %%ah\n\t" + "1:" + : "=c" (*value), + "=a" (ret) + : "1" (PCIBIOS_READ_CONFIG_WORD), +- "b" (bx), ++ "r" (bx), + "D" ((long) where), + "S" (&pci_indirect)); + restore_flags(flags); +@@ -195,18 +204,21 @@ + + save_flags(flags); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ ++ "movl %3, %%ebx\n\t" /* put the value into ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK + "lcall (%%esi)\n\t" + #else + "lcall *(%%esi)\n\t" + #endif + "jc 1f\n\t" +- "xor %%ah, %%ah\n" ++ "popl %%ebx\n\t" /* restore %ebx */ ++ "xor %%ah, %%ah\n\t" + "1:" + : "=c" (*value), + "=a" (ret) + : "1" (PCIBIOS_READ_CONFIG_DWORD), +- "b" (bx), ++ "r" (bx), + "D" ((long) where), + "S" (&pci_indirect)); + restore_flags(flags); +@@ -222,18 +234,21 @@ + + save_flags(flags); cli(); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ ++ "movl %3, %%ebx\n\t" /* put the value into ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK + "lcall (%%esi)\n\t" + #else + "lcall *(%%esi)\n\t" + #endif + "jc 1f\n\t" +- "xor %%ah, %%ah\n" ++ "popl %%ebx\n\t" /* restore %ebx */ ++ "xor %%ah, %%ah\n\t" + "1:" + : "=a" (ret) + : "0" (PCIBIOS_WRITE_CONFIG_BYTE), + "c" (value), +- "b" (bx), ++ "r" (bx), + "D" ((long) where), + "S" (&pci_indirect)); + restore_flags(flags); +@@ -249,18 +264,21 @@ + + save_flags(flags); cli(); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ ++ "movl %3, %%ebx\n\t" /* put the value into ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK + "lcall (%%esi)\n\t" + #else + "lcall *(%%esi)\n\t" + #endif + "jc 1f\n\t" +- "xor %%ah, %%ah\n" ++ "popl %%ebx\n\t" /* restore %ebx */ ++ "xor %%ah, %%ah\n\t" + "1:" + : "=a" (ret) + : "0" (PCIBIOS_WRITE_CONFIG_WORD), + "c" (value), +- "b" (bx), ++ "r" (bx), + "D" ((long) where), + "S" (&pci_indirect)); + restore_flags(flags); +@@ -276,18 +294,21 @@ + + save_flags(flags); cli(); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ ++ "movl %3, %%ebx\n\t" /* put the value into ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK + "lcall (%%esi)\n\t" + #else + "lcall *(%%esi)\n\t" + #endif + "jc 1f\n\t" +- "xor %%ah, %%ah\n" ++ "popl %%ebx\n\t" /* restore %ebx */ ++ "xor %%ah, %%ah\n\t" + "1:" + : "=a" (ret) + : "0" (PCIBIOS_WRITE_CONFIG_DWORD), + "c" (value), +- "b" (bx), ++ "r" (bx), + "D" ((long) where), + "S" (&pci_indirect)); + restore_flags(flags); +@@ -308,20 +329,22 @@ + + save_flags(flags); + __asm__( ++ "pushl %%ebx\n\t" /* save %ebx */ + #ifdef ABSOLUTE_WITHOUT_ASTERISK + "lcall (%%edi)\n\t" + #else + "lcall *(%%edi)\n\t" + #endif + "jc 1f\n\t" +- "xor %%ah, %%ah\n" ++ "xor %%ah, %%ah\n\t" + "1:\tshl $8, %%eax\n\t" +- "movw %%bx, %%ax" ++ "movw %%bx, %%ax\n\t" ++ "popl %%ebx\n\t" /* restore %ebx */ + : "=d" (signature), + "=a" (pack) + : "1" (PCIBIOS_PCI_BIOS_PRESENT), + "D" (&pci_indirect) +- : "bx", "cx"); ++ : "cx"); + restore_flags(flags); + + present_status = (pack >> 16) & 0xff; +diff -Nur grub-0.97/netboot/sis900.c grub-0.97-patched/netboot/sis900.c +--- grub-0.97/netboot/sis900.c 2003-07-09 13:45:38.000000000 +0200 ++++ grub-0.97-patched/netboot/sis900.c 2012-11-11 17:07:12.725729531 +0100 +@@ -901,7 +901,7 @@ + const char *p) /* Packet */ + { + u32 status, to, nstype; +- u32 tx_status; ++ volatile u32 tx_status; + + /* Stop the transmitter */ + outl(TxDIS, ioaddr + cr); +@@ -940,7 +940,7 @@ + + to = currticks() + TX_TIMEOUT; + +- while ((((volatile u32) tx_status=txd.cmdsts) & OWN) && (currticks() < to)) ++ while (((tx_status=txd.cmdsts) & OWN) && (currticks() < to)) + /* wait */ ; + + if (currticks() >= to) { +diff -Nur grub-0.97/stage1/Makefile.am grub-0.97-patched/stage1/Makefile.am +--- grub-0.97/stage1/Makefile.am 2004-07-16 13:44:56.000000000 +0200 ++++ grub-0.97-patched/stage1/Makefile.am 2012-11-11 17:07:12.747730236 +0100 +@@ -1,11 +1,11 @@ +-pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) +-nodist_pkglib_DATA = stage1 ++stagedir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) ++nodist_stage_DATA = stage1 + +-CLEANFILES = $(nodist_pkglib_DATA) ++CLEANFILES = $(nodist_stage_DATA) + + # We can't use builtins or standard includes. + AM_CCASFLAGS = $(STAGE1_CFLAGS) -fno-builtin -nostdinc +-LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00 ++stage1_exec_LDFLAGS = -nostdlib -Wl,-N,-Ttext,7C00 + + noinst_PROGRAMS = stage1.exec + stage1_exec_SOURCES = stage1.S stage1.h +diff -Nur grub-0.97/stage2/asm.S grub-0.97-patched/stage2/asm.S +--- grub-0.97/stage2/asm.S 2004-06-19 18:55:22.000000000 +0200 ++++ grub-0.97-patched/stage2/asm.S 2012-11-11 17:07:03.850446017 +0100 +@@ -1651,7 +1651,29 @@ + jnz 3f + ret + +-3: /* use keyboard controller */ ++3: /* ++ * try to switch gateA20 using PORT92, the "Fast A20 and Init" ++ * register ++ */ ++ mov $0x92, %dx ++ inb %dx, %al ++ /* skip the port92 code if it's unimplemented (read returns 0xff) */ ++ cmpb $0xff, %al ++ jz 6f ++ ++ /* set or clear bit1, the ALT_A20_GATE bit */ ++ movb 4(%esp), %ah ++ testb %ah, %ah ++ jz 4f ++ orb $2, %al ++ jmp 5f ++4: and $0xfd, %al ++ ++ /* clear the INIT_NOW bit don't accidently reset the machine */ ++5: and $0xfe, %al ++ outb %al, %dx ++ ++6: /* use keyboard controller */ + pushl %eax + + call gloop1 +@@ -1661,9 +1683,12 @@ + + gloopint1: + inb $K_STATUS ++ cmpb $0xff, %al ++ jz gloopint1_done + andb $K_IBUF_FUL, %al + jnz gloopint1 + ++gloopint1_done: + movb $KB_OUTPUT_MASK, %al + cmpb $0, 0x8(%esp) + jz gdoit +@@ -1684,6 +1709,8 @@ + + gloop1: + inb $K_STATUS ++ cmpb $0xff, %al ++ jz gloop2ret + andb $K_IBUF_FUL, %al + jnz gloop1 + +@@ -1991,6 +2018,11 @@ + ENTRY(console_getkey) + push %ebp + ++wait_for_key: ++ call EXT_C(console_checkkey) ++ incl %eax ++ jz wait_for_key ++ + call EXT_C(prot_to_real) + .code16 + +@@ -2216,6 +2248,156 @@ + pop %ebx + pop %ebp + ret ++ ++/* graphics mode functions */ ++#ifdef SUPPORT_GRAPHICS ++VARIABLE(cursorX) ++.word 0 ++VARIABLE(cursorY) ++.word 0 ++VARIABLE(cursorCount) ++.word 0 ++VARIABLE(cursorBuf) ++.byte 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ++ ++ ++/* ++ * int set_videomode(mode) ++ * BIOS call "INT 10H Function 0h" to set video mode ++ * Call with %ah = 0x0 ++ * %al = video mode ++ * Returns old videomode. ++ */ ++ENTRY(set_videomode) ++ push %ebp ++ push %ebx ++ push %ecx ++ ++ movb 0x10(%esp), %cl ++ ++ call EXT_C(prot_to_real) ++ .code16 ++ ++ xorw %bx, %bx ++ movb $0xf, %ah ++ int $0x10 /* Get Current Video mode */ ++ movb %al, %ch ++ xorb %ah, %ah ++ movb %cl, %al ++ int $0x10 /* Set Video mode */ ++ ++ DATA32 call EXT_C(real_to_prot) ++ .code32 ++ ++ xorb %ah, %ah ++ movb %ch, %al ++ ++ pop %ecx ++ pop %ebx ++ pop %ebp ++ ret ++ ++ ++/* ++ * unsigned char * graphics_get_font() ++ * BIOS call "INT 10H Function 11h" to set font ++ * Call with %ah = 0x11 ++ */ ++ENTRY(graphics_get_font) ++ push %ebp ++ push %ebx ++ push %ecx ++ push %edx ++ ++ call EXT_C(prot_to_real) ++ .code16 ++ ++ movw $0x1130, %ax ++ movb $6, %bh /* font 8x16 */ ++ int $0x10 ++ movw %bp, %dx ++ movw %es, %cx ++ ++ DATA32 call EXT_C(real_to_prot) ++ .code32 ++ ++ xorl %eax, %eax ++ movw %cx, %ax ++ shll $4, %eax ++ movw %dx, %ax ++ ++ pop %edx ++ pop %ecx ++ pop %ebx ++ pop %ebp ++ ret ++ ++ ++ ++/* ++ * graphics_set_palette(index, red, green, blue) ++ * BIOS call "INT 10H Function 10h" to set individual dac register ++ * Call with %ah = 0x10 ++ * %bx = register number ++ * %ch = new value for green (0-63) ++ * %cl = new value for blue (0-63) ++ * %dh = new value for red (0-63) ++ */ ++ ++ENTRY(graphics_set_palette) ++ push %ebp ++ push %eax ++ push %ebx ++ push %ecx ++ push %edx ++ ++ movw $0x3c8, %bx /* address write mode register */ ++ ++ /* wait vertical retrace */ ++ ++ movw $0x3da, %dx ++l1b: inb %dx, %al /* wait vertical active display */ ++ test $8, %al ++ jnz l1b ++ ++l2b: inb %dx, %al /* wait vertical retrace */ ++ test $8, %al ++ jnz l2b ++ ++ mov %bx, %dx ++ movb 0x18(%esp), %al /* index */ ++ outb %al, %dx ++ inc %dx ++ ++ movb 0x1c(%esp), %al /* red */ ++ outb %al, %dx ++ ++ movb 0x20(%esp), %al /* green */ ++ outb %al, %dx ++ ++ movb 0x24(%esp), %al /* blue */ ++ outb %al, %dx ++ ++ movw 0x18(%esp), %bx ++ ++ call EXT_C(prot_to_real) ++ .code16 ++ ++ movb %bl, %bh ++ movw $0x1000, %ax ++ int $0x10 ++ ++ DATA32 call EXT_C(real_to_prot) ++ .code32 ++ ++ pop %edx ++ pop %ecx ++ pop %ebx ++ pop %eax ++ pop %ebp ++ ret ++ ++#endif /* SUPPORT_GRAPHICS */ + + /* + * getrtsecs() +diff -Nur grub-0.97/stage2/bios.c grub-0.97-patched/stage2/bios.c +--- grub-0.97/stage2/bios.c 2004-03-27 17:34:04.000000000 +0100 ++++ grub-0.97-patched/stage2/bios.c 2012-11-11 17:07:12.751730363 +0100 +@@ -47,7 +47,7 @@ + return the error number. Otherwise, return 0. */ + int + biosdisk (int read, int drive, struct geometry *geometry, +- int sector, int nsec, int segment) ++ unsigned int sector, int nsec, int segment) + { + int err; + +@@ -60,7 +60,18 @@ + unsigned short blocks; + unsigned long buffer; + unsigned long long block; +- } __attribute__ ((packed)) dap; ++ ++ /* This structure is passed in the stack. A buggy BIOS could write ++ * garbage data to the tail of the struct and hang the machine. So ++ * we need this protection. - Tinybit ++ */ ++ unsigned char dummy[16]; ++ } __attribute__ ((packed)) *dap; ++ ++ /* Even the above protection is not enough to avoid stupid actions by ++ * buggy BIOSes. So we do it in the 0040:0000 segment. - Tinybit ++ */ ++ dap = (struct disk_address_packet *)0x580; + + /* XXX: Don't check the geometry by default, because some buggy + BIOSes don't return the number of total sectors correctly, +@@ -72,15 +83,15 @@ + + /* FIXME: sizeof (DAP) must be 0x10. Should assert that the compiler + can't add any padding. */ +- dap.length = sizeof (dap); +- dap.block = sector; +- dap.blocks = nsec; +- dap.reserved = 0; ++ dap->length = 0x10; ++ dap->block = sector; ++ dap->blocks = nsec; ++ dap->reserved = 0; + /* This is undocumented part. The address is formated in + SEGMENT:ADDRESS. */ +- dap.buffer = segment << 16; ++ dap->buffer = segment << 16; + +- err = biosdisk_int13_extensions ((read + 0x42) << 8, drive, &dap); ++ err = biosdisk_int13_extensions ((read + 0x42) << 8, drive, dap); + + /* #undef NO_INT13_FALLBACK */ + #ifndef NO_INT13_FALLBACK +diff -Nur grub-0.97/stage2/boot.c grub-0.97-patched/stage2/boot.c +--- grub-0.97/stage2/boot.c 2004-03-30 13:44:08.000000000 +0200 ++++ grub-0.97-patched/stage2/boot.c 2012-11-11 17:07:12.727729596 +0100 +@@ -1,7 +1,7 @@ + /* boot.c - load and bootstrap a kernel */ + /* + * GRUB -- GRand Unified Bootloader +- * Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc. ++ * Copyright (C) 1999,2000,2001,2002,2003,2004,2005 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 +@@ -96,7 +96,7 @@ + lh = (struct linux_kernel_header *) buffer; + + /* ELF loading supported if multiboot, FreeBSD and NetBSD. */ +- if ((type == KERNEL_TYPE_MULTIBOOT ++ if (((type == KERNEL_TYPE_MULTIBOOT && ! (flags & MULTIBOOT_AOUT_KLUDGE)) + || pu.elf->e_ident[EI_OSABI] == ELFOSABI_FREEBSD + || grub_strcmp (pu.elf->e_ident + EI_BRAND, "FreeBSD") == 0 + || suggested_type == KERNEL_TYPE_NETBSD) +@@ -241,7 +241,7 @@ + } + + if (lh->version >= 0x0202) +- lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_OFFSET; ++ lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_0202_PRM_OFFSET; + else + { + lh->cl_magic = LINUX_CL_MAGIC; +@@ -407,6 +407,15 @@ + while (dest < linux_data_tmp_addr + LINUX_CL_END_OFFSET && *src) + *(dest++) = *(src++); + ++ { ++ char *src = skip_to (0, arg); ++ char *dest = linux_data_tmp_addr + LINUX_CL_0202_PRM_OFFSET; ++ ++ while (dest < linux_data_tmp_addr + LINUX_CL_0202_PRM_END_OFFSET && *src) ++ *(dest++) = *(src++); ++ *dest = 0; ++ } ++ + /* Old Linux kernels have problems determining the amount of + the available memory. To work around this problem, we add + the "mem" option to the kernel command line. This has its +@@ -824,8 +833,11 @@ + moveto = (mbi.mem_upper + 0x400) << 10; + + moveto = (moveto - len) & 0xfffff000; +- max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203 +- ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS); ++ max_addr = LINUX_INITRD_MAX_ADDRESS; ++ if (lh->header == LINUX_MAGIC_SIGNATURE && ++ lh->version >= 0x0203 && ++ lh->initrd_addr_max < max_addr) ++ max_addr = lh->initrd_addr_max; + if (moveto + len >= max_addr) + moveto = (max_addr - len) & 0xfffff000; + +diff -Nur grub-0.97/stage2/boot.c.orig grub-0.97-patched/stage2/boot.c.orig +--- grub-0.97/stage2/boot.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/boot.c.orig 2004-03-30 13:44:08.000000000 +0200 +@@ -0,0 +1,1020 @@ ++/* boot.c - load and bootstrap a kernel */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 1999,2000,2001,2002,2003,2004 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 "shared.h" ++ ++#include "freebsd.h" ++#include "imgact_aout.h" ++#include "i386-elf.h" ++ ++static int cur_addr; ++entry_func entry_addr; ++static struct mod_list mll[99]; ++static int linux_mem_size; ++ ++/* ++ * The next two functions, 'load_image' and 'load_module', are the building ++ * blocks of the multiboot loader component. They handle essentially all ++ * of the gory details of loading in a bootable image and the modules. ++ */ ++ ++kernel_t ++load_image (char *kernel, char *arg, kernel_t suggested_type, ++ unsigned long load_flags) ++{ ++ int len, i, exec_type = 0, align_4k = 1; ++ entry_func real_entry_addr = 0; ++ kernel_t type = KERNEL_TYPE_NONE; ++ unsigned long flags = 0, text_len = 0, data_len = 0, bss_len = 0; ++ char *str = 0, *str2 = 0; ++ struct linux_kernel_header *lh; ++ union ++ { ++ struct multiboot_header *mb; ++ struct exec *aout; ++ Elf32_Ehdr *elf; ++ } ++ pu; ++ /* presuming that MULTIBOOT_SEARCH is large enough to encompass an ++ executable header */ ++ unsigned char buffer[MULTIBOOT_SEARCH]; ++ ++ /* sets the header pointer to point to the beginning of the ++ buffer by default */ ++ pu.aout = (struct exec *) buffer; ++ ++ if (!grub_open (kernel)) ++ return KERNEL_TYPE_NONE; ++ ++ if (!(len = grub_read (buffer, MULTIBOOT_SEARCH)) || len < 32) ++ { ++ grub_close (); ++ ++ if (!errnum) ++ errnum = ERR_EXEC_FORMAT; ++ ++ return KERNEL_TYPE_NONE; ++ } ++ ++ for (i = 0; i < len; i++) ++ { ++ if (MULTIBOOT_FOUND ((int) (buffer + i), len - i)) ++ { ++ flags = ((struct multiboot_header *) (buffer + i))->flags; ++ if (flags & MULTIBOOT_UNSUPPORTED) ++ { ++ grub_close (); ++ errnum = ERR_BOOT_FEATURES; ++ return KERNEL_TYPE_NONE; ++ } ++ type = KERNEL_TYPE_MULTIBOOT; ++ str2 = "Multiboot"; ++ break; ++ } ++ } ++ ++ /* Use BUFFER as a linux kernel header, if the image is Linux zImage ++ or bzImage. */ ++ lh = (struct linux_kernel_header *) buffer; ++ ++ /* ELF loading supported if multiboot, FreeBSD and NetBSD. */ ++ if ((type == KERNEL_TYPE_MULTIBOOT ++ || pu.elf->e_ident[EI_OSABI] == ELFOSABI_FREEBSD ++ || grub_strcmp (pu.elf->e_ident + EI_BRAND, "FreeBSD") == 0 ++ || suggested_type == KERNEL_TYPE_NETBSD) ++ && len > sizeof (Elf32_Ehdr) ++ && BOOTABLE_I386_ELF ((*((Elf32_Ehdr *) buffer)))) ++ { ++ if (type == KERNEL_TYPE_MULTIBOOT) ++ entry_addr = (entry_func) pu.elf->e_entry; ++ else ++ entry_addr = (entry_func) (pu.elf->e_entry & 0xFFFFFF); ++ ++ if (entry_addr < (entry_func) 0x100000) ++ errnum = ERR_BELOW_1MB; ++ ++ /* don't want to deal with ELF program header at some random ++ place in the file -- this generally won't happen */ ++ if (pu.elf->e_phoff == 0 || pu.elf->e_phnum == 0 ++ || ((pu.elf->e_phoff + (pu.elf->e_phentsize * pu.elf->e_phnum)) ++ >= len)) ++ errnum = ERR_EXEC_FORMAT; ++ str = "elf"; ++ ++ if (type == KERNEL_TYPE_NONE) ++ { ++ /* At the moment, there is no way to identify a NetBSD ELF ++ kernel, so rely on the suggested type by the user. */ ++ if (suggested_type == KERNEL_TYPE_NETBSD) ++ { ++ str2 = "NetBSD"; ++ type = suggested_type; ++ } ++ else ++ { ++ str2 = "FreeBSD"; ++ type = KERNEL_TYPE_FREEBSD; ++ } ++ } ++ } ++ else if (flags & MULTIBOOT_AOUT_KLUDGE) ++ { ++ pu.mb = (struct multiboot_header *) (buffer + i); ++ entry_addr = (entry_func) pu.mb->entry_addr; ++ cur_addr = pu.mb->load_addr; ++ /* first offset into file */ ++ grub_seek (i - (pu.mb->header_addr - cur_addr)); ++ ++ /* If the load end address is zero, load the whole contents. */ ++ if (! pu.mb->load_end_addr) ++ pu.mb->load_end_addr = cur_addr + filemax; ++ ++ text_len = pu.mb->load_end_addr - cur_addr; ++ data_len = 0; ++ ++ /* If the bss end address is zero, assume that there is no bss area. */ ++ if (! pu.mb->bss_end_addr) ++ pu.mb->bss_end_addr = pu.mb->load_end_addr; ++ ++ bss_len = pu.mb->bss_end_addr - pu.mb->load_end_addr; ++ ++ if (pu.mb->header_addr < pu.mb->load_addr ++ || pu.mb->load_end_addr <= pu.mb->load_addr ++ || pu.mb->bss_end_addr < pu.mb->load_end_addr ++ || (pu.mb->header_addr - pu.mb->load_addr) > i) ++ errnum = ERR_EXEC_FORMAT; ++ ++ if (cur_addr < 0x100000) ++ errnum = ERR_BELOW_1MB; ++ ++ pu.aout = (struct exec *) buffer; ++ exec_type = 2; ++ str = "kludge"; ++ } ++ else if (len > sizeof (struct exec) && !N_BADMAG ((*(pu.aout)))) ++ { ++ entry_addr = (entry_func) pu.aout->a_entry; ++ ++ if (type == KERNEL_TYPE_NONE) ++ { ++ /* ++ * If it doesn't have a Multiboot header, then presume ++ * it is either a FreeBSD or NetBSD executable. If so, ++ * then use a magic number of normal ordering, ZMAGIC to ++ * determine if it is FreeBSD. ++ * ++ * This is all because freebsd and netbsd seem to require ++ * masking out some address bits... differently for each ++ * one... plus of course we need to know which booting ++ * method to use. ++ */ ++ entry_addr = (entry_func) ((int) entry_addr & 0xFFFFFF); ++ ++ if (buffer[0] == 0xb && buffer[1] == 1) ++ { ++ type = KERNEL_TYPE_FREEBSD; ++ cur_addr = (int) entry_addr; ++ str2 = "FreeBSD"; ++ } ++ else ++ { ++ type = KERNEL_TYPE_NETBSD; ++ cur_addr = (int) entry_addr & 0xF00000; ++ if (N_GETMAGIC ((*(pu.aout))) != NMAGIC) ++ align_4k = 0; ++ str2 = "NetBSD"; ++ } ++ } ++ ++ /* first offset into file */ ++ grub_seek (N_TXTOFF (*(pu.aout))); ++ text_len = pu.aout->a_text; ++ data_len = pu.aout->a_data; ++ bss_len = pu.aout->a_bss; ++ ++ if (cur_addr < 0x100000) ++ errnum = ERR_BELOW_1MB; ++ ++ exec_type = 1; ++ str = "a.out"; ++ } ++ else if (lh->boot_flag == BOOTSEC_SIGNATURE ++ && lh->setup_sects <= LINUX_MAX_SETUP_SECTS) ++ { ++ int big_linux = 0; ++ int setup_sects = lh->setup_sects; ++ ++ if (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0200) ++ { ++ big_linux = (lh->loadflags & LINUX_FLAG_BIG_KERNEL); ++ lh->type_of_loader = LINUX_BOOT_LOADER_TYPE; ++ ++ /* Put the real mode part at as a high location as possible. */ ++ linux_data_real_addr ++ = (char *) ((mbi.mem_lower << 10) - LINUX_SETUP_MOVE_SIZE); ++ /* But it must not exceed the traditional area. */ ++ if (linux_data_real_addr > (char *) LINUX_OLD_REAL_MODE_ADDR) ++ linux_data_real_addr = (char *) LINUX_OLD_REAL_MODE_ADDR; ++ ++ if (lh->version >= 0x0201) ++ { ++ lh->heap_end_ptr = LINUX_HEAP_END_OFFSET; ++ lh->loadflags |= LINUX_FLAG_CAN_USE_HEAP; ++ } ++ ++ if (lh->version >= 0x0202) ++ lh->cmd_line_ptr = linux_data_real_addr + LINUX_CL_OFFSET; ++ else ++ { ++ lh->cl_magic = LINUX_CL_MAGIC; ++ lh->cl_offset = LINUX_CL_OFFSET; ++ lh->setup_move_size = LINUX_SETUP_MOVE_SIZE; ++ } ++ } ++ else ++ { ++ /* Your kernel is quite old... */ ++ lh->cl_magic = LINUX_CL_MAGIC; ++ lh->cl_offset = LINUX_CL_OFFSET; ++ ++ setup_sects = LINUX_DEFAULT_SETUP_SECTS; ++ ++ linux_data_real_addr = (char *) LINUX_OLD_REAL_MODE_ADDR; ++ } ++ ++ /* If SETUP_SECTS is not set, set it to the default (4). */ ++ if (! setup_sects) ++ setup_sects = LINUX_DEFAULT_SETUP_SECTS; ++ ++ data_len = setup_sects << 9; ++ text_len = filemax - data_len - SECTOR_SIZE; ++ ++ linux_data_tmp_addr = (char *) LINUX_BZIMAGE_ADDR + text_len; ++ ++ if (! big_linux ++ && text_len > linux_data_real_addr - (char *) LINUX_ZIMAGE_ADDR) ++ { ++ grub_printf (" linux 'zImage' kernel too big, try 'make bzImage'\n"); ++ errnum = ERR_WONT_FIT; ++ } ++ else if (linux_data_real_addr + LINUX_SETUP_MOVE_SIZE ++ > RAW_ADDR ((char *) (mbi.mem_lower << 10))) ++ errnum = ERR_WONT_FIT; ++ else ++ { ++ grub_printf (" [Linux-%s, setup=0x%x, size=0x%x]\n", ++ (big_linux ? "bzImage" : "zImage"), data_len, text_len); ++ ++ /* Video mode selection support. What a mess! */ ++ /* NOTE: Even the word "mess" is not still enough to ++ represent how wrong and bad the Linux video support is, ++ but I don't want to hear complaints from Linux fanatics ++ any more. -okuji */ ++ { ++ char *vga; ++ ++ /* Find the substring "vga=". */ ++ vga = grub_strstr (arg, "vga="); ++ if (vga) ++ { ++ char *value = vga + 4; ++ int vid_mode; ++ ++ /* Handle special strings. */ ++ if (substring ("normal", value) < 1) ++ vid_mode = LINUX_VID_MODE_NORMAL; ++ else if (substring ("ext", value) < 1) ++ vid_mode = LINUX_VID_MODE_EXTENDED; ++ else if (substring ("ask", value) < 1) ++ vid_mode = LINUX_VID_MODE_ASK; ++ else if (safe_parse_maxint (&value, &vid_mode)) ++ ; ++ else ++ { ++ /* ERRNUM is already set inside the function ++ safe_parse_maxint. */ ++ grub_close (); ++ return KERNEL_TYPE_NONE; ++ } ++ ++ lh->vid_mode = vid_mode; ++ } ++ } ++ ++ /* Check the mem= option to limit memory used for initrd. */ ++ { ++ char *mem; ++ ++ mem = grub_strstr (arg, "mem="); ++ if (mem) ++ { ++ char *value = mem + 4; ++ ++ safe_parse_maxint (&value, &linux_mem_size); ++ switch (errnum) ++ { ++ case ERR_NUMBER_OVERFLOW: ++ /* If an overflow occurs, use the maximum address for ++ initrd instead. This is good, because MAXINT is ++ greater than LINUX_INITRD_MAX_ADDRESS. */ ++ linux_mem_size = LINUX_INITRD_MAX_ADDRESS; ++ errnum = ERR_NONE; ++ break; ++ ++ case ERR_NONE: ++ { ++ int shift = 0; ++ ++ switch (grub_tolower (*value)) ++ { ++ case 'g': ++ shift += 10; ++ case 'm': ++ shift += 10; ++ case 'k': ++ shift += 10; ++ default: ++ break; ++ } ++ ++ /* Check an overflow. */ ++ if (linux_mem_size > (MAXINT >> shift)) ++ linux_mem_size = LINUX_INITRD_MAX_ADDRESS; ++ else ++ linux_mem_size <<= shift; ++ } ++ break; ++ ++ default: ++ linux_mem_size = 0; ++ errnum = ERR_NONE; ++ break; ++ } ++ } ++ else ++ linux_mem_size = 0; ++ } ++ ++ /* It is possible that DATA_LEN + SECTOR_SIZE is greater than ++ MULTIBOOT_SEARCH, so the data may have been read partially. */ ++ if (data_len + SECTOR_SIZE <= MULTIBOOT_SEARCH) ++ grub_memmove (linux_data_tmp_addr, buffer, ++ data_len + SECTOR_SIZE); ++ else ++ { ++ grub_memmove (linux_data_tmp_addr, buffer, MULTIBOOT_SEARCH); ++ grub_read (linux_data_tmp_addr + MULTIBOOT_SEARCH, ++ data_len + SECTOR_SIZE - MULTIBOOT_SEARCH); ++ } ++ ++ if (lh->header != LINUX_MAGIC_SIGNATURE || ++ lh->version < 0x0200) ++ /* Clear the heap space. */ ++ grub_memset (linux_data_tmp_addr + ((setup_sects + 1) << 9), ++ 0, ++ (64 - setup_sects - 1) << 9); ++ ++ /* Copy command-line plus memory hack to staging area. ++ NOTE: Linux has a bug that it doesn't handle multiple spaces ++ between two options and a space after a "mem=" option isn't ++ removed correctly so the arguments to init could be like ++ {"init", "", "", NULL}. This affects some not-very-clever ++ shells. Thus, the code below does a trick to avoid the bug. ++ That is, copy "mem=XXX" to the end of the command-line, and ++ avoid to copy spaces unnecessarily. Hell. */ ++ { ++ char *src = skip_to (0, arg); ++ char *dest = linux_data_tmp_addr + LINUX_CL_OFFSET; ++ ++ while (dest < linux_data_tmp_addr + LINUX_CL_END_OFFSET && *src) ++ *(dest++) = *(src++); ++ ++ /* Old Linux kernels have problems determining the amount of ++ the available memory. To work around this problem, we add ++ the "mem" option to the kernel command line. This has its ++ own drawbacks because newer kernels can determine the ++ memory map more accurately. Boot protocol 2.03, which ++ appeared in Linux 2.4.18, provides a pointer to the kernel ++ version string, so we could check it. But since kernel ++ 2.4.18 and newer are known to detect memory reliably, boot ++ protocol 2.03 already implies that the kernel is new ++ enough. The "mem" option is added if neither of the ++ following conditions is met: ++ 1) The "mem" option is already present. ++ 2) The "kernel" command is used with "--no-mem-option". ++ 3) GNU GRUB is configured not to pass the "mem" option. ++ 4) The kernel supports boot protocol 2.03 or newer. */ ++ if (! grub_strstr (arg, "mem=") ++ && ! (load_flags & KERNEL_LOAD_NO_MEM_OPTION) ++ && lh->version < 0x0203 /* kernel version < 2.4.18 */ ++ && dest + 15 < linux_data_tmp_addr + LINUX_CL_END_OFFSET) ++ { ++ *dest++ = ' '; ++ *dest++ = 'm'; ++ *dest++ = 'e'; ++ *dest++ = 'm'; ++ *dest++ = '='; ++ ++ dest = convert_to_ascii (dest, 'u', (extended_memory + 0x400)); ++ *dest++ = 'K'; ++ } ++ ++ *dest = 0; ++ } ++ ++ /* offset into file */ ++ grub_seek (data_len + SECTOR_SIZE); ++ ++ cur_addr = (int) linux_data_tmp_addr + LINUX_SETUP_MOVE_SIZE; ++ grub_read ((char *) LINUX_BZIMAGE_ADDR, text_len); ++ ++ if (errnum == ERR_NONE) ++ { ++ grub_close (); ++ ++ /* Sanity check. */ ++ if (suggested_type != KERNEL_TYPE_NONE ++ && ((big_linux && suggested_type != KERNEL_TYPE_BIG_LINUX) ++ || (! big_linux && suggested_type != KERNEL_TYPE_LINUX))) ++ { ++ errnum = ERR_EXEC_FORMAT; ++ return KERNEL_TYPE_NONE; ++ } ++ ++ /* Ugly hack. */ ++ linux_text_len = text_len; ++ ++ return big_linux ? KERNEL_TYPE_BIG_LINUX : KERNEL_TYPE_LINUX; ++ } ++ } ++ } ++ else /* no recognizable format */ ++ errnum = ERR_EXEC_FORMAT; ++ ++ /* return if error */ ++ if (errnum) ++ { ++ grub_close (); ++ return KERNEL_TYPE_NONE; ++ } ++ ++ /* fill the multiboot info structure */ ++ mbi.cmdline = (int) arg; ++ mbi.mods_count = 0; ++ mbi.mods_addr = 0; ++ mbi.boot_device = (current_drive << 24) | current_partition; ++ mbi.flags &= ~(MB_INFO_MODS | MB_INFO_AOUT_SYMS | MB_INFO_ELF_SHDR); ++ mbi.syms.a.tabsize = 0; ++ mbi.syms.a.strsize = 0; ++ mbi.syms.a.addr = 0; ++ mbi.syms.a.pad = 0; ++ ++ printf (" [%s-%s", str2, str); ++ ++ str = ""; ++ ++ if (exec_type) /* can be loaded like a.out */ ++ { ++ if (flags & MULTIBOOT_AOUT_KLUDGE) ++ str = "-and-data"; ++ ++ printf (", loadaddr=0x%x, text%s=0x%x", cur_addr, str, text_len); ++ ++ /* read text, then read data */ ++ if (grub_read ((char *) RAW_ADDR (cur_addr), text_len) == text_len) ++ { ++ cur_addr += text_len; ++ ++ if (!(flags & MULTIBOOT_AOUT_KLUDGE)) ++ { ++ /* we have to align to a 4K boundary */ ++ if (align_4k) ++ cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000; ++ else ++ printf (", C"); ++ ++ printf (", data=0x%x", data_len); ++ ++ if ((grub_read ((char *) RAW_ADDR (cur_addr), data_len) ++ != data_len) ++ && !errnum) ++ errnum = ERR_EXEC_FORMAT; ++ cur_addr += data_len; ++ } ++ ++ if (!errnum) ++ { ++ memset ((char *) RAW_ADDR (cur_addr), 0, bss_len); ++ cur_addr += bss_len; ++ ++ printf (", bss=0x%x", bss_len); ++ } ++ } ++ else if (!errnum) ++ errnum = ERR_EXEC_FORMAT; ++ ++ if (!errnum && pu.aout->a_syms ++ && pu.aout->a_syms < (filemax - filepos)) ++ { ++ int symtab_err, orig_addr = cur_addr; ++ ++ /* we should align to a 4K boundary here for good measure */ ++ if (align_4k) ++ cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000; ++ ++ mbi.syms.a.addr = cur_addr; ++ ++ *((int *) RAW_ADDR (cur_addr)) = pu.aout->a_syms; ++ cur_addr += sizeof (int); ++ ++ printf (", symtab=0x%x", pu.aout->a_syms); ++ ++ if (grub_read ((char *) RAW_ADDR (cur_addr), pu.aout->a_syms) ++ == pu.aout->a_syms) ++ { ++ cur_addr += pu.aout->a_syms; ++ mbi.syms.a.tabsize = pu.aout->a_syms; ++ ++ if (grub_read ((char *) &i, sizeof (int)) == sizeof (int)) ++ { ++ *((int *) RAW_ADDR (cur_addr)) = i; ++ cur_addr += sizeof (int); ++ ++ mbi.syms.a.strsize = i; ++ ++ i -= sizeof (int); ++ ++ printf (", strtab=0x%x", i); ++ ++ symtab_err = (grub_read ((char *) RAW_ADDR (cur_addr), i) ++ != i); ++ cur_addr += i; ++ } ++ else ++ symtab_err = 1; ++ } ++ else ++ symtab_err = 1; ++ ++ if (symtab_err) ++ { ++ printf ("(bad)"); ++ cur_addr = orig_addr; ++ mbi.syms.a.tabsize = 0; ++ mbi.syms.a.strsize = 0; ++ mbi.syms.a.addr = 0; ++ } ++ else ++ mbi.flags |= MB_INFO_AOUT_SYMS; ++ } ++ } ++ else ++ /* ELF executable */ ++ { ++ unsigned loaded = 0, memaddr, memsiz, filesiz; ++ Elf32_Phdr *phdr; ++ ++ /* reset this to zero for now */ ++ cur_addr = 0; ++ ++ /* scan for program segments */ ++ for (i = 0; i < pu.elf->e_phnum; i++) ++ { ++ phdr = (Elf32_Phdr *) ++ (pu.elf->e_phoff + ((int) buffer) ++ + (pu.elf->e_phentsize * i)); ++ if (phdr->p_type == PT_LOAD) ++ { ++ /* offset into file */ ++ grub_seek (phdr->p_offset); ++ filesiz = phdr->p_filesz; ++ ++ if (type == KERNEL_TYPE_FREEBSD || type == KERNEL_TYPE_NETBSD) ++ memaddr = RAW_ADDR (phdr->p_paddr & 0xFFFFFF); ++ else ++ memaddr = RAW_ADDR (phdr->p_paddr); ++ ++ memsiz = phdr->p_memsz; ++ if (memaddr < RAW_ADDR (0x100000)) ++ errnum = ERR_BELOW_1MB; ++ ++ /* If the memory range contains the entry address, get the ++ physical address here. */ ++ if (type == KERNEL_TYPE_MULTIBOOT ++ && (unsigned) entry_addr >= phdr->p_vaddr ++ && (unsigned) entry_addr < phdr->p_vaddr + memsiz) ++ real_entry_addr = (entry_func) ((unsigned) entry_addr ++ + memaddr - phdr->p_vaddr); ++ ++ /* make sure we only load what we're supposed to! */ ++ if (filesiz > memsiz) ++ filesiz = memsiz; ++ /* mark memory as used */ ++ if (cur_addr < memaddr + memsiz) ++ cur_addr = memaddr + memsiz; ++ printf (", <0x%x:0x%x:0x%x>", memaddr, filesiz, ++ memsiz - filesiz); ++ /* increment number of segments */ ++ loaded++; ++ ++ /* load the segment */ ++ if (memcheck (memaddr, memsiz) ++ && grub_read ((char *) memaddr, filesiz) == filesiz) ++ { ++ if (memsiz > filesiz) ++ memset ((char *) (memaddr + filesiz), 0, memsiz - filesiz); ++ } ++ else ++ break; ++ } ++ } ++ ++ if (! errnum) ++ { ++ if (! loaded) ++ errnum = ERR_EXEC_FORMAT; ++ else ++ { ++ /* Load ELF symbols. */ ++ Elf32_Shdr *shdr = NULL; ++ int tab_size, sec_size; ++ int symtab_err = 0; ++ ++ mbi.syms.e.num = pu.elf->e_shnum; ++ mbi.syms.e.size = pu.elf->e_shentsize; ++ mbi.syms.e.shndx = pu.elf->e_shstrndx; ++ ++ /* We should align to a 4K boundary here for good measure. */ ++ if (align_4k) ++ cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000; ++ ++ tab_size = pu.elf->e_shentsize * pu.elf->e_shnum; ++ ++ grub_seek (pu.elf->e_shoff); ++ if (grub_read ((char *) RAW_ADDR (cur_addr), tab_size) ++ == tab_size) ++ { ++ mbi.syms.e.addr = cur_addr; ++ shdr = (Elf32_Shdr *) mbi.syms.e.addr; ++ cur_addr += tab_size; ++ ++ printf (", shtab=0x%x", cur_addr); ++ ++ for (i = 0; i < mbi.syms.e.num; i++) ++ { ++ /* This section is a loaded section, ++ so we don't care. */ ++ if (shdr[i].sh_addr != 0) ++ continue; ++ ++ /* This section is empty, so we don't care. */ ++ if (shdr[i].sh_size == 0) ++ continue; ++ ++ /* Align the section to a sh_addralign bits boundary. */ ++ cur_addr = ((cur_addr + shdr[i].sh_addralign) & ++ - (int) shdr[i].sh_addralign); ++ ++ grub_seek (shdr[i].sh_offset); ++ ++ sec_size = shdr[i].sh_size; ++ ++ if (! (memcheck (cur_addr, sec_size) ++ && (grub_read ((char *) RAW_ADDR (cur_addr), ++ sec_size) ++ == sec_size))) ++ { ++ symtab_err = 1; ++ break; ++ } ++ ++ shdr[i].sh_addr = cur_addr; ++ cur_addr += sec_size; ++ } ++ } ++ else ++ symtab_err = 1; ++ ++ if (mbi.syms.e.addr < RAW_ADDR(0x10000)) ++ symtab_err = 1; ++ ++ if (symtab_err) ++ { ++ printf ("(bad)"); ++ mbi.syms.e.num = 0; ++ mbi.syms.e.size = 0; ++ mbi.syms.e.addr = 0; ++ mbi.syms.e.shndx = 0; ++ cur_addr = 0; ++ } ++ else ++ mbi.flags |= MB_INFO_ELF_SHDR; ++ } ++ } ++ } ++ ++ if (! errnum) ++ { ++ grub_printf (", entry=0x%x]\n", (unsigned) entry_addr); ++ ++ /* If the entry address is physically different from that of the ELF ++ header, correct it here. */ ++ if (real_entry_addr) ++ entry_addr = real_entry_addr; ++ } ++ else ++ { ++ putchar ('\n'); ++ type = KERNEL_TYPE_NONE; ++ } ++ ++ grub_close (); ++ ++ /* Sanity check. */ ++ if (suggested_type != KERNEL_TYPE_NONE && suggested_type != type) ++ { ++ errnum = ERR_EXEC_FORMAT; ++ return KERNEL_TYPE_NONE; ++ } ++ ++ return type; ++} ++ ++int ++load_module (char *module, char *arg) ++{ ++ int len; ++ ++ /* if we are supposed to load on 4K boundaries */ ++ cur_addr = (cur_addr + 0xFFF) & 0xFFFFF000; ++ ++ if (!grub_open (module)) ++ return 0; ++ ++ len = grub_read ((char *) cur_addr, -1); ++ if (! len) ++ { ++ grub_close (); ++ return 0; ++ } ++ ++ printf (" [Multiboot-module @ 0x%x, 0x%x bytes]\n", cur_addr, len); ++ ++ /* these two simply need to be set if any modules are loaded at all */ ++ mbi.flags |= MB_INFO_MODS; ++ mbi.mods_addr = (int) mll; ++ ++ mll[mbi.mods_count].cmdline = (int) arg; ++ mll[mbi.mods_count].mod_start = cur_addr; ++ cur_addr += len; ++ mll[mbi.mods_count].mod_end = cur_addr; ++ mll[mbi.mods_count].pad = 0; ++ ++ /* increment number of modules included */ ++ mbi.mods_count++; ++ ++ grub_close (); ++ return 1; ++} ++ ++int ++load_initrd (char *initrd) ++{ ++ int len; ++ unsigned long moveto; ++ unsigned long max_addr; ++ struct linux_kernel_header *lh ++ = (struct linux_kernel_header *) (cur_addr - LINUX_SETUP_MOVE_SIZE); ++ ++#ifndef NO_DECOMPRESSION ++ no_decompression = 1; ++#endif ++ ++ if (! grub_open (initrd)) ++ goto fail; ++ ++ len = grub_read ((char *) cur_addr, -1); ++ if (! len) ++ { ++ grub_close (); ++ goto fail; ++ } ++ ++ if (linux_mem_size) ++ moveto = linux_mem_size; ++ else ++ moveto = (mbi.mem_upper + 0x400) << 10; ++ ++ moveto = (moveto - len) & 0xfffff000; ++ max_addr = (lh->header == LINUX_MAGIC_SIGNATURE && lh->version >= 0x0203 ++ ? lh->initrd_addr_max : LINUX_INITRD_MAX_ADDRESS); ++ if (moveto + len >= max_addr) ++ moveto = (max_addr - len) & 0xfffff000; ++ ++ /* XXX: Linux 2.3.xx has a bug in the memory range check, so avoid ++ the last page. ++ XXX: Linux 2.2.xx has a bug in the memory range check, which is ++ worse than that of Linux 2.3.xx, so avoid the last 64kb. *sigh* */ ++ moveto -= 0x10000; ++ memmove ((void *) RAW_ADDR (moveto), (void *) cur_addr, len); ++ ++ printf (" [Linux-initrd @ 0x%x, 0x%x bytes]\n", moveto, len); ++ ++ /* FIXME: Should check if the kernel supports INITRD. */ ++ lh->ramdisk_image = RAW_ADDR (moveto); ++ lh->ramdisk_size = len; ++ ++ grub_close (); ++ ++ fail: ++ ++#ifndef NO_DECOMPRESSION ++ no_decompression = 0; ++#endif ++ ++ return ! errnum; ++} ++ ++ ++#ifdef GRUB_UTIL ++/* Dummy function to fake the *BSD boot. */ ++static void ++bsd_boot_entry (int flags, int bootdev, int sym_start, int sym_end, ++ int mem_upper, int mem_lower) ++{ ++ stop (); ++} ++#endif ++ ++ ++/* ++ * All "*_boot" commands depend on the images being loaded into memory ++ * correctly, the variables in this file being set up correctly, and ++ * the root partition being set in the 'saved_drive' and 'saved_partition' ++ * variables. ++ */ ++ ++ ++void ++bsd_boot (kernel_t type, int bootdev, char *arg) ++{ ++ char *str; ++ int clval = 0, i; ++ struct bootinfo bi; ++ ++#ifdef GRUB_UTIL ++ entry_addr = (entry_func) bsd_boot_entry; ++#else ++ stop_floppy (); ++#endif ++ ++ while (*(++arg) && *arg != ' '); ++ str = arg; ++ while (*str) ++ { ++ if (*str == '-') ++ { ++ while (*str && *str != ' ') ++ { ++ if (*str == 'C') ++ clval |= RB_CDROM; ++ if (*str == 'a') ++ clval |= RB_ASKNAME; ++ if (*str == 'b') ++ clval |= RB_HALT; ++ if (*str == 'c') ++ clval |= RB_CONFIG; ++ if (*str == 'd') ++ clval |= RB_KDB; ++ if (*str == 'D') ++ clval |= RB_MULTIPLE; ++ if (*str == 'g') ++ clval |= RB_GDB; ++ if (*str == 'h') ++ clval |= RB_SERIAL; ++ if (*str == 'm') ++ clval |= RB_MUTE; ++ if (*str == 'r') ++ clval |= RB_DFLTROOT; ++ if (*str == 's') ++ clval |= RB_SINGLE; ++ if (*str == 'v') ++ clval |= RB_VERBOSE; ++ str++; ++ } ++ continue; ++ } ++ str++; ++ } ++ ++ if (type == KERNEL_TYPE_FREEBSD) ++ { ++ clval |= RB_BOOTINFO; ++ ++ bi.bi_version = BOOTINFO_VERSION; ++ ++ *arg = 0; ++ while ((--arg) > (char *) MB_CMDLINE_BUF && *arg != '/'); ++ if (*arg == '/') ++ bi.bi_kernelname = arg + 1; ++ else ++ bi.bi_kernelname = 0; ++ ++ bi.bi_nfs_diskless = 0; ++ bi.bi_n_bios_used = 0; /* this field is apparently unused */ ++ ++ for (i = 0; i < N_BIOS_GEOM; i++) ++ { ++ struct geometry geom; ++ ++ /* XXX Should check the return value. */ ++ get_diskinfo (i + 0x80, &geom); ++ /* FIXME: If HEADS or SECTORS is greater than 255, then this will ++ break the geometry information. That is a drawback of BSD ++ but not of GRUB. */ ++ bi.bi_bios_geom[i] = (((geom.cylinders - 1) << 16) ++ + (((geom.heads - 1) & 0xff) << 8) ++ + (geom.sectors & 0xff)); ++ } ++ ++ bi.bi_size = sizeof (struct bootinfo); ++ bi.bi_memsizes_valid = 1; ++ bi.bi_bios_dev = saved_drive; ++ bi.bi_basemem = mbi.mem_lower; ++ bi.bi_extmem = extended_memory; ++ ++ if (mbi.flags & MB_INFO_AOUT_SYMS) ++ { ++ bi.bi_symtab = mbi.syms.a.addr; ++ bi.bi_esymtab = mbi.syms.a.addr + 4 ++ + mbi.syms.a.tabsize + mbi.syms.a.strsize; ++ } ++#if 0 ++ else if (mbi.flags & MB_INFO_ELF_SHDR) ++ { ++ /* FIXME: Should check if a symbol table exists and, if exists, ++ pass the table to BI. */ ++ } ++#endif ++ else ++ { ++ bi.bi_symtab = 0; ++ bi.bi_esymtab = 0; ++ } ++ ++ /* call entry point */ ++ (*entry_addr) (clval, bootdev, 0, 0, 0, ((int) (&bi))); ++ } ++ else ++ { ++ /* ++ * We now pass the various bootstrap parameters to the loaded ++ * image via the argument list. ++ * ++ * This is the official list: ++ * ++ * arg0 = 8 (magic) ++ * arg1 = boot flags ++ * arg2 = boot device ++ * arg3 = start of symbol table (0 if not loaded) ++ * arg4 = end of symbol table (0 if not loaded) ++ * arg5 = transfer address from image ++ * arg6 = transfer address for next image pointer ++ * arg7 = conventional memory size (640) ++ * arg8 = extended memory size (8196) ++ * ++ * ...in actuality, we just pass the parameters used by the kernel. ++ */ ++ ++ /* call entry point */ ++ unsigned long end_mark; ++ ++ if (mbi.flags & MB_INFO_AOUT_SYMS) ++ end_mark = (mbi.syms.a.addr + 4 ++ + mbi.syms.a.tabsize + mbi.syms.a.strsize); ++ else ++ /* FIXME: it should be mbi.syms.e.size. */ ++ end_mark = 0; ++ ++ (*entry_addr) (clval, bootdev, 0, end_mark, ++ extended_memory, mbi.mem_lower); ++ } ++} +diff -Nur grub-0.97/stage2/builtins.c grub-0.97-patched/stage2/builtins.c +--- grub-0.97/stage2/builtins.c 2005-02-15 22:58:23.000000000 +0100 ++++ grub-0.97-patched/stage2/builtins.c 2012-11-11 17:07:12.729729661 +0100 +@@ -131,63 +131,98 @@ + } + + ++/* blocklist_read_helper nee disk_read_blocklist_func was a nested ++ * function, to which pointers were taken and exposed globally. Even ++ * in the GNU-C nested functions extension, they have local linkage, ++ * and aren't guaranteed to be accessable *at all* outside of their ++ * containing scope. ++ * ++ * Above and beyond all of that, the variables within blocklist_func_context ++ * are originally local variables, with local (not even static) linkage, ++ * from within blocklist_func. These were each referenced by ++ * disk_read_blocklist_func, which is only called from other functions ++ * through a globally scoped pointer. ++ * ++ * The documentation in GCC actually uses the words "all hell will break ++ * loose" to describe this scenario. ++ * ++ * Also, "start_sector" was also used uninitialized, but gcc doesn't warn ++ * about it (possibly because of the scoping madness?) ++ */ ++ ++static struct { ++ int start_sector; ++ int num_sectors; ++ int num_entries; ++ int last_length; ++} blocklist_func_context = { ++ .start_sector = 0, ++ .num_sectors = 0, ++ .num_entries = 0, ++ .last_length = 0 ++}; ++ ++/* Collect contiguous blocks into one entry as many as possible, ++ and print the blocklist notation on the screen. */ ++static void ++blocklist_read_helper (int sector, int offset, int length) ++{ ++ int *start_sector = &blocklist_func_context.start_sector; ++ int *num_sectors = &blocklist_func_context.num_sectors; ++ int *num_entries = &blocklist_func_context.num_entries; ++ int *last_length = &blocklist_func_context.last_length; ++ ++ if (*num_sectors > 0) ++ { ++ if (*start_sector + *num_sectors == sector ++ && offset == 0 && *last_length == SECTOR_SIZE) ++ { ++ *num_sectors++; ++ *last_length = length; ++ return; ++ } ++ else ++ { ++ if (*last_length == SECTOR_SIZE) ++ grub_printf ("%s%d+%d", *num_entries ? "," : "", ++ *start_sector - part_start, *num_sectors); ++ else if (*num_sectors > 1) ++ grub_printf ("%s%d+%d,%d[0-%d]", *num_entries ? "," : "", ++ *start_sector - part_start, *num_sectors-1, ++ *start_sector + *num_sectors-1 - part_start, ++ *last_length); ++ else ++ grub_printf ("%s%d[0-%d]", *num_entries ? "," : "", ++ *start_sector - part_start, *last_length); ++ *num_entries++; ++ *num_sectors = 0; ++ } ++ } ++ ++ if (offset > 0) ++ { ++ grub_printf("%s%d[%d-%d]", *num_entries ? "," : "", ++ sector-part_start, offset, offset+length); ++ *num_entries++; ++ } ++ else ++ { ++ *start_sector = sector; ++ *num_sectors = 1; ++ *last_length = length; ++ } ++} ++ + /* blocklist */ + static int + blocklist_func (char *arg, int flags) + { + char *dummy = (char *) RAW_ADDR (0x100000); +- int start_sector; +- int num_sectors = 0; +- int num_entries = 0; +- int last_length = 0; + +- auto void disk_read_blocklist_func (int sector, int offset, int length); ++ int *start_sector = &blocklist_func_context.start_sector; ++ int *num_sectors = &blocklist_func_context.num_sectors; ++ int *num_entries = &blocklist_func_context.num_entries; + +- /* Collect contiguous blocks into one entry as many as possible, +- and print the blocklist notation on the screen. */ +- auto void disk_read_blocklist_func (int sector, int offset, int length) +- { +- if (num_sectors > 0) +- { +- if (start_sector + num_sectors == sector +- && offset == 0 && last_length == SECTOR_SIZE) +- { +- num_sectors++; +- last_length = length; +- return; +- } +- else +- { +- if (last_length == SECTOR_SIZE) +- grub_printf ("%s%d+%d", num_entries ? "," : "", +- start_sector - part_start, num_sectors); +- else if (num_sectors > 1) +- grub_printf ("%s%d+%d,%d[0-%d]", num_entries ? "," : "", +- start_sector - part_start, num_sectors-1, +- start_sector + num_sectors-1 - part_start, +- last_length); +- else +- grub_printf ("%s%d[0-%d]", num_entries ? "," : "", +- start_sector - part_start, last_length); +- num_entries++; +- num_sectors = 0; +- } +- } +- +- if (offset > 0) +- { +- grub_printf("%s%d[%d-%d]", num_entries ? "," : "", +- sector-part_start, offset, offset+length); +- num_entries++; +- } +- else +- { +- start_sector = sector; +- num_sectors = 1; +- last_length = length; +- } +- } +- + /* Open the file. */ + if (! grub_open (arg)) + return 1; +@@ -206,15 +241,15 @@ + grub_printf (")"); + + /* Read in the whole file to DUMMY. */ +- disk_read_hook = disk_read_blocklist_func; ++ disk_read_hook = blocklist_read_helper; + if (! grub_read (dummy, -1)) + goto fail; + + /* The last entry may not be printed yet. Don't check if it is a + * full sector, since it doesn't matter if we read too much. */ +- if (num_sectors > 0) +- grub_printf ("%s%d+%d", num_entries ? "," : "", +- start_sector - part_start, num_sectors); ++ if (*num_sectors > 0) ++ grub_printf ("%s%d+%d", *num_entries ? "," : "", ++ *start_sector - part_start, *num_sectors); + + grub_printf ("\n"); + +@@ -852,6 +887,138 @@ + }; + #endif /* SUPPORT_NETBOOT */ + ++static int terminal_func (char *arg, int flags); ++ ++#ifdef SUPPORT_GRAPHICS ++ ++static int splashimage_func(char *arg, int flags) { ++ char splashimage[64]; ++ int i; ++ ++ /* filename can only be 64 characters due to our buffer size */ ++ if (strlen(arg) > 63) ++ return 1; ++ if (flags == BUILTIN_CMDLINE) { ++ if (!grub_open(arg)) ++ return 1; ++ grub_close(); ++ } ++ ++ strcpy(splashimage, arg); ++ ++ /* get rid of TERM_NEED_INIT from the graphics terminal. */ ++ for (i = 0; term_table[i].name; i++) { ++ if (grub_strcmp (term_table[i].name, "graphics") == 0) { ++ term_table[i].flags &= ~TERM_NEED_INIT; ++ break; ++ } ++ } ++ ++ graphics_set_splash(splashimage); ++ ++ if (flags == BUILTIN_CMDLINE && graphics_inited) { ++ graphics_end(); ++ graphics_init(); ++ graphics_cls(); ++ } ++ ++ /* FIXME: should we be explicitly switching the terminal as a ++ * side effect here? */ ++ terminal_func("graphics", flags); ++ ++ return 0; ++} ++ ++static struct builtin builtin_splashimage = ++{ ++ "splashimage", ++ splashimage_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "splashimage FILE", ++ "Load FILE as the background image when in graphics mode." ++}; ++ ++ ++/* foreground */ ++static int ++foreground_func(char *arg, int flags) ++{ ++ if (grub_strlen(arg) == 6) { ++ int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2; ++ int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2; ++ int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2; ++ ++ foreground = (r << 16) | (g << 8) | b; ++ if (graphics_inited) ++ graphics_set_palette(15, r, g, b); ++ ++ return (0); ++ } ++ ++ return (1); ++} ++ ++static struct builtin builtin_foreground = ++{ ++ "foreground", ++ foreground_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "foreground RRGGBB", ++ "Sets the foreground color when in graphics mode." ++ "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal." ++}; ++ ++ ++/* background */ ++static int ++background_func(char *arg, int flags) ++{ ++ if (grub_strlen(arg) == 6) { ++ int r = ((hex(arg[0]) << 4) | hex(arg[1])) >> 2; ++ int g = ((hex(arg[2]) << 4) | hex(arg[3])) >> 2; ++ int b = ((hex(arg[4]) << 4) | hex(arg[5])) >> 2; ++ ++ background = (r << 16) | (g << 8) | b; ++ if (graphics_inited) ++ graphics_set_palette(0, r, g, b); ++ return (0); ++ } ++ ++ return (1); ++} ++ ++static struct builtin builtin_background = ++{ ++ "background", ++ background_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "background RRGGBB", ++ "Sets the background color when in graphics mode." ++ "RR is red, GG is green, and BB blue. Numbers must be in hexadecimal." ++}; ++ ++#endif /* SUPPORT_GRAPHICS */ ++ ++ ++/* clear */ ++static int ++clear_func() ++{ ++ if (current_term->cls) ++ current_term->cls(); ++ ++ return 0; ++} ++ ++static struct builtin builtin_clear = ++{ ++ "clear", ++ clear_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "clear", ++ "Clear the screen" ++}; ++ + + /* displayapm */ + static int +@@ -1233,14 +1400,15 @@ + for (drive = 0x80; drive < 0x88; drive++) + { + unsigned long part = 0xFFFFFF; +- unsigned long start, len, offset, ext_offset; +- int type, entry; ++ unsigned long start, len, offset, ext_offset, gpt_offset; ++ int type, entry, gpt_count, gpt_size; + char buf[SECTOR_SIZE]; + + current_drive = drive; + while (next_partition (drive, 0xFFFFFF, &part, &type, + &start, &len, &offset, &entry, +- &ext_offset, buf)) ++ &ext_offset, &gpt_offset, ++ &gpt_count, &gpt_size, buf)) + { + if (type != PC_SLICE_TYPE_NONE + && ! IS_PC_SLICE_TYPE_BSD (type) +@@ -1740,6 +1908,77 @@ + + + /* install */ ++static struct { ++ int saved_sector; ++ int installaddr; ++ int installlist; ++ char *stage2_first_buffer; ++} install_func_context = { ++ .saved_sector = 0, ++ .installaddr = 0, ++ .installlist = 0, ++ .stage2_first_buffer = NULL, ++}; ++ ++/* Save the first sector of Stage2 in STAGE2_SECT. */ ++/* Formerly disk_read_savesect_func with local scope inside install_func */ ++static void ++install_savesect_helper(int sector, int offset, int length) ++{ ++ if (debug) ++ printf ("[%d]", sector); ++ ++ /* ReiserFS has files which sometimes contain data not aligned ++ on sector boundaries. Returning an error is better than ++ silently failing. */ ++ if (offset != 0 || length != SECTOR_SIZE) ++ errnum = ERR_UNALIGNED; ++ ++ install_func_context.saved_sector = sector; ++} ++ ++/* Write SECTOR to INSTALLLIST, and update INSTALLADDR and INSTALLSECT. */ ++/* Formerly disk_read_blocklist_func with local scope inside install_func */ ++static void ++install_blocklist_helper (int sector, int offset, int length) ++{ ++ int *installaddr = &install_func_context.installaddr; ++ int *installlist = &install_func_context.installlist; ++ char **stage2_first_buffer = &install_func_context.stage2_first_buffer; ++ /* Was the last sector full? */ ++ static int last_length = SECTOR_SIZE; ++ ++ if (debug) ++ printf("[%d]", sector); ++ ++ if (offset != 0 || last_length != SECTOR_SIZE) ++ { ++ /* We found a non-sector-aligned data block. */ ++ errnum = ERR_UNALIGNED; ++ return; ++ } ++ ++ last_length = length; ++ ++ if (*((unsigned long *) (*installlist - 4)) ++ + *((unsigned short *) *installlist) != sector ++ || *installlist == (int) *stage2_first_buffer + SECTOR_SIZE + 4) ++ { ++ *installlist -= 8; ++ ++ if (*((unsigned long *) (*installlist - 8))) ++ errnum = ERR_WONT_FIT; ++ else ++ { ++ *((unsigned short *) (*installlist + 2)) = (*installaddr >> 4); ++ *((unsigned long *) (*installlist - 4)) = sector; ++ } ++ } ++ ++ *((unsigned short *) *installlist) += 1; ++ *installaddr += 512; ++} ++ + static int + install_func (char *arg, int flags) + { +@@ -1747,8 +1986,12 @@ + char *stage1_buffer = (char *) RAW_ADDR (0x100000); + char *stage2_buffer = stage1_buffer + SECTOR_SIZE; + char *old_sect = stage2_buffer + SECTOR_SIZE; +- char *stage2_first_buffer = old_sect + SECTOR_SIZE; +- char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; ++ /* stage2_first_buffer used to be defined as: ++ * char *stage2_first_buffer = old_sect + SECTOR_SIZE; */ ++ char **stage2_first_buffer = &install_func_context.stage2_first_buffer; ++ /* and stage2_second_buffer was: ++ * char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; */ ++ char *stage2_second_buffer = old_sect + SECTOR_SIZE + SECTOR_SIZE; + /* XXX: Probably SECTOR_SIZE is reasonable. */ + char *config_filename = stage2_second_buffer + SECTOR_SIZE; + char *dummy = config_filename + SECTOR_SIZE; +@@ -1757,10 +2000,11 @@ + int src_drive, src_partition, src_part_start; + int i; + struct geometry dest_geom, src_geom; +- int saved_sector; ++ int *saved_sector = &install_func_context.saved_sector; + int stage2_first_sector, stage2_second_sector; + char *ptr; +- int installaddr, installlist; ++ int *installaddr = &install_func_context.installaddr; ++ int *installlist = &install_func_context.installlist; + /* Point to the location of the name of a configuration file in Stage 2. */ + char *config_file_location; + /* If FILE is a Stage 1.5? */ +@@ -1769,67 +2013,13 @@ + int is_open = 0; + /* If LBA is forced? */ + int is_force_lba = 0; +- /* Was the last sector full? */ +- int last_length = SECTOR_SIZE; +- ++ ++ *stage2_first_buffer = old_sect + SECTOR_SIZE; + #ifdef GRUB_UTIL + /* If the Stage 2 is in a partition mounted by an OS, this will store + the filename under the OS. */ + char *stage2_os_file = 0; + #endif /* GRUB_UTIL */ +- +- auto void disk_read_savesect_func (int sector, int offset, int length); +- auto void disk_read_blocklist_func (int sector, int offset, int length); +- +- /* Save the first sector of Stage2 in STAGE2_SECT. */ +- auto void disk_read_savesect_func (int sector, int offset, int length) +- { +- if (debug) +- printf ("[%d]", sector); +- +- /* ReiserFS has files which sometimes contain data not aligned +- on sector boundaries. Returning an error is better than +- silently failing. */ +- if (offset != 0 || length != SECTOR_SIZE) +- errnum = ERR_UNALIGNED; +- +- saved_sector = sector; +- } +- +- /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and +- INSTALLSECT. */ +- auto void disk_read_blocklist_func (int sector, int offset, int length) +- { +- if (debug) +- printf("[%d]", sector); +- +- if (offset != 0 || last_length != SECTOR_SIZE) +- { +- /* We found a non-sector-aligned data block. */ +- errnum = ERR_UNALIGNED; +- return; +- } +- +- last_length = length; +- +- if (*((unsigned long *) (installlist - 4)) +- + *((unsigned short *) installlist) != sector +- || installlist == (int) stage2_first_buffer + SECTOR_SIZE + 4) +- { +- installlist -= 8; +- +- if (*((unsigned long *) (installlist - 8))) +- errnum = ERR_WONT_FIT; +- else +- { +- *((unsigned short *) (installlist + 2)) = (installaddr >> 4); +- *((unsigned long *) (installlist - 4)) = sector; +- } +- } +- +- *((unsigned short *) installlist) += 1; +- installaddr += 512; +- } + + /* First, check the GNU-style long option. */ + while (1) +@@ -1862,10 +2052,10 @@ + addr = skip_to (0, file); + + /* Get the installation address. */ +- if (! safe_parse_maxint (&addr, &installaddr)) ++ if (! safe_parse_maxint (&addr, installaddr)) + { + /* ADDR is not specified. */ +- installaddr = 0; ++ *installaddr = 0; + ptr = addr; + errnum = 0; + } +@@ -1961,17 +2151,17 @@ + = 0x9090; + + /* Read the first sector of Stage 2. */ +- disk_read_hook = disk_read_savesect_func; +- if (grub_read (stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE) ++ disk_read_hook = install_savesect_helper; ++ if (grub_read (*stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE) + goto fail; + +- stage2_first_sector = saved_sector; ++ stage2_first_sector = *saved_sector; + + /* Read the second sector of Stage 2. */ + if (grub_read (stage2_second_buffer, SECTOR_SIZE) != SECTOR_SIZE) + goto fail; + +- stage2_second_sector = saved_sector; ++ stage2_second_sector = *saved_sector; + + /* Check for the version of Stage 2. */ + if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS)) +@@ -1987,27 +2177,27 @@ + + /* If INSTALLADDR is not specified explicitly in the command-line, + determine it by the Stage 2 id. */ +- if (! installaddr) ++ if (! *installaddr) + { + if (! is_stage1_5) + /* Stage 2. */ +- installaddr = 0x8000; ++ *installaddr = 0x8000; + else + /* Stage 1.5. */ +- installaddr = 0x2000; ++ *installaddr = 0x2000; + } + + *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR)) + = stage2_first_sector; + *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS)) +- = installaddr; ++ = *installaddr; + *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT)) +- = installaddr >> 4; ++ = *installaddr >> 4; + +- i = (int) stage2_first_buffer + SECTOR_SIZE - 4; ++ i = (int) *stage2_first_buffer + SECTOR_SIZE - 4; + while (*((unsigned long *) i)) + { +- if (i < (int) stage2_first_buffer ++ if (i < (int) *stage2_first_buffer + || (*((int *) (i - 4)) & 0x80000000) + || *((unsigned short *) i) >= 0xA00 + || *((short *) (i + 2)) == 0) +@@ -2021,13 +2211,13 @@ + i -= 8; + } + +- installlist = (int) stage2_first_buffer + SECTOR_SIZE + 4; +- installaddr += SECTOR_SIZE; ++ *installlist = (int) *stage2_first_buffer + SECTOR_SIZE + 4; ++ *installaddr += SECTOR_SIZE; + + /* Read the whole of Stage2 except for the first sector. */ + grub_seek (SECTOR_SIZE); + +- disk_read_hook = disk_read_blocklist_func; ++ disk_read_hook = install_blocklist_helper; + if (! grub_read (dummy, -1)) + goto fail; + +@@ -2110,7 +2300,7 @@ + /* Skip the first sector. */ + grub_seek (SECTOR_SIZE); + +- disk_read_hook = disk_read_savesect_func; ++ disk_read_hook = install_savesect_helper; + if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE) + goto fail; + +@@ -2180,7 +2370,7 @@ + else + #endif /* GRUB_UTIL */ + { +- if (! devwrite (saved_sector - part_start, 1, stage2_buffer)) ++ if (! devwrite (*saved_sector - part_start, 1, stage2_buffer)) + goto fail; + } + } +@@ -2202,7 +2392,7 @@ + goto fail; + } + +- if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) ++ if (fwrite (*stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) + { + fclose (fp); + errnum = ERR_WRITE; +@@ -2229,7 +2419,7 @@ + goto fail; + + if (! devwrite (stage2_first_sector - src_part_start, 1, +- stage2_first_buffer)) ++ *stage2_first_buffer)) + goto fail; + + if (! devwrite (stage2_second_sector - src_part_start, 1, +@@ -2815,8 +3005,8 @@ + { + int new_type; + unsigned long part = 0xFFFFFF; +- unsigned long start, len, offset, ext_offset; +- int entry, type; ++ unsigned long start, len, offset, ext_offset, gpt_offset; ++ int entry, type, gpt_count, gpt_size; + char mbr[512]; + + /* Get the drive and the partition. */ +@@ -2853,8 +3043,15 @@ + /* Look for the partition. */ + while (next_partition (current_drive, 0xFFFFFF, &part, &type, + &start, &len, &offset, &entry, +- &ext_offset, mbr)) ++ &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr)) + { ++ /* The partition may not be a GPT partition. */ ++ if (gpt_offset != 0) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ + if (part == current_partition) + { + /* Found. */ +@@ -3830,15 +4027,15 @@ + { + char tmp[16]; + grub_sprintf (tmp, ",%d", (partition >> 16) & 0xFF); +- grub_strncat (device, tmp, 256); ++ grub_strncat (device, tmp, sizeof (device)); + } + if ((partition & 0x00FF00) != 0x00FF00) + { + char tmp[16]; + grub_sprintf (tmp, ",%c", 'a' + ((partition >> 8) & 0xFF)); +- grub_strncat (device, tmp, 256); ++ grub_strncat (device, tmp, sizeof (device)); + } +- grub_strncat (device, ")", 256); ++ grub_strncat (device, ")", sizeof (device)); + } + + int embed_stage1_5 (char *stage1_5, int drive, int partition) +@@ -4085,7 +4282,7 @@ + }; + + +-#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) ++#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS) + /* terminal */ + static int + terminal_func (char *arg, int flags) +@@ -4244,17 +4441,21 @@ + end: + current_term = term_table + default_term; + current_term->flags = term_flags; +- ++ + if (lines) + max_lines = lines; + else +- /* 24 would be a good default value. */ +- max_lines = 24; +- ++ max_lines = current_term->max_lines; ++ + /* If the interface is currently the command-line, + restart it to repaint the screen. */ +- if (current_term != prev_term && (flags & BUILTIN_CMDLINE)) ++ if ((current_term != prev_term) && (flags & BUILTIN_CMDLINE)){ ++ if (prev_term->shutdown) ++ prev_term->shutdown(); ++ if (current_term->startup) ++ current_term->startup(); + grub_longjmp (restart_cmdline_env, 0); ++ } + + return 0; + } +@@ -4264,7 +4465,7 @@ + "terminal", + terminal_func, + BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, +- "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules]", ++ "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules] [graphics]", + "Select a terminal. When multiple terminals are specified, wait until" + " you push any key to continue. If both console and serial are specified," + " the terminal to which you input a key first will be selected. If no" +@@ -4276,7 +4477,7 @@ + " seconds. The option --lines specifies the maximum number of lines." + " The option --silent is used to suppress messages." + }; +-#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */ ++#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */ + + + #ifdef SUPPORT_SERIAL +@@ -4795,6 +4996,9 @@ + /* The table of builtin commands. Sorted in dictionary order. */ + struct builtin *builtin_table[] = + { ++#ifdef SUPPORT_GRAPHICS ++ &builtin_background, ++#endif + &builtin_blocklist, + &builtin_boot, + #ifdef SUPPORT_NETBOOT +@@ -4802,6 +5006,7 @@ + #endif /* SUPPORT_NETBOOT */ + &builtin_cat, + &builtin_chainloader, ++ &builtin_clear, + &builtin_cmp, + &builtin_color, + &builtin_configfile, +@@ -4821,6 +5026,9 @@ + &builtin_embed, + &builtin_fallback, + &builtin_find, ++#ifdef SUPPORT_GRAPHICS ++ &builtin_foreground, ++#endif + &builtin_fstest, + &builtin_geometry, + &builtin_halt, +@@ -4864,9 +5072,12 @@ + #endif /* SUPPORT_SERIAL */ + &builtin_setkey, + &builtin_setup, +-#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) ++#ifdef SUPPORT_GRAPHICS ++ &builtin_splashimage, ++#endif /* SUPPORT_GRAPHICS */ ++#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) || defined(SUPPORT_GRAPHICS) + &builtin_terminal, +-#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */ ++#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES || SUPPORT_GRAPHICS */ + #ifdef SUPPORT_SERIAL + &builtin_terminfo, + #endif /* SUPPORT_SERIAL */ +diff -Nur grub-0.97/stage2/builtins.c.orig grub-0.97-patched/stage2/builtins.c.orig +--- grub-0.97/stage2/builtins.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/builtins.c.orig 2005-02-15 22:58:23.000000000 +0100 +@@ -0,0 +1,4884 @@ ++/* builtins.c - the GRUB builtin commands */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 1999,2000,2001,2002,2003,2004 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 stdio.h before shared.h, because we can't define ++ WITHOUT_LIBC_STUBS here. */ ++#ifdef GRUB_UTIL ++# include <stdio.h> ++#endif ++ ++#include <shared.h> ++#include <filesys.h> ++#include <term.h> ++ ++#ifdef SUPPORT_NETBOOT ++# define GRUB 1 ++# include <etherboot.h> ++#endif ++ ++#ifdef SUPPORT_SERIAL ++# include <serial.h> ++# include <terminfo.h> ++#endif ++ ++#ifdef GRUB_UTIL ++# include <device.h> ++#else /* ! GRUB_UTIL */ ++# include <apic.h> ++# include <smp-imps.h> ++#endif /* ! GRUB_UTIL */ ++ ++#ifdef USE_MD5_PASSWORDS ++# include <md5.h> ++#endif ++ ++/* The type of kernel loaded. */ ++kernel_t kernel_type; ++/* The boot device. */ ++static int bootdev; ++/* True when the debug mode is turned on, and false ++ when it is turned off. */ ++int debug = 0; ++/* The default entry. */ ++int default_entry = 0; ++/* The fallback entry. */ ++int fallback_entryno; ++int fallback_entries[MAX_FALLBACK_ENTRIES]; ++/* The number of current entry. */ ++int current_entryno; ++/* The address for Multiboot command-line buffer. */ ++static char *mb_cmdline; ++/* The password. */ ++char *password; ++/* The password type. */ ++password_t password_type; ++/* The flag for indicating that the user is authoritative. */ ++int auth = 0; ++/* The timeout. */ ++int grub_timeout = -1; ++/* Whether to show the menu or not. */ ++int show_menu = 1; ++/* The BIOS drive map. */ ++static unsigned short bios_drive_map[DRIVE_MAP_SIZE + 1]; ++ ++/* Prototypes for allowing straightfoward calling of builtins functions ++ inside other functions. */ ++static int configfile_func (char *arg, int flags); ++ ++/* Initialize the data for builtins. */ ++void ++init_builtins (void) ++{ ++ kernel_type = KERNEL_TYPE_NONE; ++ /* BSD and chainloading evil hacks! */ ++ bootdev = set_bootdev (0); ++ mb_cmdline = (char *) MB_CMDLINE_BUF; ++} ++ ++/* Initialize the data for the configuration file. */ ++void ++init_config (void) ++{ ++ default_entry = 0; ++ password = 0; ++ fallback_entryno = -1; ++ fallback_entries[0] = -1; ++ grub_timeout = -1; ++} ++ ++/* Check a password for correctness. Returns 0 if password was ++ correct, and a value != 0 for error, similarly to strcmp. */ ++int ++check_password (char *entered, char* expected, password_t type) ++{ ++ switch (type) ++ { ++ case PASSWORD_PLAIN: ++ return strcmp (entered, expected); ++ ++#ifdef USE_MD5_PASSWORDS ++ case PASSWORD_MD5: ++ return check_md5_password (entered, expected); ++#endif ++ default: ++ /* unsupported password type: be secure */ ++ return 1; ++ } ++} ++ ++/* Print which sector is read when loading a file. */ ++static void ++disk_read_print_func (int sector, int offset, int length) ++{ ++ grub_printf ("[%d,%d,%d]", sector, offset, length); ++} ++ ++ ++/* blocklist */ ++static int ++blocklist_func (char *arg, int flags) ++{ ++ char *dummy = (char *) RAW_ADDR (0x100000); ++ int start_sector; ++ int num_sectors = 0; ++ int num_entries = 0; ++ int last_length = 0; ++ ++ auto void disk_read_blocklist_func (int sector, int offset, int length); ++ ++ /* Collect contiguous blocks into one entry as many as possible, ++ and print the blocklist notation on the screen. */ ++ auto void disk_read_blocklist_func (int sector, int offset, int length) ++ { ++ if (num_sectors > 0) ++ { ++ if (start_sector + num_sectors == sector ++ && offset == 0 && last_length == SECTOR_SIZE) ++ { ++ num_sectors++; ++ last_length = length; ++ return; ++ } ++ else ++ { ++ if (last_length == SECTOR_SIZE) ++ grub_printf ("%s%d+%d", num_entries ? "," : "", ++ start_sector - part_start, num_sectors); ++ else if (num_sectors > 1) ++ grub_printf ("%s%d+%d,%d[0-%d]", num_entries ? "," : "", ++ start_sector - part_start, num_sectors-1, ++ start_sector + num_sectors-1 - part_start, ++ last_length); ++ else ++ grub_printf ("%s%d[0-%d]", num_entries ? "," : "", ++ start_sector - part_start, last_length); ++ num_entries++; ++ num_sectors = 0; ++ } ++ } ++ ++ if (offset > 0) ++ { ++ grub_printf("%s%d[%d-%d]", num_entries ? "," : "", ++ sector-part_start, offset, offset+length); ++ num_entries++; ++ } ++ else ++ { ++ start_sector = sector; ++ num_sectors = 1; ++ last_length = length; ++ } ++ } ++ ++ /* Open the file. */ ++ if (! grub_open (arg)) ++ return 1; ++ ++ /* Print the device name. */ ++ grub_printf ("(%cd%d", ++ (current_drive & 0x80) ? 'h' : 'f', ++ current_drive & ~0x80); ++ ++ if ((current_partition & 0xFF0000) != 0xFF0000) ++ grub_printf (",%d", (current_partition >> 16) & 0xFF); ++ ++ if ((current_partition & 0x00FF00) != 0x00FF00) ++ grub_printf (",%c", 'a' + ((current_partition >> 8) & 0xFF)); ++ ++ grub_printf (")"); ++ ++ /* Read in the whole file to DUMMY. */ ++ disk_read_hook = disk_read_blocklist_func; ++ if (! grub_read (dummy, -1)) ++ goto fail; ++ ++ /* The last entry may not be printed yet. Don't check if it is a ++ * full sector, since it doesn't matter if we read too much. */ ++ if (num_sectors > 0) ++ grub_printf ("%s%d+%d", num_entries ? "," : "", ++ start_sector - part_start, num_sectors); ++ ++ grub_printf ("\n"); ++ ++ fail: ++ disk_read_hook = 0; ++ grub_close (); ++ return errnum; ++} ++ ++static struct builtin builtin_blocklist = ++{ ++ "blocklist", ++ blocklist_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "blocklist FILE", ++ "Print the blocklist notation of the file FILE." ++}; ++ ++/* boot */ ++static int ++boot_func (char *arg, int flags) ++{ ++ /* Clear the int15 handler if we can boot the kernel successfully. ++ This assumes that the boot code never fails only if KERNEL_TYPE is ++ not KERNEL_TYPE_NONE. Is this assumption is bad? */ ++ if (kernel_type != KERNEL_TYPE_NONE) ++ unset_int15_handler (); ++ ++#ifdef SUPPORT_NETBOOT ++ /* Shut down the networking. */ ++ cleanup_net (); ++#endif ++ ++ switch (kernel_type) ++ { ++ case KERNEL_TYPE_FREEBSD: ++ case KERNEL_TYPE_NETBSD: ++ /* *BSD */ ++ bsd_boot (kernel_type, bootdev, (char *) mbi.cmdline); ++ break; ++ ++ case KERNEL_TYPE_LINUX: ++ /* Linux */ ++ linux_boot (); ++ break; ++ ++ case KERNEL_TYPE_BIG_LINUX: ++ /* Big Linux */ ++ big_linux_boot (); ++ break; ++ ++ case KERNEL_TYPE_CHAINLOADER: ++ /* Chainloader */ ++ ++ /* Check if we should set the int13 handler. */ ++ if (bios_drive_map[0] != 0) ++ { ++ int i; ++ ++ /* Search for SAVED_DRIVE. */ ++ for (i = 0; i < DRIVE_MAP_SIZE; i++) ++ { ++ if (! bios_drive_map[i]) ++ break; ++ else if ((bios_drive_map[i] & 0xFF) == saved_drive) ++ { ++ /* Exchage SAVED_DRIVE with the mapped drive. */ ++ saved_drive = (bios_drive_map[i] >> 8) & 0xFF; ++ break; ++ } ++ } ++ ++ /* Set the handler. This is somewhat dangerous. */ ++ set_int13_handler (bios_drive_map); ++ } ++ ++ gateA20 (0); ++ boot_drive = saved_drive; ++ chain_stage1 (0, BOOTSEC_LOCATION, boot_part_addr); ++ break; ++ ++ case KERNEL_TYPE_MULTIBOOT: ++ /* Multiboot */ ++ multi_boot ((int) entry_addr, (int) &mbi); ++ break; ++ ++ default: ++ errnum = ERR_BOOT_COMMAND; ++ return 1; ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_boot = ++{ ++ "boot", ++ boot_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "boot", ++ "Boot the OS/chain-loader which has been loaded." ++}; ++ ++ ++#ifdef SUPPORT_NETBOOT ++/* bootp */ ++static int ++bootp_func (char *arg, int flags) ++{ ++ int with_configfile = 0; ++ ++ if (grub_memcmp (arg, "--with-configfile", sizeof ("--with-configfile") - 1) ++ == 0) ++ { ++ with_configfile = 1; ++ arg = skip_to (0, arg); ++ } ++ ++ if (! bootp ()) ++ { ++ if (errnum == ERR_NONE) ++ errnum = ERR_DEV_VALUES; ++ ++ return 1; ++ } ++ ++ /* Notify the configuration. */ ++ print_network_configuration (); ++ ++ /* XXX: this can cause an endless loop, but there is no easy way to ++ detect such a loop unfortunately. */ ++ if (with_configfile) ++ configfile_func (config_file, flags); ++ ++ return 0; ++} ++ ++static struct builtin builtin_bootp = ++{ ++ "bootp", ++ bootp_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "bootp [--with-configfile]", ++ "Initialize a network device via BOOTP. If the option `--with-configfile'" ++ " is given, try to load a configuration file specified by the 150 vendor" ++ " tag." ++}; ++#endif /* SUPPORT_NETBOOT */ ++ ++ ++/* cat */ ++static int ++cat_func (char *arg, int flags) ++{ ++ char c; ++ ++ if (! grub_open (arg)) ++ return 1; ++ ++ while (grub_read (&c, 1)) ++ { ++ /* Because running "cat" with a binary file can confuse the terminal, ++ print only some characters as they are. */ ++ if (grub_isspace (c) || (c >= ' ' && c <= '~')) ++ grub_putchar (c); ++ else ++ grub_putchar ('?'); ++ } ++ ++ grub_close (); ++ return 0; ++} ++ ++static struct builtin builtin_cat = ++{ ++ "cat", ++ cat_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "cat FILE", ++ "Print the contents of the file FILE." ++}; ++ ++ ++/* chainloader */ ++static int ++chainloader_func (char *arg, int flags) ++{ ++ int force = 0; ++ char *file = arg; ++ ++ /* If the option `--force' is specified? */ ++ if (substring ("--force", arg) <= 0) ++ { ++ force = 1; ++ file = skip_to (0, arg); ++ } ++ ++ /* Open the file. */ ++ if (! grub_open (file)) ++ { ++ kernel_type = KERNEL_TYPE_NONE; ++ return 1; ++ } ++ ++ /* Read the first block. */ ++ if (grub_read ((char *) BOOTSEC_LOCATION, SECTOR_SIZE) != SECTOR_SIZE) ++ { ++ grub_close (); ++ kernel_type = KERNEL_TYPE_NONE; ++ ++ /* This below happens, if a file whose size is less than 512 bytes ++ is loaded. */ ++ if (errnum == ERR_NONE) ++ errnum = ERR_EXEC_FORMAT; ++ ++ return 1; ++ } ++ ++ /* If not loading it forcibly, check for the signature. */ ++ if (! force ++ && (*((unsigned short *) (BOOTSEC_LOCATION + BOOTSEC_SIG_OFFSET)) ++ != BOOTSEC_SIGNATURE)) ++ { ++ grub_close (); ++ errnum = ERR_EXEC_FORMAT; ++ kernel_type = KERNEL_TYPE_NONE; ++ return 1; ++ } ++ ++ grub_close (); ++ kernel_type = KERNEL_TYPE_CHAINLOADER; ++ ++ /* XXX: Windows evil hack. For now, only the first five letters are ++ checked. */ ++ if (IS_PC_SLICE_TYPE_FAT (current_slice) ++ && ! grub_memcmp ((char *) BOOTSEC_LOCATION + BOOTSEC_BPB_SYSTEM_ID, ++ "MSWIN", 5)) ++ *((unsigned long *) (BOOTSEC_LOCATION + BOOTSEC_BPB_HIDDEN_SECTORS)) ++ = part_start; ++ ++ errnum = ERR_NONE; ++ ++ return 0; ++} ++ ++static struct builtin builtin_chainloader = ++{ ++ "chainloader", ++ chainloader_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "chainloader [--force] FILE", ++ "Load the chain-loader FILE. If --force is specified, then load it" ++ " forcibly, whether the boot loader signature is present or not." ++}; ++ ++ ++/* This function could be used to debug new filesystem code. Put a file ++ in the new filesystem and the same file in a well-tested filesystem. ++ Then, run "cmp" with the files. If no output is obtained, probably ++ the code is good, otherwise investigate what's wrong... */ ++/* cmp FILE1 FILE2 */ ++static int ++cmp_func (char *arg, int flags) ++{ ++ /* The filenames. */ ++ char *file1, *file2; ++ /* The addresses. */ ++ char *addr1, *addr2; ++ int i; ++ /* The size of the file. */ ++ int size; ++ ++ /* Get the filenames from ARG. */ ++ file1 = arg; ++ file2 = skip_to (0, arg); ++ if (! *file1 || ! *file2) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ /* Terminate the filenames for convenience. */ ++ nul_terminate (file1); ++ nul_terminate (file2); ++ ++ /* Read the whole data from FILE1. */ ++ addr1 = (char *) RAW_ADDR (0x100000); ++ if (! grub_open (file1)) ++ return 1; ++ ++ /* Get the size. */ ++ size = filemax; ++ if (grub_read (addr1, -1) != size) ++ { ++ grub_close (); ++ return 1; ++ } ++ ++ grub_close (); ++ ++ /* Read the whole data from FILE2. */ ++ addr2 = addr1 + size; ++ if (! grub_open (file2)) ++ return 1; ++ ++ /* Check if the size of FILE2 is equal to the one of FILE2. */ ++ if (size != filemax) ++ { ++ grub_printf ("Differ in size: 0x%x [%s], 0x%x [%s]\n", ++ size, file1, filemax, file2); ++ grub_close (); ++ return 0; ++ } ++ ++ if (! grub_read (addr2, -1)) ++ { ++ grub_close (); ++ return 1; ++ } ++ ++ grub_close (); ++ ++ /* Now compare ADDR1 with ADDR2. */ ++ for (i = 0; i < size; i++) ++ { ++ if (addr1[i] != addr2[i]) ++ grub_printf ("Differ at the offset %d: 0x%x [%s], 0x%x [%s]\n", ++ i, (unsigned) addr1[i], file1, ++ (unsigned) addr2[i], file2); ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_cmp = ++{ ++ "cmp", ++ cmp_func, ++ BUILTIN_CMDLINE, ++ "cmp FILE1 FILE2", ++ "Compare the file FILE1 with the FILE2 and inform the different values" ++ " if any." ++}; ++ ++ ++/* color */ ++/* Set new colors used for the menu interface. Support two methods to ++ specify a color name: a direct integer representation and a symbolic ++ color name. An example of the latter is "blink-light-gray/blue". */ ++static int ++color_func (char *arg, int flags) ++{ ++ char *normal; ++ char *highlight; ++ int new_normal_color; ++ int new_highlight_color; ++ static char *color_list[16] = ++ { ++ "black", ++ "blue", ++ "green", ++ "cyan", ++ "red", ++ "magenta", ++ "brown", ++ "light-gray", ++ "dark-gray", ++ "light-blue", ++ "light-green", ++ "light-cyan", ++ "light-red", ++ "light-magenta", ++ "yellow", ++ "white" ++ }; ++ ++ auto int color_number (char *str); ++ ++ /* Convert the color name STR into the magical number. */ ++ auto int color_number (char *str) ++ { ++ char *ptr; ++ int i; ++ int color = 0; ++ ++ /* Find the separator. */ ++ for (ptr = str; *ptr && *ptr != '/'; ptr++) ++ ; ++ ++ /* If not found, return -1. */ ++ if (! *ptr) ++ return -1; ++ ++ /* Terminate the string STR. */ ++ *ptr++ = 0; ++ ++ /* If STR contains the prefix "blink-", then set the `blink' bit ++ in COLOR. */ ++ if (substring ("blink-", str) <= 0) ++ { ++ color = 0x80; ++ str += 6; ++ } ++ ++ /* Search for the color name. */ ++ for (i = 0; i < 16; i++) ++ if (grub_strcmp (color_list[i], str) == 0) ++ { ++ color |= i; ++ break; ++ } ++ ++ if (i == 16) ++ return -1; ++ ++ str = ptr; ++ nul_terminate (str); ++ ++ /* Search for the color name. */ ++ for (i = 0; i < 8; i++) ++ if (grub_strcmp (color_list[i], str) == 0) ++ { ++ color |= i << 4; ++ break; ++ } ++ ++ if (i == 8) ++ return -1; ++ ++ return color; ++ } ++ ++ normal = arg; ++ highlight = skip_to (0, arg); ++ ++ new_normal_color = color_number (normal); ++ if (new_normal_color < 0 && ! safe_parse_maxint (&normal, &new_normal_color)) ++ return 1; ++ ++ /* The second argument is optional, so set highlight_color ++ to inverted NORMAL_COLOR. */ ++ if (! *highlight) ++ new_highlight_color = ((new_normal_color >> 4) ++ | ((new_normal_color & 0xf) << 4)); ++ else ++ { ++ new_highlight_color = color_number (highlight); ++ if (new_highlight_color < 0 ++ && ! safe_parse_maxint (&highlight, &new_highlight_color)) ++ return 1; ++ } ++ ++ if (current_term->setcolor) ++ current_term->setcolor (new_normal_color, new_highlight_color); ++ ++ return 0; ++} ++ ++static struct builtin builtin_color = ++{ ++ "color", ++ color_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "color NORMAL [HIGHLIGHT]", ++ "Change the menu colors. The color NORMAL is used for most" ++ " lines in the menu, and the color HIGHLIGHT is used to highlight the" ++ " line where the cursor points. If you omit HIGHLIGHT, then the" ++ " inverted color of NORMAL is used for the highlighted line." ++ " The format of a color is "FG/BG". FG and BG are symbolic color names." ++ " A symbolic color name must be one of these: black, blue, green," ++ " cyan, red, magenta, brown, light-gray, dark-gray, light-blue," ++ " light-green, light-cyan, light-red, light-magenta, yellow and white." ++ " But only the first eight names can be used for BG. You can prefix" ++ " "blink-" to FG if you want a blinking foreground color." ++}; ++ ++ ++/* configfile */ ++static int ++configfile_func (char *arg, int flags) ++{ ++ char *new_config = config_file; ++ ++ /* Check if the file ARG is present. */ ++ if (! grub_open (arg)) ++ return 1; ++ ++ grub_close (); ++ ++ /* Copy ARG to CONFIG_FILE. */ ++ while ((*new_config++ = *arg++) != 0) ++ ; ++ ++#ifdef GRUB_UTIL ++ /* Force to load the configuration file. */ ++ use_config_file = 1; ++#endif ++ ++ /* Make sure that the user will not be authoritative. */ ++ auth = 0; ++ ++ /* Restart cmain. */ ++ grub_longjmp (restart_env, 0); ++ ++ /* Never reach here. */ ++ return 0; ++} ++ ++static struct builtin builtin_configfile = ++{ ++ "configfile", ++ configfile_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "configfile FILE", ++ "Load FILE as the configuration file." ++}; ++ ++ ++/* debug */ ++static int ++debug_func (char *arg, int flags) ++{ ++ if (debug) ++ { ++ debug = 0; ++ grub_printf (" Debug mode is turned off\n"); ++ } ++ else ++ { ++ debug = 1; ++ grub_printf (" Debug mode is turned on\n"); ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_debug = ++{ ++ "debug", ++ debug_func, ++ BUILTIN_CMDLINE, ++ "debug", ++ "Turn on/off the debug mode." ++}; ++ ++ ++/* default */ ++static int ++default_func (char *arg, int flags) ++{ ++#ifndef SUPPORT_DISKLESS ++ if (grub_strcmp (arg, "saved") == 0) ++ { ++ default_entry = saved_entryno; ++ return 0; ++ } ++#endif /* SUPPORT_DISKLESS */ ++ ++ if (! safe_parse_maxint (&arg, &default_entry)) ++ return 1; ++ ++ return 0; ++} ++ ++static struct builtin builtin_default = ++{ ++ "default", ++ default_func, ++ BUILTIN_MENU, ++#if 0 ++ "default [NUM | `saved']", ++ "Set the default entry to entry number NUM (if not specified, it is" ++ " 0, the first entry) or the entry number saved by savedefault." ++#endif ++}; ++ ++ ++#ifdef GRUB_UTIL ++/* device */ ++static int ++device_func (char *arg, int flags) ++{ ++ char *drive = arg; ++ char *device; ++ ++ /* Get the drive number from DRIVE. */ ++ if (! set_device (drive)) ++ return 1; ++ ++ /* Get the device argument. */ ++ device = skip_to (0, drive); ++ ++ /* Terminate DEVICE. */ ++ nul_terminate (device); ++ ++ if (! *device || ! check_device (device)) ++ { ++ errnum = ERR_FILE_NOT_FOUND; ++ return 1; ++ } ++ ++ assign_device_name (current_drive, device); ++ ++ return 0; ++} ++ ++static struct builtin builtin_device = ++{ ++ "device", ++ device_func, ++ BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "device DRIVE DEVICE", ++ "Specify DEVICE as the actual drive for a BIOS drive DRIVE. This command" ++ " can be used only in the grub shell." ++}; ++#endif /* GRUB_UTIL */ ++ ++ ++#ifdef SUPPORT_NETBOOT ++/* dhcp */ ++static int ++dhcp_func (char *arg, int flags) ++{ ++ /* For now, this is an alias for bootp. */ ++ return bootp_func (arg, flags); ++} ++ ++static struct builtin builtin_dhcp = ++{ ++ "dhcp", ++ dhcp_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "dhcp", ++ "Initialize a network device via DHCP." ++}; ++#endif /* SUPPORT_NETBOOT */ ++ ++ ++/* displayapm */ ++static int ++displayapm_func (char *arg, int flags) ++{ ++ if (mbi.flags & MB_INFO_APM_TABLE) ++ { ++ grub_printf ("APM BIOS information:\n" ++ " Version: 0x%x\n" ++ " 32-bit CS: 0x%x\n" ++ " Offset: 0x%x\n" ++ " 16-bit CS: 0x%x\n" ++ " 16-bit DS: 0x%x\n" ++ " 32-bit CS length: 0x%x\n" ++ " 16-bit CS length: 0x%x\n" ++ " 16-bit DS length: 0x%x\n", ++ (unsigned) apm_bios_info.version, ++ (unsigned) apm_bios_info.cseg, ++ apm_bios_info.offset, ++ (unsigned) apm_bios_info.cseg_16, ++ (unsigned) apm_bios_info.dseg_16, ++ (unsigned) apm_bios_info.cseg_len, ++ (unsigned) apm_bios_info.cseg_16_len, ++ (unsigned) apm_bios_info.dseg_16_len); ++ } ++ else ++ { ++ grub_printf ("No APM BIOS found or probe failed\n"); ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_displayapm = ++{ ++ "displayapm", ++ displayapm_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "displayapm", ++ "Display APM BIOS information." ++}; ++ ++ ++/* displaymem */ ++static int ++displaymem_func (char *arg, int flags) ++{ ++ if (get_eisamemsize () != -1) ++ grub_printf (" EISA Memory BIOS Interface is present\n"); ++ if (get_mmap_entry ((void *) SCRATCHADDR, 0) != 0 ++ || *((int *) SCRATCHADDR) != 0) ++ grub_printf (" Address Map BIOS Interface is present\n"); ++ ++ grub_printf (" Lower memory: %uK, " ++ "Upper memory (to first chipset hole): %uK\n", ++ mbi.mem_lower, mbi.mem_upper); ++ ++ if (mbi.flags & MB_INFO_MEM_MAP) ++ { ++ struct AddrRangeDesc *map = (struct AddrRangeDesc *) mbi.mmap_addr; ++ int end_addr = mbi.mmap_addr + mbi.mmap_length; ++ ++ grub_printf (" [Address Range Descriptor entries " ++ "immediately follow (values are 64-bit)]\n"); ++ while (end_addr > (int) map) ++ { ++ char *str; ++ ++ if (map->Type == MB_ARD_MEMORY) ++ str = "Usable RAM"; ++ else ++ str = "Reserved"; ++ grub_printf (" %s: Base Address: 0x%x X 4GB + 0x%x,\n" ++ " Length: 0x%x X 4GB + 0x%x bytes\n", ++ str, ++ (unsigned long) (map->BaseAddr >> 32), ++ (unsigned long) (map->BaseAddr & 0xFFFFFFFF), ++ (unsigned long) (map->Length >> 32), ++ (unsigned long) (map->Length & 0xFFFFFFFF)); ++ ++ map = ((struct AddrRangeDesc *) (((int) map) + 4 + map->size)); ++ } ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_displaymem = ++{ ++ "displaymem", ++ displaymem_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "displaymem", ++ "Display what GRUB thinks the system address space map of the" ++ " machine is, including all regions of physical RAM installed." ++}; ++ ++ ++/* dump FROM TO */ ++#ifdef GRUB_UTIL ++static int ++dump_func (char *arg, int flags) ++{ ++ char *from, *to; ++ FILE *fp; ++ char c; ++ ++ from = arg; ++ to = skip_to (0, arg); ++ if (! *from || ! *to) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ nul_terminate (from); ++ nul_terminate (to); ++ ++ if (! grub_open (from)) ++ return 1; ++ ++ fp = fopen (to, "w"); ++ if (! fp) ++ { ++ errnum = ERR_WRITE; ++ return 1; ++ } ++ ++ while (grub_read (&c, 1)) ++ if (fputc (c, fp) == EOF) ++ { ++ errnum = ERR_WRITE; ++ fclose (fp); ++ return 1; ++ } ++ ++ if (fclose (fp) == EOF) ++ { ++ errnum = ERR_WRITE; ++ return 1; ++ } ++ ++ grub_close (); ++ return 0; ++} ++ ++static struct builtin builtin_dump = ++ { ++ "dump", ++ dump_func, ++ BUILTIN_CMDLINE, ++ "dump FROM TO", ++ "Dump the contents of the file FROM to the file TO. FROM must be" ++ " a GRUB file and TO must be an OS file." ++ }; ++#endif /* GRUB_UTIL */ ++ ++ ++static char embed_info[32]; ++/* embed */ ++/* Embed a Stage 1.5 in the first cylinder after MBR or in the ++ bootloader block in a FFS. */ ++static int ++embed_func (char *arg, int flags) ++{ ++ char *stage1_5; ++ char *device; ++ char *stage1_5_buffer = (char *) RAW_ADDR (0x100000); ++ int len, size; ++ int sector; ++ ++ stage1_5 = arg; ++ device = skip_to (0, stage1_5); ++ ++ /* Open a Stage 1.5. */ ++ if (! grub_open (stage1_5)) ++ return 1; ++ ++ /* Read the whole of the Stage 1.5. */ ++ len = grub_read (stage1_5_buffer, -1); ++ grub_close (); ++ ++ if (errnum) ++ return 1; ++ ++ size = (len + SECTOR_SIZE - 1) / SECTOR_SIZE; ++ ++ /* Get the device where the Stage 1.5 will be embedded. */ ++ set_device (device); ++ if (errnum) ++ return 1; ++ ++ if (current_partition == 0xFFFFFF) ++ { ++ /* Embed it after the MBR. */ ++ ++ char mbr[SECTOR_SIZE]; ++ char ezbios_check[2*SECTOR_SIZE]; ++ int i; ++ ++ /* Open the partition. */ ++ if (! open_partition ()) ++ return 1; ++ ++ /* No floppy has MBR. */ ++ if (! (current_drive & 0x80)) ++ { ++ errnum = ERR_DEV_VALUES; ++ return 1; ++ } ++ ++ /* Read the MBR of CURRENT_DRIVE. */ ++ if (! rawread (current_drive, PC_MBR_SECTOR, 0, SECTOR_SIZE, mbr)) ++ return 1; ++ ++ /* Sanity check. */ ++ if (! PC_MBR_CHECK_SIG (mbr)) ++ { ++ errnum = ERR_BAD_PART_TABLE; ++ return 1; ++ } ++ ++ /* Check if the disk can store the Stage 1.5. */ ++ for (i = 0; i < 4; i++) ++ if (PC_SLICE_TYPE (mbr, i) && PC_SLICE_START (mbr, i) - 1 < size) ++ { ++ errnum = ERR_NO_DISK_SPACE; ++ return 1; ++ } ++ ++ /* Check for EZ-BIOS signature. It should be in the third ++ * sector, but due to remapping it can appear in the second, so ++ * load and check both. ++ */ ++ if (! rawread (current_drive, 1, 0, 2 * SECTOR_SIZE, ezbios_check)) ++ return 1; ++ ++ if (! memcmp (ezbios_check + 3, "AERMH", 5) ++ || ! memcmp (ezbios_check + 512 + 3, "AERMH", 5)) ++ { ++ /* The space after the MBR is used by EZ-BIOS which we must ++ * not overwrite. ++ */ ++ errnum = ERR_NO_DISK_SPACE; ++ return 1; ++ } ++ ++ sector = 1; ++ } ++ else ++ { ++ /* Embed it in the bootloader block in the filesystem. */ ++ int start_sector; ++ ++ /* Open the partition. */ ++ if (! open_device ()) ++ return 1; ++ ++ /* Check if the current slice supports embedding. */ ++ if (fsys_table[fsys_type].embed_func == 0 ++ || ! fsys_table[fsys_type].embed_func (&start_sector, size)) ++ { ++ errnum = ERR_DEV_VALUES; ++ return 1; ++ } ++ ++ sector = part_start + start_sector; ++ } ++ ++ /* Clear the cache. */ ++ buf_track = -1; ++ ++ /* Now perform the embedding. */ ++ if (! devwrite (sector - part_start, size, stage1_5_buffer)) ++ return 1; ++ ++ grub_printf (" %d sectors are embedded.\n", size); ++ grub_sprintf (embed_info, "%d+%d", sector - part_start, size); ++ return 0; ++} ++ ++static struct builtin builtin_embed = ++{ ++ "embed", ++ embed_func, ++ BUILTIN_CMDLINE, ++ "embed STAGE1_5 DEVICE", ++ "Embed the Stage 1.5 STAGE1_5 in the sectors after MBR if DEVICE" ++ " is a drive, or in the "bootloader" area if DEVICE is a FFS partition." ++ " Print the number of sectors which STAGE1_5 occupies if successful." ++}; ++ ++ ++/* fallback */ ++static int ++fallback_func (char *arg, int flags) ++{ ++ int i = 0; ++ ++ while (*arg) ++ { ++ int entry; ++ int j; ++ ++ if (! safe_parse_maxint (&arg, &entry)) ++ return 1; ++ ++ /* Remove duplications to prevent infinite looping. */ ++ for (j = 0; j < i; j++) ++ if (entry == fallback_entries[j]) ++ break; ++ if (j != i) ++ continue; ++ ++ fallback_entries[i++] = entry; ++ if (i == MAX_FALLBACK_ENTRIES) ++ break; ++ ++ arg = skip_to (0, arg); ++ } ++ ++ if (i < MAX_FALLBACK_ENTRIES) ++ fallback_entries[i] = -1; ++ ++ fallback_entryno = (i == 0) ? -1 : 0; ++ ++ return 0; ++} ++ ++static struct builtin builtin_fallback = ++{ ++ "fallback", ++ fallback_func, ++ BUILTIN_MENU, ++#if 0 ++ "fallback NUM...", ++ "Go into unattended boot mode: if the default boot entry has any" ++ " errors, instead of waiting for the user to do anything, it" ++ " immediately starts over using the NUM entry (same numbering as the" ++ " `default' command). This obviously won't help if the machine" ++ " was rebooted by a kernel that GRUB loaded." ++#endif ++}; ++ ++ ++/* find */ ++/* Search for the filename ARG in all of partitions. */ ++static int ++find_func (char *arg, int flags) ++{ ++ char *filename = arg; ++ unsigned long drive; ++ unsigned long tmp_drive = saved_drive; ++ unsigned long tmp_partition = saved_partition; ++ int got_file = 0; ++ ++ /* Floppies. */ ++ for (drive = 0; drive < 8; drive++) ++ { ++ current_drive = drive; ++ current_partition = 0xFFFFFF; ++ ++ if (open_device ()) ++ { ++ saved_drive = current_drive; ++ saved_partition = current_partition; ++ if (grub_open (filename)) ++ { ++ grub_close (); ++ grub_printf (" (fd%d)\n", drive); ++ got_file = 1; ++ } ++ } ++ ++ errnum = ERR_NONE; ++ } ++ ++ /* Hard disks. */ ++ for (drive = 0x80; drive < 0x88; drive++) ++ { ++ unsigned long part = 0xFFFFFF; ++ unsigned long start, len, offset, ext_offset; ++ int type, entry; ++ char buf[SECTOR_SIZE]; ++ ++ current_drive = drive; ++ while (next_partition (drive, 0xFFFFFF, &part, &type, ++ &start, &len, &offset, &entry, ++ &ext_offset, buf)) ++ { ++ if (type != PC_SLICE_TYPE_NONE ++ && ! IS_PC_SLICE_TYPE_BSD (type) ++ && ! IS_PC_SLICE_TYPE_EXTENDED (type)) ++ { ++ current_partition = part; ++ if (open_device ()) ++ { ++ saved_drive = current_drive; ++ saved_partition = current_partition; ++ if (grub_open (filename)) ++ { ++ int bsd_part = (part >> 8) & 0xFF; ++ int pc_slice = part >> 16; ++ ++ grub_close (); ++ ++ if (bsd_part == 0xFF) ++ grub_printf (" (hd%d,%d)\n", ++ drive - 0x80, pc_slice); ++ else ++ grub_printf (" (hd%d,%d,%c)\n", ++ drive - 0x80, pc_slice, bsd_part + 'a'); ++ ++ got_file = 1; ++ } ++ } ++ } ++ ++ /* We want to ignore any error here. */ ++ errnum = ERR_NONE; ++ } ++ ++ /* next_partition always sets ERRNUM in the last call, so clear ++ it. */ ++ errnum = ERR_NONE; ++ } ++ ++ saved_drive = tmp_drive; ++ saved_partition = tmp_partition; ++ ++ if (got_file) ++ { ++ errnum = ERR_NONE; ++ return 0; ++ } ++ ++ errnum = ERR_FILE_NOT_FOUND; ++ return 1; ++} ++ ++static struct builtin builtin_find = ++{ ++ "find", ++ find_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "find FILENAME", ++ "Search for the filename FILENAME in all of partitions and print the list of" ++ " the devices which contain the file." ++}; ++ ++ ++/* fstest */ ++static int ++fstest_func (char *arg, int flags) ++{ ++ if (disk_read_hook) ++ { ++ disk_read_hook = NULL; ++ printf (" Filesystem tracing is now off\n"); ++ } ++ else ++ { ++ disk_read_hook = disk_read_print_func; ++ printf (" Filesystem tracing is now on\n"); ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_fstest = ++{ ++ "fstest", ++ fstest_func, ++ BUILTIN_CMDLINE, ++ "fstest", ++ "Toggle filesystem test mode." ++}; ++ ++ ++/* geometry */ ++static int ++geometry_func (char *arg, int flags) ++{ ++ struct geometry geom; ++ char *msg; ++ char *device = arg; ++#ifdef GRUB_UTIL ++ char *ptr; ++#endif ++ ++ /* Get the device number. */ ++ set_device (device); ++ if (errnum) ++ return 1; ++ ++ /* Check for the geometry. */ ++ if (get_diskinfo (current_drive, &geom)) ++ { ++ errnum = ERR_NO_DISK; ++ return 1; ++ } ++ ++ /* Attempt to read the first sector, because some BIOSes turns out not ++ to support LBA even though they set the bit 0 in the support ++ bitmap, only after reading something actually. */ ++ if (biosdisk (BIOSDISK_READ, current_drive, &geom, 0, 1, SCRATCHSEG)) ++ { ++ errnum = ERR_READ; ++ return 1; ++ } ++ ++#ifdef GRUB_UTIL ++ ptr = skip_to (0, device); ++ if (*ptr) ++ { ++ char *cylinder, *head, *sector, *total_sector; ++ int num_cylinder, num_head, num_sector, num_total_sector; ++ ++ cylinder = ptr; ++ head = skip_to (0, cylinder); ++ sector = skip_to (0, head); ++ total_sector = skip_to (0, sector); ++ if (! safe_parse_maxint (&cylinder, &num_cylinder) ++ || ! safe_parse_maxint (&head, &num_head) ++ || ! safe_parse_maxint (§or, &num_sector)) ++ return 1; ++ ++ disks[current_drive].cylinders = num_cylinder; ++ disks[current_drive].heads = num_head; ++ disks[current_drive].sectors = num_sector; ++ ++ if (safe_parse_maxint (&total_sector, &num_total_sector)) ++ disks[current_drive].total_sectors = num_total_sector; ++ else ++ disks[current_drive].total_sectors ++ = num_cylinder * num_head * num_sector; ++ errnum = 0; ++ ++ geom = disks[current_drive]; ++ buf_drive = -1; ++ } ++#endif /* GRUB_UTIL */ ++ ++#ifdef GRUB_UTIL ++ msg = device_map[current_drive]; ++#else ++ if (geom.flags & BIOSDISK_FLAG_LBA_EXTENSION) ++ msg = "LBA"; ++ else ++ msg = "CHS"; ++#endif ++ ++ grub_printf ("drive 0x%x: C/H/S = %d/%d/%d, " ++ "The number of sectors = %d, %s\n", ++ current_drive, ++ geom.cylinders, geom.heads, geom.sectors, ++ geom.total_sectors, msg); ++ real_open_partition (1); ++ ++ return 0; ++} ++ ++static struct builtin builtin_geometry = ++{ ++ "geometry", ++ geometry_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "geometry DRIVE [CYLINDER HEAD SECTOR [TOTAL_SECTOR]]", ++ "Print the information for a drive DRIVE. In the grub shell, you can" ++ " set the geometry of the drive arbitrarily. The number of the cylinders," ++ " the one of the heads, the one of the sectors and the one of the total" ++ " sectors are set to CYLINDER, HEAD, SECTOR and TOTAL_SECTOR," ++ " respectively. If you omit TOTAL_SECTOR, then it will be calculated based" ++ " on the C/H/S values automatically." ++}; ++ ++ ++/* halt */ ++static int ++halt_func (char *arg, int flags) ++{ ++ int no_apm; ++ ++ no_apm = (grub_memcmp (arg, "--no-apm", 8) == 0); ++ grub_halt (no_apm); ++ ++ /* Never reach here. */ ++ return 1; ++} ++ ++static struct builtin builtin_halt = ++{ ++ "halt", ++ halt_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "halt [--no-apm]", ++ "Halt your system. If APM is avaiable on it, turn off the power using" ++ " the APM BIOS, unless you specify the option `--no-apm'." ++}; ++ ++ ++/* help */ ++#define MAX_SHORT_DOC_LEN 39 ++#define MAX_LONG_DOC_LEN 66 ++ ++static int ++help_func (char *arg, int flags) ++{ ++ int all = 0; ++ ++ if (grub_memcmp (arg, "--all", sizeof ("--all") - 1) == 0) ++ { ++ all = 1; ++ arg = skip_to (0, arg); ++ } ++ ++ if (! *arg) ++ { ++ /* Invoked with no argument. Print the list of the short docs. */ ++ struct builtin **builtin; ++ int left = 1; ++ ++ for (builtin = builtin_table; *builtin != 0; builtin++) ++ { ++ int len; ++ int i; ++ ++ /* If this cannot be used in the command-line interface, ++ skip this. */ ++ if (! ((*builtin)->flags & BUILTIN_CMDLINE)) ++ continue; ++ ++ /* If this doesn't need to be listed automatically and "--all" ++ is not specified, skip this. */ ++ if (! all && ! ((*builtin)->flags & BUILTIN_HELP_LIST)) ++ continue; ++ ++ len = grub_strlen ((*builtin)->short_doc); ++ /* If the length of SHORT_DOC is too long, truncate it. */ ++ if (len > MAX_SHORT_DOC_LEN - 1) ++ len = MAX_SHORT_DOC_LEN - 1; ++ ++ for (i = 0; i < len; i++) ++ grub_putchar ((*builtin)->short_doc[i]); ++ ++ for (; i < MAX_SHORT_DOC_LEN; i++) ++ grub_putchar (' '); ++ ++ if (! left) ++ grub_putchar ('\n'); ++ ++ left = ! left; ++ } ++ ++ /* If the last entry was at the left column, no newline was printed ++ at the end. */ ++ if (! left) ++ grub_putchar ('\n'); ++ } ++ else ++ { ++ /* Invoked with one or more patterns. */ ++ do ++ { ++ struct builtin **builtin; ++ char *next_arg; ++ ++ /* Get the next argument. */ ++ next_arg = skip_to (0, arg); ++ ++ /* Terminate ARG. */ ++ nul_terminate (arg); ++ ++ for (builtin = builtin_table; *builtin; builtin++) ++ { ++ /* Skip this if this is only for the configuration file. */ ++ if (! ((*builtin)->flags & BUILTIN_CMDLINE)) ++ continue; ++ ++ if (substring (arg, (*builtin)->name) < 1) ++ { ++ char *doc = (*builtin)->long_doc; ++ ++ /* At first, print the name and the short doc. */ ++ grub_printf ("%s: %s\n", ++ (*builtin)->name, (*builtin)->short_doc); ++ ++ /* Print the long doc. */ ++ while (*doc) ++ { ++ int len = grub_strlen (doc); ++ int i; ++ ++ /* If LEN is too long, fold DOC. */ ++ if (len > MAX_LONG_DOC_LEN) ++ { ++ /* Fold this line at the position of a space. */ ++ for (len = MAX_LONG_DOC_LEN; len > 0; len--) ++ if (doc[len - 1] == ' ') ++ break; ++ } ++ ++ grub_printf (" "); ++ for (i = 0; i < len; i++) ++ grub_putchar (*doc++); ++ grub_putchar ('\n'); ++ } ++ } ++ } ++ ++ arg = next_arg; ++ } ++ while (*arg); ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_help = ++{ ++ "help", ++ help_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "help [--all] [PATTERN ...]", ++ "Display helpful information about builtin commands. Not all commands" ++ " aren't shown without the option `--all'." ++}; ++ ++ ++/* hiddenmenu */ ++static int ++hiddenmenu_func (char *arg, int flags) ++{ ++ show_menu = 0; ++ return 0; ++} ++ ++static struct builtin builtin_hiddenmenu = ++{ ++ "hiddenmenu", ++ hiddenmenu_func, ++ BUILTIN_MENU, ++#if 0 ++ "hiddenmenu", ++ "Hide the menu." ++#endif ++}; ++ ++ ++/* hide */ ++static int ++hide_func (char *arg, int flags) ++{ ++ if (! set_device (arg)) ++ return 1; ++ ++ if (! set_partition_hidden_flag (1)) ++ return 1; ++ ++ return 0; ++} ++ ++static struct builtin builtin_hide = ++{ ++ "hide", ++ hide_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "hide PARTITION", ++ "Hide PARTITION by setting the "hidden" bit in" ++ " its partition type code." ++}; ++ ++ ++#ifdef SUPPORT_NETBOOT ++/* ifconfig */ ++static int ++ifconfig_func (char *arg, int flags) ++{ ++ char *svr = 0, *ip = 0, *gw = 0, *sm = 0; ++ ++ if (! eth_probe ()) ++ { ++ grub_printf ("No ethernet card found.\n"); ++ errnum = ERR_DEV_VALUES; ++ return 1; ++ } ++ ++ while (*arg) ++ { ++ if (! grub_memcmp ("--server=", arg, sizeof ("--server=") - 1)) ++ svr = arg + sizeof("--server=") - 1; ++ else if (! grub_memcmp ("--address=", arg, sizeof ("--address=") - 1)) ++ ip = arg + sizeof ("--address=") - 1; ++ else if (! grub_memcmp ("--gateway=", arg, sizeof ("--gateway=") - 1)) ++ gw = arg + sizeof ("--gateway=") - 1; ++ else if (! grub_memcmp ("--mask=", arg, sizeof("--mask=") - 1)) ++ sm = arg + sizeof ("--mask=") - 1; ++ else ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ arg = skip_to (0, arg); ++ } ++ ++ if (! ifconfig (ip, sm, gw, svr)) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ print_network_configuration (); ++ return 0; ++} ++ ++static struct builtin builtin_ifconfig = ++{ ++ "ifconfig", ++ ifconfig_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "ifconfig [--address=IP] [--gateway=IP] [--mask=MASK] [--server=IP]", ++ "Configure the IP address, the netmask, the gateway and the server" ++ " address or print current network configuration." ++}; ++#endif /* SUPPORT_NETBOOT */ ++ ++ ++/* impsprobe */ ++static int ++impsprobe_func (char *arg, int flags) ++{ ++#ifdef GRUB_UTIL ++ /* In the grub shell, we cannot probe IMPS. */ ++ errnum = ERR_UNRECOGNIZED; ++ return 1; ++#else /* ! GRUB_UTIL */ ++ if (!imps_probe ()) ++ printf (" No MPS information found or probe failed\n"); ++ ++ return 0; ++#endif /* ! GRUB_UTIL */ ++} ++ ++static struct builtin builtin_impsprobe = ++{ ++ "impsprobe", ++ impsprobe_func, ++ BUILTIN_CMDLINE, ++ "impsprobe", ++ "Probe the Intel Multiprocessor Specification 1.1 or 1.4" ++ " configuration table and boot the various CPUs which are found into" ++ " a tight loop." ++}; ++ ++ ++/* initrd */ ++static int ++initrd_func (char *arg, int flags) ++{ ++ switch (kernel_type) ++ { ++ case KERNEL_TYPE_LINUX: ++ case KERNEL_TYPE_BIG_LINUX: ++ if (! load_initrd (arg)) ++ return 1; ++ break; ++ ++ default: ++ errnum = ERR_NEED_LX_KERNEL; ++ return 1; ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_initrd = ++{ ++ "initrd", ++ initrd_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "initrd FILE [ARG ...]", ++ "Load an initial ramdisk FILE for a Linux format boot image and set the" ++ " appropriate parameters in the Linux setup area in memory." ++}; ++ ++ ++/* install */ ++static int ++install_func (char *arg, int flags) ++{ ++ char *stage1_file, *dest_dev, *file, *addr; ++ char *stage1_buffer = (char *) RAW_ADDR (0x100000); ++ char *stage2_buffer = stage1_buffer + SECTOR_SIZE; ++ char *old_sect = stage2_buffer + SECTOR_SIZE; ++ char *stage2_first_buffer = old_sect + SECTOR_SIZE; ++ char *stage2_second_buffer = stage2_first_buffer + SECTOR_SIZE; ++ /* XXX: Probably SECTOR_SIZE is reasonable. */ ++ char *config_filename = stage2_second_buffer + SECTOR_SIZE; ++ char *dummy = config_filename + SECTOR_SIZE; ++ int new_drive = GRUB_INVALID_DRIVE; ++ int dest_drive, dest_partition, dest_sector; ++ int src_drive, src_partition, src_part_start; ++ int i; ++ struct geometry dest_geom, src_geom; ++ int saved_sector; ++ int stage2_first_sector, stage2_second_sector; ++ char *ptr; ++ int installaddr, installlist; ++ /* Point to the location of the name of a configuration file in Stage 2. */ ++ char *config_file_location; ++ /* If FILE is a Stage 1.5? */ ++ int is_stage1_5 = 0; ++ /* Must call grub_close? */ ++ int is_open = 0; ++ /* If LBA is forced? */ ++ int is_force_lba = 0; ++ /* Was the last sector full? */ ++ int last_length = SECTOR_SIZE; ++ ++#ifdef GRUB_UTIL ++ /* If the Stage 2 is in a partition mounted by an OS, this will store ++ the filename under the OS. */ ++ char *stage2_os_file = 0; ++#endif /* GRUB_UTIL */ ++ ++ auto void disk_read_savesect_func (int sector, int offset, int length); ++ auto void disk_read_blocklist_func (int sector, int offset, int length); ++ ++ /* Save the first sector of Stage2 in STAGE2_SECT. */ ++ auto void disk_read_savesect_func (int sector, int offset, int length) ++ { ++ if (debug) ++ printf ("[%d]", sector); ++ ++ /* ReiserFS has files which sometimes contain data not aligned ++ on sector boundaries. Returning an error is better than ++ silently failing. */ ++ if (offset != 0 || length != SECTOR_SIZE) ++ errnum = ERR_UNALIGNED; ++ ++ saved_sector = sector; ++ } ++ ++ /* Write SECTOR to INSTALLLIST, and update INSTALLADDR and ++ INSTALLSECT. */ ++ auto void disk_read_blocklist_func (int sector, int offset, int length) ++ { ++ if (debug) ++ printf("[%d]", sector); ++ ++ if (offset != 0 || last_length != SECTOR_SIZE) ++ { ++ /* We found a non-sector-aligned data block. */ ++ errnum = ERR_UNALIGNED; ++ return; ++ } ++ ++ last_length = length; ++ ++ if (*((unsigned long *) (installlist - 4)) ++ + *((unsigned short *) installlist) != sector ++ || installlist == (int) stage2_first_buffer + SECTOR_SIZE + 4) ++ { ++ installlist -= 8; ++ ++ if (*((unsigned long *) (installlist - 8))) ++ errnum = ERR_WONT_FIT; ++ else ++ { ++ *((unsigned short *) (installlist + 2)) = (installaddr >> 4); ++ *((unsigned long *) (installlist - 4)) = sector; ++ } ++ } ++ ++ *((unsigned short *) installlist) += 1; ++ installaddr += 512; ++ } ++ ++ /* First, check the GNU-style long option. */ ++ while (1) ++ { ++ if (grub_memcmp ("--force-lba", arg, sizeof ("--force-lba") - 1) == 0) ++ { ++ is_force_lba = 1; ++ arg = skip_to (0, arg); ++ } ++#ifdef GRUB_UTIL ++ else if (grub_memcmp ("--stage2=", arg, sizeof ("--stage2=") - 1) == 0) ++ { ++ stage2_os_file = arg + sizeof ("--stage2=") - 1; ++ arg = skip_to (0, arg); ++ nul_terminate (stage2_os_file); ++ } ++#endif /* GRUB_UTIL */ ++ else ++ break; ++ } ++ ++ stage1_file = arg; ++ dest_dev = skip_to (0, stage1_file); ++ if (*dest_dev == 'd') ++ { ++ new_drive = 0; ++ dest_dev = skip_to (0, dest_dev); ++ } ++ file = skip_to (0, dest_dev); ++ addr = skip_to (0, file); ++ ++ /* Get the installation address. */ ++ if (! safe_parse_maxint (&addr, &installaddr)) ++ { ++ /* ADDR is not specified. */ ++ installaddr = 0; ++ ptr = addr; ++ errnum = 0; ++ } ++ else ++ ptr = skip_to (0, addr); ++ ++#ifndef NO_DECOMPRESSION ++ /* Do not decompress Stage 1 or Stage 2. */ ++ no_decompression = 1; ++#endif ++ ++ /* Read Stage 1. */ ++ is_open = grub_open (stage1_file); ++ if (! is_open ++ || ! grub_read (stage1_buffer, SECTOR_SIZE) == SECTOR_SIZE) ++ goto fail; ++ ++ /* Read the old sector from DEST_DEV. */ ++ if (! set_device (dest_dev) ++ || ! open_partition () ++ || ! devread (0, 0, SECTOR_SIZE, old_sect)) ++ goto fail; ++ ++ /* Store the information for the destination device. */ ++ dest_drive = current_drive; ++ dest_partition = current_partition; ++ dest_geom = buf_geom; ++ dest_sector = part_start; ++ ++ /* Copy the possible DOS BPB, 59 bytes at byte offset 3. */ ++ grub_memmove (stage1_buffer + BOOTSEC_BPB_OFFSET, ++ old_sect + BOOTSEC_BPB_OFFSET, ++ BOOTSEC_BPB_LENGTH); ++ ++ /* If for a hard disk, copy the possible MBR/extended part table. */ ++ if (dest_drive & 0x80) ++ grub_memmove (stage1_buffer + STAGE1_WINDOWS_NT_MAGIC, ++ old_sect + STAGE1_WINDOWS_NT_MAGIC, ++ STAGE1_PARTEND - STAGE1_WINDOWS_NT_MAGIC); ++ ++ /* Check for the version and the signature of Stage 1. */ ++ if (*((short *)(stage1_buffer + STAGE1_VER_MAJ_OFFS)) != COMPAT_VERSION ++ || (*((unsigned short *) (stage1_buffer + BOOTSEC_SIG_OFFSET)) ++ != BOOTSEC_SIGNATURE)) ++ { ++ errnum = ERR_BAD_VERSION; ++ goto fail; ++ } ++ ++ /* This below is not true any longer. But should we leave this alone? */ ++ ++ /* If DEST_DRIVE is a floppy, Stage 2 must have the iteration probe ++ routine. */ ++ if (! (dest_drive & 0x80) ++ && (*((unsigned char *) (stage1_buffer + BOOTSEC_PART_OFFSET)) == 0x80 ++ || stage1_buffer[BOOTSEC_PART_OFFSET] == 0)) ++ { ++ errnum = ERR_BAD_VERSION; ++ goto fail; ++ } ++ ++ grub_close (); ++ ++ /* Open Stage 2. */ ++ is_open = grub_open (file); ++ if (! is_open) ++ goto fail; ++ ++ src_drive = current_drive; ++ src_partition = current_partition; ++ src_part_start = part_start; ++ src_geom = buf_geom; ++ ++ if (! new_drive) ++ new_drive = src_drive; ++ else if (src_drive != dest_drive) ++ grub_printf ("Warning: the option `d' was not used, but the Stage 1 will" ++ " be installed on a\ndifferent drive than the drive where" ++ " the Stage 2 resides.\n"); ++ ++ /* Set the boot drive. */ ++ *((unsigned char *) (stage1_buffer + STAGE1_BOOT_DRIVE)) = new_drive; ++ ++ /* Set the "force LBA" flag. */ ++ *((unsigned char *) (stage1_buffer + STAGE1_FORCE_LBA)) = is_force_lba; ++ ++ /* If DEST_DRIVE is a hard disk, enable the workaround, which is ++ for buggy BIOSes which don't pass boot drive correctly. Instead, ++ they pass 0x00 or 0x01 even when booted from 0x80. */ ++ if (dest_drive & BIOS_FLAG_FIXED_DISK) ++ /* Replace the jmp (2 bytes) with double nop's. */ ++ *((unsigned short *) (stage1_buffer + STAGE1_BOOT_DRIVE_CHECK)) ++ = 0x9090; ++ ++ /* Read the first sector of Stage 2. */ ++ disk_read_hook = disk_read_savesect_func; ++ if (grub_read (stage2_first_buffer, SECTOR_SIZE) != SECTOR_SIZE) ++ goto fail; ++ ++ stage2_first_sector = saved_sector; ++ ++ /* Read the second sector of Stage 2. */ ++ if (grub_read (stage2_second_buffer, SECTOR_SIZE) != SECTOR_SIZE) ++ goto fail; ++ ++ stage2_second_sector = saved_sector; ++ ++ /* Check for the version of Stage 2. */ ++ if (*((short *) (stage2_second_buffer + STAGE2_VER_MAJ_OFFS)) ++ != COMPAT_VERSION) ++ { ++ errnum = ERR_BAD_VERSION; ++ goto fail; ++ } ++ ++ /* Check for the Stage 2 id. */ ++ if (stage2_second_buffer[STAGE2_STAGE2_ID] != STAGE2_ID_STAGE2) ++ is_stage1_5 = 1; ++ ++ /* If INSTALLADDR is not specified explicitly in the command-line, ++ determine it by the Stage 2 id. */ ++ if (! installaddr) ++ { ++ if (! is_stage1_5) ++ /* Stage 2. */ ++ installaddr = 0x8000; ++ else ++ /* Stage 1.5. */ ++ installaddr = 0x2000; ++ } ++ ++ *((unsigned long *) (stage1_buffer + STAGE1_STAGE2_SECTOR)) ++ = stage2_first_sector; ++ *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_ADDRESS)) ++ = installaddr; ++ *((unsigned short *) (stage1_buffer + STAGE1_STAGE2_SEGMENT)) ++ = installaddr >> 4; ++ ++ i = (int) stage2_first_buffer + SECTOR_SIZE - 4; ++ while (*((unsigned long *) i)) ++ { ++ if (i < (int) stage2_first_buffer ++ || (*((int *) (i - 4)) & 0x80000000) ++ || *((unsigned short *) i) >= 0xA00 ++ || *((short *) (i + 2)) == 0) ++ { ++ errnum = ERR_BAD_VERSION; ++ goto fail; ++ } ++ ++ *((int *) i) = 0; ++ *((int *) (i - 4)) = 0; ++ i -= 8; ++ } ++ ++ installlist = (int) stage2_first_buffer + SECTOR_SIZE + 4; ++ installaddr += SECTOR_SIZE; ++ ++ /* Read the whole of Stage2 except for the first sector. */ ++ grub_seek (SECTOR_SIZE); ++ ++ disk_read_hook = disk_read_blocklist_func; ++ if (! grub_read (dummy, -1)) ++ goto fail; ++ ++ disk_read_hook = 0; ++ ++ /* Find a string for the configuration filename. */ ++ config_file_location = stage2_second_buffer + STAGE2_VER_STR_OFFS; ++ while (*(config_file_location++)) ++ ; ++ ++ /* Set the "force LBA" flag for Stage2. */ ++ *((unsigned char *) (stage2_second_buffer + STAGE2_FORCE_LBA)) ++ = is_force_lba; ++ ++ if (*ptr == 'p') ++ { ++ *((long *) (stage2_second_buffer + STAGE2_INSTALLPART)) ++ = src_partition; ++ if (is_stage1_5) ++ { ++ /* Reset the device information in FILE if it is a Stage 1.5. */ ++ unsigned long device = 0xFFFFFFFF; ++ ++ grub_memmove (config_file_location, (char *) &device, ++ sizeof (device)); ++ } ++ ++ ptr = skip_to (0, ptr); ++ } ++ ++ if (*ptr) ++ { ++ grub_strcpy (config_filename, ptr); ++ nul_terminate (config_filename); ++ ++ if (! is_stage1_5) ++ /* If it is a Stage 2, just copy PTR to CONFIG_FILE_LOCATION. */ ++ grub_strcpy (config_file_location, ptr); ++ else ++ { ++ char *real_config; ++ unsigned long device; ++ ++ /* Translate the external device syntax to the internal device ++ syntax. */ ++ if (! (real_config = set_device (ptr))) ++ { ++ /* The Stage 2 PTR does not contain the device name, so ++ use the root device instead. */ ++ errnum = ERR_NONE; ++ current_drive = saved_drive; ++ current_partition = saved_partition; ++ real_config = ptr; ++ } ++ ++ if (current_drive == src_drive) ++ { ++ /* If the drive where the Stage 2 resides is the same as ++ the one where the Stage 1.5 resides, do not embed the ++ drive number. */ ++ current_drive = GRUB_INVALID_DRIVE; ++ } ++ ++ device = (current_drive << 24) | current_partition; ++ grub_memmove (config_file_location, (char *) &device, ++ sizeof (device)); ++ grub_strcpy (config_file_location + sizeof (device), ++ real_config); ++ } ++ ++ /* If a Stage 1.5 is used, then we need to modify the Stage2. */ ++ if (is_stage1_5) ++ { ++ char *real_config_filename = skip_to (0, ptr); ++ ++ is_open = grub_open (config_filename); ++ if (! is_open) ++ goto fail; ++ ++ /* Skip the first sector. */ ++ grub_seek (SECTOR_SIZE); ++ ++ disk_read_hook = disk_read_savesect_func; ++ if (grub_read (stage2_buffer, SECTOR_SIZE) != SECTOR_SIZE) ++ goto fail; ++ ++ disk_read_hook = 0; ++ grub_close (); ++ is_open = 0; ++ ++ /* Sanity check. */ ++ if (*(stage2_buffer + STAGE2_STAGE2_ID) != STAGE2_ID_STAGE2) ++ { ++ errnum = ERR_BAD_VERSION; ++ goto fail; ++ } ++ ++ /* Set the "force LBA" flag for Stage2. */ ++ *(stage2_buffer + STAGE2_FORCE_LBA) = is_force_lba; ++ ++ /* If REAL_CONFIG_FILENAME is specified, copy it to the Stage2. */ ++ if (*real_config_filename) ++ { ++ /* Specified */ ++ char *location; ++ ++ /* Find a string for the configuration filename. */ ++ location = stage2_buffer + STAGE2_VER_STR_OFFS; ++ while (*(location++)) ++ ; ++ ++ /* Copy the name. */ ++ grub_strcpy (location, real_config_filename); ++ } ++ ++ /* Write it to the disk. */ ++ buf_track = -1; ++ ++#ifdef GRUB_UTIL ++ /* In the grub shell, access the Stage 2 via the OS filesystem ++ service, if possible. */ ++ if (stage2_os_file) ++ { ++ FILE *fp; ++ ++ fp = fopen (stage2_os_file, "r+"); ++ if (! fp) ++ { ++ errnum = ERR_FILE_NOT_FOUND; ++ goto fail; ++ } ++ ++ if (fseek (fp, SECTOR_SIZE, SEEK_SET) != 0) ++ { ++ fclose (fp); ++ errnum = ERR_BAD_VERSION; ++ goto fail; ++ } ++ ++ if (fwrite (stage2_buffer, 1, SECTOR_SIZE, fp) ++ != SECTOR_SIZE) ++ { ++ fclose (fp); ++ errnum = ERR_WRITE; ++ goto fail; ++ } ++ ++ fclose (fp); ++ } ++ else ++#endif /* GRUB_UTIL */ ++ { ++ if (! devwrite (saved_sector - part_start, 1, stage2_buffer)) ++ goto fail; ++ } ++ } ++ } ++ ++ /* Clear the cache. */ ++ buf_track = -1; ++ ++ /* Write the modified sectors of Stage2 to the disk. */ ++#ifdef GRUB_UTIL ++ if (! is_stage1_5 && stage2_os_file) ++ { ++ FILE *fp; ++ ++ fp = fopen (stage2_os_file, "r+"); ++ if (! fp) ++ { ++ errnum = ERR_FILE_NOT_FOUND; ++ goto fail; ++ } ++ ++ if (fwrite (stage2_first_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) ++ { ++ fclose (fp); ++ errnum = ERR_WRITE; ++ goto fail; ++ } ++ ++ if (fwrite (stage2_second_buffer, 1, SECTOR_SIZE, fp) != SECTOR_SIZE) ++ { ++ fclose (fp); ++ errnum = ERR_WRITE; ++ goto fail; ++ } ++ ++ fclose (fp); ++ } ++ else ++#endif /* GRUB_UTIL */ ++ { ++ /* The first. */ ++ current_drive = src_drive; ++ current_partition = src_partition; ++ ++ if (! open_partition ()) ++ goto fail; ++ ++ if (! devwrite (stage2_first_sector - src_part_start, 1, ++ stage2_first_buffer)) ++ goto fail; ++ ++ if (! devwrite (stage2_second_sector - src_part_start, 1, ++ stage2_second_buffer)) ++ goto fail; ++ } ++ ++ /* Write the modified sector of Stage 1 to the disk. */ ++ current_drive = dest_drive; ++ current_partition = dest_partition; ++ if (! open_partition ()) ++ goto fail; ++ ++ devwrite (0, 1, stage1_buffer); ++ ++ fail: ++ if (is_open) ++ grub_close (); ++ ++ disk_read_hook = 0; ++ ++#ifndef NO_DECOMPRESSION ++ no_decompression = 0; ++#endif ++ ++ return errnum; ++} ++ ++static struct builtin builtin_install = ++{ ++ "install", ++ install_func, ++ BUILTIN_CMDLINE, ++ "install [--stage2=STAGE2_FILE] [--force-lba] STAGE1 [d] DEVICE STAGE2 [ADDR] [p] [CONFIG_FILE] [REAL_CONFIG_FILE]", ++ "Install STAGE1 on DEVICE, and install a blocklist for loading STAGE2" ++ " as a Stage 2. If the option `d' is present, the Stage 1 will always" ++ " look for the disk where STAGE2 was installed, rather than using" ++ " the booting drive. The Stage 2 will be loaded at address ADDR, which" ++ " will be determined automatically if you don't specify it. If" ++ " the option `p' or CONFIG_FILE is present, then the first block" ++ " of Stage 2 is patched with new values of the partition and name" ++ " of the configuration file used by the true Stage 2 (for a Stage 1.5," ++ " this is the name of the true Stage 2) at boot time. If STAGE2 is a Stage" ++ " 1.5 and REAL_CONFIG_FILE is present, then the Stage 2 CONFIG_FILE is" ++ " patched with the configuration filename REAL_CONFIG_FILE." ++ " If the option `--force-lba' is specified, disable some sanity checks" ++ " for LBA mode. If the option `--stage2' is specified, rewrite the Stage" ++ " 2 via your OS's filesystem instead of the raw device." ++}; ++ ++ ++/* ioprobe */ ++static int ++ioprobe_func (char *arg, int flags) ++{ ++#ifdef GRUB_UTIL ++ ++ errnum = ERR_UNRECOGNIZED; ++ return 1; ++ ++#else /* ! GRUB_UTIL */ ++ ++ unsigned short *port; ++ ++ /* Get the drive number. */ ++ set_device (arg); ++ if (errnum) ++ return 1; ++ ++ /* Clean out IO_MAP. */ ++ grub_memset ((char *) io_map, 0, IO_MAP_SIZE * sizeof (unsigned short)); ++ ++ /* Track the int13 handler. */ ++ track_int13 (current_drive); ++ ++ /* Print out the result. */ ++ for (port = io_map; *port != 0; port++) ++ grub_printf (" 0x%x", (unsigned int) *port); ++ ++ return 0; ++ ++#endif /* ! GRUB_UTIL */ ++} ++ ++static struct builtin builtin_ioprobe = ++{ ++ "ioprobe", ++ ioprobe_func, ++ BUILTIN_CMDLINE, ++ "ioprobe DRIVE", ++ "Probe I/O ports used for the drive DRIVE." ++}; ++ ++ ++/* kernel */ ++static int ++kernel_func (char *arg, int flags) ++{ ++ int len; ++ kernel_t suggested_type = KERNEL_TYPE_NONE; ++ unsigned long load_flags = 0; ++ ++#ifndef AUTO_LINUX_MEM_OPT ++ load_flags |= KERNEL_LOAD_NO_MEM_OPTION; ++#endif ++ ++ /* Deal with GNU-style long options. */ ++ while (1) ++ { ++ /* If the option `--type=TYPE' is specified, convert the string to ++ a kernel type. */ ++ if (grub_memcmp (arg, "--type=", 7) == 0) ++ { ++ arg += 7; ++ ++ if (grub_memcmp (arg, "netbsd", 6) == 0) ++ suggested_type = KERNEL_TYPE_NETBSD; ++ else if (grub_memcmp (arg, "freebsd", 7) == 0) ++ suggested_type = KERNEL_TYPE_FREEBSD; ++ else if (grub_memcmp (arg, "openbsd", 7) == 0) ++ /* XXX: For now, OpenBSD is identical to NetBSD, from GRUB's ++ point of view. */ ++ suggested_type = KERNEL_TYPE_NETBSD; ++ else if (grub_memcmp (arg, "linux", 5) == 0) ++ suggested_type = KERNEL_TYPE_LINUX; ++ else if (grub_memcmp (arg, "biglinux", 8) == 0) ++ suggested_type = KERNEL_TYPE_BIG_LINUX; ++ else if (grub_memcmp (arg, "multiboot", 9) == 0) ++ suggested_type = KERNEL_TYPE_MULTIBOOT; ++ else ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ } ++ /* If the `--no-mem-option' is specified, don't pass a Linux's mem ++ option automatically. If the kernel is another type, this flag ++ has no effect. */ ++ else if (grub_memcmp (arg, "--no-mem-option", 15) == 0) ++ load_flags |= KERNEL_LOAD_NO_MEM_OPTION; ++ else ++ break; ++ ++ /* Try the next. */ ++ arg = skip_to (0, arg); ++ } ++ ++ len = grub_strlen (arg); ++ ++ /* Reset MB_CMDLINE. */ ++ mb_cmdline = (char *) MB_CMDLINE_BUF; ++ if (len + 1 > MB_CMDLINE_BUFLEN) ++ { ++ errnum = ERR_WONT_FIT; ++ return 1; ++ } ++ ++ /* Copy the command-line to MB_CMDLINE. */ ++ grub_memmove (mb_cmdline, arg, len + 1); ++ kernel_type = load_image (arg, mb_cmdline, suggested_type, load_flags); ++ if (kernel_type == KERNEL_TYPE_NONE) ++ return 1; ++ ++ mb_cmdline += len + 1; ++ return 0; ++} ++ ++static struct builtin builtin_kernel = ++{ ++ "kernel", ++ kernel_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "kernel [--no-mem-option] [--type=TYPE] FILE [ARG ...]", ++ "Attempt to load the primary boot image from FILE. The rest of the" ++ " line is passed verbatim as the "kernel command line". Any modules" ++ " must be reloaded after using this command. The option --type is used" ++ " to suggest what type of kernel to be loaded. TYPE must be either of" ++ " "netbsd", "freebsd", "openbsd", "linux", "biglinux" and" ++ " "multiboot". The option --no-mem-option tells GRUB not to pass a" ++ " Linux's mem option automatically." ++}; ++ ++ ++/* lock */ ++static int ++lock_func (char *arg, int flags) ++{ ++ if (! auth && password) ++ { ++ errnum = ERR_PRIVILEGED; ++ return 1; ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_lock = ++{ ++ "lock", ++ lock_func, ++ BUILTIN_CMDLINE, ++ "lock", ++ "Break a command execution unless the user is authenticated." ++}; ++ ++ ++/* makeactive */ ++static int ++makeactive_func (char *arg, int flags) ++{ ++ if (! make_saved_active ()) ++ return 1; ++ ++ return 0; ++} ++ ++static struct builtin builtin_makeactive = ++{ ++ "makeactive", ++ makeactive_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "makeactive", ++ "Set the active partition on the root disk to GRUB's root device." ++ " This command is limited to _primary_ PC partitions on a hard disk." ++}; ++ ++ ++/* map */ ++/* Map FROM_DRIVE to TO_DRIVE. */ ++static int ++map_func (char *arg, int flags) ++{ ++ char *to_drive; ++ char *from_drive; ++ unsigned long to, from; ++ int i; ++ ++ to_drive = arg; ++ from_drive = skip_to (0, arg); ++ ++ /* Get the drive number for TO_DRIVE. */ ++ set_device (to_drive); ++ if (errnum) ++ return 1; ++ to = current_drive; ++ ++ /* Get the drive number for FROM_DRIVE. */ ++ set_device (from_drive); ++ if (errnum) ++ return 1; ++ from = current_drive; ++ ++ /* Search for an empty slot in BIOS_DRIVE_MAP. */ ++ for (i = 0; i < DRIVE_MAP_SIZE; i++) ++ { ++ /* Perhaps the user wants to override the map. */ ++ if ((bios_drive_map[i] & 0xff) == from) ++ break; ++ ++ if (! bios_drive_map[i]) ++ break; ++ } ++ ++ if (i == DRIVE_MAP_SIZE) ++ { ++ errnum = ERR_WONT_FIT; ++ return 1; ++ } ++ ++ if (to == from) ++ /* If TO is equal to FROM, delete the entry. */ ++ grub_memmove ((char *) &bios_drive_map[i], (char *) &bios_drive_map[i + 1], ++ sizeof (unsigned short) * (DRIVE_MAP_SIZE - i)); ++ else ++ bios_drive_map[i] = from | (to << 8); ++ ++ return 0; ++} ++ ++static struct builtin builtin_map = ++{ ++ "map", ++ map_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "map TO_DRIVE FROM_DRIVE", ++ "Map the drive FROM_DRIVE to the drive TO_DRIVE. This is necessary" ++ " when you chain-load some operating systems, such as DOS, if such an" ++ " OS resides at a non-first drive." ++}; ++ ++ ++#ifdef USE_MD5_PASSWORDS ++/* md5crypt */ ++static int ++md5crypt_func (char *arg, int flags) ++{ ++ char crypted[36]; ++ char key[32]; ++ unsigned int seed; ++ int i; ++ const char *const seedchars = ++ "./0123456789ABCDEFGHIJKLMNOPQRST" ++ "UVWXYZabcdefghijklmnopqrstuvwxyz"; ++ ++ /* First create a salt. */ ++ ++ /* The magical prefix. */ ++ grub_memset (crypted, 0, sizeof (crypted)); ++ grub_memmove (crypted, "$1$", 3); ++ ++ /* Create the length of a salt. */ ++ seed = currticks (); ++ ++ /* Generate a salt. */ ++ for (i = 0; i < 8 && seed; i++) ++ { ++ /* FIXME: This should be more random. */ ++ crypted[3 + i] = seedchars[seed & 0x3f]; ++ seed >>= 6; ++ } ++ ++ /* A salt must be terminated with `$', if it is less than 8 chars. */ ++ crypted[3 + i] = '$'; ++ ++#ifdef DEBUG_MD5CRYPT ++ grub_printf ("salt = %s\n", crypted); ++#endif ++ ++ /* Get a password. */ ++ grub_memset (key, 0, sizeof (key)); ++ get_cmdline ("Password: ", key, sizeof (key) - 1, '*', 0); ++ ++ /* Crypt the key. */ ++ make_md5_password (key, crypted); ++ ++ grub_printf ("Encrypted: %s\n", crypted); ++ return 0; ++} ++ ++static struct builtin builtin_md5crypt = ++{ ++ "md5crypt", ++ md5crypt_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "md5crypt", ++ "Generate a password in MD5 format." ++}; ++#endif /* USE_MD5_PASSWORDS */ ++ ++ ++/* module */ ++static int ++module_func (char *arg, int flags) ++{ ++ int len = grub_strlen (arg); ++ ++ switch (kernel_type) ++ { ++ case KERNEL_TYPE_MULTIBOOT: ++ if (mb_cmdline + len + 1 > (char *) MB_CMDLINE_BUF + MB_CMDLINE_BUFLEN) ++ { ++ errnum = ERR_WONT_FIT; ++ return 1; ++ } ++ grub_memmove (mb_cmdline, arg, len + 1); ++ if (! load_module (arg, mb_cmdline)) ++ return 1; ++ mb_cmdline += len + 1; ++ break; ++ ++ case KERNEL_TYPE_LINUX: ++ case KERNEL_TYPE_BIG_LINUX: ++ if (! load_initrd (arg)) ++ return 1; ++ break; ++ ++ default: ++ errnum = ERR_NEED_MB_KERNEL; ++ return 1; ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_module = ++{ ++ "module", ++ module_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "module FILE [ARG ...]", ++ "Load a boot module FILE for a Multiboot format boot image (no" ++ " interpretation of the file contents is made, so users of this" ++ " command must know what the kernel in question expects). The" ++ " rest of the line is passed as the "module command line", like" ++ " the `kernel' command." ++}; ++ ++ ++/* modulenounzip */ ++static int ++modulenounzip_func (char *arg, int flags) ++{ ++ int ret; ++ ++#ifndef NO_DECOMPRESSION ++ no_decompression = 1; ++#endif ++ ++ ret = module_func (arg, flags); ++ ++#ifndef NO_DECOMPRESSION ++ no_decompression = 0; ++#endif ++ ++ return ret; ++} ++ ++static struct builtin builtin_modulenounzip = ++{ ++ "modulenounzip", ++ modulenounzip_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "modulenounzip FILE [ARG ...]", ++ "The same as `module', except that automatic decompression is" ++ " disabled." ++}; ++ ++ ++/* pager [on|off] */ ++static int ++pager_func (char *arg, int flags) ++{ ++ /* If ARG is empty, toggle the flag. */ ++ if (! *arg) ++ use_pager = ! use_pager; ++ else if (grub_memcmp (arg, "on", 2) == 0) ++ use_pager = 1; ++ else if (grub_memcmp (arg, "off", 3) == 0) ++ use_pager = 0; ++ else ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ grub_printf (" Internal pager is now %s\n", use_pager ? "on" : "off"); ++ return 0; ++} ++ ++static struct builtin builtin_pager = ++{ ++ "pager", ++ pager_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "pager [FLAG]", ++ "Toggle pager mode with no argument. If FLAG is given and its value" ++ " is `on', turn on the mode. If FLAG is `off', turn off the mode." ++}; ++ ++ ++/* partnew PART TYPE START LEN */ ++static int ++partnew_func (char *arg, int flags) ++{ ++ int new_type, new_start, new_len; ++ int start_cl, start_ch, start_dh; ++ int end_cl, end_ch, end_dh; ++ int entry; ++ char mbr[512]; ++ ++ /* Convert a LBA address to a CHS address in the INT 13 format. */ ++ auto void lba_to_chs (int lba, int *cl, int *ch, int *dh); ++ void lba_to_chs (int lba, int *cl, int *ch, int *dh) ++ { ++ int cylinder, head, sector; ++ ++ sector = lba % buf_geom.sectors + 1; ++ head = (lba / buf_geom.sectors) % buf_geom.heads; ++ cylinder = lba / (buf_geom.sectors * buf_geom.heads); ++ ++ if (cylinder >= buf_geom.cylinders) ++ cylinder = buf_geom.cylinders - 1; ++ ++ *cl = sector | ((cylinder & 0x300) >> 2); ++ *ch = cylinder & 0xFF; ++ *dh = head; ++ } ++ ++ /* Get the drive and the partition. */ ++ if (! set_device (arg)) ++ return 1; ++ ++ /* The drive must be a hard disk. */ ++ if (! (current_drive & 0x80)) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ /* The partition must a primary partition. */ ++ if ((current_partition >> 16) > 3 ++ || (current_partition & 0xFFFF) != 0xFFFF) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ entry = current_partition >> 16; ++ ++ /* Get the new partition type. */ ++ arg = skip_to (0, arg); ++ if (! safe_parse_maxint (&arg, &new_type)) ++ return 1; ++ ++ /* The partition type is unsigned char. */ ++ if (new_type > 0xFF) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ /* Get the new partition start. */ ++ arg = skip_to (0, arg); ++ if (! safe_parse_maxint (&arg, &new_start)) ++ return 1; ++ ++ /* Get the new partition length. */ ++ arg = skip_to (0, arg); ++ if (! safe_parse_maxint (&arg, &new_len)) ++ return 1; ++ ++ /* Read the MBR. */ ++ if (! rawread (current_drive, 0, 0, SECTOR_SIZE, mbr)) ++ return 1; ++ ++ /* Check if the new partition will fit in the disk. */ ++ if (new_start + new_len > buf_geom.total_sectors) ++ { ++ errnum = ERR_GEOM; ++ return 1; ++ } ++ ++ /* Store the partition information in the MBR. */ ++ lba_to_chs (new_start, &start_cl, &start_ch, &start_dh); ++ lba_to_chs (new_start + new_len - 1, &end_cl, &end_ch, &end_dh); ++ ++ PC_SLICE_FLAG (mbr, entry) = 0; ++ PC_SLICE_HEAD (mbr, entry) = start_dh; ++ PC_SLICE_SEC (mbr, entry) = start_cl; ++ PC_SLICE_CYL (mbr, entry) = start_ch; ++ PC_SLICE_TYPE (mbr, entry) = new_type; ++ PC_SLICE_EHEAD (mbr, entry) = end_dh; ++ PC_SLICE_ESEC (mbr, entry) = end_cl; ++ PC_SLICE_ECYL (mbr, entry) = end_ch; ++ PC_SLICE_START (mbr, entry) = new_start; ++ PC_SLICE_LENGTH (mbr, entry) = new_len; ++ ++ /* Make sure that the MBR has a valid signature. */ ++ PC_MBR_SIG (mbr) = PC_MBR_SIGNATURE; ++ ++ /* Write back the MBR to the disk. */ ++ buf_track = -1; ++ if (! rawwrite (current_drive, 0, mbr)) ++ return 1; ++ ++ return 0; ++} ++ ++static struct builtin builtin_partnew = ++{ ++ "partnew", ++ partnew_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "partnew PART TYPE START LEN", ++ "Create a primary partition at the starting address START with the" ++ " length LEN, with the type TYPE. START and LEN are in sector units." ++}; ++ ++ ++/* parttype PART TYPE */ ++static int ++parttype_func (char *arg, int flags) ++{ ++ int new_type; ++ unsigned long part = 0xFFFFFF; ++ unsigned long start, len, offset, ext_offset; ++ int entry, type; ++ char mbr[512]; ++ ++ /* Get the drive and the partition. */ ++ if (! set_device (arg)) ++ return 1; ++ ++ /* The drive must be a hard disk. */ ++ if (! (current_drive & 0x80)) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ /* The partition must be a PC slice. */ ++ if ((current_partition >> 16) == 0xFF ++ || (current_partition & 0xFFFF) != 0xFFFF) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ /* Get the new partition type. */ ++ arg = skip_to (0, arg); ++ if (! safe_parse_maxint (&arg, &new_type)) ++ return 1; ++ ++ /* The partition type is unsigned char. */ ++ if (new_type > 0xFF) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ /* Look for the partition. */ ++ while (next_partition (current_drive, 0xFFFFFF, &part, &type, ++ &start, &len, &offset, &entry, ++ &ext_offset, mbr)) ++ { ++ if (part == current_partition) ++ { ++ /* Found. */ ++ ++ /* Set the type to NEW_TYPE. */ ++ PC_SLICE_TYPE (mbr, entry) = new_type; ++ ++ /* Write back the MBR to the disk. */ ++ buf_track = -1; ++ if (! rawwrite (current_drive, offset, mbr)) ++ return 1; ++ ++ /* Succeed. */ ++ return 0; ++ } ++ } ++ ++ /* The partition was not found. ERRNUM was set by next_partition. */ ++ return 1; ++} ++ ++static struct builtin builtin_parttype = ++{ ++ "parttype", ++ parttype_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "parttype PART TYPE", ++ "Change the type of the partition PART to TYPE." ++}; ++ ++ ++/* password */ ++static int ++password_func (char *arg, int flags) ++{ ++ int len; ++ password_t type = PASSWORD_PLAIN; ++ ++#ifdef USE_MD5_PASSWORDS ++ if (grub_memcmp (arg, "--md5", 5) == 0) ++ { ++ type = PASSWORD_MD5; ++ arg = skip_to (0, arg); ++ } ++#endif ++ if (grub_memcmp (arg, "--", 2) == 0) ++ { ++ type = PASSWORD_UNSUPPORTED; ++ arg = skip_to (0, arg); ++ } ++ ++ if ((flags & (BUILTIN_CMDLINE | BUILTIN_SCRIPT)) != 0) ++ { ++ /* Do password check! */ ++ char entered[32]; ++ ++ /* Wipe out any previously entered password */ ++ entered[0] = 0; ++ get_cmdline ("Password: ", entered, 31, '*', 0); ++ ++ nul_terminate (arg); ++ if (check_password (entered, arg, type) != 0) ++ { ++ errnum = ERR_PRIVILEGED; ++ return 1; ++ } ++ } ++ else ++ { ++ len = grub_strlen (arg); ++ ++ /* PASSWORD NUL NUL ... */ ++ if (len + 2 > PASSWORD_BUFLEN) ++ { ++ errnum = ERR_WONT_FIT; ++ return 1; ++ } ++ ++ /* Copy the password and clear the rest of the buffer. */ ++ password = (char *) PASSWORD_BUF; ++ grub_memmove (password, arg, len); ++ grub_memset (password + len, 0, PASSWORD_BUFLEN - len); ++ password_type = type; ++ } ++ return 0; ++} ++ ++static struct builtin builtin_password = ++{ ++ "password", ++ password_func, ++ BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_NO_ECHO, ++ "password [--md5] PASSWD [FILE]", ++ "If used in the first section of a menu file, disable all" ++ " interactive editing control (menu entry editor and" ++ " command line). If the password PASSWD is entered, it loads the" ++ " FILE as a new config file and restarts the GRUB Stage 2. If you" ++ " omit the argument FILE, then GRUB just unlocks privileged" ++ " instructions. You can also use it in the script section, in" ++ " which case it will ask for the password, before continueing." ++ " The option --md5 tells GRUB that PASSWD is encrypted with" ++ " md5crypt." ++}; ++ ++ ++/* pause */ ++static int ++pause_func (char *arg, int flags) ++{ ++ printf("%s\n", arg); ++ ++ /* If ESC is returned, then abort this entry. */ ++ if (ASCII_CHAR (getkey ()) == 27) ++ return 1; ++ ++ return 0; ++} ++ ++static struct builtin builtin_pause = ++{ ++ "pause", ++ pause_func, ++ BUILTIN_CMDLINE | BUILTIN_NO_ECHO, ++ "pause [MESSAGE ...]", ++ "Print MESSAGE, then wait until a key is pressed." ++}; ++ ++ ++#ifdef GRUB_UTIL ++/* quit */ ++static int ++quit_func (char *arg, int flags) ++{ ++ stop (); ++ ++ /* Never reach here. */ ++ return 0; ++} ++ ++static struct builtin builtin_quit = ++{ ++ "quit", ++ quit_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "quit", ++ "Exit from the GRUB shell." ++}; ++#endif /* GRUB_UTIL */ ++ ++ ++#ifdef SUPPORT_NETBOOT ++/* rarp */ ++static int ++rarp_func (char *arg, int flags) ++{ ++ if (! rarp ()) ++ { ++ if (errnum == ERR_NONE) ++ errnum = ERR_DEV_VALUES; ++ ++ return 1; ++ } ++ ++ /* Notify the configuration. */ ++ print_network_configuration (); ++ return 0; ++} ++ ++static struct builtin builtin_rarp = ++{ ++ "rarp", ++ rarp_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "rarp", ++ "Initialize a network device via RARP." ++}; ++#endif /* SUPPORT_NETBOOT */ ++ ++ ++static int ++read_func (char *arg, int flags) ++{ ++ int addr; ++ ++ if (! safe_parse_maxint (&arg, &addr)) ++ return 1; ++ ++ grub_printf ("Address 0x%x: Value 0x%x\n", ++ addr, *((unsigned *) RAW_ADDR (addr))); ++ return 0; ++} ++ ++static struct builtin builtin_read = ++{ ++ "read", ++ read_func, ++ BUILTIN_CMDLINE, ++ "read ADDR", ++ "Read a 32-bit value from memory at address ADDR and" ++ " display it in hex format." ++}; ++ ++ ++/* reboot */ ++static int ++reboot_func (char *arg, int flags) ++{ ++ grub_reboot (); ++ ++ /* Never reach here. */ ++ return 1; ++} ++ ++static struct builtin builtin_reboot = ++{ ++ "reboot", ++ reboot_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "reboot", ++ "Reboot your system." ++}; ++ ++ ++/* Print the root device information. */ ++static void ++print_root_device (void) ++{ ++ if (saved_drive == NETWORK_DRIVE) ++ { ++ /* Network drive. */ ++ grub_printf (" (nd):"); ++ } ++ else if (saved_drive & 0x80) ++ { ++ /* Hard disk drive. */ ++ grub_printf (" (hd%d", saved_drive - 0x80); ++ ++ if ((saved_partition & 0xFF0000) != 0xFF0000) ++ grub_printf (",%d", saved_partition >> 16); ++ ++ if ((saved_partition & 0x00FF00) != 0x00FF00) ++ grub_printf (",%c", ((saved_partition >> 8) & 0xFF) + 'a'); ++ ++ grub_printf ("):"); ++ } ++ else ++ { ++ /* Floppy disk drive. */ ++ grub_printf (" (fd%d):", saved_drive); ++ } ++ ++ /* Print the filesystem information. */ ++ current_partition = saved_partition; ++ current_drive = saved_drive; ++ print_fsys_type (); ++} ++ ++static int ++real_root_func (char *arg, int attempt_mount) ++{ ++ int hdbias = 0; ++ char *biasptr; ++ char *next; ++ ++ /* If ARG is empty, just print the current root device. */ ++ if (! *arg) ++ { ++ print_root_device (); ++ return 0; ++ } ++ ++ /* Call set_device to get the drive and the partition in ARG. */ ++ next = set_device (arg); ++ if (! next) ++ return 1; ++ ++ /* Ignore ERR_FSYS_MOUNT. */ ++ if (attempt_mount) ++ { ++ if (! open_device () && errnum != ERR_FSYS_MOUNT) ++ return 1; ++ } ++ else ++ { ++ /* This is necessary, because the location of a partition table ++ must be set appropriately. */ ++ if (open_partition ()) ++ { ++ set_bootdev (0); ++ if (errnum) ++ return 1; ++ } ++ } ++ ++ /* Clear ERRNUM. */ ++ errnum = 0; ++ saved_partition = current_partition; ++ saved_drive = current_drive; ++ ++ if (attempt_mount) ++ { ++ /* BSD and chainloading evil hacks !! */ ++ biasptr = skip_to (0, next); ++ safe_parse_maxint (&biasptr, &hdbias); ++ errnum = 0; ++ bootdev = set_bootdev (hdbias); ++ if (errnum) ++ return 1; ++ ++ /* Print the type of the filesystem. */ ++ print_fsys_type (); ++ } ++ ++ return 0; ++} ++ ++static int ++root_func (char *arg, int flags) ++{ ++ return real_root_func (arg, 1); ++} ++ ++static struct builtin builtin_root = ++{ ++ "root", ++ root_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "root [DEVICE [HDBIAS]]", ++ "Set the current "root device" to the device DEVICE, then" ++ " attempt to mount it to get the partition size (for passing the" ++ " partition descriptor in `ES:ESI', used by some chain-loaded" ++ " bootloaders), the BSD drive-type (for booting BSD kernels using" ++ " their native boot format), and correctly determine " ++ " the PC partition where a BSD sub-partition is located. The" ++ " optional HDBIAS parameter is a number to tell a BSD kernel" ++ " how many BIOS drive numbers are on controllers before the current" ++ " one. For example, if there is an IDE disk and a SCSI disk, and your" ++ " FreeBSD root partition is on the SCSI disk, then use a `1' for HDBIAS." ++}; ++ ++ ++/* rootnoverify */ ++static int ++rootnoverify_func (char *arg, int flags) ++{ ++ return real_root_func (arg, 0); ++} ++ ++static struct builtin builtin_rootnoverify = ++{ ++ "rootnoverify", ++ rootnoverify_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "rootnoverify [DEVICE [HDBIAS]]", ++ "Similar to `root', but don't attempt to mount the partition. This" ++ " is useful for when an OS is outside of the area of the disk that" ++ " GRUB can read, but setting the correct root device is still" ++ " desired. Note that the items mentioned in `root' which" ++ " derived from attempting the mount will NOT work correctly." ++}; ++ ++ ++/* savedefault */ ++static int ++savedefault_func (char *arg, int flags) ++{ ++#if !defined(SUPPORT_DISKLESS) && !defined(GRUB_UTIL) ++ unsigned long tmp_drive = saved_drive; ++ unsigned long tmp_partition = saved_partition; ++ char *default_file = (char *) DEFAULT_FILE_BUF; ++ char buf[10]; ++ char sect[SECTOR_SIZE]; ++ int entryno; ++ int sector_count = 0; ++ int saved_sectors[2]; ++ int saved_offsets[2]; ++ int saved_lengths[2]; ++ ++ /* Save sector information about at most two sectors. */ ++ auto void disk_read_savesect_func (int sector, int offset, int length); ++ void disk_read_savesect_func (int sector, int offset, int length) ++ { ++ if (sector_count < 2) ++ { ++ saved_sectors[sector_count] = sector; ++ saved_offsets[sector_count] = offset; ++ saved_lengths[sector_count] = length; ++ } ++ sector_count++; ++ } ++ ++ /* This command is only useful when you boot an entry from the menu ++ interface. */ ++ if (! (flags & BUILTIN_SCRIPT)) ++ { ++ errnum = ERR_UNRECOGNIZED; ++ return 1; ++ } ++ ++ /* Determine a saved entry number. */ ++ if (*arg) ++ { ++ if (grub_memcmp (arg, "fallback", sizeof ("fallback") - 1) == 0) ++ { ++ int i; ++ int index = 0; ++ ++ for (i = 0; i < MAX_FALLBACK_ENTRIES; i++) ++ { ++ if (fallback_entries[i] < 0) ++ break; ++ if (fallback_entries[i] == current_entryno) ++ { ++ index = i + 1; ++ break; ++ } ++ } ++ ++ if (index >= MAX_FALLBACK_ENTRIES || fallback_entries[index] < 0) ++ { ++ /* This is the last. */ ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ entryno = fallback_entries[index]; ++ } ++ else if (! safe_parse_maxint (&arg, &entryno)) ++ return 1; ++ } ++ else ++ entryno = current_entryno; ++ ++ /* Open the default file. */ ++ saved_drive = boot_drive; ++ saved_partition = install_partition; ++ if (grub_open (default_file)) ++ { ++ int len; ++ ++ disk_read_hook = disk_read_savesect_func; ++ len = grub_read (buf, sizeof (buf)); ++ disk_read_hook = 0; ++ grub_close (); ++ ++ if (len != sizeof (buf)) ++ { ++ /* This is too small. Do not modify the file manually, please! */ ++ errnum = ERR_READ; ++ goto fail; ++ } ++ ++ if (sector_count > 2) ++ { ++ /* Is this possible?! Too fragmented! */ ++ errnum = ERR_FSYS_CORRUPT; ++ goto fail; ++ } ++ ++ /* Set up a string to be written. */ ++ grub_memset (buf, '\n', sizeof (buf)); ++ grub_sprintf (buf, "%d", entryno); ++ ++ if (saved_lengths[0] < sizeof (buf)) ++ { ++ /* The file is anchored to another file and the first few bytes ++ are spanned in two sectors. Uggh... */ ++ if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE, ++ sect)) ++ goto fail; ++ grub_memmove (sect + saved_offsets[0], buf, saved_lengths[0]); ++ if (! rawwrite (current_drive, saved_sectors[0], sect)) ++ goto fail; ++ ++ if (! rawread (current_drive, saved_sectors[1], 0, SECTOR_SIZE, ++ sect)) ++ goto fail; ++ grub_memmove (sect + saved_offsets[1], ++ buf + saved_lengths[0], ++ sizeof (buf) - saved_lengths[0]); ++ if (! rawwrite (current_drive, saved_sectors[1], sect)) ++ goto fail; ++ } ++ else ++ { ++ /* This is a simple case. It fits into a single sector. */ ++ if (! rawread (current_drive, saved_sectors[0], 0, SECTOR_SIZE, ++ sect)) ++ goto fail; ++ grub_memmove (sect + saved_offsets[0], buf, sizeof (buf)); ++ if (! rawwrite (current_drive, saved_sectors[0], sect)) ++ goto fail; ++ } ++ ++ /* Clear the cache. */ ++ buf_track = -1; ++ } ++ ++ fail: ++ saved_drive = tmp_drive; ++ saved_partition = tmp_partition; ++ return errnum; ++#else /* ! SUPPORT_DISKLESS && ! GRUB_UTIL */ ++ errnum = ERR_UNRECOGNIZED; ++ return 1; ++#endif /* ! SUPPORT_DISKLESS && ! GRUB_UTIL */ ++} ++ ++static struct builtin builtin_savedefault = ++{ ++ "savedefault", ++ savedefault_func, ++ BUILTIN_CMDLINE, ++ "savedefault [NUM | `fallback']", ++ "Save the current entry as the default boot entry if no argument is" ++ " specified. If a number is specified, this number is saved. If" ++ " `fallback' is used, next fallback entry is saved." ++}; ++ ++ ++#ifdef SUPPORT_SERIAL ++/* serial */ ++static int ++serial_func (char *arg, int flags) ++{ ++ unsigned short port = serial_hw_get_port (0); ++ unsigned int speed = 9600; ++ int word_len = UART_8BITS_WORD; ++ int parity = UART_NO_PARITY; ++ int stop_bit_len = UART_1_STOP_BIT; ++ ++ /* Process GNU-style long options. ++ FIXME: We should implement a getopt-like function, to avoid ++ duplications. */ ++ while (1) ++ { ++ if (grub_memcmp (arg, "--unit=", sizeof ("--unit=") - 1) == 0) ++ { ++ char *p = arg + sizeof ("--unit=") - 1; ++ int unit; ++ ++ if (! safe_parse_maxint (&p, &unit)) ++ return 1; ++ ++ if (unit < 0 || unit > 3) ++ { ++ errnum = ERR_DEV_VALUES; ++ return 1; ++ } ++ ++ port = serial_hw_get_port (unit); ++ } ++ else if (grub_memcmp (arg, "--speed=", sizeof ("--speed=") - 1) == 0) ++ { ++ char *p = arg + sizeof ("--speed=") - 1; ++ int num; ++ ++ if (! safe_parse_maxint (&p, &num)) ++ return 1; ++ ++ speed = (unsigned int) num; ++ } ++ else if (grub_memcmp (arg, "--port=", sizeof ("--port=") - 1) == 0) ++ { ++ char *p = arg + sizeof ("--port=") - 1; ++ int num; ++ ++ if (! safe_parse_maxint (&p, &num)) ++ return 1; ++ ++ port = (unsigned short) num; ++ } ++ else if (grub_memcmp (arg, "--word=", sizeof ("--word=") - 1) == 0) ++ { ++ char *p = arg + sizeof ("--word=") - 1; ++ int len; ++ ++ if (! safe_parse_maxint (&p, &len)) ++ return 1; ++ ++ switch (len) ++ { ++ case 5: word_len = UART_5BITS_WORD; break; ++ case 6: word_len = UART_6BITS_WORD; break; ++ case 7: word_len = UART_7BITS_WORD; break; ++ case 8: word_len = UART_8BITS_WORD; break; ++ default: ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ } ++ else if (grub_memcmp (arg, "--stop=", sizeof ("--stop=") - 1) == 0) ++ { ++ char *p = arg + sizeof ("--stop=") - 1; ++ int len; ++ ++ if (! safe_parse_maxint (&p, &len)) ++ return 1; ++ ++ switch (len) ++ { ++ case 1: stop_bit_len = UART_1_STOP_BIT; break; ++ case 2: stop_bit_len = UART_2_STOP_BITS; break; ++ default: ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ } ++ else if (grub_memcmp (arg, "--parity=", sizeof ("--parity=") - 1) == 0) ++ { ++ char *p = arg + sizeof ("--parity=") - 1; ++ ++ if (grub_memcmp (p, "no", sizeof ("no") - 1) == 0) ++ parity = UART_NO_PARITY; ++ else if (grub_memcmp (p, "odd", sizeof ("odd") - 1) == 0) ++ parity = UART_ODD_PARITY; ++ else if (grub_memcmp (p, "even", sizeof ("even") - 1) == 0) ++ parity = UART_EVEN_PARITY; ++ else ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ } ++# ifdef GRUB_UTIL ++ /* In the grub shell, don't use any port number but open a tty ++ device instead. */ ++ else if (grub_memcmp (arg, "--device=", sizeof ("--device=") - 1) == 0) ++ { ++ char *p = arg + sizeof ("--device=") - 1; ++ char dev[256]; /* XXX */ ++ char *q = dev; ++ ++ while (*p && ! grub_isspace (*p)) ++ *q++ = *p++; ++ ++ *q = 0; ++ serial_set_device (dev); ++ } ++# endif /* GRUB_UTIL */ ++ else ++ break; ++ ++ arg = skip_to (0, arg); ++ } ++ ++ /* Initialize the serial unit. */ ++ if (! serial_hw_init (port, speed, word_len, parity, stop_bit_len)) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_serial = ++{ ++ "serial", ++ serial_func, ++ BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "serial [--unit=UNIT] [--port=PORT] [--speed=SPEED] [--word=WORD] [--parity=PARITY] [--stop=STOP] [--device=DEV]", ++ "Initialize a serial device. UNIT is a digit that specifies which serial" ++ " device is used (e.g. 0 == COM1). If you need to specify the port number," ++ " set it by --port. SPEED is the DTE-DTE speed. WORD is the word length," ++ " PARITY is the type of parity, which is one of `no', `odd' and `even'." ++ " STOP is the length of stop bit(s). The option --device can be used only" ++ " in the grub shell, which specifies the file name of a tty device. The" ++ " default values are COM1, 9600, 8N1." ++}; ++#endif /* SUPPORT_SERIAL */ ++ ++ ++/* setkey */ ++struct keysym ++{ ++ char *unshifted_name; /* the name in unshifted state */ ++ char *shifted_name; /* the name in shifted state */ ++ unsigned char unshifted_ascii; /* the ascii code in unshifted state */ ++ unsigned char shifted_ascii; /* the ascii code in shifted state */ ++ unsigned char keycode; /* keyboard scancode */ ++}; ++ ++/* The table for key symbols. If the "shifted" member of an entry is ++ NULL, the entry does not have shifted state. */ ++static struct keysym keysym_table[] = ++{ ++ {"escape", 0, 0x1b, 0, 0x01}, ++ {"1", "exclam", '1', '!', 0x02}, ++ {"2", "at", '2', '@', 0x03}, ++ {"3", "numbersign", '3', '#', 0x04}, ++ {"4", "dollar", '4', '$', 0x05}, ++ {"5", "percent", '5', '%', 0x06}, ++ {"6", "caret", '6', '^', 0x07}, ++ {"7", "ampersand", '7', '&', 0x08}, ++ {"8", "asterisk", '8', '*', 0x09}, ++ {"9", "parenleft", '9', '(', 0x0a}, ++ {"0", "parenright", '0', ')', 0x0b}, ++ {"minus", "underscore", '-', '_', 0x0c}, ++ {"equal", "plus", '=', '+', 0x0d}, ++ {"backspace", 0, '\b', 0, 0x0e}, ++ {"tab", 0, '\t', 0, 0x0f}, ++ {"q", "Q", 'q', 'Q', 0x10}, ++ {"w", "W", 'w', 'W', 0x11}, ++ {"e", "E", 'e', 'E', 0x12}, ++ {"r", "R", 'r', 'R', 0x13}, ++ {"t", "T", 't', 'T', 0x14}, ++ {"y", "Y", 'y', 'Y', 0x15}, ++ {"u", "U", 'u', 'U', 0x16}, ++ {"i", "I", 'i', 'I', 0x17}, ++ {"o", "O", 'o', 'O', 0x18}, ++ {"p", "P", 'p', 'P', 0x19}, ++ {"bracketleft", "braceleft", '[', '{', 0x1a}, ++ {"bracketright", "braceright", ']', '}', 0x1b}, ++ {"enter", 0, '\n', 0, 0x1c}, ++ {"control", 0, 0, 0, 0x1d}, ++ {"a", "A", 'a', 'A', 0x1e}, ++ {"s", "S", 's', 'S', 0x1f}, ++ {"d", "D", 'd', 'D', 0x20}, ++ {"f", "F", 'f', 'F', 0x21}, ++ {"g", "G", 'g', 'G', 0x22}, ++ {"h", "H", 'h', 'H', 0x23}, ++ {"j", "J", 'j', 'J', 0x24}, ++ {"k", "K", 'k', 'K', 0x25}, ++ {"l", "L", 'l', 'L', 0x26}, ++ {"semicolon", "colon", ';', ':', 0x27}, ++ {"quote", "doublequote", ''', '"', 0x28}, ++ {"backquote", "tilde", '`', '~', 0x29}, ++ {"shift", 0, 0, 0, 0x2a}, ++ {"backslash", "bar", '\', '|', 0x2b}, ++ {"z", "Z", 'z', 'Z', 0x2c}, ++ {"x", "X", 'x', 'X', 0x2d}, ++ {"c", "C", 'c', 'C', 0x2e}, ++ {"v", "V", 'v', 'V', 0x2f}, ++ {"b", "B", 'b', 'B', 0x30}, ++ {"n", "N", 'n', 'N', 0x31}, ++ {"m", "M", 'm', 'M', 0x32}, ++ {"comma", "less", ',', '<', 0x33}, ++ {"period", "greater", '.', '>', 0x34}, ++ {"slash", "question", '/', '?', 0x35}, ++ {"alt", 0, 0, 0, 0x38}, ++ {"space", 0, ' ', 0, 0x39}, ++ {"capslock", 0, 0, 0, 0x3a}, ++ {"F1", 0, 0, 0, 0x3b}, ++ {"F2", 0, 0, 0, 0x3c}, ++ {"F3", 0, 0, 0, 0x3d}, ++ {"F4", 0, 0, 0, 0x3e}, ++ {"F5", 0, 0, 0, 0x3f}, ++ {"F6", 0, 0, 0, 0x40}, ++ {"F7", 0, 0, 0, 0x41}, ++ {"F8", 0, 0, 0, 0x42}, ++ {"F9", 0, 0, 0, 0x43}, ++ {"F10", 0, 0, 0, 0x44}, ++ /* Caution: do not add NumLock here! we cannot deal with it properly. */ ++ {"delete", 0, 0x7f, 0, 0x53} ++}; ++ ++static int ++setkey_func (char *arg, int flags) ++{ ++ char *to_key, *from_key; ++ int to_code, from_code; ++ int map_in_interrupt = 0; ++ ++ auto int find_key_code (char *key); ++ auto int find_ascii_code (char *key); ++ ++ auto int find_key_code (char *key) ++ { ++ int i; ++ ++ for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++) ++ { ++ if (keysym_table[i].unshifted_name && ++ grub_strcmp (key, keysym_table[i].unshifted_name) == 0) ++ return keysym_table[i].keycode; ++ else if (keysym_table[i].shifted_name && ++ grub_strcmp (key, keysym_table[i].shifted_name) == 0) ++ return keysym_table[i].keycode; ++ } ++ ++ return 0; ++ } ++ ++ auto int find_ascii_code (char *key) ++ { ++ int i; ++ ++ for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++) ++ { ++ if (keysym_table[i].unshifted_name && ++ grub_strcmp (key, keysym_table[i].unshifted_name) == 0) ++ return keysym_table[i].unshifted_ascii; ++ else if (keysym_table[i].shifted_name && ++ grub_strcmp (key, keysym_table[i].shifted_name) == 0) ++ return keysym_table[i].shifted_ascii; ++ } ++ ++ return 0; ++ } ++ ++ to_key = arg; ++ from_key = skip_to (0, to_key); ++ ++ if (! *to_key) ++ { ++ /* If the user specifies no argument, reset the key mappings. */ ++ grub_memset (bios_key_map, 0, KEY_MAP_SIZE * sizeof (unsigned short)); ++ grub_memset (ascii_key_map, 0, KEY_MAP_SIZE * sizeof (unsigned short)); ++ ++ return 0; ++ } ++ else if (! *from_key) ++ { ++ /* The user must specify two arguments or zero argument. */ ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ nul_terminate (to_key); ++ nul_terminate (from_key); ++ ++ to_code = find_ascii_code (to_key); ++ from_code = find_ascii_code (from_key); ++ if (! to_code || ! from_code) ++ { ++ map_in_interrupt = 1; ++ to_code = find_key_code (to_key); ++ from_code = find_key_code (from_key); ++ if (! to_code || ! from_code) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ } ++ ++ if (map_in_interrupt) ++ { ++ int i; ++ ++ /* Find an empty slot. */ ++ for (i = 0; i < KEY_MAP_SIZE; i++) ++ { ++ if ((bios_key_map[i] & 0xff) == from_code) ++ /* Perhaps the user wants to overwrite the map. */ ++ break; ++ ++ if (! bios_key_map[i]) ++ break; ++ } ++ ++ if (i == KEY_MAP_SIZE) ++ { ++ errnum = ERR_WONT_FIT; ++ return 1; ++ } ++ ++ if (to_code == from_code) ++ /* If TO is equal to FROM, delete the entry. */ ++ grub_memmove ((char *) &bios_key_map[i], ++ (char *) &bios_key_map[i + 1], ++ sizeof (unsigned short) * (KEY_MAP_SIZE - i)); ++ else ++ bios_key_map[i] = (to_code << 8) | from_code; ++ ++ /* Ugly but should work. */ ++ unset_int15_handler (); ++ set_int15_handler (); ++ } ++ else ++ { ++ int i; ++ ++ /* Find an empty slot. */ ++ for (i = 0; i < KEY_MAP_SIZE; i++) ++ { ++ if ((ascii_key_map[i] & 0xff) == from_code) ++ /* Perhaps the user wants to overwrite the map. */ ++ break; ++ ++ if (! ascii_key_map[i]) ++ break; ++ } ++ ++ if (i == KEY_MAP_SIZE) ++ { ++ errnum = ERR_WONT_FIT; ++ return 1; ++ } ++ ++ if (to_code == from_code) ++ /* If TO is equal to FROM, delete the entry. */ ++ grub_memmove ((char *) &ascii_key_map[i], ++ (char *) &ascii_key_map[i + 1], ++ sizeof (unsigned short) * (KEY_MAP_SIZE - i)); ++ else ++ ascii_key_map[i] = (to_code << 8) | from_code; ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_setkey = ++{ ++ "setkey", ++ setkey_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "setkey [TO_KEY FROM_KEY]", ++ "Change the keyboard map. The key FROM_KEY is mapped to the key TO_KEY." ++ " A key must be an alphabet, a digit, or one of these: escape, exclam," ++ " at, numbersign, dollar, percent, caret, ampersand, asterisk, parenleft," ++ " parenright, minus, underscore, equal, plus, backspace, tab, bracketleft," ++ " braceleft, bracketright, braceright, enter, control, semicolon, colon," ++ " quote, doublequote, backquote, tilde, shift, backslash, bar, comma," ++ " less, period, greater, slash, question, alt, space, capslock, FX (X" ++ " is a digit), and delete. If no argument is specified, reset key" ++ " mappings." ++}; ++ ++ ++/* setup */ ++static int ++setup_func (char *arg, int flags) ++{ ++ /* Point to the string of the installed drive/partition. */ ++ char *install_ptr; ++ /* Point to the string of the drive/parition where the GRUB images ++ reside. */ ++ char *image_ptr; ++ unsigned long installed_drive, installed_partition; ++ unsigned long image_drive, image_partition; ++ unsigned long tmp_drive, tmp_partition; ++ char stage1[64]; ++ char stage2[64]; ++ char config_filename[64]; ++ char real_config_filename[64]; ++ char cmd_arg[256]; ++ char device[16]; ++ char *buffer = (char *) RAW_ADDR (0x100000); ++ int is_force_lba = 0; ++ char *stage2_arg = 0; ++ char *prefix = 0; ++ ++ auto int check_file (char *file); ++ auto void sprint_device (int drive, int partition); ++ auto int embed_stage1_5 (char * stage1_5, int drive, int partition); ++ ++ /* Check if the file FILE exists like Autoconf. */ ++ int check_file (char *file) ++ { ++ int ret; ++ ++ grub_printf (" Checking if "%s" exists... ", file); ++ ret = grub_open (file); ++ if (ret) ++ { ++ grub_close (); ++ grub_printf ("yes\n"); ++ } ++ else ++ grub_printf ("no\n"); ++ ++ return ret; ++ } ++ ++ /* Construct a device name in DEVICE. */ ++ void sprint_device (int drive, int partition) ++ { ++ grub_sprintf (device, "(%cd%d", ++ (drive & 0x80) ? 'h' : 'f', ++ drive & ~0x80); ++ if ((partition & 0xFF0000) != 0xFF0000) ++ { ++ char tmp[16]; ++ grub_sprintf (tmp, ",%d", (partition >> 16) & 0xFF); ++ grub_strncat (device, tmp, 256); ++ } ++ if ((partition & 0x00FF00) != 0x00FF00) ++ { ++ char tmp[16]; ++ grub_sprintf (tmp, ",%c", 'a' + ((partition >> 8) & 0xFF)); ++ grub_strncat (device, tmp, 256); ++ } ++ grub_strncat (device, ")", 256); ++ } ++ ++ int embed_stage1_5 (char *stage1_5, int drive, int partition) ++ { ++ /* We install GRUB into the MBR, so try to embed the ++ Stage 1.5 in the sectors right after the MBR. */ ++ sprint_device (drive, partition); ++ grub_sprintf (cmd_arg, "%s %s", stage1_5, device); ++ ++ /* Notify what will be run. */ ++ grub_printf (" Running "embed %s"... ", cmd_arg); ++ ++ embed_func (cmd_arg, flags); ++ if (! errnum) ++ { ++ /* Construct the blocklist representation. */ ++ grub_sprintf (buffer, "%s%s", device, embed_info); ++ grub_printf ("succeeded\n"); ++ return 1; ++ } ++ else ++ { ++ grub_printf ("failed (this is not fatal)\n"); ++ return 0; ++ } ++ } ++ ++ struct stage1_5_map { ++ char *fsys; ++ char *name; ++ }; ++ struct stage1_5_map stage1_5_map[] = ++ { ++ {"ext2fs", "/e2fs_stage1_5"}, ++ {"fat", "/fat_stage1_5"}, ++ {"ufs2", "/ufs2_stage1_5"}, ++ {"ffs", "/ffs_stage1_5"}, ++ {"iso9660", "/iso9660_stage1_5"}, ++ {"jfs", "/jfs_stage1_5"}, ++ {"minix", "/minix_stage1_5"}, ++ {"reiserfs", "/reiserfs_stage1_5"}, ++ {"vstafs", "/vstafs_stage1_5"}, ++ {"xfs", "/xfs_stage1_5"} ++ }; ++ ++ tmp_drive = saved_drive; ++ tmp_partition = saved_partition; ++ ++ /* Check if the user specifies --force-lba. */ ++ while (1) ++ { ++ if (grub_memcmp ("--force-lba", arg, sizeof ("--force-lba") - 1) == 0) ++ { ++ is_force_lba = 1; ++ arg = skip_to (0, arg); ++ } ++ else if (grub_memcmp ("--prefix=", arg, sizeof ("--prefix=") - 1) == 0) ++ { ++ prefix = arg + sizeof ("--prefix=") - 1; ++ arg = skip_to (0, arg); ++ nul_terminate (prefix); ++ } ++#ifdef GRUB_UTIL ++ else if (grub_memcmp ("--stage2=", arg, sizeof ("--stage2=") - 1) == 0) ++ { ++ stage2_arg = arg; ++ arg = skip_to (0, arg); ++ nul_terminate (stage2_arg); ++ } ++#endif /* GRUB_UTIL */ ++ else ++ break; ++ } ++ ++ install_ptr = arg; ++ image_ptr = skip_to (0, install_ptr); ++ ++ /* Make sure that INSTALL_PTR is valid. */ ++ set_device (install_ptr); ++ if (errnum) ++ return 1; ++ ++ installed_drive = current_drive; ++ installed_partition = current_partition; ++ ++ /* Mount the drive pointed by IMAGE_PTR. */ ++ if (*image_ptr) ++ { ++ /* If the drive/partition where the images reside is specified, ++ get the drive and the partition. */ ++ set_device (image_ptr); ++ if (errnum) ++ return 1; ++ } ++ else ++ { ++ /* If omitted, use SAVED_PARTITION and SAVED_DRIVE. */ ++ current_drive = saved_drive; ++ current_partition = saved_partition; ++ } ++ ++ image_drive = saved_drive = current_drive; ++ image_partition = saved_partition = current_partition; ++ ++ /* Open it. */ ++ if (! open_device ()) ++ goto fail; ++ ++ /* Check if stage1 exists. If the user doesn't specify the option ++ `--prefix', attempt /boot/grub and /grub. */ ++ /* NOTE: It is dangerous to run this command without `--prefix' in the ++ grub shell, since that affects `--stage2'. */ ++ if (! prefix) ++ { ++ prefix = "/boot/grub"; ++ grub_sprintf (stage1, "%s%s", prefix, "/stage1"); ++ if (! check_file (stage1)) ++ { ++ errnum = ERR_NONE; ++ prefix = "/grub"; ++ grub_sprintf (stage1, "%s%s", prefix, "/stage1"); ++ if (! check_file (stage1)) ++ goto fail; ++ } ++ } ++ else ++ { ++ grub_sprintf (stage1, "%s%s", prefix, "/stage1"); ++ if (! check_file (stage1)) ++ goto fail; ++ } ++ ++ /* The prefix was determined. */ ++ grub_sprintf (stage2, "%s%s", prefix, "/stage2"); ++ grub_sprintf (config_filename, "%s%s", prefix, "/menu.lst"); ++ *real_config_filename = 0; ++ ++ /* Check if stage2 exists. */ ++ if (! check_file (stage2)) ++ goto fail; ++ ++ { ++ char *fsys = fsys_table[fsys_type].name; ++ int i; ++ int size = sizeof (stage1_5_map) / sizeof (stage1_5_map[0]); ++ ++ /* Iterate finding the same filesystem name as FSYS. */ ++ for (i = 0; i < size; i++) ++ if (grub_strcmp (fsys, stage1_5_map[i].fsys) == 0) ++ { ++ /* OK, check if the Stage 1.5 exists. */ ++ char stage1_5[64]; ++ ++ grub_sprintf (stage1_5, "%s%s", prefix, stage1_5_map[i].name); ++ if (check_file (stage1_5)) ++ { ++ if (embed_stage1_5 (stage1_5, ++ installed_drive, installed_partition) ++ || embed_stage1_5 (stage1_5, ++ image_drive, image_partition)) ++ { ++ grub_strcpy (real_config_filename, config_filename); ++ sprint_device (image_drive, image_partition); ++ grub_sprintf (config_filename, "%s%s", device, stage2); ++ grub_strcpy (stage2, buffer); ++ } ++ } ++ errnum = 0; ++ break; ++ } ++ } ++ ++ /* Construct a string that is used by the command "install" as its ++ arguments. */ ++ sprint_device (installed_drive, installed_partition); ++ ++#if 1 ++ /* Don't embed a drive number unnecessarily. */ ++ grub_sprintf (cmd_arg, "%s%s%s%s %s%s %s p %s %s", ++ is_force_lba? "--force-lba " : "", ++ stage2_arg? stage2_arg : "", ++ stage2_arg? " " : "", ++ stage1, ++ (installed_drive != image_drive) ? "d " : "", ++ device, ++ stage2, ++ config_filename, ++ real_config_filename); ++#else /* NOT USED */ ++ /* This code was used, because we belived some BIOSes had a problem ++ that they didn't pass a booting drive correctly. It turned out, ++ however, stage1 could trash a booting drive when checking LBA support, ++ because some BIOSes modified the register %dx in INT 13H, AH=48H. ++ So it becamed unclear whether GRUB should use a pre-defined booting ++ drive or not. If the problem still exists, it would be necessary to ++ switch back to this code. */ ++ grub_sprintf (cmd_arg, "%s%s%s%s d %s %s p %s %s", ++ is_force_lba? "--force-lba " : "", ++ stage2_arg? stage2_arg : "", ++ stage2_arg? " " : "", ++ stage1, ++ device, ++ stage2, ++ config_filename, ++ real_config_filename); ++#endif /* NOT USED */ ++ ++ /* Notify what will be run. */ ++ grub_printf (" Running "install %s"... ", cmd_arg); ++ ++ /* Make sure that SAVED_DRIVE and SAVED_PARTITION are identical ++ with IMAGE_DRIVE and IMAGE_PARTITION, respectively. */ ++ saved_drive = image_drive; ++ saved_partition = image_partition; ++ ++ /* Run the command. */ ++ if (! install_func (cmd_arg, flags)) ++ grub_printf ("succeeded\nDone.\n"); ++ else ++ grub_printf ("failed\n"); ++ ++ fail: ++ saved_drive = tmp_drive; ++ saved_partition = tmp_partition; ++ return errnum; ++} ++ ++static struct builtin builtin_setup = ++{ ++ "setup", ++ setup_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "setup [--prefix=DIR] [--stage2=STAGE2_FILE] [--force-lba] INSTALL_DEVICE [IMAGE_DEVICE]", ++ "Set up the installation of GRUB automatically. This command uses" ++ " the more flexible command "install" in the backend and installs" ++ " GRUB into the device INSTALL_DEVICE. If IMAGE_DEVICE is specified," ++ " then find the GRUB images in the device IMAGE_DEVICE, otherwise" ++ " use the current "root device", which can be set by the command" ++ " "root". If you know that your BIOS should support LBA but GRUB" ++ " doesn't work in LBA mode, specify the option `--force-lba'." ++ " If you install GRUB under the grub shell and you cannot unmount the" ++ " partition where GRUB images reside, specify the option `--stage2'" ++ " to tell GRUB the file name under your OS." ++}; ++ ++ ++#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) ++/* terminal */ ++static int ++terminal_func (char *arg, int flags) ++{ ++ /* The index of the default terminal in TERM_TABLE. */ ++ int default_term = -1; ++ struct term_entry *prev_term = current_term; ++ int to = -1; ++ int lines = 0; ++ int no_message = 0; ++ unsigned long term_flags = 0; ++ /* XXX: Assume less than 32 terminals. */ ++ unsigned long term_bitmap = 0; ++ ++ /* Get GNU-style long options. */ ++ while (1) ++ { ++ if (grub_memcmp (arg, "--dumb", sizeof ("--dumb") - 1) == 0) ++ term_flags |= TERM_DUMB; ++ else if (grub_memcmp (arg, "--no-echo", sizeof ("--no-echo") - 1) == 0) ++ /* ``--no-echo'' implies ``--no-edit''. */ ++ term_flags |= (TERM_NO_ECHO | TERM_NO_EDIT); ++ else if (grub_memcmp (arg, "--no-edit", sizeof ("--no-edit") - 1) == 0) ++ term_flags |= TERM_NO_EDIT; ++ else if (grub_memcmp (arg, "--timeout=", sizeof ("--timeout=") - 1) == 0) ++ { ++ char *val = arg + sizeof ("--timeout=") - 1; ++ ++ if (! safe_parse_maxint (&val, &to)) ++ return 1; ++ } ++ else if (grub_memcmp (arg, "--lines=", sizeof ("--lines=") - 1) == 0) ++ { ++ char *val = arg + sizeof ("--lines=") - 1; ++ ++ if (! safe_parse_maxint (&val, &lines)) ++ return 1; ++ ++ /* Probably less than four is meaningless.... */ ++ if (lines < 4) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ } ++ else if (grub_memcmp (arg, "--silent", sizeof ("--silent") - 1) == 0) ++ no_message = 1; ++ else ++ break; ++ ++ arg = skip_to (0, arg); ++ } ++ ++ /* If no argument is specified, show current setting. */ ++ if (! *arg) ++ { ++ grub_printf ("%s%s%s%s\n", ++ current_term->name, ++ current_term->flags & TERM_DUMB ? " (dumb)" : "", ++ current_term->flags & TERM_NO_EDIT ? " (no edit)" : "", ++ current_term->flags & TERM_NO_ECHO ? " (no echo)" : ""); ++ return 0; ++ } ++ ++ while (*arg) ++ { ++ int i; ++ char *next = skip_to (0, arg); ++ ++ nul_terminate (arg); ++ ++ for (i = 0; term_table[i].name; i++) ++ { ++ if (grub_strcmp (arg, term_table[i].name) == 0) ++ { ++ if (term_table[i].flags & TERM_NEED_INIT) ++ { ++ errnum = ERR_DEV_NEED_INIT; ++ return 1; ++ } ++ ++ if (default_term < 0) ++ default_term = i; ++ ++ term_bitmap |= (1 << i); ++ break; ++ } ++ } ++ ++ if (! term_table[i].name) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ arg = next; ++ } ++ ++ /* If multiple terminals are specified, wait until the user pushes any ++ key on one of the terminals. */ ++ if (term_bitmap & ~(1 << default_term)) ++ { ++ int time1, time2 = -1; ++ ++ /* XXX: Disable the pager. */ ++ count_lines = -1; ++ ++ /* Get current time. */ ++ while ((time1 = getrtsecs ()) == 0xFF) ++ ; ++ ++ /* Wait for a key input. */ ++ while (to) ++ { ++ int i; ++ ++ for (i = 0; term_table[i].name; i++) ++ { ++ if (term_bitmap & (1 << i)) ++ { ++ if (term_table[i].checkkey () >= 0) ++ { ++ (void) term_table[i].getkey (); ++ default_term = i; ++ ++ goto end; ++ } ++ } ++ } ++ ++ /* Prompt the user, once per sec. */ ++ if ((time1 = getrtsecs ()) != time2 && time1 != 0xFF) ++ { ++ if (! no_message) ++ { ++ /* Need to set CURRENT_TERM to each of selected ++ terminals. */ ++ for (i = 0; term_table[i].name; i++) ++ if (term_bitmap & (1 << i)) ++ { ++ current_term = term_table + i; ++ grub_printf ("\rPress any key to continue.\n"); ++ } ++ ++ /* Restore CURRENT_TERM. */ ++ current_term = prev_term; ++ } ++ ++ time2 = time1; ++ if (to > 0) ++ to--; ++ } ++ } ++ } ++ ++ end: ++ current_term = term_table + default_term; ++ current_term->flags = term_flags; ++ ++ if (lines) ++ max_lines = lines; ++ else ++ /* 24 would be a good default value. */ ++ max_lines = 24; ++ ++ /* If the interface is currently the command-line, ++ restart it to repaint the screen. */ ++ if (current_term != prev_term && (flags & BUILTIN_CMDLINE)) ++ grub_longjmp (restart_cmdline_env, 0); ++ ++ return 0; ++} ++ ++static struct builtin builtin_terminal = ++{ ++ "terminal", ++ terminal_func, ++ BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "terminal [--dumb] [--no-echo] [--no-edit] [--timeout=SECS] [--lines=LINES] [--silent] [console] [serial] [hercules]", ++ "Select a terminal. When multiple terminals are specified, wait until" ++ " you push any key to continue. If both console and serial are specified," ++ " the terminal to which you input a key first will be selected. If no" ++ " argument is specified, print current setting. The option --dumb" ++ " specifies that your terminal is dumb, otherwise, vt100-compatibility" ++ " is assumed. If you specify --no-echo, input characters won't be echoed." ++ " If you specify --no-edit, the BASH-like editing feature will be disabled." ++ " If --timeout is present, this command will wait at most for SECS" ++ " seconds. The option --lines specifies the maximum number of lines." ++ " The option --silent is used to suppress messages." ++}; ++#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */ ++ ++ ++#ifdef SUPPORT_SERIAL ++static int ++terminfo_func (char *arg, int flags) ++{ ++ struct terminfo term; ++ ++ if (*arg) ++ { ++ struct ++ { ++ const char *name; ++ char *var; ++ } ++ options[] = ++ { ++ {"--name=", term.name}, ++ {"--cursor-address=", term.cursor_address}, ++ {"--clear-screen=", term.clear_screen}, ++ {"--enter-standout-mode=", term.enter_standout_mode}, ++ {"--exit-standout-mode=", term.exit_standout_mode} ++ }; ++ ++ grub_memset (&term, 0, sizeof (term)); ++ ++ while (*arg) ++ { ++ int i; ++ char *next = skip_to (0, arg); ++ ++ nul_terminate (arg); ++ ++ for (i = 0; i < sizeof (options) / sizeof (options[0]); i++) ++ { ++ const char *name = options[i].name; ++ int len = grub_strlen (name); ++ ++ if (! grub_memcmp (arg, name, len)) ++ { ++ grub_strcpy (options[i].var, ti_unescape_string (arg + len)); ++ break; ++ } ++ } ++ ++ if (i == sizeof (options) / sizeof (options[0])) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return errnum; ++ } ++ ++ arg = next; ++ } ++ ++ if (term.name[0] == 0 || term.cursor_address[0] == 0) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return errnum; ++ } ++ ++ ti_set_term (&term); ++ } ++ else ++ { ++ /* No option specifies printing out current settings. */ ++ ti_get_term (&term); ++ ++ grub_printf ("name=%s\n", ++ ti_escape_string (term.name)); ++ grub_printf ("cursor_address=%s\n", ++ ti_escape_string (term.cursor_address)); ++ grub_printf ("clear_screen=%s\n", ++ ti_escape_string (term.clear_screen)); ++ grub_printf ("enter_standout_mode=%s\n", ++ ti_escape_string (term.enter_standout_mode)); ++ grub_printf ("exit_standout_mode=%s\n", ++ ti_escape_string (term.exit_standout_mode)); ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_terminfo = ++{ ++ "terminfo", ++ terminfo_func, ++ BUILTIN_MENU | BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "terminfo [--name=NAME --cursor-address=SEQ [--clear-screen=SEQ]" ++ " [--enter-standout-mode=SEQ] [--exit-standout-mode=SEQ]]", ++ ++ "Define the capabilities of your terminal. Use this command to" ++ " define escape sequences, if it is not vt100-compatible." ++ " You may use \e for ESC and ^X for a control character." ++ " If no option is specified, the current settings are printed." ++}; ++#endif /* SUPPORT_SERIAL */ ++ ++ ++/* testload */ ++static int ++testload_func (char *arg, int flags) ++{ ++ int i; ++ ++ kernel_type = KERNEL_TYPE_NONE; ++ ++ if (! grub_open (arg)) ++ return 1; ++ ++ disk_read_hook = disk_read_print_func; ++ ++ /* Perform filesystem test on the specified file. */ ++ /* Read whole file first. */ ++ grub_printf ("Whole file: "); ++ ++ grub_read ((char *) RAW_ADDR (0x100000), -1); ++ ++ /* Now compare two sections of the file read differently. */ ++ ++ for (i = 0; i < 0x10ac0; i++) ++ { ++ *((unsigned char *) RAW_ADDR (0x200000 + i)) = 0; ++ *((unsigned char *) RAW_ADDR (0x300000 + i)) = 1; ++ } ++ ++ /* First partial read. */ ++ grub_printf ("\nPartial read 1: "); ++ ++ grub_seek (0); ++ grub_read ((char *) RAW_ADDR (0x200000), 0x7); ++ grub_read ((char *) RAW_ADDR (0x200007), 0x100); ++ grub_read ((char *) RAW_ADDR (0x200107), 0x10); ++ grub_read ((char *) RAW_ADDR (0x200117), 0x999); ++ grub_read ((char *) RAW_ADDR (0x200ab0), 0x10); ++ grub_read ((char *) RAW_ADDR (0x200ac0), 0x10000); ++ ++ /* Second partial read. */ ++ grub_printf ("\nPartial read 2: "); ++ ++ grub_seek (0); ++ grub_read ((char *) RAW_ADDR (0x300000), 0x10000); ++ grub_read ((char *) RAW_ADDR (0x310000), 0x10); ++ grub_read ((char *) RAW_ADDR (0x310010), 0x7); ++ grub_read ((char *) RAW_ADDR (0x310017), 0x10); ++ grub_read ((char *) RAW_ADDR (0x310027), 0x999); ++ grub_read ((char *) RAW_ADDR (0x3109c0), 0x100); ++ ++ grub_printf ("\nHeader1 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n", ++ *((int *) RAW_ADDR (0x200000)), ++ *((int *) RAW_ADDR (0x200004)), ++ *((int *) RAW_ADDR (0x200008)), ++ *((int *) RAW_ADDR (0x20000c))); ++ ++ grub_printf ("Header2 = 0x%x, next = 0x%x, next = 0x%x, next = 0x%x\n", ++ *((int *) RAW_ADDR (0x300000)), ++ *((int *) RAW_ADDR (0x300004)), ++ *((int *) RAW_ADDR (0x300008)), ++ *((int *) RAW_ADDR (0x30000c))); ++ ++ for (i = 0; i < 0x10ac0; i++) ++ if (*((unsigned char *) RAW_ADDR (0x200000 + i)) ++ != *((unsigned char *) RAW_ADDR (0x300000 + i))) ++ break; ++ ++ grub_printf ("Max is 0x10ac0: i=0x%x, filepos=0x%x\n", i, filepos); ++ disk_read_hook = 0; ++ grub_close (); ++ return 0; ++} ++ ++static struct builtin builtin_testload = ++{ ++ "testload", ++ testload_func, ++ BUILTIN_CMDLINE, ++ "testload FILE", ++ "Read the entire contents of FILE in several different ways and" ++ " compares them, to test the filesystem code. The output is somewhat" ++ " cryptic, but if no errors are reported and the final `i=X," ++ " filepos=Y' reading has X and Y equal, then it is definitely" ++ " consistent, and very likely works correctly subject to a" ++ " consistent offset error. If this test succeeds, then a good next" ++ " step is to try loading a kernel." ++}; ++ ++ ++/* testvbe MODE */ ++static int ++testvbe_func (char *arg, int flags) ++{ ++ int mode_number; ++ struct vbe_controller controller; ++ struct vbe_mode mode; ++ ++ if (! *arg) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ if (! safe_parse_maxint (&arg, &mode_number)) ++ return 1; ++ ++ /* Preset `VBE2'. */ ++ grub_memmove (controller.signature, "VBE2", 4); ++ ++ /* Detect VBE BIOS. */ ++ if (get_vbe_controller_info (&controller) != 0x004F) ++ { ++ grub_printf (" VBE BIOS is not present.\n"); ++ return 0; ++ } ++ ++ if (controller.version < 0x0200) ++ { ++ grub_printf (" VBE version %d.%d is not supported.\n", ++ (int) (controller.version >> 8), ++ (int) (controller.version & 0xFF)); ++ return 0; ++ } ++ ++ if (get_vbe_mode_info (mode_number, &mode) != 0x004F ++ || (mode.mode_attributes & 0x0091) != 0x0091) ++ { ++ grub_printf (" Mode 0x%x is not supported.\n", mode_number); ++ return 0; ++ } ++ ++ /* Now trip to the graphics mode. */ ++ if (set_vbe_mode (mode_number | (1 << 14)) != 0x004F) ++ { ++ grub_printf (" Switching to Mode 0x%x failed.\n", mode_number); ++ return 0; ++ } ++ ++ /* Draw something on the screen... */ ++ { ++ unsigned char *base_buf = (unsigned char *) mode.phys_base; ++ int scanline = controller.version >= 0x0300 ++ ? mode.linear_bytes_per_scanline : mode.bytes_per_scanline; ++ /* FIXME: this assumes that any depth is a modulo of 8. */ ++ int bpp = mode.bits_per_pixel / 8; ++ int width = mode.x_resolution; ++ int height = mode.y_resolution; ++ int x, y; ++ unsigned color = 0; ++ ++ /* Iterate drawing on the screen, until the user hits any key. */ ++ while (checkkey () == -1) ++ { ++ for (y = 0; y < height; y++) ++ { ++ unsigned char *line_buf = base_buf + scanline * y; ++ ++ for (x = 0; x < width; x++) ++ { ++ unsigned char *buf = line_buf + bpp * x; ++ int i; ++ ++ for (i = 0; i < bpp; i++, buf++) ++ *buf = (color >> (i * 8)) & 0xff; ++ } ++ ++ color++; ++ } ++ } ++ ++ /* Discard the input. */ ++ getkey (); ++ } ++ ++ /* Back to the default text mode. */ ++ if (set_vbe_mode (0x03) != 0x004F) ++ { ++ /* Why?! */ ++ grub_reboot (); ++ } ++ ++ return 0; ++} ++ ++static struct builtin builtin_testvbe = ++{ ++ "testvbe", ++ testvbe_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "testvbe MODE", ++ "Test the VBE mode MODE. Hit any key to return." ++}; ++ ++ ++#ifdef SUPPORT_NETBOOT ++/* tftpserver */ ++static int ++tftpserver_func (char *arg, int flags) ++{ ++ if (! *arg || ! ifconfig (0, 0, 0, arg)) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ ++ print_network_configuration (); ++ return 0; ++} ++ ++static struct builtin builtin_tftpserver = ++{ ++ "tftpserver", ++ tftpserver_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "tftpserver IPADDR", ++ "Override the TFTP server address." ++}; ++#endif /* SUPPORT_NETBOOT */ ++ ++ ++/* timeout */ ++static int ++timeout_func (char *arg, int flags) ++{ ++ if (! safe_parse_maxint (&arg, &grub_timeout)) ++ return 1; ++ ++ return 0; ++} ++ ++static struct builtin builtin_timeout = ++{ ++ "timeout", ++ timeout_func, ++ BUILTIN_MENU, ++#if 0 ++ "timeout SEC", ++ "Set a timeout, in SEC seconds, before automatically booting the" ++ " default entry (normally the first entry defined)." ++#endif ++}; ++ ++ ++/* title */ ++static int ++title_func (char *arg, int flags) ++{ ++ /* This function is not actually used at least currently. */ ++ return 0; ++} ++ ++static struct builtin builtin_title = ++{ ++ "title", ++ title_func, ++ BUILTIN_TITLE, ++#if 0 ++ "title [NAME ...]", ++ "Start a new boot entry, and set its name to the contents of the" ++ " rest of the line, starting with the first non-space character." ++#endif ++}; ++ ++ ++/* unhide */ ++static int ++unhide_func (char *arg, int flags) ++{ ++ if (! set_device (arg)) ++ return 1; ++ ++ if (! set_partition_hidden_flag (0)) ++ return 1; ++ ++ return 0; ++} ++ ++static struct builtin builtin_unhide = ++{ ++ "unhide", ++ unhide_func, ++ BUILTIN_CMDLINE | BUILTIN_MENU | BUILTIN_HELP_LIST, ++ "unhide PARTITION", ++ "Unhide PARTITION by clearing the "hidden" bit in its" ++ " partition type code." ++}; ++ ++ ++/* uppermem */ ++static int ++uppermem_func (char *arg, int flags) ++{ ++ if (! safe_parse_maxint (&arg, (int *) &mbi.mem_upper)) ++ return 1; ++ ++ mbi.flags &= ~MB_INFO_MEM_MAP; ++ return 0; ++} ++ ++static struct builtin builtin_uppermem = ++{ ++ "uppermem", ++ uppermem_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "uppermem KBYTES", ++ "Force GRUB to assume that only KBYTES kilobytes of upper memory are" ++ " installed. Any system address range maps are discarded." ++}; ++ ++ ++/* vbeprobe */ ++static int ++vbeprobe_func (char *arg, int flags) ++{ ++ struct vbe_controller controller; ++ unsigned short *mode_list; ++ int mode_number = -1; ++ ++ auto unsigned long vbe_far_ptr_to_linear (unsigned long); ++ ++ unsigned long vbe_far_ptr_to_linear (unsigned long ptr) ++ { ++ unsigned short seg = (ptr >> 16); ++ unsigned short off = (ptr & 0xFFFF); ++ ++ return (seg << 4) + off; ++ } ++ ++ if (*arg) ++ { ++ if (! safe_parse_maxint (&arg, &mode_number)) ++ return 1; ++ } ++ ++ /* Set the signature to `VBE2', to obtain VBE 3.0 information. */ ++ grub_memmove (controller.signature, "VBE2", 4); ++ ++ if (get_vbe_controller_info (&controller) != 0x004F) ++ { ++ grub_printf (" VBE BIOS is not present.\n"); ++ return 0; ++ } ++ ++ /* Check the version. */ ++ if (controller.version < 0x0200) ++ { ++ grub_printf (" VBE version %d.%d is not supported.\n", ++ (int) (controller.version >> 8), ++ (int) (controller.version & 0xFF)); ++ return 0; ++ } ++ ++ /* Print some information. */ ++ grub_printf (" VBE version %d.%d\n", ++ (int) (controller.version >> 8), ++ (int) (controller.version & 0xFF)); ++ ++ /* Iterate probing modes. */ ++ for (mode_list ++ = (unsigned short *) vbe_far_ptr_to_linear (controller.video_mode); ++ *mode_list != 0xFFFF; ++ mode_list++) ++ { ++ struct vbe_mode mode; ++ ++ if (get_vbe_mode_info (*mode_list, &mode) != 0x004F) ++ continue; ++ ++ /* Skip this, if this is not supported or linear frame buffer ++ mode is not support. */ ++ if ((mode.mode_attributes & 0x0081) != 0x0081) ++ continue; ++ ++ if (mode_number == -1 || mode_number == *mode_list) ++ { ++ char *model; ++ switch (mode.memory_model) ++ { ++ case 0x00: model = "Text"; break; ++ case 0x01: model = "CGA graphics"; break; ++ case 0x02: model = "Hercules graphics"; break; ++ case 0x03: model = "Planar"; break; ++ case 0x04: model = "Packed pixel"; break; ++ case 0x05: model = "Non-chain 4, 256 color"; break; ++ case 0x06: model = "Direct Color"; break; ++ case 0x07: model = "YUV"; break; ++ default: model = "Unknown"; break; ++ } ++ ++ grub_printf (" 0x%x: %s, %ux%ux%u\n", ++ (unsigned) *mode_list, ++ model, ++ (unsigned) mode.x_resolution, ++ (unsigned) mode.y_resolution, ++ (unsigned) mode.bits_per_pixel); ++ ++ if (mode_number != -1) ++ break; ++ } ++ } ++ ++ if (mode_number != -1 && mode_number != *mode_list) ++ grub_printf (" Mode 0x%x is not found or supported.\n", mode_number); ++ ++ return 0; ++} ++ ++static struct builtin builtin_vbeprobe = ++{ ++ "vbeprobe", ++ vbeprobe_func, ++ BUILTIN_CMDLINE | BUILTIN_HELP_LIST, ++ "vbeprobe [MODE]", ++ "Probe VBE information. If the mode number MODE is specified, show only" ++ " the information about only the mode." ++}; ++ ++ ++/* The table of builtin commands. Sorted in dictionary order. */ ++struct builtin *builtin_table[] = ++{ ++ &builtin_blocklist, ++ &builtin_boot, ++#ifdef SUPPORT_NETBOOT ++ &builtin_bootp, ++#endif /* SUPPORT_NETBOOT */ ++ &builtin_cat, ++ &builtin_chainloader, ++ &builtin_cmp, ++ &builtin_color, ++ &builtin_configfile, ++ &builtin_debug, ++ &builtin_default, ++#ifdef GRUB_UTIL ++ &builtin_device, ++#endif /* GRUB_UTIL */ ++#ifdef SUPPORT_NETBOOT ++ &builtin_dhcp, ++#endif /* SUPPORT_NETBOOT */ ++ &builtin_displayapm, ++ &builtin_displaymem, ++#ifdef GRUB_UTIL ++ &builtin_dump, ++#endif /* GRUB_UTIL */ ++ &builtin_embed, ++ &builtin_fallback, ++ &builtin_find, ++ &builtin_fstest, ++ &builtin_geometry, ++ &builtin_halt, ++ &builtin_help, ++ &builtin_hiddenmenu, ++ &builtin_hide, ++#ifdef SUPPORT_NETBOOT ++ &builtin_ifconfig, ++#endif /* SUPPORT_NETBOOT */ ++ &builtin_impsprobe, ++ &builtin_initrd, ++ &builtin_install, ++ &builtin_ioprobe, ++ &builtin_kernel, ++ &builtin_lock, ++ &builtin_makeactive, ++ &builtin_map, ++#ifdef USE_MD5_PASSWORDS ++ &builtin_md5crypt, ++#endif /* USE_MD5_PASSWORDS */ ++ &builtin_module, ++ &builtin_modulenounzip, ++ &builtin_pager, ++ &builtin_partnew, ++ &builtin_parttype, ++ &builtin_password, ++ &builtin_pause, ++#ifdef GRUB_UTIL ++ &builtin_quit, ++#endif /* GRUB_UTIL */ ++#ifdef SUPPORT_NETBOOT ++ &builtin_rarp, ++#endif /* SUPPORT_NETBOOT */ ++ &builtin_read, ++ &builtin_reboot, ++ &builtin_root, ++ &builtin_rootnoverify, ++ &builtin_savedefault, ++#ifdef SUPPORT_SERIAL ++ &builtin_serial, ++#endif /* SUPPORT_SERIAL */ ++ &builtin_setkey, ++ &builtin_setup, ++#if defined(SUPPORT_SERIAL) || defined(SUPPORT_HERCULES) ++ &builtin_terminal, ++#endif /* SUPPORT_SERIAL || SUPPORT_HERCULES */ ++#ifdef SUPPORT_SERIAL ++ &builtin_terminfo, ++#endif /* SUPPORT_SERIAL */ ++ &builtin_testload, ++ &builtin_testvbe, ++#ifdef SUPPORT_NETBOOT ++ &builtin_tftpserver, ++#endif /* SUPPORT_NETBOOT */ ++ &builtin_timeout, ++ &builtin_title, ++ &builtin_unhide, ++ &builtin_uppermem, ++ &builtin_vbeprobe, ++ 0 ++}; +diff -Nur grub-0.97/stage2/char_io.c grub-0.97-patched/stage2/char_io.c +--- grub-0.97/stage2/char_io.c 2005-02-01 21:51:23.000000000 +0100 ++++ grub-0.97-patched/stage2/char_io.c 2012-11-11 17:06:52.556085241 +0100 +@@ -35,6 +35,7 @@ + { + "console", + 0, ++ 24, + console_putchar, + console_checkkey, + console_getkey, +@@ -43,13 +44,16 @@ + console_cls, + console_setcolorstate, + console_setcolor, +- console_setcursor ++ console_setcursor, ++ 0, ++ 0 + }, + #ifdef SUPPORT_SERIAL + { + "serial", + /* A serial device must be initialized. */ + TERM_NEED_INIT, ++ 24, + serial_putchar, + serial_checkkey, + serial_getkey, +@@ -58,6 +62,8 @@ + serial_cls, + serial_setcolorstate, + 0, ++ 0, ++ 0, + 0 + }, + #endif /* SUPPORT_SERIAL */ +@@ -65,6 +71,7 @@ + { + "hercules", + 0, ++ 24, + hercules_putchar, + console_checkkey, + console_getkey, +@@ -73,9 +80,28 @@ + hercules_cls, + hercules_setcolorstate, + hercules_setcolor, +- hercules_setcursor ++ hercules_setcursor, ++ 0, ++ 0 + }, + #endif /* SUPPORT_HERCULES */ ++#ifdef SUPPORT_GRAPHICS ++ { "graphics", ++ TERM_NEED_INIT, /* flags */ ++ 30, /* number of lines */ ++ graphics_putchar, /* putchar */ ++ console_checkkey, /* checkkey */ ++ console_getkey, /* getkey */ ++ graphics_getxy, /* getxy */ ++ graphics_gotoxy, /* gotoxy */ ++ graphics_cls, /* cls */ ++ graphics_setcolorstate, /* setcolorstate */ ++ graphics_setcolor, /* setcolor */ ++ graphics_setcursor, /* nocursor */ ++ graphics_init, /* initialize */ ++ graphics_end /* shutdown */ ++ }, ++#endif /* SUPPORT_GRAPHICS */ + /* This must be the last entry. */ + { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } + }; +@@ -1046,13 +1072,15 @@ + the following grub_printf call will print newlines. */ + count_lines = -1; + ++ grub_printf("\n"); + if (current_term->setcolorstate) + current_term->setcolorstate (COLOR_STATE_HIGHLIGHT); + +- grub_printf ("\n[Hit return to continue]"); ++ grub_printf ("[Hit return to continue]"); + + if (current_term->setcolorstate) + current_term->setcolorstate (COLOR_STATE_NORMAL); ++ + + do + { +@@ -1090,7 +1118,7 @@ + cls (void) + { + /* If the terminal is dumb, there is no way to clean the terminal. */ +- if (current_term->flags & TERM_DUMB) ++ if (current_term->flags & TERM_DUMB) + grub_putchar ('\n'); + else + current_term->cls (); +@@ -1174,37 +1202,62 @@ + } + #endif /* ! STAGE1_5 */ + ++#ifdef GRUB_UTIL ++# ifdef __PIC__ ++# if defined(HAVE_START_SYMBOL) && defined(HAVE_END_SYMBOL) ++ extern char start[]; ++ extern char end[]; ++# elif defined(HAVE_USCORE_START_SYMBOL) && defined (HAVE_USCORE_END_SYMBOL) ++ extern char _start[]; ++ extern char _end[]; ++# endif ++# endif ++#endif + int +-memcheck (int addr, int len) ++memcheck (unsigned long addr, unsigned long len) + { + #ifdef GRUB_UTIL +- auto int start_addr (void); +- auto int end_addr (void); ++# ifdef __PIC__ ++# if defined(HAVE_START_SYMBOL) && defined(HAVE_END_SYMBOL) ++ if (start <= addr && end > addr + len) ++ return ! errnum; ++# elif defined(HAVE_USCORE_START_SYMBOL) && defined (HAVE_USCORE_END_SYMBOL) ++ if (_start <= addr && _end > addr + len) ++ return ! errnum; ++# endif ++# else /* __PIC__ */ ++ auto unsigned long start_addr (void); ++ auto unsigned long end_addr (void); + +- auto int start_addr (void) ++ auto unsigned long start_addr (void) + { +- int ret; +-# if defined(HAVE_START_SYMBOL) ++ unsigned long ret; ++# if defined(HAVE_START_SYMBOL) + asm volatile ("movl $start, %0" : "=a" (ret)); +-# elif defined(HAVE_USCORE_START_SYMBOL) ++# elif defined(HAVE_USCORE_START_SYMBOL) + asm volatile ("movl $_start, %0" : "=a" (ret)); +-# endif ++# else ++ erk! /* function would return undefined data in this case - barf */ ++# endif + return ret; + } + +- auto int end_addr (void) ++ auto unsigned long end_addr (void) + { +- int ret; +-# if defined(HAVE_END_SYMBOL) ++ unsigned long ret; ++# if defined(HAVE_END_SYMBOL) + asm volatile ("movl $end, %0" : "=a" (ret)); +-# elif defined(HAVE_USCORE_END_SYMBOL) ++# elif defined(HAVE_USCORE_END_SYMBOL) + asm volatile ("movl $_end, %0" : "=a" (ret)); +-# endif ++# else ++ erk! /* function would return undefined data in this case - barf */ ++# endif + return ret; + } + + if (start_addr () <= addr && end_addr () > addr + len) + return ! errnum; ++# endif /* __PIC__ */ + #endif /* GRUB_UTIL */ + + if ((addr < RAW_ADDR (0x1000)) +@@ -1217,10 +1270,20 @@ + return ! errnum; + } + ++void ++grub_memcpy(void *dest, const void *src, int len) ++{ ++ int i; ++ register char *d = (char*)dest, *s = (char*)src; ++ ++ for (i = 0; i < len; i++) ++ d[i] = s[i]; ++} ++ + void * + grub_memmove (void *to, const void *from, int len) + { +- if (memcheck ((int) to, len)) ++ if (memcheck ((unsigned long) to, len)) + { + /* This assembly code is stolen from + linux-2.2.2/include/asm-i386/string.h. This is not very fast +@@ -1258,7 +1321,7 @@ + { + char *p = start; + +- if (memcheck ((int) start, len)) ++ if (memcheck ((unsigned long) start, len)) + { + while (len -- > 0) + *p ++ = c; +diff -Nur grub-0.97/stage2/char_io.c.orig grub-0.97-patched/stage2/char_io.c.orig +--- grub-0.97/stage2/char_io.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/char_io.c.orig 2005-02-01 21:51:23.000000000 +0100 +@@ -0,0 +1,1283 @@ ++/* char_io.c - basic console input and output */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 1999,2000,2001,2002,2004 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 <shared.h> ++#include <term.h> ++ ++#ifdef SUPPORT_HERCULES ++# include <hercules.h> ++#endif ++ ++#ifdef SUPPORT_SERIAL ++# include <serial.h> ++#endif ++ ++#ifndef STAGE1_5 ++struct term_entry term_table[] = ++ { ++ { ++ "console", ++ 0, ++ console_putchar, ++ console_checkkey, ++ console_getkey, ++ console_getxy, ++ console_gotoxy, ++ console_cls, ++ console_setcolorstate, ++ console_setcolor, ++ console_setcursor ++ }, ++#ifdef SUPPORT_SERIAL ++ { ++ "serial", ++ /* A serial device must be initialized. */ ++ TERM_NEED_INIT, ++ serial_putchar, ++ serial_checkkey, ++ serial_getkey, ++ serial_getxy, ++ serial_gotoxy, ++ serial_cls, ++ serial_setcolorstate, ++ 0, ++ 0 ++ }, ++#endif /* SUPPORT_SERIAL */ ++#ifdef SUPPORT_HERCULES ++ { ++ "hercules", ++ 0, ++ hercules_putchar, ++ console_checkkey, ++ console_getkey, ++ hercules_getxy, ++ hercules_gotoxy, ++ hercules_cls, ++ hercules_setcolorstate, ++ hercules_setcolor, ++ hercules_setcursor ++ }, ++#endif /* SUPPORT_HERCULES */ ++ /* This must be the last entry. */ ++ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } ++ }; ++ ++/* This must be console. */ ++struct term_entry *current_term = term_table; ++ ++int max_lines = 24; ++int count_lines = -1; ++int use_pager = 1; ++#endif ++ ++void ++print_error (void) ++{ ++ if (errnum > ERR_NONE && errnum < MAX_ERR_NUM) ++#ifndef STAGE1_5 ++ /* printf("\7\n %s\n", err_list[errnum]); */ ++ printf ("\nError %u: %s\n", errnum, err_list[errnum]); ++#else /* STAGE1_5 */ ++ printf ("Error %u\n", errnum); ++#endif /* STAGE1_5 */ ++} ++ ++char * ++convert_to_ascii (char *buf, int c,...) ++{ ++ unsigned long num = *((&c) + 1), mult = 10; ++ char *ptr = buf; ++ ++#ifndef STAGE1_5 ++ if (c == 'x' || c == 'X') ++ mult = 16; ++ ++ if ((num & 0x80000000uL) && c == 'd') ++ { ++ num = (~num) + 1; ++ *(ptr++) = '-'; ++ buf++; ++ } ++#endif ++ ++ do ++ { ++ int dig = num % mult; ++ *(ptr++) = ((dig > 9) ? dig + 'a' - 10 : '0' + dig); ++ } ++ while (num /= mult); ++ ++ /* reorder to correct direction!! */ ++ { ++ char *ptr1 = ptr - 1; ++ char *ptr2 = buf; ++ while (ptr1 > ptr2) ++ { ++ int tmp = *ptr1; ++ *ptr1 = *ptr2; ++ *ptr2 = tmp; ++ ptr1--; ++ ptr2++; ++ } ++ } ++ ++ return ptr; ++} ++ ++void ++grub_putstr (const char *str) ++{ ++ while (*str) ++ grub_putchar (*str++); ++} ++ ++void ++grub_printf (const char *format,...) ++{ ++ int *dataptr = (int *) &format; ++ char c, str[16]; ++ ++ dataptr++; ++ ++ while ((c = *(format++)) != 0) ++ { ++ if (c != '%') ++ grub_putchar (c); ++ else ++ switch (c = *(format++)) ++ { ++#ifndef STAGE1_5 ++ case 'd': ++ case 'x': ++ case 'X': ++#endif ++ case 'u': ++ *convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0; ++ grub_putstr (str); ++ break; ++ ++#ifndef STAGE1_5 ++ case 'c': ++ grub_putchar ((*(dataptr++)) & 0xff); ++ break; ++ ++ case 's': ++ grub_putstr ((char *) *(dataptr++)); ++ break; ++#endif ++ } ++ } ++} ++ ++#ifndef STAGE1_5 ++int ++grub_sprintf (char *buffer, const char *format, ...) ++{ ++ /* XXX hohmuth ++ ugly hack -- should unify with printf() */ ++ int *dataptr = (int *) &format; ++ char c, *ptr, str[16]; ++ char *bp = buffer; ++ ++ dataptr++; ++ ++ while ((c = *format++) != 0) ++ { ++ if (c != '%') ++ *bp++ = c; /* putchar(c); */ ++ else ++ switch (c = *(format++)) ++ { ++ case 'd': case 'u': case 'x': ++ *convert_to_ascii (str, c, *((unsigned long *) dataptr++)) = 0; ++ ++ ptr = str; ++ ++ while (*ptr) ++ *bp++ = *(ptr++); /* putchar(*(ptr++)); */ ++ break; ++ ++ case 'c': *bp++ = (*(dataptr++))&0xff; ++ /* putchar((*(dataptr++))&0xff); */ ++ break; ++ ++ case 's': ++ ptr = (char *) (*(dataptr++)); ++ ++ while ((c = *ptr++) != 0) ++ *bp++ = c; /* putchar(c); */ ++ break; ++ } ++ } ++ ++ *bp = 0; ++ return bp - buffer; ++} ++ ++ ++void ++init_page (void) ++{ ++ cls (); ++ ++ grub_printf ("\n GNU GRUB version %s (%dK lower / %dK upper memory)\n\n", ++ version_string, mbi.mem_lower, mbi.mem_upper); ++} ++ ++/* The number of the history entries. */ ++static int num_history = 0; ++ ++/* Get the NOth history. If NO is less than zero or greater than or ++ equal to NUM_HISTORY, return NULL. Otherwise return a valid string. */ ++static char * ++get_history (int no) ++{ ++ if (no < 0 || no >= num_history) ++ return 0; ++ ++ return (char *) HISTORY_BUF + MAX_CMDLINE * no; ++} ++ ++/* Add CMDLINE to the history buffer. */ ++static void ++add_history (const char *cmdline, int no) ++{ ++ grub_memmove ((char *) HISTORY_BUF + MAX_CMDLINE * (no + 1), ++ (char *) HISTORY_BUF + MAX_CMDLINE * no, ++ MAX_CMDLINE * (num_history - no)); ++ grub_strcpy ((char *) HISTORY_BUF + MAX_CMDLINE * no, cmdline); ++ if (num_history < HISTORY_SIZE) ++ num_history++; ++} ++ ++static int ++real_get_cmdline (char *prompt, char *cmdline, int maxlen, ++ int echo_char, int readline) ++{ ++ /* This is a rather complicated function. So explain the concept. ++ ++ A command-line consists of ``section''s. A section is a part of the ++ line which may be displayed on the screen, but a section is never ++ displayed with another section simultaneously. ++ ++ Each section is basically 77 or less characters, but the exception ++ is the first section, which is 78 or less characters, because the ++ starting point is special. See below. ++ ++ The first section contains a prompt and a command-line (or the ++ first part of a command-line when it is too long to be fit in the ++ screen). So, in the first section, the number of command-line ++ characters displayed is 78 minus the length of the prompt (or ++ less). If the command-line has more characters, `>' is put at the ++ position 78 (zero-origin), to inform the user of the hidden ++ characters. ++ ++ Other sections always have `<' at the first position, since there ++ is absolutely a section before each section. If there is a section ++ after another section, this section consists of 77 characters and ++ `>' at the last position. The last section has 77 or less ++ characters and doesn't have `>'. ++ ++ Each section other than the last shares some characters with the ++ previous section. This region is called ``margin''. If the cursor ++ is put at the magin which is shared by the first section and the ++ second, the first section is displayed. Otherwise, a displayed ++ section is switched to another section, only if the cursor is put ++ outside that section. */ ++ ++ /* XXX: These should be defined in shared.h, but I leave these here, ++ until this code is freezed. */ ++#define CMDLINE_WIDTH 78 ++#define CMDLINE_MARGIN 10 ++ ++ int xpos, lpos, c, section; ++ /* The length of PROMPT. */ ++ int plen; ++ /* The length of the command-line. */ ++ int llen; ++ /* The index for the history. */ ++ int history = -1; ++ /* The working buffer for the command-line. */ ++ char *buf = (char *) CMDLINE_BUF; ++ /* The kill buffer. */ ++ char *kill_buf = (char *) KILL_BUF; ++ ++ /* Nested function definitions for code simplicity. */ ++ ++ /* The forward declarations of nested functions are prefixed ++ with `auto'. */ ++ auto void cl_refresh (int full, int len); ++ auto void cl_backward (int count); ++ auto void cl_forward (int count); ++ auto void cl_insert (const char *str); ++ auto void cl_delete (int count); ++ auto void cl_init (void); ++ ++ /* Move the cursor backward. */ ++ void cl_backward (int count) ++ { ++ lpos -= count; ++ ++ /* If the cursor is in the first section, display the first section ++ instead of the second. */ ++ if (section == 1 && plen + lpos < CMDLINE_WIDTH) ++ cl_refresh (1, 0); ++ else if (xpos - count < 1) ++ cl_refresh (1, 0); ++ else ++ { ++ xpos -= count; ++ ++ if (current_term->flags & TERM_DUMB) ++ { ++ int i; ++ ++ for (i = 0; i < count; i++) ++ grub_putchar ('\b'); ++ } ++ else ++ gotoxy (xpos, getxy () & 0xFF); ++ } ++ } ++ ++ /* Move the cursor forward. */ ++ void cl_forward (int count) ++ { ++ lpos += count; ++ ++ /* If the cursor goes outside, scroll the screen to the right. */ ++ if (xpos + count >= CMDLINE_WIDTH) ++ cl_refresh (1, 0); ++ else ++ { ++ xpos += count; ++ ++ if (current_term->flags & TERM_DUMB) ++ { ++ int i; ++ ++ for (i = lpos - count; i < lpos; i++) ++ { ++ if (! echo_char) ++ grub_putchar (buf[i]); ++ else ++ grub_putchar (echo_char); ++ } ++ } ++ else ++ gotoxy (xpos, getxy () & 0xFF); ++ } ++ } ++ ++ /* Refresh the screen. If FULL is true, redraw the full line, otherwise, ++ only LEN characters from LPOS. */ ++ void cl_refresh (int full, int len) ++ { ++ int i; ++ int start; ++ int pos = xpos; ++ ++ if (full) ++ { ++ /* Recompute the section number. */ ++ if (lpos + plen < CMDLINE_WIDTH) ++ section = 0; ++ else ++ section = ((lpos + plen - CMDLINE_WIDTH) ++ / (CMDLINE_WIDTH - 1 - CMDLINE_MARGIN) + 1); ++ ++ /* From the start to the end. */ ++ len = CMDLINE_WIDTH; ++ pos = 0; ++ grub_putchar ('\r'); ++ ++ /* If SECTION is the first section, print the prompt, otherwise, ++ print `<'. */ ++ if (section == 0) ++ { ++ grub_printf ("%s", prompt); ++ len -= plen; ++ pos += plen; ++ } ++ else ++ { ++ grub_putchar ('<'); ++ len--; ++ pos++; ++ } ++ } ++ ++ /* Compute the index to start writing BUF and the resulting position ++ on the screen. */ ++ if (section == 0) ++ { ++ int offset = 0; ++ ++ if (! full) ++ offset = xpos - plen; ++ ++ start = 0; ++ xpos = lpos + plen; ++ start += offset; ++ } ++ else ++ { ++ int offset = 0; ++ ++ if (! full) ++ offset = xpos - 1; ++ ++ start = ((section - 1) * (CMDLINE_WIDTH - 1 - CMDLINE_MARGIN) ++ + CMDLINE_WIDTH - plen - CMDLINE_MARGIN); ++ xpos = lpos + 1 - start; ++ start += offset; ++ } ++ ++ /* Print BUF. If ECHO_CHAR is not zero, put it instead. */ ++ for (i = start; i < start + len && i < llen; i++) ++ { ++ if (! echo_char) ++ grub_putchar (buf[i]); ++ else ++ grub_putchar (echo_char); ++ ++ pos++; ++ } ++ ++ /* Fill up the rest of the line with spaces. */ ++ for (; i < start + len; i++) ++ { ++ grub_putchar (' '); ++ pos++; ++ } ++ ++ /* If the cursor is at the last position, put `>' or a space, ++ depending on if there are more characters in BUF. */ ++ if (pos == CMDLINE_WIDTH) ++ { ++ if (start + len < llen) ++ grub_putchar ('>'); ++ else ++ grub_putchar (' '); ++ ++ pos++; ++ } ++ ++ /* Back to XPOS. */ ++ if (current_term->flags & TERM_DUMB) ++ { ++ for (i = 0; i < pos - xpos; i++) ++ grub_putchar ('\b'); ++ } ++ else ++ gotoxy (xpos, getxy () & 0xFF); ++ } ++ ++ /* Initialize the command-line. */ ++ void cl_init (void) ++ { ++ /* Distinguish us from other lines and error messages! */ ++ grub_putchar ('\n'); ++ ++ /* Print full line and set position here. */ ++ cl_refresh (1, 0); ++ } ++ ++ /* Insert STR to BUF. */ ++ void cl_insert (const char *str) ++ { ++ int l = grub_strlen (str); ++ ++ if (llen + l < maxlen) ++ { ++ if (lpos == llen) ++ grub_memmove (buf + lpos, str, l + 1); ++ else ++ { ++ grub_memmove (buf + lpos + l, buf + lpos, llen - lpos + 1); ++ grub_memmove (buf + lpos, str, l); ++ } ++ ++ llen += l; ++ lpos += l; ++ if (xpos + l >= CMDLINE_WIDTH) ++ cl_refresh (1, 0); ++ else if (xpos + l + llen - lpos > CMDLINE_WIDTH) ++ cl_refresh (0, CMDLINE_WIDTH - xpos); ++ else ++ cl_refresh (0, l + llen - lpos); ++ } ++ } ++ ++ /* Delete COUNT characters in BUF. */ ++ void cl_delete (int count) ++ { ++ grub_memmove (buf + lpos, buf + lpos + count, llen - count + 1); ++ llen -= count; ++ ++ if (xpos + llen + count - lpos > CMDLINE_WIDTH) ++ cl_refresh (0, CMDLINE_WIDTH - xpos); ++ else ++ cl_refresh (0, llen + count - lpos); ++ } ++ ++ plen = grub_strlen (prompt); ++ llen = grub_strlen (cmdline); ++ ++ if (maxlen > MAX_CMDLINE) ++ { ++ maxlen = MAX_CMDLINE; ++ if (llen >= MAX_CMDLINE) ++ { ++ llen = MAX_CMDLINE - 1; ++ cmdline[MAX_CMDLINE] = 0; ++ } ++ } ++ lpos = llen; ++ grub_strcpy (buf, cmdline); ++ ++ cl_init (); ++ ++ while ((c = ASCII_CHAR (getkey ())) != '\n' && c != '\r') ++ { ++ /* If READLINE is non-zero, handle readline-like key bindings. */ ++ if (readline) ++ { ++ switch (c) ++ { ++ case 9: /* TAB lists completions */ ++ { ++ int i; ++ /* POS points to the first space after a command. */ ++ int pos = 0; ++ int ret; ++ char *completion_buffer = (char *) COMPLETION_BUF; ++ int equal_pos = -1; ++ int is_filename; ++ ++ /* Find the first word. */ ++ while (buf[pos] == ' ') ++ pos++; ++ while (buf[pos] && buf[pos] != '=' && buf[pos] != ' ') ++ pos++; ++ ++ is_filename = (lpos > pos); ++ ++ /* Find the position of the equal character after a ++ command, and replace it with a space. */ ++ for (i = pos; buf[i] && buf[i] != ' '; i++) ++ if (buf[i] == '=') ++ { ++ equal_pos = i; ++ buf[i] = ' '; ++ break; ++ } ++ ++ /* Find the position of the first character in this ++ word. */ ++ for (i = lpos; i > 0 && buf[i - 1] != ' '; i--) ++ ; ++ ++ /* Invalidate the cache, because the user may exchange ++ removable disks. */ ++ buf_drive = -1; ++ ++ /* Copy this word to COMPLETION_BUFFER and do the ++ completion. */ ++ grub_memmove (completion_buffer, buf + i, lpos - i); ++ completion_buffer[lpos - i] = 0; ++ ret = print_completions (is_filename, 1); ++ errnum = ERR_NONE; ++ ++ if (ret >= 0) ++ { ++ /* Found, so insert COMPLETION_BUFFER. */ ++ cl_insert (completion_buffer + lpos - i); ++ ++ if (ret > 0) ++ { ++ /* There are more than one candidates, so print ++ the list. */ ++ grub_putchar ('\n'); ++ print_completions (is_filename, 0); ++ errnum = ERR_NONE; ++ } ++ } ++ ++ /* Restore the command-line. */ ++ if (equal_pos >= 0) ++ buf[equal_pos] = '='; ++ ++ if (ret) ++ cl_init (); ++ } ++ break; ++ case 1: /* C-a go to beginning of line */ ++ cl_backward (lpos); ++ break; ++ case 5: /* C-e go to end of line */ ++ cl_forward (llen - lpos); ++ break; ++ case 6: /* C-f forward one character */ ++ if (lpos < llen) ++ cl_forward (1); ++ break; ++ case 2: /* C-b backward one character */ ++ if (lpos > 0) ++ cl_backward (1); ++ break; ++ case 21: /* C-u kill to beginning of line */ ++ if (lpos == 0) ++ break; ++ /* Copy the string being deleted to KILL_BUF. */ ++ grub_memmove (kill_buf, buf, lpos); ++ kill_buf[lpos] = 0; ++ { ++ /* XXX: Not very clever. */ ++ ++ int count = lpos; ++ ++ cl_backward (lpos); ++ cl_delete (count); ++ } ++ break; ++ case 11: /* C-k kill to end of line */ ++ if (lpos == llen) ++ break; ++ /* Copy the string being deleted to KILL_BUF. */ ++ grub_memmove (kill_buf, buf + lpos, llen - lpos + 1); ++ cl_delete (llen - lpos); ++ break; ++ case 25: /* C-y yank the kill buffer */ ++ cl_insert (kill_buf); ++ break; ++ case 16: /* C-p fetch the previous command */ ++ { ++ char *p; ++ ++ if (history < 0) ++ /* Save the working buffer. */ ++ grub_strcpy (cmdline, buf); ++ else if (grub_strcmp (get_history (history), buf) != 0) ++ /* If BUF is modified, add it into the history list. */ ++ add_history (buf, history); ++ ++ history++; ++ p = get_history (history); ++ if (! p) ++ { ++ history--; ++ break; ++ } ++ ++ grub_strcpy (buf, p); ++ llen = grub_strlen (buf); ++ lpos = llen; ++ cl_refresh (1, 0); ++ } ++ break; ++ case 14: /* C-n fetch the next command */ ++ { ++ char *p; ++ ++ if (history < 0) ++ { ++ break; ++ } ++ else if (grub_strcmp (get_history (history), buf) != 0) ++ /* If BUF is modified, add it into the history list. */ ++ add_history (buf, history); ++ ++ history--; ++ p = get_history (history); ++ if (! p) ++ p = cmdline; ++ ++ grub_strcpy (buf, p); ++ llen = grub_strlen (buf); ++ lpos = llen; ++ cl_refresh (1, 0); ++ } ++ break; ++ } ++ } ++ ++ /* ESC, C-d and C-h are always handled. Actually C-d is not ++ functional if READLINE is zero, as the cursor cannot go ++ backward, but that's ok. */ ++ switch (c) ++ { ++ case 27: /* ESC immediately return 1 */ ++ return 1; ++ case 4: /* C-d delete character under cursor */ ++ if (lpos == llen) ++ break; ++ cl_delete (1); ++ break; ++ case 8: /* C-h backspace */ ++# ifdef GRUB_UTIL ++ case 127: /* also backspace */ ++# endif ++ if (lpos > 0) ++ { ++ cl_backward (1); ++ cl_delete (1); ++ } ++ break; ++ default: /* insert printable character into line */ ++ if (c >= ' ' && c <= '~') ++ { ++ char str[2]; ++ ++ str[0] = c; ++ str[1] = 0; ++ cl_insert (str); ++ } ++ } ++ } ++ ++ grub_putchar ('\n'); ++ ++ /* If ECHO_CHAR is NUL, remove the leading spaces. */ ++ lpos = 0; ++ if (! echo_char) ++ while (buf[lpos] == ' ') ++ lpos++; ++ ++ /* Copy the working buffer to CMDLINE. */ ++ grub_memmove (cmdline, buf + lpos, llen - lpos + 1); ++ ++ /* If the readline-like feature is turned on and CMDLINE is not ++ empty, add it into the history list. */ ++ if (readline && lpos < llen) ++ add_history (cmdline, 0); ++ ++ return 0; ++} ++ ++/* Don't use this with a MAXLEN greater than 1600 or so! The problem ++ is that GET_CMDLINE depends on the everything fitting on the screen ++ at once. So, the whole screen is about 2000 characters, minus the ++ PROMPT, and space for error and status lines, etc. MAXLEN must be ++ at least 1, and PROMPT and CMDLINE must be valid strings (not NULL ++ or zero-length). ++ ++ If ECHO_CHAR is nonzero, echo it instead of the typed character. */ ++int ++get_cmdline (char *prompt, char *cmdline, int maxlen, ++ int echo_char, int readline) ++{ ++ int old_cursor; ++ int ret; ++ ++ old_cursor = setcursor (1); ++ ++ /* Because it is hard to deal with different conditions simultaneously, ++ less functional cases are handled here. Assume that TERM_NO_ECHO ++ implies TERM_NO_EDIT. */ ++ if (current_term->flags & (TERM_NO_ECHO | TERM_NO_EDIT)) ++ { ++ char *p = cmdline; ++ int c; ++ ++ /* Make sure that MAXLEN is not too large. */ ++ if (maxlen > MAX_CMDLINE) ++ maxlen = MAX_CMDLINE; ++ ++ /* Print only the prompt. The contents of CMDLINE is simply discarded, ++ even if it is not empty. */ ++ grub_printf ("%s", prompt); ++ ++ /* Gather characters until a newline is gotten. */ ++ while ((c = ASCII_CHAR (getkey ())) != '\n' && c != '\r') ++ { ++ /* Return immediately if ESC is pressed. */ ++ if (c == 27) ++ { ++ setcursor (old_cursor); ++ return 1; ++ } ++ ++ /* Printable characters are added into CMDLINE. */ ++ if (c >= ' ' && c <= '~') ++ { ++ if (! (current_term->flags & TERM_NO_ECHO)) ++ grub_putchar (c); ++ ++ /* Preceding space characters must be ignored. */ ++ if (c != ' ' || p != cmdline) ++ *p++ = c; ++ } ++ } ++ ++ *p = 0; ++ ++ if (! (current_term->flags & TERM_NO_ECHO)) ++ grub_putchar ('\n'); ++ ++ setcursor (old_cursor); ++ return 0; ++ } ++ ++ /* Complicated features are left to real_get_cmdline. */ ++ ret = real_get_cmdline (prompt, cmdline, maxlen, echo_char, readline); ++ setcursor (old_cursor); ++ return ret; ++} ++ ++int ++safe_parse_maxint (char **str_ptr, int *myint_ptr) ++{ ++ char *ptr = *str_ptr; ++ int myint = 0; ++ int mult = 10, found = 0; ++ ++ /* ++ * Is this a hex number? ++ */ ++ if (*ptr == '0' && tolower (*(ptr + 1)) == 'x') ++ { ++ ptr += 2; ++ mult = 16; ++ } ++ ++ while (1) ++ { ++ /* A bit tricky. This below makes use of the equivalence: ++ (A >= B && A <= C) <=> ((A - B) <= (C - B)) ++ when C > B and A is unsigned. */ ++ unsigned int digit; ++ ++ digit = tolower (*ptr) - '0'; ++ if (digit > 9) ++ { ++ digit -= 'a' - '0'; ++ if (mult == 10 || digit > 5) ++ break; ++ digit += 10; ++ } ++ ++ found = 1; ++ if (myint > ((MAXINT - digit) / mult)) ++ { ++ errnum = ERR_NUMBER_OVERFLOW; ++ return 0; ++ } ++ myint = (myint * mult) + digit; ++ ptr++; ++ } ++ ++ if (!found) ++ { ++ errnum = ERR_NUMBER_PARSING; ++ return 0; ++ } ++ ++ *str_ptr = ptr; ++ *myint_ptr = myint; ++ ++ return 1; ++} ++#endif /* STAGE1_5 */ ++ ++#if !defined(STAGE1_5) || defined(FSYS_FAT) ++int ++grub_tolower (int c) ++{ ++ if (c >= 'A' && c <= 'Z') ++ return (c + ('a' - 'A')); ++ ++ return c; ++} ++#endif /* ! STAGE1_5 || FSYS_FAT */ ++ ++int ++grub_isspace (int c) ++{ ++ switch (c) ++ { ++ case ' ': ++ case '\t': ++ case '\r': ++ case '\n': ++ return 1; ++ default: ++ break; ++ } ++ ++ return 0; ++} ++ ++#if !defined(STAGE1_5) || defined(FSYS_ISO9660) ++int ++grub_memcmp (const char *s1, const char *s2, int n) ++{ ++ while (n) ++ { ++ if (*s1 < *s2) ++ return -1; ++ else if (*s1 > *s2) ++ return 1; ++ s1++; ++ s2++; ++ n--; ++ } ++ ++ return 0; ++} ++#endif /* ! STAGE1_5 || FSYS_ISO9660 */ ++ ++#ifndef STAGE1_5 ++int ++grub_strncat (char *s1, const char *s2, int n) ++{ ++ int i = -1; ++ ++ while (++i < n && s1[i] != 0); ++ ++ while (i < n && (s1[i++] = *(s2++)) != 0); ++ ++ s1[n - 1] = 0; ++ ++ if (i >= n) ++ return 0; ++ ++ s1[i] = 0; ++ ++ return 1; ++} ++#endif /* ! STAGE1_5 */ ++ ++/* XXX: This below is an evil hack. Certainly, we should change the ++ strategy to determine what should be defined and what shouldn't be ++ defined for each image. For example, it would be better to create ++ a static library supporting minimal standard C functions and link ++ each image with the library. Complicated things should be left to ++ computer, definitely. -okuji */ ++#if !defined(STAGE1_5) || defined(FSYS_VSTAFS) ++int ++grub_strcmp (const char *s1, const char *s2) ++{ ++ while (*s1 || *s2) ++ { ++ if (*s1 < *s2) ++ return -1; ++ else if (*s1 > *s2) ++ return 1; ++ s1 ++; ++ s2 ++; ++ } ++ ++ return 0; ++} ++#endif /* ! STAGE1_5 || FSYS_VSTAFS */ ++ ++#ifndef STAGE1_5 ++/* Wait for a keypress and return its code. */ ++int ++getkey (void) ++{ ++ return current_term->getkey (); ++} ++ ++/* Check if a key code is available. */ ++int ++checkkey (void) ++{ ++ return current_term->checkkey (); ++} ++#endif /* ! STAGE1_5 */ ++ ++/* Display an ASCII character. */ ++void ++grub_putchar (int c) ++{ ++ if (c == '\n') ++ grub_putchar ('\r'); ++#ifndef STAGE1_5 ++ else if (c == '\t' && current_term->getxy) ++ { ++ int n; ++ ++ n = 8 - ((current_term->getxy () >> 8) & 3); ++ while (n--) ++ grub_putchar (' '); ++ ++ return; ++ } ++#endif /* ! STAGE1_5 */ ++ ++#ifdef STAGE1_5 ++ ++ /* In Stage 1.5, only the normal console is supported. */ ++ console_putchar (c); ++ ++#else /* ! STAGE1_5 */ ++ ++ if (c == '\n') ++ { ++ /* Internal `more'-like feature. */ ++ if (count_lines >= 0) ++ { ++ count_lines++; ++ if (count_lines >= max_lines - 2) ++ { ++ int tmp; ++ ++ /* It's important to disable the feature temporarily, because ++ the following grub_printf call will print newlines. */ ++ count_lines = -1; ++ ++ if (current_term->setcolorstate) ++ current_term->setcolorstate (COLOR_STATE_HIGHLIGHT); ++ ++ grub_printf ("\n[Hit return to continue]"); ++ ++ if (current_term->setcolorstate) ++ current_term->setcolorstate (COLOR_STATE_NORMAL); ++ ++ do ++ { ++ tmp = ASCII_CHAR (getkey ()); ++ } ++ while (tmp != '\n' && tmp != '\r'); ++ grub_printf ("\r \r"); ++ ++ /* Restart to count lines. */ ++ count_lines = 0; ++ return; ++ } ++ } ++ } ++ ++ current_term->putchar (c); ++ ++#endif /* ! STAGE1_5 */ ++} ++ ++#ifndef STAGE1_5 ++void ++gotoxy (int x, int y) ++{ ++ current_term->gotoxy (x, y); ++} ++ ++int ++getxy (void) ++{ ++ return current_term->getxy (); ++} ++ ++void ++cls (void) ++{ ++ /* If the terminal is dumb, there is no way to clean the terminal. */ ++ if (current_term->flags & TERM_DUMB) ++ grub_putchar ('\n'); ++ else ++ current_term->cls (); ++} ++ ++int ++setcursor (int on) ++{ ++ if (current_term->setcursor) ++ return current_term->setcursor (on); ++ ++ return 1; ++} ++#endif /* ! STAGE1_5 */ ++ ++int ++substring (const char *s1, const char *s2) ++{ ++ while (*s1 == *s2) ++ { ++ /* The strings match exactly. */ ++ if (! *(s1++)) ++ return 0; ++ s2 ++; ++ } ++ ++ /* S1 is a substring of S2. */ ++ if (*s1 == 0) ++ return -1; ++ ++ /* S1 isn't a substring. */ ++ return 1; ++} ++ ++#ifndef STAGE1_5 ++/* Terminate the string STR with NUL. */ ++int ++nul_terminate (char *str) ++{ ++ int ch; ++ ++ while (*str && ! grub_isspace (*str)) ++ str++; ++ ++ ch = *str; ++ *str = 0; ++ return ch; ++} ++ ++char * ++grub_strstr (const char *s1, const char *s2) ++{ ++ while (*s1) ++ { ++ const char *ptr, *tmp; ++ ++ ptr = s1; ++ tmp = s2; ++ ++ while (*tmp && *ptr == *tmp) ++ ptr++, tmp++; ++ ++ if (tmp > s2 && ! *tmp) ++ return (char *) s1; ++ ++ s1++; ++ } ++ ++ return 0; ++} ++ ++int ++grub_strlen (const char *str) ++{ ++ int len = 0; ++ ++ while (*str++) ++ len++; ++ ++ return len; ++} ++#endif /* ! STAGE1_5 */ ++ ++int ++memcheck (int addr, int len) ++{ ++#ifdef GRUB_UTIL ++ auto int start_addr (void); ++ auto int end_addr (void); ++ ++ auto int start_addr (void) ++ { ++ int ret; ++# if defined(HAVE_START_SYMBOL) ++ asm volatile ("movl $start, %0" : "=a" (ret)); ++# elif defined(HAVE_USCORE_START_SYMBOL) ++ asm volatile ("movl $_start, %0" : "=a" (ret)); ++# endif ++ return ret; ++ } ++ ++ auto int end_addr (void) ++ { ++ int ret; ++# if defined(HAVE_END_SYMBOL) ++ asm volatile ("movl $end, %0" : "=a" (ret)); ++# elif defined(HAVE_USCORE_END_SYMBOL) ++ asm volatile ("movl $_end, %0" : "=a" (ret)); ++# endif ++ return ret; ++ } ++ ++ if (start_addr () <= addr && end_addr () > addr + len) ++ return ! errnum; ++#endif /* GRUB_UTIL */ ++ ++ if ((addr < RAW_ADDR (0x1000)) ++ || (addr < RAW_ADDR (0x100000) ++ && RAW_ADDR (mbi.mem_lower * 1024) < (addr + len)) ++ || (addr >= RAW_ADDR (0x100000) ++ && RAW_ADDR (mbi.mem_upper * 1024) < ((addr - 0x100000) + len))) ++ errnum = ERR_WONT_FIT; ++ ++ return ! errnum; ++} ++ ++void * ++grub_memmove (void *to, const void *from, int len) ++{ ++ if (memcheck ((int) to, len)) ++ { ++ /* This assembly code is stolen from ++ linux-2.2.2/include/asm-i386/string.h. This is not very fast ++ but compact. */ ++ int d0, d1, d2; ++ ++ if (to < from) ++ { ++ asm volatile ("cld\n\t" ++ "rep\n\t" ++ "movsb" ++ : "=&c" (d0), "=&S" (d1), "=&D" (d2) ++ : "0" (len),"1" (from),"2" (to) ++ : "memory"); ++ } ++ else ++ { ++ asm volatile ("std\n\t" ++ "rep\n\t" ++ "movsb\n\t" ++ "cld" ++ : "=&c" (d0), "=&S" (d1), "=&D" (d2) ++ : "0" (len), ++ "1" (len - 1 + (const char *) from), ++ "2" (len - 1 + (char *) to) ++ : "memory"); ++ } ++ } ++ ++ return errnum ? NULL : to; ++} ++ ++void * ++grub_memset (void *start, int c, int len) ++{ ++ char *p = start; ++ ++ if (memcheck ((int) start, len)) ++ { ++ while (len -- > 0) ++ *p ++ = c; ++ } ++ ++ return errnum ? NULL : start; ++} ++ ++#ifndef STAGE1_5 ++char * ++grub_strcpy (char *dest, const char *src) ++{ ++ grub_memmove (dest, src, grub_strlen (src) + 1); ++ return dest; ++} ++#endif /* ! STAGE1_5 */ ++ ++#ifndef GRUB_UTIL ++# undef memcpy ++/* GCC emits references to memcpy() for struct copies etc. */ ++void *memcpy (void *dest, const void *src, int n) __attribute__ ((alias ("grub_memmove"))); ++#endif +diff -Nur grub-0.97/stage2/common.c grub-0.97-patched/stage2/common.c +--- grub-0.97/stage2/common.c 2004-03-27 17:25:44.000000000 +0100 ++++ grub-0.97-patched/stage2/common.c 2012-11-11 17:06:52.558085305 +0100 +@@ -142,7 +142,8 @@ + init_bios_info (void) + { + #ifndef STAGE1_5 +- unsigned long cont, memtmp, addr; ++ unsigned long memtmp, addr; ++ volatile unsigned long cont; + int drive; + #endif + +diff -Nur grub-0.97/stage2/disk_io.c grub-0.97-patched/stage2/disk_io.c +--- grub-0.97/stage2/disk_io.c 2004-05-23 18:35:24.000000000 +0200 ++++ grub-0.97-patched/stage2/disk_io.c 2012-11-11 17:07:12.740730013 +0100 +@@ -21,6 +21,7 @@ + + #include <shared.h> + #include <filesys.h> ++#include <gpt.h> + + #ifdef SUPPORT_NETBOOT + # define GRUB 1 +@@ -137,7 +138,7 @@ + } + + int +-rawread (int drive, int sector, int byte_offset, int byte_len, char *buf) ++rawread (int drive, unsigned int sector, int byte_offset, int byte_len, char *buf) + { + int slen, sectors_per_vtrack; + int sector_size_bits = log2 (buf_geom.sector_size); +@@ -261,7 +262,7 @@ + */ + if (disk_read_func) + { +- int sector_num = sector; ++ unsigned int sector_num = sector; + int length = buf_geom.sector_size - byte_offset; + if (length > size) + length = size; +@@ -291,7 +292,7 @@ + + + int +-devread (int sector, int byte_offset, int byte_len, char *buf) ++devread (unsigned int sector, int byte_offset, int byte_len, char *buf) + { + /* + * Check partition boundaries +@@ -330,7 +331,7 @@ + + #ifndef STAGE1_5 + int +-rawwrite (int drive, int sector, char *buf) ++rawwrite (int drive, unsigned int sector, char *buf) + { + if (sector == 0) + { +@@ -363,7 +364,7 @@ + } + + int +-devwrite (int sector, int sector_count, char *buf) ++devwrite (unsigned int sector, int sector_count, char *buf) + { + #if defined(GRUB_UTIL) && defined(__linux__) + if (current_partition != 0xFFFFFF +@@ -502,8 +503,8 @@ + set_partition_hidden_flag (int hidden) + { + unsigned long part = 0xFFFFFF; +- unsigned long start, len, offset, ext_offset; +- int entry, type; ++ unsigned long start, len, offset, ext_offset, gpt_offset; ++ int entry, type, gpt_count, gpt_size; + char mbr[512]; + + /* The drive must be a hard disk. */ +@@ -524,8 +525,15 @@ + /* Look for the partition. */ + while (next_partition (current_drive, 0xFFFFFF, &part, &type, + &start, &len, &offset, &entry, +- &ext_offset, mbr)) ++ &ext_offset, &gpt_offset, &gpt_count, &gpt_size, mbr)) + { ++ /* The partition may not be a GPT partition. */ ++ if (gpt_offset != 0) ++ { ++ errnum = ERR_BAD_ARGUMENT; ++ return 1; ++ } ++ + if (part == current_partition) + { + /* Found. */ +@@ -577,11 +585,14 @@ + unsigned long *partition, int *type, + unsigned long *start, unsigned long *len, + unsigned long *offset, int *entry, +- unsigned long *ext_offset, char *buf) ++ unsigned long *ext_offset, ++ unsigned long *gpt_offset, int *gpt_count, ++ int *gpt_size, char *buf) + { + /* Forward declarations. */ + auto int next_bsd_partition (void); + auto int next_pc_slice (void); ++ auto int next_gpt_slice(void); + + /* Get next BSD partition in current PC slice. */ + int next_bsd_partition (void) +@@ -666,6 +677,40 @@ + return 0; + } + ++ /* If this is a GPT partition table, read it as such. */ ++ if (*entry == -1 && *offset == 0 && PC_SLICE_TYPE (buf, 0) == PC_SLICE_TYPE_GPT) ++ { ++ struct grub_gpt_header *hdr = (struct grub_gpt_header *) buf; ++ ++ /* Read in the GPT Partition table header. */ ++ if (! rawread (drive, 1, 0, SECTOR_SIZE, buf)) ++ return 0; ++ ++ if (hdr->magic == GPT_HEADER_MAGIC && hdr->version == 0x10000) ++ { ++ /* Let gpt_offset point to the first entry in the GPT ++ partition table. This can also be used by callers of ++ next_partition to determine if a entry comes from a ++ GPT partition table or not. */ ++ *gpt_offset = hdr->partitions; ++ *gpt_count = hdr->maxpart; ++ *gpt_size = hdr->partentry_size; ++ ++ return next_gpt_slice(); ++ } ++ else ++ { ++ /* This is not a valid header for a GPT partition table. ++ Re-read the MBR or the boot sector of the extended ++ partition. */ ++ if (! rawread (drive, *offset, 0, SECTOR_SIZE, buf)) ++ return 0; ++ } ++ } ++ ++ /* Not a GPT partition. */ ++ *gpt_offset = 0; ++ + /* Increase the entry number. */ + (*entry)++; + +@@ -710,6 +755,43 @@ + return 1; + } + ++ /* Get the next GPT slice. */ ++ int next_gpt_slice (void) ++ { ++ struct grub_gpt_partentry *gptentry = (struct grub_gpt_partentry *) buf; ++ /* Make GPT partitions show up as PC slices. */ ++ int pc_slice_no = (*partition & 0xFF0000) >> 16; ++ ++ /* If this is the first time... */ ++ if (pc_slice_no == 0xFF) ++ { ++ pc_slice_no = -1; ++ *entry = -1; ++ } ++ ++ do { ++ (*entry)++; ++ ++ if (*entry >= *gpt_count) ++ { ++ errnum = ERR_NO_PART; ++ return 0; ++ } ++ /* Read in the GPT Partition table entry. */ ++ if (! rawread (drive, (*gpt_offset) + GPT_ENTRY_SECTOR (*gpt_size, *entry), GPT_ENTRY_INDEX (*gpt_size, *entry), *gpt_size, buf)) ++ return 0; ++ } while (! (gptentry->type1 && gptentry->type2)); ++ ++ pc_slice_no++; ++ *start = gptentry->start; ++ *len = gptentry->end - gptentry->start + 1; ++ *type = PC_SLICE_TYPE_EXT2FS; ++ *entry = pc_slice_no; ++ *partition = (*entry << 16) | 0xFFFF; ++ ++ return 1; ++ } ++ + /* Start the body of this function. */ + + #ifndef STAGE1_5 +@@ -717,6 +799,9 @@ + return 0; + #endif + ++ if (*partition != 0xFFFFFF && *gpt_offset != 0) ++ return next_gpt_slice (); ++ + /* If previous partition is a BSD partition or a PC slice which + contains BSD partitions... */ + if ((*partition != 0xFFFFFF && IS_PC_SLICE_TYPE_BSD (*type & 0xff)) +@@ -746,6 +831,8 @@ + #ifndef STAGE1_5 + static unsigned long cur_part_offset; + static unsigned long cur_part_addr; ++static unsigned long cur_part_start; ++static int cur_part_entry; + #endif + + /* Open a partition. */ +@@ -755,6 +842,9 @@ + unsigned long dest_partition = current_partition; + unsigned long part_offset; + unsigned long ext_offset; ++ unsigned long gpt_offset; ++ int gpt_count; ++ int gpt_size; + int entry; + char buf[SECTOR_SIZE]; + int bsd_part, pc_slice; +@@ -766,7 +856,8 @@ + int ret = next_partition (current_drive, dest_partition, + ¤t_partition, ¤t_slice, + &part_start, &part_length, +- &part_offset, &entry, &ext_offset, buf); ++ &part_offset, &entry, &ext_offset, ++ &gpt_offset, &gpt_count, &gpt_size, buf); + bsd_part = (current_partition >> 8) & 0xFF; + pc_slice = current_partition >> 16; + return ret; +@@ -800,7 +891,12 @@ + + /* If this is the whole disk, return here. */ + if (! flags && current_partition == 0xFFFFFF) +- return 1; ++ { ++#ifndef STAGE1_5 ++ cur_part_offset = 0; ++#endif /* ! STAGE1_5 */ ++ return 1; ++ } + + if (flags) + dest_partition = 0xFFFFFF; +@@ -815,6 +911,8 @@ + + cur_part_offset = part_offset; + cur_part_addr = BOOT_PART_TABLE + (entry << 4); ++ cur_part_start = part_start; ++ cur_part_entry = entry; + #endif /* ! STAGE1_5 */ + + /* If this is a valid partition... */ +@@ -1142,6 +1240,7 @@ + src = (char *) SCRATCHADDR + BOOTSEC_PART_OFFSET; + while (dst < (char *) BOOT_PART_TABLE + BOOTSEC_PART_LENGTH) + *dst++ = *src++; ++ PC_SLICE_START (BOOT_PART_TABLE - PC_SLICE_OFFSET, cur_part_entry) = cur_part_start; + + /* Set the active flag of the booted partition. */ + for (i = 0; i < 4; i++) +diff -Nur grub-0.97/stage2/fsys_ext2fs.c grub-0.97-patched/stage2/fsys_ext2fs.c +--- grub-0.97/stage2/fsys_ext2fs.c 2004-08-08 20:19:18.000000000 +0200 ++++ grub-0.97-patched/stage2/fsys_ext2fs.c 2012-11-11 17:07:12.750730331 +0100 +@@ -41,6 +41,7 @@ + typedef unsigned short __u16; + typedef __signed__ int __s32; + typedef unsigned int __u32; ++typedef unsigned long long __u64; + + /* + * Constants relative to the data blocks, from ext2_fs.h +@@ -61,9 +62,9 @@ + __u32 s_free_inodes_count; /* Free inodes count */ + __u32 s_first_data_block; /* First Data Block */ + __u32 s_log_block_size; /* Block size */ +- __s32 s_log_frag_size; /* Fragment size */ ++ __s32 s_obso_log_frag_size; /* Obsoleted Fragment size */ + __u32 s_blocks_per_group; /* # Blocks per group */ +- __u32 s_frags_per_group; /* # Fragments per group */ ++ __u32 s_obso_frags_per_group; /* Obsoleted Fragments per group */ + __u32 s_inodes_per_group; /* # Inodes per group */ + __u32 s_mtime; /* Mount time */ + __u32 s_wtime; /* Write time */ +@@ -72,17 +73,62 @@ + __u16 s_magic; /* Magic signature */ + __u16 s_state; /* File system state */ + __u16 s_errors; /* Behaviour when detecting errors */ +- __u16 s_pad; ++ __u16 s_minor_rev_level; /* minor revision level */ + __u32 s_lastcheck; /* time of last check */ + __u32 s_checkinterval; /* max. time between checks */ + __u32 s_creator_os; /* OS */ + __u32 s_rev_level; /* Revision level */ + __u16 s_def_resuid; /* Default uid for reserved blocks */ + __u16 s_def_resgid; /* Default gid for reserved blocks */ +- __u32 s_reserved[235]; /* Padding to the end of the block */ ++ /* ++ * These fields are for EXT2_DYNAMIC_REV superblocks only. ++ * ++ * Note: the difference between the compatible feature set and ++ * the incompatible feature set is that if there is a bit set ++ * in the incompatible feature set that the kernel doesn't ++ * know about, it should refuse to mount the filesystem. ++ * ++ * e2fsck's requirements are more strict; if it doesn't know ++ * about a feature in either the compatible or incompatible ++ * feature set, it must abort and not try to meddle with ++ * things it doesn't understand... ++ */ ++ __u32 s_first_ino; /* First non-reserved inode */ ++ __u16 s_inode_size; /* size of inode structure */ ++ __u16 s_block_group_nr; /* block group # of this superblock */ ++ __u32 s_feature_compat; /* compatible feature set */ ++ __u32 s_feature_incompat; /* incompatible feature set */ ++ __u32 s_feature_ro_compat; /* readonly-compatible feature set */ ++ __u8 s_uuid[16]; /* 128-bit uuid for volume */ ++ char s_volume_name[16]; /* volume name */ ++ char s_last_mounted[64]; /* directory where last mounted */ ++ __u32 s_algorithm_usage_bitmap; /* For compression */ ++ /* ++ * Performance hints. Directory preallocation should only ++ * happen if the EXT2_FEATURE_COMPAT_DIR_PREALLOC flag is on. ++ */ ++ __u8 s_prealloc_blocks; /* Nr of blocks to try to preallocate*/ ++ __u8 s_prealloc_dir_blocks; /* Nr to preallocate for dirs */ ++ __u16 s_reserved_gdt_blocks;/* Per group table for online growth */ ++ /* ++ * Journaling support valid if EXT2_FEATURE_COMPAT_HAS_JOURNAL set. ++ */ ++ __u8 s_journal_uuid[16]; /* uuid of journal superblock */ ++ __u32 s_journal_inum; /* inode number of journal file */ ++ __u32 s_journal_dev; /* device number of journal file */ ++ __u32 s_last_orphan; /* start of list of inodes to delete */ ++ __u32 s_hash_seed[4]; /* HTREE hash seed */ ++ __u8 s_def_hash_version; /* Default hash version to use */ ++ __u8 s_jnl_backup_type; /* Default type of journal backup */ ++ __u16 s_desc_size; /* size of group descriptor */ ++ __u32 s_default_mount_opts; ++ __u32 s_first_meta_bg; /* First metablock group */ ++ __u32 s_mkfs_time; /* When the filesystem was created */ ++ __u32 s_jnl_blocks[17]; /* Backup of the journal inode */ ++ __u32 s_reserved[172]; /* Padding to the end of the block */ + }; + +-struct ext2_group_desc ++struct ext4_group_desc + { + __u32 bg_block_bitmap; /* Blocks bitmap block */ + __u32 bg_inode_bitmap; /* Inodes bitmap block */ +@@ -90,8 +136,18 @@ + __u16 bg_free_blocks_count; /* Free blocks count */ + __u16 bg_free_inodes_count; /* Free inodes count */ + __u16 bg_used_dirs_count; /* Directories count */ +- __u16 bg_pad; +- __u32 bg_reserved[3]; ++ __u16 bg_flags; /* EXT4_BG_flags (INODE_UNINIT, etc) */ ++ __u32 bg_reserved[2]; /* Likely block/inode bitmap checksum */ ++ __u16 bg_itable_unused; /* Unused inodes count */ ++ __u16 bg_checksum; /* crc16(sb_uuid+group+desc) */ ++ __u32 bg_block_bitmap_hi; /* Blocks bitmap block MSB */ ++ __u32 bg_inode_bitmap_hi; /* Inodes bitmap block MSB */ ++ __u32 bg_inode_table_hi; /* Inodes table block MSB */ ++ __u16 bg_free_blocks_count_hi;/* Free blocks count MSB */ ++ __u16 bg_free_inodes_count_hi;/* Free inodes count MSB */ ++ __u16 bg_used_dirs_count_hi; /* Directories count MSB */ ++ __u16 bg_itable_unused_hi; /* Unused inodes count MSB */ ++ __u32 bg_reserved2[3]; + }; + + struct ext2_inode +@@ -129,22 +185,22 @@ + __u32 i_block[EXT2_N_BLOCKS]; /* 40: Pointers to blocks */ + __u32 i_version; /* File version (for NFS) */ + __u32 i_file_acl; /* File ACL */ +- __u32 i_dir_acl; /* Directory ACL */ +- __u32 i_faddr; /* Fragment address */ ++ __u32 i_size_high; ++ __u32 i_obso_faddr; /* Obsoleted fragment address */ + union + { + struct + { +- __u8 l_i_frag; /* Fragment number */ +- __u8 l_i_fsize; /* Fragment size */ +- __u16 i_pad1; +- __u32 l_i_reserved2[2]; ++ __u16 l_i_blocks_high; /* were l_i_reserved1 */ ++ __u16 l_i_file_acl_high; ++ __u16 l_i_uid_high; /* these 2 fields */ ++ __u16 l_i_gid_high; /* were reserved2[0] */ ++ __u32 l_i_reserved2; + } + linux2; + struct + { +- __u8 h_i_frag; /* Fragment number */ +- __u8 h_i_fsize; /* Fragment size */ ++ __u16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */ + __u16 h_i_mode_high; + __u16 h_i_uid_high; + __u16 h_i_gid_high; +@@ -153,16 +209,36 @@ + hurd2; + struct + { +- __u8 m_i_frag; /* Fragment number */ +- __u8 m_i_fsize; /* Fragment size */ +- __u16 m_pad1; ++ __u16 h_i_reserved1; /* Obsoleted fragment number/size which are removed in ext4 */ ++ __u16 m_i_file_acl_high; + __u32 m_i_reserved2[2]; + } + masix2; + } + osd2; /* OS dependent 2 */ ++ __u16 i_extra_isize; ++ __u16 i_pad1; ++ __u32 i_ctime_extra; /* extra Change time (nsec << 2 | epoch) */ ++ __u32 i_mtime_extra; /* extra Modification time(nsec << 2 | epoch) */ ++ __u32 i_atime_extra; /* extra Access time (nsec << 2 | epoch) */ ++ __u32 i_crtime; /* File Creation time */ ++ __u32 i_crtime_extra; /* extra FileCreationtime (nsec << 2 | epoch) */ ++ __u32 i_version_hi; /* high 32 bits for 64-bit version */ + }; + ++#define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 /* extents support */ ++#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080 /* grub not supported*/ ++#define EXT4_FEATURE_INCOMPAT_MMP 0x0100 ++#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200 ++ ++#define EXT4_HAS_INCOMPAT_FEATURE(sb,mask) \ ++ ( sb->s_feature_incompat & mask ) ++ ++#define EXT4_EXTENTS_FL 0x00080000 /* Inode uses extents */ ++#define EXT4_HUGE_FILE_FL 0x00040000 /* Set to each huge file */ ++ ++#define EXT4_MIN_DESC_SIZE 32 ++ + /* linux/limits.h */ + #define NAME_MAX 255 /* # chars in a file name */ + +@@ -180,6 +256,57 @@ + char name[EXT2_NAME_LEN]; /* File name */ + }; + ++/* linux/ext4_fs_extents.h */ ++/* This is the extent on-disk structure. ++ * It's used at the bottom of the tree. ++ */ ++struct ext4_extent ++ { ++ __u32 ee_block; /* first logical block extent covers */ ++ __u16 ee_len; /* number of blocks covered by extent */ ++ __u16 ee_start_hi; /* high 16 bits of physical block */ ++ __u32 ee_start_lo; /* low 32 bits of physical block */ ++ }; ++ ++/* ++ * This is index on-disk structure. ++ * It's used at all the levels except the bottom. ++ */ ++struct ext4_extent_idx ++ { ++ __u32 ei_block; /* index covers logical blocks from 'block' */ ++ __u32 ei_leaf_lo; /* pointer to the physical block of the next * ++ * level. leaf or next index could be there */ ++ __u16 ei_leaf_hi; /* high 16 bits of physical block */ ++ __u16 ei_unused; ++ }; ++ ++/* ++ * Each block (leaves and indexes), even inode-stored has header. ++ */ ++struct ext4_extent_header ++ { ++ __u16 eh_magic; /* probably will support different formats */ ++ __u16 eh_entries; /* number of valid entries */ ++ __u16 eh_max; /* capacity of store in entries */ ++ __u16 eh_depth; /* has tree real underlying blocks? */ ++ __u32 eh_generation; /* generation of the tree */ ++ }; ++ ++#define EXT4_EXT_MAGIC (0xf30a) ++#define EXT_FIRST_EXTENT(__hdr__) \ ++ ((struct ext4_extent *) (((char *) (__hdr__)) + \ ++ sizeof(struct ext4_extent_header))) ++#define EXT_FIRST_INDEX(__hdr__) \ ++ ((struct ext4_extent_idx *) (((char *) (__hdr__)) + \ ++ sizeof(struct ext4_extent_header))) ++#define EXT_LAST_EXTENT(__hdr__) \ ++ (EXT_FIRST_EXTENT((__hdr__)) + (__u16)((__hdr__)->eh_entries) - 1) ++#define EXT_LAST_INDEX(__hdr__) \ ++ (EXT_FIRST_INDEX((__hdr__)) + (__u16)((__hdr__)->eh_entries) - 1) ++ ++ ++ + /* linux/ext2fs.h */ + /* + * EXT2_DIR_PAD defines the directory entries boundaries +@@ -218,13 +345,30 @@ + #define EXT2_ADDR_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s) / sizeof (__u32)) + #define EXT2_ADDR_PER_BLOCK_BITS(s) (log2(EXT2_ADDR_PER_BLOCK(s))) + ++#define EXT2_GOOD_OLD_REV 0 /* The good old (original) format */ ++#define EXT2_DYNAMIC_REV 1 /* V2 format w/ dynamic inode sizes */ ++#define EXT2_GOOD_OLD_INODE_SIZE 128 ++#define EXT2_INODE_SIZE(s) (((s)->s_rev_level == EXT2_GOOD_OLD_REV) ? \ ++ EXT2_GOOD_OLD_INODE_SIZE : \ ++ (s)->s_inode_size) ++#define EXT2_INODES_PER_BLOCK(s) (EXT2_BLOCK_SIZE(s)/EXT2_INODE_SIZE(s)) ++ + /* linux/ext2_fs.h */ + #define EXT2_BLOCK_SIZE_BITS(s) ((s)->s_log_block_size + 10) + /* kind of from ext2/super.c */ + #define EXT2_BLOCK_SIZE(s) (1 << EXT2_BLOCK_SIZE_BITS(s)) + /* linux/ext2fs.h */ ++/* sizeof(struct ext2_group_desc) is changed in ext4 ++ * in kernel code, ext2/3 uses sizeof(struct ext2_group_desc) to calculate ++ * number of desc per block, while ext4 uses superblock->s_desc_size in stead ++ * superblock->s_desc_size is not available in ext2/3 ++ * */ ++#define EXT2_DESC_SIZE(s) \ ++ (EXT4_HAS_INCOMPAT_FEATURE(s,EXT4_FEATURE_INCOMPAT_64BIT)? \ ++ s->s_desc_size : EXT4_MIN_DESC_SIZE) + #define EXT2_DESC_PER_BLOCK(s) \ +- (EXT2_BLOCK_SIZE(s) / sizeof (struct ext2_group_desc)) ++ (EXT2_BLOCK_SIZE(s) / EXT2_DESC_SIZE(s)) ++ + /* linux/stat.h */ + #define S_IFMT 00170000 + #define S_IFLNK 0120000 +@@ -386,6 +530,122 @@ + [logical_block & (EXT2_ADDR_PER_BLOCK (SUPERBLOCK) - 1)]; + } + ++/* extent binary search index ++ * find closest index in the current level extent tree ++ * kind of from ext4_ext_binsearch_idx in ext4/extents.c ++ */ ++static struct ext4_extent_idx* ++ext4_ext_binsearch_idx(struct ext4_extent_header* eh, int logical_block) ++{ ++ struct ext4_extent_idx *r, *l, *m; ++ l = EXT_FIRST_INDEX(eh) + 1; ++ r = EXT_LAST_INDEX(eh); ++ while (l <= r) ++ { ++ m = l + (r - l) / 2; ++ if (logical_block < m->ei_block) ++ r = m - 1; ++ else ++ l = m + 1; ++ } ++ return (struct ext4_extent_idx*)(l - 1); ++} ++ ++/* extent binary search ++ * find closest extent in the leaf level ++ * kind of from ext4_ext_binsearch in ext4/extents.c ++ */ ++static struct ext4_extent* ++ext4_ext_binsearch(struct ext4_extent_header* eh, int logical_block) ++{ ++ struct ext4_extent *r, *l, *m; ++ l = EXT_FIRST_EXTENT(eh) + 1; ++ r = EXT_LAST_EXTENT(eh); ++ while (l <= r) ++ { ++ m = l + (r - l) / 2; ++ if (logical_block < m->ee_block) ++ r = m - 1; ++ else ++ l = m + 1; ++ } ++ return (struct ext4_extent*)(l - 1); ++} ++ ++/* Maps extents enabled logical block into physical block via an inode. ++ * EXT4_HUGE_FILE_FL should be checked before calling this. ++ */ ++static int ++ext4fs_block_map (int logical_block) ++{ ++ struct ext4_extent_header *eh; ++ struct ext4_extent *ex, *extent; ++ struct ext4_extent_idx *ei, *index; ++ int depth; ++ int i; ++ ++#ifdef E2DEBUG ++ unsigned char *i; ++ for (i = (unsigned char *) INODE; ++ i < ((unsigned char *) INODE + sizeof (struct ext2_inode)); ++ i++) ++ { ++ printf ("%c", "0123456789abcdef"[*i >> 4]); ++ printf ("%c", "0123456789abcdef"[*i % 16]); ++ if (!((i + 1 - (unsigned char *) INODE) % 16)) ++ { ++ printf ("\n"); ++ } ++ else ++ { ++ printf (" "); ++ } ++ } ++ printf ("logical block %d\n", logical_block); ++#endif /* E2DEBUG */ ++ eh = (struct ext4_extent_header*)INODE->i_block; ++ if (eh->eh_magic != EXT4_EXT_MAGIC) ++ { ++ errnum = ERR_FSYS_CORRUPT; ++ return -1; ++ } ++ while((depth = eh->eh_depth) != 0) ++ { /* extent index */ ++ if (eh->eh_magic != EXT4_EXT_MAGIC) ++ { ++ errnum = ERR_FSYS_CORRUPT; ++ return -1; ++ } ++ ei = ext4_ext_binsearch_idx(eh, logical_block); ++ if (ei->ei_leaf_hi) ++ {/* 64bit physical block number not supported */ ++ errnum = ERR_FILELENGTH; ++ return -1; ++ } ++ if (!ext2_rdfsb(ei->ei_leaf_lo, DATABLOCK1)) ++ { ++ errnum = ERR_FSYS_CORRUPT; ++ return -1; ++ } ++ eh = (struct ext4_extent_header*)DATABLOCK1; ++ } ++ ++ /* depth==0, we come to the leaf */ ++ ex = ext4_ext_binsearch(eh, logical_block); ++ if (ex->ee_start_hi) ++ {/* 64bit physical block number not supported */ ++ errnum = ERR_FILELENGTH; ++ return -1; ++ } ++ if ((ex->ee_block + ex->ee_len) < logical_block) ++ { ++ errnum = ERR_FSYS_CORRUPT; ++ return -1; ++ } ++ return ex->ee_start_lo + logical_block - ex->ee_block; ++ ++} ++ + /* preconditions: all preconds of ext2fs_block_map */ + int + ext2fs_read (char *buf, int len) +@@ -420,6 +680,11 @@ + /* find the (logical) block component of our location */ + logical_block = filepos >> EXT2_BLOCK_SIZE_BITS (SUPERBLOCK); + offset = filepos & (EXT2_BLOCK_SIZE (SUPERBLOCK) - 1); ++ /* map extents enabled logical block number to physical fs on-dick block number */ ++ if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK,EXT4_FEATURE_INCOMPAT_EXTENTS) ++ && INODE->i_flags & EXT4_EXTENTS_FL) ++ map = ext4fs_block_map (logical_block); ++ else + map = ext2fs_block_map (logical_block); + #ifdef E2DEBUG + printf ("map=%d\n", map); +@@ -504,7 +769,7 @@ + int desc; /* index within that group */ + int ino_blk; /* fs pointer of the inode's information */ + int str_chk = 0; /* used to hold the results of a string compare */ +- struct ext2_group_desc *gdp; ++ struct ext4_group_desc *ext4_gdp; + struct ext2_inode *raw_inode; /* inode info corresponding to current_ino */ + + char linkbuf[PATH_MAX]; /* buffer for following symbolic links */ +@@ -550,10 +815,17 @@ + { + return 0; + } +- gdp = GROUP_DESC; +- ino_blk = gdp[desc].bg_inode_table + ++ ext4_gdp = (struct ext4_group_desc *)( (__u8*)GROUP_DESC + ++ desc * EXT2_DESC_SIZE(SUPERBLOCK)); ++ if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK, EXT4_FEATURE_INCOMPAT_64BIT) ++ && (! ext4_gdp->bg_inode_table_hi)) ++ {/* 64bit itable not supported */ ++ errnum = ERR_FILELENGTH; ++ return -1; ++ } ++ ino_blk = ext4_gdp->bg_inode_table + + (((current_ino - 1) % (SUPERBLOCK->s_inodes_per_group)) +- >> log2 (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode))); ++ >> log2 (EXT2_INODES_PER_BLOCK (SUPERBLOCK))); + #ifdef E2DEBUG + printf ("inode table fsblock=%d\n", ino_blk); + #endif /* E2DEBUG */ +@@ -565,13 +837,12 @@ + /* reset indirect blocks! */ + mapblock2 = mapblock1 = -1; + +- raw_inode = INODE + +- ((current_ino - 1) +- & (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode) - 1)); ++ raw_inode = (struct ext2_inode *)((char *)INODE + ++ ((current_ino - 1) & (EXT2_INODES_PER_BLOCK (SUPERBLOCK) - 1)) * ++ EXT2_INODE_SIZE (SUPERBLOCK)); + #ifdef E2DEBUG + printf ("ipb=%d, sizeof(inode)=%d\n", +- (EXT2_BLOCK_SIZE (SUPERBLOCK) / sizeof (struct ext2_inode)), +- sizeof (struct ext2_inode)); ++ EXT2_INODES_PER_BLOCK (SUPERBLOCK), EXT2_INODE_SIZE (SUPERBLOCK)); + printf ("inode=%x, raw_inode=%x\n", INODE, raw_inode); + printf ("offset into inode table block=%d\n", (int) raw_inode - (int) INODE); + for (i = (unsigned char *) INODE; i <= (unsigned char *) raw_inode; +@@ -629,7 +900,10 @@ + } + linkbuf[filemax + len] = '\0'; + +- /* Read the symlink data. */ ++ /* Read the symlink data. ++ * Slow symlink is extents enabled ++ * But since grub_read invokes ext2fs_read, nothing to change here ++ * */ + if (! ext2_is_fast_symlink ()) + { + /* Read the necessary blocks, and reset the file pointer. */ +@@ -640,7 +914,9 @@ + } + else + { +- /* Copy the data directly from the inode. */ ++ /* Copy the data directly from the inode. ++ * Fast symlink is not extents enabled ++ * */ + len = filemax; + memmove (linkbuf, (char *) INODE->i_block, len); + } +@@ -674,6 +950,13 @@ + errnum = ERR_BAD_FILETYPE; + return 0; + } ++ /* if file is too large, just stop and report an error*/ ++ if ( (INODE->i_flags & EXT4_HUGE_FILE_FL) && !(INODE->i_size_high)) ++ { ++ /* file too large, stop reading */ ++ errnum = ERR_FILELENGTH; ++ return 0; ++ } + + filemax = (INODE->i_size); + return 1; +@@ -728,17 +1011,28 @@ + } + + /* else, find the (logical) block component of our location */ ++ /* ext4 logical block number the same as ext2/3 */ + blk = loc >> EXT2_BLOCK_SIZE_BITS (SUPERBLOCK); + + /* we know which logical block of the directory entry we are looking + for, now we have to translate that to the physical (fs) block on + the disk */ ++ /* map extents enabled logical block number to physical fs on-dick block number */ ++ if (EXT4_HAS_INCOMPAT_FEATURE(SUPERBLOCK,EXT4_FEATURE_INCOMPAT_EXTENTS) ++ && INODE->i_flags & EXT4_EXTENTS_FL) ++ map = ext4fs_block_map (blk); ++ else + map = ext2fs_block_map (blk); + #ifdef E2DEBUG + printf ("fs block=%d\n", map); + #endif /* E2DEBUG */ + mapblock2 = -1; +- if ((map < 0) || !ext2_rdfsb (map, DATABLOCK2)) ++ if (map < 0) ++ { ++ *rest = ch; ++ return 0; ++ } ++ if (!ext2_rdfsb (map, DATABLOCK2)) + { + errnum = ERR_FSYS_CORRUPT; + *rest = ch; +diff -Nur grub-0.97/stage2/gpt.h grub-0.97-patched/stage2/gpt.h +--- grub-0.97/stage2/gpt.h 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/gpt.h 2012-11-11 17:07:12.697728638 +0100 +@@ -0,0 +1,68 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2002,2005,2006 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 _GPT_H ++#define _GPT_H ++ ++typedef signed char grub_int8_t; ++typedef signed short grub_int16_t; ++typedef signed int grub_int32_t; ++typedef signed long long int grub_int64_t; ++typedef unsigned char grub_uint8_t; ++typedef unsigned short grub_uint16_t; ++typedef unsigned int grub_uint32_t; ++typedef unsigned long long int grub_uint64_t; ++ ++struct grub_gpt_header ++{ ++ grub_uint64_t magic; ++ grub_uint32_t version; ++ grub_uint32_t headersize; ++ grub_uint32_t crc32; ++ grub_uint32_t unused1; ++ grub_uint64_t primary; ++ grub_uint64_t backup; ++ grub_uint64_t start; ++ grub_uint64_t end; ++ grub_uint8_t guid[16]; ++ grub_uint64_t partitions; ++ grub_uint32_t maxpart; ++ grub_uint32_t partentry_size; ++ grub_uint32_t partentry_crc32; ++} __attribute__ ((packed)); ++ ++struct grub_gpt_partentry ++{ ++ grub_uint64_t type1; ++ grub_uint64_t type2; ++ grub_uint8_t guid[16]; ++ grub_uint64_t start; ++ grub_uint64_t end; ++ grub_uint8_t attrib; ++ char name[72]; ++} __attribute__ ((packed)); ++ ++#define GPT_HEADER_MAGIC 0x5452415020494645UL ++ ++#define GPT_ENTRY_SECTOR(size,entry) \ ++ ((((entry) * (size) + 1) & ~(SECTOR_SIZE - 1)) >> SECTOR_BITS) ++#define GPT_ENTRY_INDEX(size,entry) \ ++ ((((entry) * (size) + 1) & (SECTOR_SIZE - 1)) - 1) ++ ++#endif /* _GPT_H */ +diff -Nur grub-0.97/stage2/graphics.c grub-0.97-patched/stage2/graphics.c +--- grub-0.97/stage2/graphics.c 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/graphics.c 2012-11-11 17:06:33.320470847 +0100 +@@ -0,0 +1,563 @@ ++/* graphics.c - graphics mode support for GRUB */ ++/* Implemented as a terminal type by Jeremy Katz katzj@redhat.com based ++ * on a patch by Paulo César Pereira de Andrade pcpa@conectiva.com.br ++ */ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2001,2002 Red Hat, Inc. ++ * Portions copyright (C) 2000 Conectiva, 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. ++ */ ++ ++ ++ ++#ifdef SUPPORT_GRAPHICS ++ ++#include <term.h> ++#include <shared.h> ++#include <graphics.h> ++ ++int saved_videomode; ++unsigned char *font8x16; ++ ++int graphics_inited = 0; ++static char splashimage[64]; ++ ++#define VSHADOW VSHADOW1 ++unsigned char VSHADOW1[38400]; ++unsigned char VSHADOW2[38400]; ++unsigned char VSHADOW4[38400]; ++unsigned char VSHADOW8[38400]; ++ ++/* constants to define the viewable area */ ++const int x0 = 0; ++const int x1 = 80; ++const int y0 = 0; ++const int y1 = 30; ++ ++/* text buffer has to be kept around so that we can write things as we ++ * scroll and the like */ ++unsigned short text[80 * 30]; ++ ++/* why do these have to be kept here? */ ++int foreground = (63 << 16) | (63 << 8) | (63), background = 0, border = 0; ++ ++/* current position */ ++static int fontx = 0; ++static int fonty = 0; ++ ++/* global state so that we don't try to recursively scroll or cursor */ ++static int no_scroll = 0; ++ ++/* color state */ ++static int graphics_standard_color = A_NORMAL; ++static int graphics_normal_color = A_NORMAL; ++static int graphics_highlight_color = A_REVERSE; ++static int graphics_current_color = A_NORMAL; ++static color_state graphics_color_state = COLOR_STATE_STANDARD; ++ ++ ++/* graphics local functions */ ++static void graphics_setxy(int col, int row); ++static void graphics_scroll(); ++ ++/* FIXME: where do these really belong? */ ++static inline void outb(unsigned short port, unsigned char val) ++{ ++ __asm __volatile ("outb %0,%1"::"a" (val), "d" (port)); ++} ++ ++static void MapMask(int value) { ++ outb(0x3c4, 2); ++ outb(0x3c5, value); ++} ++ ++/* bit mask register */ ++static void BitMask(int value) { ++ outb(0x3ce, 8); ++ outb(0x3cf, value); ++} ++ ++ ++ ++/* Set the splash image */ ++void graphics_set_splash(char *splashfile) { ++ grub_strcpy(splashimage, splashfile); ++} ++ ++/* Get the current splash image */ ++char *graphics_get_splash(void) { ++ return splashimage; ++} ++ ++/* Initialize a vga16 graphics display with the palette based off of ++ * the image in splashimage. If the image doesn't exist, leave graphics ++ * mode. */ ++int graphics_init() ++{ ++ if(!grub_file_exists(splashimage)) { ++ return 0; ++ } ++ ++ if (!graphics_inited) { ++ saved_videomode = set_videomode(0x12); ++ } ++ ++ if (!read_image(splashimage)) { ++ set_videomode(saved_videomode); ++ grub_printf("failed to read image\n"); ++ return 0; ++ } ++ ++ font8x16 = (unsigned char*)graphics_get_font(); ++ ++ graphics_inited = 1; ++ ++ /* make sure that the highlight color is set correctly */ ++ graphics_highlight_color = ((graphics_normal_color >> 4) | ++ ((graphics_normal_color & 0xf) << 4)); ++ ++ return 1; ++} ++ ++/* Leave graphics mode */ ++void graphics_end(void) ++{ ++ if (graphics_inited) { ++ set_videomode(saved_videomode); ++ graphics_inited = 0; ++ } ++} ++ ++/* Print ch on the screen. Handle any needed scrolling or the like */ ++void graphics_putchar(int ch) { ++ ch &= 0xff; ++ ++ graphics_cursor(0); ++ ++ if (ch == '\n') { ++ if (fonty + 1 < y1) ++ graphics_setxy(fontx, fonty + 1); ++ else ++ graphics_scroll(); ++ graphics_cursor(1); ++ return; ++ } else if (ch == '\r') { ++ graphics_setxy(x0, fonty); ++ graphics_cursor(1); ++ return; ++ } ++ ++ graphics_cursor(0); ++ ++ text[fonty * 80 + fontx] = ch; ++ text[fonty * 80 + fontx] &= 0x00ff; ++ if (graphics_current_color & 0xf0) ++ text[fonty * 80 + fontx] |= 0x100; ++ ++ graphics_cursor(0); ++ ++ if ((fontx + 1) >= x1) { ++ graphics_setxy(x0, fonty); ++ if (fonty + 1 < y1) ++ graphics_setxy(x0, fonty + 1); ++ else ++ graphics_scroll(); ++ } else { ++ graphics_setxy(fontx + 1, fonty); ++ } ++ ++ graphics_cursor(1); ++} ++ ++/* get the current location of the cursor */ ++int graphics_getxy(void) { ++ return (fontx << 8) | fonty; ++} ++ ++void graphics_gotoxy(int x, int y) { ++ graphics_cursor(0); ++ ++ graphics_setxy(x, y); ++ ++ graphics_cursor(1); ++} ++ ++void graphics_cls(void) { ++ int i; ++ unsigned char *mem, *s1, *s2, *s4, *s8; ++ ++ graphics_cursor(0); ++ graphics_gotoxy(x0, y0); ++ ++ mem = (unsigned char*)VIDEOMEM; ++ s1 = (unsigned char*)VSHADOW1; ++ s2 = (unsigned char*)VSHADOW2; ++ s4 = (unsigned char*)VSHADOW4; ++ s8 = (unsigned char*)VSHADOW8; ++ ++ for (i = 0; i < 80 * 30; i++) ++ text[i] = ' '; ++ graphics_cursor(1); ++ ++ BitMask(0xff); ++ ++ /* plano 1 */ ++ MapMask(1); ++ grub_memcpy(mem, s1, 38400); ++ ++ /* plano 2 */ ++ MapMask(2); ++ grub_memcpy(mem, s2, 38400); ++ ++ /* plano 3 */ ++ MapMask(4); ++ grub_memcpy(mem, s4, 38400); ++ ++ /* plano 4 */ ++ MapMask(8); ++ grub_memcpy(mem, s8, 38400); ++ ++ MapMask(15); ++ ++} ++ ++void graphics_setcolorstate (color_state state) { ++ switch (state) { ++ case COLOR_STATE_STANDARD: ++ graphics_current_color = graphics_standard_color; ++ break; ++ case COLOR_STATE_NORMAL: ++ graphics_current_color = graphics_normal_color; ++ break; ++ case COLOR_STATE_HIGHLIGHT: ++ graphics_current_color = graphics_highlight_color; ++ break; ++ default: ++ graphics_current_color = graphics_standard_color; ++ break; ++ } ++ ++ graphics_color_state = state; ++} ++ ++void graphics_setcolor (int normal_color, int highlight_color) { ++ graphics_normal_color = normal_color; ++ graphics_highlight_color = highlight_color; ++ ++ graphics_setcolorstate (graphics_color_state); ++} ++ ++void graphics_setcursor (int on) { ++ /* FIXME: we don't have a cursor in graphics */ ++ return; ++} ++ ++/* Read in the splashscreen image and set the palette up appropriately. ++ * Format of splashscreen is an xpm (can be gzipped) with 16 colors and ++ * 640x480. */ ++int read_image(char *s) ++{ ++ char buf[32], pal[16]; ++ unsigned char c, base, mask, *s1, *s2, *s4, *s8; ++ unsigned i, len, idx, colors, x, y, width, height; ++ ++ if (!grub_open(s)) ++ return 0; ++ ++ /* read header */ ++ if (!grub_read((char*)&buf, 10) || grub_memcmp(buf, "/* XPM */\n", 10)) { ++ grub_close(); ++ return 0; ++ } ++ ++ /* parse info */ ++ while (grub_read(&c, 1)) { ++ if (c == '"') ++ break; ++ } ++ ++ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) ++ ; ++ ++ i = 0; ++ width = c - '0'; ++ while (grub_read(&c, 1)) { ++ if (c >= '0' && c <= '9') ++ width = width * 10 + c - '0'; ++ else ++ break; ++ } ++ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) ++ ; ++ ++ height = c - '0'; ++ while (grub_read(&c, 1)) { ++ if (c >= '0' && c <= '9') ++ height = height * 10 + c - '0'; ++ else ++ break; ++ } ++ while (grub_read(&c, 1) && (c == ' ' || c == '\t')) ++ ; ++ ++ colors = c - '0'; ++ while (grub_read(&c, 1)) { ++ if (c >= '0' && c <= '9') ++ colors = colors * 10 + c - '0'; ++ else ++ break; ++ } ++ ++ base = 0; ++ while (grub_read(&c, 1) && c != '"') ++ ; ++ ++ /* palette */ ++ for (i = 0, idx = 1; i < colors; i++) { ++ len = 0; ++ ++ while (grub_read(&c, 1) && c != '"') ++ ; ++ grub_read(&c, 1); /* char */ ++ base = c; ++ grub_read(buf, 4); /* \t c # */ ++ ++ while (grub_read(&c, 1) && c != '"') { ++ if (len < sizeof(buf)) ++ buf[len++] = c; ++ } ++ ++ if (len == 6 && idx < 15) { ++ int r = ((hex(buf[0]) << 4) | hex(buf[1])) >> 2; ++ int g = ((hex(buf[2]) << 4) | hex(buf[3])) >> 2; ++ int b = ((hex(buf[4]) << 4) | hex(buf[5])) >> 2; ++ ++ pal[idx] = base; ++ graphics_set_palette(idx, r, g, b); ++ ++idx; ++ } ++ } ++ ++ x = y = len = 0; ++ ++ s1 = (unsigned char*)VSHADOW1; ++ s2 = (unsigned char*)VSHADOW2; ++ s4 = (unsigned char*)VSHADOW4; ++ s8 = (unsigned char*)VSHADOW8; ++ ++ for (i = 0; i < 38400; i++) ++ s1[i] = s2[i] = s4[i] = s8[i] = 0; ++ ++ /* parse xpm data */ ++ while (y < height) { ++ while (1) { ++ if (!grub_read(&c, 1)) { ++ grub_close(); ++ return 0; ++ } ++ if (c == '"') ++ break; ++ } ++ ++ while (grub_read(&c, 1) && c != '"') { ++ for (i = 1; i < 15; i++) ++ if (pal[i] == c) { ++ c = i; ++ break; ++ } ++ ++ mask = 0x80 >> (x & 7); ++ if (c & 1) ++ s1[len + (x >> 3)] |= mask; ++ if (c & 2) ++ s2[len + (x >> 3)] |= mask; ++ if (c & 4) ++ s4[len + (x >> 3)] |= mask; ++ if (c & 8) ++ s8[len + (x >> 3)] |= mask; ++ ++ if (++x >= 640) { ++ x = 0; ++ ++ if (y < 480) ++ len += 80; ++ ++y; ++ } ++ } ++ } ++ ++ grub_close(); ++ ++ graphics_set_palette(0, (background >> 16), (background >> 8) & 63, ++ background & 63); ++ graphics_set_palette(15, (foreground >> 16), (foreground >> 8) & 63, ++ foreground & 63); ++ graphics_set_palette(0x11, (border >> 16), (border >> 8) & 63, ++ border & 63); ++ ++ return 1; ++} ++ ++ ++/* Convert a character which is a hex digit to the appropriate integer */ ++int hex(int v) ++{ ++ if (v >= 'A' && v <= 'F') ++ return (v - 'A' + 10); ++ if (v >= 'a' && v <= 'f') ++ return (v - 'a' + 10); ++ return (v - '0'); ++} ++ ++ ++/* move the graphics cursor location to col, row */ ++static void graphics_setxy(int col, int row) { ++ if (col >= x0 && col < x1) { ++ fontx = col; ++ cursorX = col << 3; ++ } ++ if (row >= y0 && row < y1) { ++ fonty = row; ++ cursorY = row << 4; ++ } ++} ++ ++/* scroll the screen */ ++static void graphics_scroll() { ++ int i, j; ++ ++ /* we don't want to scroll recursively... that would be bad */ ++ if (no_scroll) ++ return; ++ no_scroll = 1; ++ ++ /* move everything up a line */ ++ for (j = y0 + 1; j < y1; j++) { ++ graphics_gotoxy(x0, j - 1); ++ for (i = x0; i < x1; i++) { ++ graphics_putchar(text[j * 80 + i]); ++ } ++ } ++ ++ /* last line should be blank */ ++ graphics_gotoxy(x0, y1 - 1); ++ for (i = x0; i < x1; i++) ++ graphics_putchar(' '); ++ graphics_setxy(x0, y1 - 1); ++ ++ no_scroll = 0; ++} ++ ++ ++void graphics_cursor(int set) { ++ unsigned char *pat, *mem, *ptr, chr[16 << 2]; ++ int i, ch, invert, offset; ++ ++ if (set && no_scroll) ++ return; ++ ++ offset = cursorY * 80 + fontx; ++ ch = text[fonty * 80 + fontx] & 0xff; ++ invert = (text[fonty * 80 + fontx] & 0xff00) != 0; ++ pat = font8x16 + (ch << 4); ++ ++ mem = (unsigned char*)VIDEOMEM + offset; ++ ++ if (!set) { ++ for (i = 0; i < 16; i++) { ++ unsigned char mask = pat[i]; ++ ++ if (!invert) { ++ chr[i ] = ((unsigned char*)VSHADOW1)[offset]; ++ chr[16 + i] = ((unsigned char*)VSHADOW2)[offset]; ++ chr[32 + i] = ((unsigned char*)VSHADOW4)[offset]; ++ chr[48 + i] = ((unsigned char*)VSHADOW8)[offset]; ++ ++ /* FIXME: if (shade) */ ++ if (1) { ++ if (ch == DISP_VERT || ch == DISP_LL || ++ ch == DISP_UR || ch == DISP_LR) { ++ unsigned char pmask = ~(pat[i] >> 1); ++ ++ chr[i ] &= pmask; ++ chr[16 + i] &= pmask; ++ chr[32 + i] &= pmask; ++ chr[48 + i] &= pmask; ++ } ++ if (i > 0 && ch != DISP_VERT) { ++ unsigned char pmask = ~(pat[i - 1] >> 1); ++ ++ chr[i ] &= pmask; ++ chr[16 + i] &= pmask; ++ chr[32 + i] &= pmask; ++ chr[48 + i] &= pmask; ++ if (ch == DISP_HORIZ || ch == DISP_UR || ch == DISP_LR) { ++ pmask = ~pat[i - 1]; ++ ++ chr[i ] &= pmask; ++ chr[16 + i] &= pmask; ++ chr[32 + i] &= pmask; ++ chr[48 + i] &= pmask; ++ } ++ } ++ } ++ chr[i ] |= mask; ++ chr[16 + i] |= mask; ++ chr[32 + i] |= mask; ++ chr[48 + i] |= mask; ++ ++ offset += 80; ++ } ++ else { ++ chr[i ] = mask; ++ chr[16 + i] = mask; ++ chr[32 + i] = mask; ++ chr[48 + i] = mask; ++ } ++ } ++ } ++ else { ++ MapMask(15); ++ ptr = mem; ++ for (i = 0; i < 16; i++, ptr += 80) { ++ cursorBuf[i] = pat[i]; ++ *ptr = ~pat[i]; ++ } ++ return; ++ } ++ ++ offset = 0; ++ for (i = 1; i < 16; i <<= 1, offset += 16) { ++ int j; ++ ++ MapMask(i); ++ ptr = mem; ++ for (j = 0; j < 16; j++, ptr += 80) ++ *ptr = chr[j + offset]; ++ } ++ ++ MapMask(15); ++} ++ ++int grub_file_exists(char *s) { ++ if (!grub_open(s)) ++ return 0; ++ grub_close(); ++ return 1; ++} ++ ++#endif /* SUPPORT_GRAPHICS */ +diff -Nur grub-0.97/stage2/graphics.h grub-0.97-patched/stage2/graphics.h +--- grub-0.97/stage2/graphics.h 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/graphics.h 2012-11-11 17:06:33.321470879 +0100 +@@ -0,0 +1,45 @@ ++/* graphics.h - graphics console interface */ ++/* ++ * 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 GRAPHICS_H ++#define GRAPHICS_H ++ ++/* magic constant */ ++#define VIDEOMEM 0xA0000 ++ ++/* function prototypes */ ++char *graphics_get_splash(void); ++ ++int read_image(char *s); ++void graphics_cursor(int set); ++ ++/* function prototypes for asm functions */ ++void * graphics_get_font(); ++void graphics_set_palette(int idx, int red, int green, int blue); ++void set_int1c_handler(); ++void unset_int1c_handler(); ++ ++/* Only to check for safe opening before we start */ ++int grub_file_exists(char *s); ++ ++extern short cursorX, cursorY; ++extern char cursorBuf[16]; ++ ++#endif /* GRAPHICS_H */ +diff -Nur grub-0.97/stage2/iso9660.h grub-0.97-patched/stage2/iso9660.h +--- grub-0.97/stage2/iso9660.h 2004-03-27 17:02:38.000000000 +0100 ++++ grub-0.97-patched/stage2/iso9660.h 2012-11-11 17:07:12.740730013 +0100 +@@ -73,11 +73,11 @@ + + typedef struct __iso_16bit { + u_int16_t l, b; +-} iso_16bit_t __attribute__ ((packed)); ++} iso_16bit_t; + + typedef struct __iso_32bit { + u_int32_t l, b; +-} iso_32bit_t __attribute__ ((packed)); ++} iso_32bit_t; + + typedef u_int8_t iso_date_t[7]; + +diff -Nur grub-0.97/stage2/Makefile.am grub-0.97-patched/stage2/Makefile.am +--- grub-0.97/stage2/Makefile.am 2005-02-02 21:37:35.000000000 +0100 ++++ grub-0.97-patched/stage2/Makefile.am 2012-11-11 17:07:12.747730236 +0100 +@@ -7,7 +7,7 @@ + fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \ + imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \ + nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \ +- terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h ++ terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h graphics.h + EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS) + + # For <stage1.h>. +@@ -19,20 +19,20 @@ + disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \ + fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \ + fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \ +- terminfo.c tparm.c +-libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \ ++ terminfo.c tparm.c graphics.c ++libgrub_a_CFLAGS = $(GRUB_CFLAGS) -fno-stack-protector -I$(top_srcdir)/lib \ + -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ + -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \ + -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \ + -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 + + # Stage 2 and Stage 1.5's. +-pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) ++stagedir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) + + EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec + + if DISKLESS_SUPPORT +-pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ ++stage_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ + ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ + reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 \ + nbgrub pxegrub +@@ -43,7 +43,7 @@ + reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \ + xfs_stage1_5.exec nbloader.exec pxeloader.exec diskless.exec + else +-pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ ++stage_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ + ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ + reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 + noinst_DATA = pre_stage2 start start_eltorito +@@ -79,8 +79,14 @@ + HERCULES_FLAGS = + endif + +-STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ +- $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) ++if GRAPHICS_SUPPORT ++GRAPHICS_FLAGS = -DSUPPORT_GRAPHICS=1 ++else ++GRAPHICS_FLAGS = ++endif ++ ++STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-reorder-functions -fno-builtin -nostdinc \ ++ $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) $(GRAPHICS_FLAGS) + + STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000 + STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1 +@@ -90,7 +96,8 @@ + cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \ + fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \ + fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \ +- hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c ++ hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c \ ++ graphics.c + pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) + pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) + pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK) +@@ -105,7 +112,7 @@ + BUILT_SOURCES = stage2_size.h + endif + +-CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES) ++CLEANFILES = $(stage_DATA) $(noinst_DATA) $(BUILT_SOURCES) + + stage2_size.h: pre_stage2 + -rm -f stage2_size.h +diff -Nur grub-0.97/stage2/Makefile.am.orig grub-0.97-patched/stage2/Makefile.am.orig +--- grub-0.97/stage2/Makefile.am.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/Makefile.am.orig 2005-02-02 21:37:35.000000000 +0100 +@@ -0,0 +1,272 @@ ++# For test target. ++TESTS = size_test ++noinst_SCRIPTS = $(TESTS) ++ ++# For dist target. ++noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \ ++ fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \ ++ imgact_aout.h iso9660.h jfs.h mb_header.h mb_info.h md5.h \ ++ nbi.h pc_slice.h serial.h shared.h smp-imps.h term.h \ ++ terminfo.h tparm.h nbi.h ufs2.h vstafs.h xfs.h ++EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS) ++ ++# For <stage1.h>. ++INCLUDES = -I$(top_srcdir)/stage1 ++ ++# The library for /sbin/grub. ++noinst_LIBRARIES = libgrub.a ++libgrub_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \ ++ disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_iso9660.c \ ++ fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_ufs2.c \ ++ fsys_vstafs.c fsys_xfs.c gunzip.c md5.c serial.c stage2.c \ ++ terminfo.c tparm.c ++libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \ ++ -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \ ++ -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \ ++ -DFSYS_UFS2=1 -DFSYS_VSTAFS=1 -DFSYS_XFS=1 \ ++ -DUSE_MD5_PASSWORDS=1 -DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 ++ ++# Stage 2 and Stage 1.5's. ++pkglibdir = $(libdir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) ++ ++EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec ++ ++if DISKLESS_SUPPORT ++pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ ++ ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ ++ reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 \ ++ nbgrub pxegrub ++noinst_DATA = pre_stage2 start start_eltorito nbloader pxeloader diskless ++noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \ ++ e2fs_stage1_5.exec fat_stage1_5.exec ffs_stage1_5.exec \ ++ iso9660_stage1_5.exec jfs_stage1_5.exec minix_stage1_5.exec \ ++ reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \ ++ xfs_stage1_5.exec nbloader.exec pxeloader.exec diskless.exec ++else ++pkglib_DATA = stage2 stage2_eltorito e2fs_stage1_5 fat_stage1_5 \ ++ ffs_stage1_5 iso9660_stage1_5 jfs_stage1_5 minix_stage1_5 \ ++ reiserfs_stage1_5 ufs2_stage1_5 vstafs_stage1_5 xfs_stage1_5 ++noinst_DATA = pre_stage2 start start_eltorito ++noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \ ++ e2fs_stage1_5.exec fat_stage1_5.exec ffs_stage1_5.exec \ ++ iso9660_stage1_5.exec jfs_stage1_5.exec minix_stage1_5.exec \ ++ reiserfs_stage1_5.exec ufs2_stage1_5.exec vstafs_stage1_5.exec \ ++ xfs_stage1_5.exec ++endif ++MOSTLYCLEANFILES = $(noinst_PROGRAMS) ++ ++PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200 ++START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000 ++NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0 ++PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 ++START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 ++ ++if NETBOOT_SUPPORT ++NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1 ++else ++NETBOOT_FLAGS = ++endif ++ ++if SERIAL_SUPPORT ++SERIAL_FLAGS = -DSUPPORT_SERIAL=1 ++else ++SERIAL_FLAGS = ++endif ++ ++if HERCULES_SUPPORT ++HERCULES_FLAGS = -DSUPPORT_HERCULES=1 ++else ++HERCULES_FLAGS = ++endif ++ ++STAGE2_COMPILE = $(STAGE2_CFLAGS) -fno-builtin -nostdinc \ ++ $(NETBOOT_FLAGS) $(SERIAL_FLAGS) $(HERCULES_FLAGS) ++ ++STAGE1_5_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,2000 ++STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1 ++ ++# For stage2 target. ++pre_stage2_exec_SOURCES = asm.S bios.c boot.c builtins.c char_io.c \ ++ cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \ ++ fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \ ++ fsys_reiserfs.c fsys_ufs2.c fsys_vstafs.c fsys_xfs.c gunzip.c \ ++ hercules.c md5.c serial.c smp-imps.c stage2.c terminfo.c tparm.c ++pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) ++pre_stage2_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) ++pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK) ++ ++if NETBOOT_SUPPORT ++pre_stage2_exec_LDADD = ../netboot/libdrivers.a ++endif ++ ++if DISKLESS_SUPPORT ++BUILT_SOURCES = stage2_size.h diskless_size.h ++else ++BUILT_SOURCES = stage2_size.h ++endif ++ ++CLEANFILES = $(pkglib_DATA) $(noinst_DATA) $(BUILT_SOURCES) ++ ++stage2_size.h: pre_stage2 ++ -rm -f stage2_size.h ++ set dummy `ls -l pre_stage2`; \ ++ echo "#define STAGE2_SIZE $$6" > stage2_size.h ++ ++start_exec_SOURCES = start.S ++start_exec_CCASFLAGS = $(STAGE2_COMPILE) ++start_exec_LDFLAGS = $(START_LINK) ++ ++# XXX: automake doesn't provide a way to specify dependencies for object ++# files explicitly, so we must write this by a general Makefile scheme. ++# If automake change the naming scheme for per-executable objects, this ++# will be broken. ++start_exec-start.$(OBJEXT): stage2_size.h ++ ++stage2: pre_stage2 start ++ -rm -f stage2 ++ cat start pre_stage2 > stage2 ++ ++start_eltorito_exec_SOURCES = start_eltorito.S ++start_eltorito_exec_CCASFLAGS = $(STAGE2_COMPILE) ++start_eltorito_exec_LDFLAGS = $(START_ELTORITO_LINK) ++ ++start_eltorito_exec-start.$(OBJEXT): stage2_size.h ++ ++stage2_eltorito: pre_stage2 start_eltorito ++ -rm -f stage2_eltorito ++ cat start_eltorito pre_stage2 > stage2_eltorito ++ ++# For e2fs_stage1_5 target. ++e2fs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ ++ stage1_5.c fsys_ext2fs.c bios.c ++e2fs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \ ++ -DNO_BLOCK_FILES=1 ++e2fs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_EXT2FS=1 \ ++ -DNO_BLOCK_FILES=1 ++e2fs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++ ++# For fat_stage1_5 target. ++fat_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ ++ stage1_5.c fsys_fat.c bios.c ++fat_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \ ++ -DNO_BLOCK_FILES=1 ++fat_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FAT=1 \ ++ -DNO_BLOCK_FILES=1 ++fat_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++ ++# For ffs_stage1_5 target. ++ffs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ ++ stage1_5.c fsys_ffs.c bios.c ++ffs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \ ++ -DNO_BLOCK_FILES=1 ++ffs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_FFS=1 \ ++ -DNO_BLOCK_FILES=1 ++ffs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++ ++# For ufs2_stage1_5 target. ++ufs2_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ ++ stage1_5.c fsys_ufs2.c bios.c ++ufs2_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ ++ -DNO_BLOCK_FILES=1 ++ufs2_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_UFS2=1 \ ++ -DNO_BLOCK_FILES=1 ++ufs2_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++ ++# For minix_stage1_5 target. ++minix_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ ++ stage1_5.c fsys_minix.c bios.c ++minix_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \ ++ -DNO_BLOCK_FILES=1 ++minix_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_MINIX=1 \ ++ -DNO_BLOCK_FILES=1 ++minix_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++ ++# For reiserfs_stage1_5 target. ++reiserfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ ++ disk_io.c stage1_5.c fsys_reiserfs.c bios.c ++reiserfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \ ++ -DNO_BLOCK_FILES=1 ++reiserfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_REISERFS=1 \ ++ -DNO_BLOCK_FILES=1 ++reiserfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++ ++# For vstafs_stage1_5 target. ++vstafs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ ++ disk_io.c stage1_5.c fsys_vstafs.c bios.c ++vstafs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \ ++ -DNO_BLOCK_FILES=1 ++vstafs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \ ++ -DNO_BLOCK_FILES=1 ++vstafs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++ ++# For jfs_stage1_5 target. ++jfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ ++ disk_io.c stage1_5.c fsys_jfs.c bios.c ++jfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \ ++ -DNO_BLOCK_FILES=1 ++jfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \ ++ -DNO_BLOCK_FILES=1 ++jfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++ ++# For xfs_stage1_5 target. ++xfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \ ++ disk_io.c stage1_5.c fsys_xfs.c bios.c ++xfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \ ++ -DNO_BLOCK_FILES=1 ++xfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \ ++ -DNO_BLOCK_FILES=1 ++xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++ ++# For iso9660_stage1_5 target. ++iso9660_stage1_5_exec_SOURCES = start_eltorito.S asm.S common.c char_io.c \ ++ disk_io.c stage1_5.c fsys_iso9660.c bios.c ++iso9660_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ ++ -DNO_BLOCK_FILES=1 ++iso9660_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ ++ -DNO_BLOCK_FILES=1 ++iso9660_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) ++ ++# For diskless target. ++diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES) ++diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \ ++ -DSUPPORT_DISKLESS=1 ++diskless_exec_CCASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \ ++ -DSUPPORT_DISKLESS=1 ++diskless_exec_LDFLAGS = $(PRE_STAGE2_LINK) ++diskless_exec_LDADD = ../netboot/libdrivers.a ++ ++diskless_size.h: diskless ++ -rm -f $@ ++ set dummy `ls -l $^`; \ ++ echo "#define DISKLESS_SIZE $$6" > $@ ++ ++# For nbloader target. ++nbloader_exec_SOURCES = nbloader.S ++nbloader_exec_CCASFLAGS = $(STAGE2_COMPILE) ++nbloader_exec_LDFLAGS = $(NBLOADER_LINK) ++ ++# XXX: See the comment for start_exec-start.o. ++nbloader_exec-nbloader.$(OBJEXT): diskless_size.h ++ ++# For nbgrub target. ++nbgrub: nbloader diskless ++ -rm -f $@ ++ cat $^ > $@ ++ ++# For pxeloader target. ++pxeloader_exec_SOURCES = pxeloader.S ++pxeloader_exec_CCASFLAGS = $(STAGE2_COMPILE) ++pxeloader_exec_LDFLAGS = $(PXELOADER_LINK) ++ ++# XXX: See the comment for start_exec-start.o. ++pxeloader_exec-pxeloader.$(OBJEXT): diskless_size.h ++ ++# For pxegrub target. ++pxegrub: pxeloader diskless ++ -rm -f $@ ++ cat $^ > $@ ++ ++# General rule for making a raw binary. ++SUFFIXES = .exec ++.exec: ++ $(OBJCOPY) -O binary $< $@ +diff -Nur grub-0.97/stage2/pc_slice.h grub-0.97-patched/stage2/pc_slice.h +--- grub-0.97/stage2/pc_slice.h 2003-07-09 13:45:53.000000000 +0200 ++++ grub-0.97-patched/stage2/pc_slice.h 2012-11-11 17:07:12.698728671 +0100 +@@ -115,6 +115,7 @@ + #define PC_SLICE_TYPE_LINUX_EXTENDED 0x85 + #define PC_SLICE_TYPE_VSTAFS 0x9e + #define PC_SLICE_TYPE_DELL_UTIL 0xde ++#define PC_SLICE_TYPE_GPT 0xee + #define PC_SLICE_TYPE_LINUX_RAID 0xfd + + +diff -Nur grub-0.97/stage2/shared.h grub-0.97-patched/stage2/shared.h +--- grub-0.97/stage2/shared.h 2004-06-19 18:40:09.000000000 +0200 ++++ grub-0.97-patched/stage2/shared.h 2012-11-11 17:07:12.741730044 +0100 +@@ -36,8 +36,8 @@ + + /* Maybe redirect memory requests through grub_scratch_mem. */ + #ifdef GRUB_UTIL +-extern char *grub_scratch_mem; +-# define RAW_ADDR(x) ((x) + (int) grub_scratch_mem) ++extern void *grub_scratch_mem; ++# define RAW_ADDR(x) ((x) + (unsigned long) grub_scratch_mem) + # define RAW_SEG(x) (RAW_ADDR ((x) << 4) >> 4) + #else + # define RAW_ADDR(x) (x) +@@ -161,7 +161,9 @@ + + #define LINUX_CL_OFFSET 0x9000 + #define LINUX_CL_END_OFFSET 0x90FF +-#define LINUX_SETUP_MOVE_SIZE 0x9100 ++#define LINUX_CL_0202_PRM_OFFSET 0x9500 ++#define LINUX_CL_0202_PRM_END_OFFSET 0x9FFF ++#define LINUX_SETUP_MOVE_SIZE 0xA000 + #define LINUX_CL_MAGIC 0xA33F + + /* +@@ -499,7 +501,11 @@ + unsigned char linear_reserved_field_position; + unsigned long max_pixel_clock; + +- unsigned char reserved3[189]; ++ /* Reserved field to make structure to be 256 bytes long, VESA BIOS ++ Extension 3.0 Specification says to reserve 189 bytes here but ++ that doesn't make structure to be 256 bytes. So additional one is ++ added here. */ ++ unsigned char reserved3[189 + 1]; + } __attribute__ ((packed)); + + +@@ -807,7 +813,7 @@ + /* Low-level disk I/O */ + int get_diskinfo (int drive, struct geometry *geometry); + int biosdisk (int subfunc, int drive, struct geometry *geometry, +- int sector, int nsec, int segment); ++ unsigned int sector, int nsec, int segment); + void stop_floppy (void); + + /* Command-line interface functions. */ +@@ -871,6 +877,7 @@ + int grub_tolower (int c); + int grub_isspace (int c); + int grub_strncat (char *s1, const char *s2, int n); ++void grub_memcpy(void *dest, const void *src, int len); + void *grub_memmove (void *to, const void *from, int len); + void *grub_memset (void *start, int c, int len); + int grub_strncat (char *s1, const char *s2, int n); +@@ -911,7 +918,7 @@ + int nul_terminate (char *str); + int get_based_digit (int c, int base); + int safe_parse_maxint (char **str_ptr, int *myint_ptr); +-int memcheck (int start, int len); ++int memcheck (unsigned long start, unsigned long len); + void grub_putstr (const char *str); + + #ifndef NO_DECOMPRESSION +@@ -920,10 +927,10 @@ + int gunzip_read (char *buf, int len); + #endif /* NO_DECOMPRESSION */ + +-int rawread (int drive, int sector, int byte_offset, int byte_len, char *buf); +-int devread (int sector, int byte_offset, int byte_len, char *buf); +-int rawwrite (int drive, int sector, char *buf); +-int devwrite (int sector, int sector_len, char *buf); ++int rawread (int drive, unsigned int sector, int byte_offset, int byte_len, char *buf); ++int devread (unsigned int sector, int byte_offset, int byte_len, char *buf); ++int rawwrite (int drive, unsigned int sector, char *buf); ++int devwrite (unsigned int sector, int sector_len, char *buf); + + /* Parse a device string and initialize the global parameters. */ + char *set_device (char *device); +@@ -934,7 +941,9 @@ + unsigned long *partition, int *type, + unsigned long *start, unsigned long *len, + unsigned long *offset, int *entry, +- unsigned long *ext_offset, char *buf); ++ unsigned long *ext_offset, ++ unsigned long *gpt_offset, int *gpt_count, ++ int *gpt_size, char *buf); + + /* Sets device to the one represented by the SAVED_* parameters. */ + int make_saved_active (void); +diff -Nur grub-0.97/stage2/size_test grub-0.97-patched/stage2/size_test +--- grub-0.97/stage2/size_test 2004-05-14 21:30:52.000000000 +0200 ++++ grub-0.97-patched/stage2/size_test 2012-11-11 17:06:52.554085177 +0100 +@@ -36,9 +36,9 @@ + } + + # The bootloader area of a FFS partition is 14 sectors. +-check ffs_stage1_5 7168 +- +-check ufs2_stage1_5 7168 ++#check ffs_stage1_5 7168 ++# ++#check ufs2_stage1_5 7168 + + # Stage 1.5 can be installed in the sectors immediately after MBR in the + # first cylinder, so the size is (63 - 1) sectors. +diff -Nur grub-0.97/stage2/stage2.c grub-0.97-patched/stage2/stage2.c +--- grub-0.97/stage2/stage2.c 2005-03-19 18:51:57.000000000 +0100 ++++ grub-0.97-patched/stage2/stage2.c 2012-11-11 17:07:12.742730076 +0100 +@@ -233,6 +233,7 @@ + { + int c, time1, time2 = -1, first_entry = 0; + char *cur_entry = 0; ++ struct term_entry *prev_term = NULL; + + /* + * Main loop for menu UI. +@@ -651,7 +652,10 @@ + *(new_heap++) = 0; + + if (config_entries) +- run_menu (heap, NULL, new_num_entries, new_heap, 0); ++ { ++ current_entryno = first_entry + entryno; ++ run_menu (heap, NULL, new_num_entries, new_heap, 0); ++ } + else + { + cls (); +@@ -714,6 +718,15 @@ + + cls (); + setcursor (1); ++ /* if our terminal needed initialization, we should shut it down ++ * before booting the kernel, but we want to save what it was so ++ * we can come back if needed */ ++ prev_term = current_term; ++ if (current_term->shutdown) ++ { ++ (*current_term->shutdown)(); ++ current_term = term_table; /* assumption: console is first */ ++ } + + while (1) + { +@@ -727,7 +740,8 @@ + cur_entry = get_entry (config_entries, first_entry + entryno, 1); + + /* Set CURRENT_ENTRYNO for the command "savedefault". */ +- current_entryno = first_entry + entryno; ++ if (config_entries) ++ current_entryno = first_entry + entryno; + + if (run_script (cur_entry, heap)) + { +@@ -748,6 +762,13 @@ + break; + } + ++ /* if we get back here, we should go back to what our term was before */ ++ current_term = prev_term; ++ if (current_term->startup) ++ /* if our terminal fails to initialize, fall back to console since ++ * it should always work */ ++ if ((*current_term->startup)() == 0) ++ current_term = term_table; /* we know that console is first */ + show_menu = 1; + goto restart; + } +@@ -1050,6 +1071,10 @@ + while (is_preset); + } + ++ /* go ahead and make sure the terminal is setup */ ++ if (current_term->startup) ++ (*current_term->startup)(); ++ + if (! num_entries) + { + /* If no acceptable config file, goto command-line, starting +diff -Nur grub-0.97/stage2/stage2.c.orig grub-0.97-patched/stage2/stage2.c.orig +--- grub-0.97/stage2/stage2.c.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/stage2/stage2.c.orig 2005-03-19 18:51:57.000000000 +0100 +@@ -0,0 +1,1067 @@ ++/* ++ * GRUB -- GRand Unified Bootloader ++ * Copyright (C) 2000,2001,2002,2004,2005 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 <shared.h> ++#include <term.h> ++ ++grub_jmp_buf restart_env; ++ ++#if defined(PRESET_MENU_STRING) || defined(SUPPORT_DISKLESS) ++ ++# if defined(PRESET_MENU_STRING) ++static const char *preset_menu = PRESET_MENU_STRING; ++# elif defined(SUPPORT_DISKLESS) ++/* Execute the command "bootp" automatically. */ ++static const char *preset_menu = "bootp\n"; ++# endif /* SUPPORT_DISKLESS */ ++ ++static int preset_menu_offset; ++ ++static int ++open_preset_menu (void) ++{ ++#ifdef GRUB_UTIL ++ /* Unless the user explicitly requests to use the preset menu, ++ always opening the preset menu fails in the grub shell. */ ++ if (! use_preset_menu) ++ return 0; ++#endif /* GRUB_UTIL */ ++ ++ preset_menu_offset = 0; ++ return preset_menu != 0; ++} ++ ++static int ++read_from_preset_menu (char *buf, int maxlen) ++{ ++ int len = grub_strlen (preset_menu + preset_menu_offset); ++ ++ if (len > maxlen) ++ len = maxlen; ++ ++ grub_memmove (buf, preset_menu + preset_menu_offset, len); ++ preset_menu_offset += len; ++ ++ return len; ++} ++ ++static void ++close_preset_menu (void) ++{ ++ /* Disable the preset menu. */ ++ preset_menu = 0; ++} ++ ++#else /* ! PRESET_MENU_STRING && ! SUPPORT_DISKLESS */ ++ ++#define open_preset_menu() 0 ++#define read_from_preset_menu(buf, maxlen) 0 ++#define close_preset_menu() ++ ++#endif /* ! PRESET_MENU_STRING && ! SUPPORT_DISKLESS */ ++ ++static char * ++get_entry (char *list, int num, int nested) ++{ ++ int i; ++ ++ for (i = 0; i < num; i++) ++ { ++ do ++ { ++ while (*(list++)); ++ } ++ while (nested && *(list++)); ++ } ++ ++ return list; ++} ++ ++/* Print an entry in a line of the menu box. */ ++static void ++print_entry (int y, int highlight, char *entry) ++{ ++ int x; ++ ++ if (current_term->setcolorstate) ++ current_term->setcolorstate (COLOR_STATE_NORMAL); ++ ++ if (highlight && current_term->setcolorstate) ++ current_term->setcolorstate (COLOR_STATE_HIGHLIGHT); ++ ++ gotoxy (2, y); ++ grub_putchar (' '); ++ for (x = 3; x < 75; x++) ++ { ++ if (*entry && x <= 72) ++ { ++ if (x == 72) ++ grub_putchar (DISP_RIGHT); ++ else ++ grub_putchar (*entry++); ++ } ++ else ++ grub_putchar (' '); ++ } ++ gotoxy (74, y); ++ ++ if (current_term->setcolorstate) ++ current_term->setcolorstate (COLOR_STATE_STANDARD); ++} ++ ++/* Print entries in the menu box. */ ++static void ++print_entries (int y, int size, int first, int entryno, char *menu_entries) ++{ ++ int i; ++ ++ gotoxy (77, y + 1); ++ ++ if (first) ++ grub_putchar (DISP_UP); ++ else ++ grub_putchar (' '); ++ ++ menu_entries = get_entry (menu_entries, first, 0); ++ ++ for (i = 0; i < size; i++) ++ { ++ print_entry (y + i + 1, entryno == i, menu_entries); ++ ++ while (*menu_entries) ++ menu_entries++; ++ ++ if (*(menu_entries - 1)) ++ menu_entries++; ++ } ++ ++ gotoxy (77, y + size); ++ ++ if (*menu_entries) ++ grub_putchar (DISP_DOWN); ++ else ++ grub_putchar (' '); ++ ++ gotoxy (74, y + entryno + 1); ++} ++ ++static void ++print_entries_raw (int size, int first, char *menu_entries) ++{ ++ int i; ++ ++#define LINE_LENGTH 67 ++ ++ for (i = 0; i < LINE_LENGTH; i++) ++ grub_putchar ('-'); ++ grub_putchar ('\n'); ++ ++ for (i = first; i < size; i++) ++ { ++ /* grub's printf can't %02d so ... */ ++ if (i < 10) ++ grub_putchar (' '); ++ grub_printf ("%d: %s\n", i, get_entry (menu_entries, i, 0)); ++ } ++ ++ for (i = 0; i < LINE_LENGTH; i++) ++ grub_putchar ('-'); ++ grub_putchar ('\n'); ++ ++#undef LINE_LENGTH ++} ++ ++ ++static void ++print_border (int y, int size) ++{ ++ int i; ++ ++ if (current_term->setcolorstate) ++ current_term->setcolorstate (COLOR_STATE_NORMAL); ++ ++ gotoxy (1, y); ++ ++ grub_putchar (DISP_UL); ++ for (i = 0; i < 73; i++) ++ grub_putchar (DISP_HORIZ); ++ grub_putchar (DISP_UR); ++ ++ i = 1; ++ while (1) ++ { ++ gotoxy (1, y + i); ++ ++ if (i > size) ++ break; ++ ++ grub_putchar (DISP_VERT); ++ gotoxy (75, y + i); ++ grub_putchar (DISP_VERT); ++ ++ i++; ++ } ++ ++ grub_putchar (DISP_LL); ++ for (i = 0; i < 73; i++) ++ grub_putchar (DISP_HORIZ); ++ grub_putchar (DISP_LR); ++ ++ if (current_term->setcolorstate) ++ current_term->setcolorstate (COLOR_STATE_STANDARD); ++} ++ ++static void ++run_menu (char *menu_entries, char *config_entries, int num_entries, ++ char *heap, int entryno) ++{ ++ int c, time1, time2 = -1, first_entry = 0; ++ char *cur_entry = 0; ++ ++ /* ++ * Main loop for menu UI. ++ */ ++ ++restart: ++ /* Dumb terminal always use all entries for display ++ invariant for TERM_DUMB: first_entry == 0 */ ++ if (! (current_term->flags & TERM_DUMB)) ++ { ++ while (entryno > 11) ++ { ++ first_entry++; ++ entryno--; ++ } ++ } ++ ++ /* If the timeout was expired or wasn't set, force to show the menu ++ interface. */ ++ if (grub_timeout < 0) ++ show_menu = 1; ++ ++ /* If SHOW_MENU is false, don't display the menu until ESC is pressed. */ ++ if (! show_menu) ++ { ++ /* Get current time. */ ++ while ((time1 = getrtsecs ()) == 0xFF) ++ ; ++ ++ while (1) ++ { ++ /* Check if ESC is pressed. */ ++ if (checkkey () != -1 && ASCII_CHAR (getkey ()) == '\e') ++ { ++ grub_timeout = -1; ++ show_menu = 1; ++ break; ++ } ++ ++ /* If GRUB_TIMEOUT is expired, boot the default entry. */ ++ if (grub_timeout >=0 ++ && (time1 = getrtsecs ()) != time2 ++ && time1 != 0xFF) ++ { ++ if (grub_timeout <= 0) ++ { ++ grub_timeout = -1; ++ goto boot_entry; ++ } ++ ++ time2 = time1; ++ grub_timeout--; ++ ++ /* Print a message. */ ++ grub_printf ("\rPress `ESC' to enter the menu... %d ", ++ grub_timeout); ++ } ++ } ++ } ++ ++ /* Only display the menu if the user wants to see it. */ ++ if (show_menu) ++ { ++ init_page (); ++ setcursor (0); ++ ++ if (current_term->flags & TERM_DUMB) ++ print_entries_raw (num_entries, first_entry, menu_entries); ++ else ++ print_border (3, 12); ++ ++ grub_printf ("\n\ ++ Use the %c and %c keys to select which entry is highlighted.\n", ++ DISP_UP, DISP_DOWN); ++ ++ if (! auth && password) ++ { ++ printf ("\ ++ Press enter to boot the selected OS or 'p' to enter a\n\ ++ password to unlock the next set of features."); ++ } ++ else ++ { ++ if (config_entries) ++ printf ("\ ++ Press enter to boot the selected OS, 'e' to edit the\n\ ++ commands before booting, or 'c' for a command-line."); ++ else ++ printf ("\ ++ Press 'b' to boot, 'e' to edit the selected command in the\n\ ++ boot sequence, 'c' for a command-line, 'o' to open a new line\n\ ++ after ('O' for before) the selected line, 'd' to remove the\n\ ++ selected line, or escape to go back to the main menu."); ++ } ++ ++ if (current_term->flags & TERM_DUMB) ++ grub_printf ("\n\nThe selected entry is %d ", entryno); ++ else ++ print_entries (3, 12, first_entry, entryno, menu_entries); ++ } ++ ++ /* XX using RT clock now, need to initialize value */ ++ while ((time1 = getrtsecs()) == 0xFF); ++ ++ while (1) ++ { ++ /* Initialize to NULL just in case... */ ++ cur_entry = NULL; ++ ++ if (grub_timeout >= 0 && (time1 = getrtsecs()) != time2 && time1 != 0xFF) ++ { ++ if (grub_timeout <= 0) ++ { ++ grub_timeout = -1; ++ break; ++ } ++ ++ /* else not booting yet! */ ++ time2 = time1; ++ ++ if (current_term->flags & TERM_DUMB) ++ grub_printf ("\r Entry %d will be booted automatically in %d seconds. ", ++ entryno, grub_timeout); ++ else ++ { ++ gotoxy (3, 22); ++ grub_printf ("The highlighted entry will be booted automatically in %d seconds. ", ++ grub_timeout); ++ gotoxy (74, 4 + entryno); ++ } ++ ++ grub_timeout--; ++ } ++ ++ /* Check for a keypress, however if TIMEOUT has been expired ++ (GRUB_TIMEOUT == -1) relax in GETKEY even if no key has been ++ pressed. ++ This avoids polling (relevant in the grub-shell and later on ++ in grub if interrupt driven I/O is done). */ ++ if (checkkey () >= 0 || grub_timeout < 0) ++ { ++ /* Key was pressed, show which entry is selected before GETKEY, ++ since we're comming in here also on GRUB_TIMEOUT == -1 and ++ hang in GETKEY */ ++ if (current_term->flags & TERM_DUMB) ++ grub_printf ("\r Highlighted entry is %d: ", entryno); ++ ++ c = ASCII_CHAR (getkey ()); ++ ++ if (grub_timeout >= 0) ++ { ++ if (current_term->flags & TERM_DUMB) ++ grub_putchar ('\r'); ++ else ++ gotoxy (3, 22); ++ printf (" "); ++ grub_timeout = -1; ++ fallback_entryno = -1; ++ if (! (current_term->flags & TERM_DUMB)) ++ gotoxy (74, 4 + entryno); ++ } ++ ++ /* We told them above (at least in SUPPORT_SERIAL) to use ++ '^' or 'v' so accept these keys. */ ++ if (c == 16 || c == '^') ++ { ++ if (current_term->flags & TERM_DUMB) ++ { ++ if (entryno > 0) ++ entryno--; ++ } ++ else ++ { ++ if (entryno > 0) ++ { ++ print_entry (4 + entryno, 0, ++ get_entry (menu_entries, ++ first_entry + entryno, ++ 0)); ++ entryno--; ++ print_entry (4 + entryno, 1, ++ get_entry (menu_entries, ++ first_entry + entryno, ++ 0)); ++ } ++ else if (first_entry > 0) ++ { ++ first_entry--; ++ print_entries (3, 12, first_entry, entryno, ++ menu_entries); ++ } ++ } ++ } ++ else if ((c == 14 || c == 'v') ++ && first_entry + entryno + 1 < num_entries) ++ { ++ if (current_term->flags & TERM_DUMB) ++ entryno++; ++ else ++ { ++ if (entryno < 11) ++ { ++ print_entry (4 + entryno, 0, ++ get_entry (menu_entries, ++ first_entry + entryno, ++ 0)); ++ entryno++; ++ print_entry (4 + entryno, 1, ++ get_entry (menu_entries, ++ first_entry + entryno, ++ 0)); ++ } ++ else if (num_entries > 12 + first_entry) ++ { ++ first_entry++; ++ print_entries (3, 12, first_entry, entryno, menu_entries); ++ } ++ } ++ } ++ else if (c == 7) ++ { ++ /* Page Up */ ++ first_entry -= 12; ++ if (first_entry < 0) ++ { ++ entryno += first_entry; ++ first_entry = 0; ++ if (entryno < 0) ++ entryno = 0; ++ } ++ print_entries (3, 12, first_entry, entryno, menu_entries); ++ } ++ else if (c == 3) ++ { ++ /* Page Down */ ++ first_entry += 12; ++ if (first_entry + entryno + 1 >= num_entries) ++ { ++ first_entry = num_entries - 12; ++ if (first_entry < 0) ++ first_entry = 0; ++ entryno = num_entries - first_entry - 1; ++ } ++ print_entries (3, 12, first_entry, entryno, menu_entries); ++ } ++ ++ if (config_entries) ++ { ++ if ((c == '\n') || (c == '\r') || (c == 6)) ++ break; ++ } ++ else ++ { ++ if ((c == 'd') || (c == 'o') || (c == 'O')) ++ { ++ if (! (current_term->flags & TERM_DUMB)) ++ print_entry (4 + entryno, 0, ++ get_entry (menu_entries, ++ first_entry + entryno, ++ 0)); ++ ++ /* insert after is almost exactly like insert before */ ++ if (c == 'o') ++ { ++ /* But `o' differs from `O', since it may causes ++ the menu screen to scroll up. */ ++ if (entryno < 11 || (current_term->flags & TERM_DUMB)) ++ entryno++; ++ else ++ first_entry++; ++ ++ c = 'O'; ++ } ++ ++ cur_entry = get_entry (menu_entries, ++ first_entry + entryno, ++ 0); ++ ++ if (c == 'O') ++ { ++ grub_memmove (cur_entry + 2, cur_entry, ++ ((int) heap) - ((int) cur_entry)); ++ ++ cur_entry[0] = ' '; ++ cur_entry[1] = 0; ++ ++ heap += 2; ++ ++ num_entries++; ++ } ++ else if (num_entries > 0) ++ { ++ char *ptr = get_entry(menu_entries, ++ first_entry + entryno + 1, ++ 0); ++ ++ grub_memmove (cur_entry, ptr, ++ ((int) heap) - ((int) ptr)); ++ heap -= (((int) ptr) - ((int) cur_entry)); ++ ++ num_entries--; ++ ++ if (entryno >= num_entries) ++ entryno--; ++ if (first_entry && num_entries < 12 + first_entry) ++ first_entry--; ++ } ++ ++ if (current_term->flags & TERM_DUMB) ++ { ++ grub_printf ("\n\n"); ++ print_entries_raw (num_entries, first_entry, ++ menu_entries); ++ grub_printf ("\n"); ++ } ++ else ++ print_entries (3, 12, first_entry, entryno, menu_entries); ++ } ++ ++ cur_entry = menu_entries; ++ if (c == 27) ++ return; ++ if (c == 'b') ++ break; ++ } ++ ++ if (! auth && password) ++ { ++ if (c == 'p') ++ { ++ /* Do password check here! */ ++ char entered[32]; ++ char *pptr = password; ++ ++ if (current_term->flags & TERM_DUMB) ++ grub_printf ("\r "); ++ else ++ gotoxy (1, 21); ++ ++ /* Wipe out the previously entered password */ ++ grub_memset (entered, 0, sizeof (entered)); ++ get_cmdline (" Password: ", entered, 31, '*', 0); ++ ++ while (! isspace (*pptr) && *pptr) ++ pptr++; ++ ++ /* Make sure that PASSWORD is NUL-terminated. */ ++ *pptr++ = 0; ++ ++ if (! check_password (entered, password, password_type)) ++ { ++ char *new_file = config_file; ++ while (isspace (*pptr)) ++ pptr++; ++ ++ /* If *PPTR is NUL, then allow the user to use ++ privileged instructions, otherwise, load ++ another configuration file. */ ++ if (*pptr != 0) ++ { ++ while ((*(new_file++) = *(pptr++)) != 0) ++ ; ++ ++ /* Make sure that the user will not have ++ authority in the next configuration. */ ++ auth = 0; ++ return; ++ } ++ else ++ { ++ /* Now the user is superhuman. */ ++ auth = 1; ++ goto restart; ++ } ++ } ++ else ++ { ++ grub_printf ("Failed!\n Press any key to continue..."); ++ getkey (); ++ goto restart; ++ } ++ } ++ } ++ else ++ { ++ if (c == 'e') ++ { ++ int new_num_entries = 0, i = 0; ++ char *new_heap; ++ ++ if (config_entries) ++ { ++ new_heap = heap; ++ cur_entry = get_entry (config_entries, ++ first_entry + entryno, ++ 1); ++ } ++ else ++ { ++ /* safe area! */ ++ new_heap = heap + NEW_HEAPSIZE + 1; ++ cur_entry = get_entry (menu_entries, ++ first_entry + entryno, ++ 0); ++ } ++ ++ do ++ { ++ while ((*(new_heap++) = cur_entry[i++]) != 0); ++ new_num_entries++; ++ } ++ while (config_entries && cur_entry[i]); ++ ++ /* this only needs to be done if config_entries is non-NULL, ++ but it doesn't hurt to do it always */ ++ *(new_heap++) = 0; ++ ++ if (config_entries) ++ run_menu (heap, NULL, new_num_entries, new_heap, 0); ++ else ++ { ++ cls (); ++ print_cmdline_message (0); ++ ++ new_heap = heap + NEW_HEAPSIZE + 1; ++ ++ saved_drive = boot_drive; ++ saved_partition = install_partition; ++ current_drive = GRUB_INVALID_DRIVE; ++ ++ if (! get_cmdline (PACKAGE " edit> ", new_heap, ++ NEW_HEAPSIZE + 1, 0, 1)) ++ { ++ int j = 0; ++ ++ /* get length of new command */ ++ while (new_heap[j++]) ++ ; ++ ++ if (j < 2) ++ { ++ j = 2; ++ new_heap[0] = ' '; ++ new_heap[1] = 0; ++ } ++ ++ /* align rest of commands properly */ ++ grub_memmove (cur_entry + j, cur_entry + i, ++ (int) heap - ((int) cur_entry + i)); ++ ++ /* copy command to correct area */ ++ grub_memmove (cur_entry, new_heap, j); ++ ++ heap += (j - i); ++ } ++ } ++ ++ goto restart; ++ } ++ if (c == 'c') ++ { ++ enter_cmdline (heap, 0); ++ goto restart; ++ } ++#ifdef GRUB_UTIL ++ if (c == 'q') ++ { ++ /* The same as ``quit''. */ ++ stop (); ++ } ++#endif ++ } ++ } ++ } ++ ++ /* Attempt to boot an entry. */ ++ ++ boot_entry: ++ ++ cls (); ++ setcursor (1); ++ ++ while (1) ++ { ++ if (config_entries) ++ printf (" Booting '%s'\n\n", ++ get_entry (menu_entries, first_entry + entryno, 0)); ++ else ++ printf (" Booting command-list\n\n"); ++ ++ if (! cur_entry) ++ cur_entry = get_entry (config_entries, first_entry + entryno, 1); ++ ++ /* Set CURRENT_ENTRYNO for the command "savedefault". */ ++ current_entryno = first_entry + entryno; ++ ++ if (run_script (cur_entry, heap)) ++ { ++ if (fallback_entryno >= 0) ++ { ++ cur_entry = NULL; ++ first_entry = 0; ++ entryno = fallback_entries[fallback_entryno]; ++ fallback_entryno++; ++ if (fallback_entryno >= MAX_FALLBACK_ENTRIES ++ || fallback_entries[fallback_entryno] < 0) ++ fallback_entryno = -1; ++ } ++ else ++ break; ++ } ++ else ++ break; ++ } ++ ++ show_menu = 1; ++ goto restart; ++} ++ ++ ++static int ++get_line_from_config (char *cmdline, int maxlen, int read_from_file) ++{ ++ int pos = 0, literal = 0, comment = 0; ++ char c; /* since we're loading it a byte at a time! */ ++ ++ while (1) ++ { ++ if (read_from_file) ++ { ++ if (! grub_read (&c, 1)) ++ break; ++ } ++ else ++ { ++ if (! read_from_preset_menu (&c, 1)) ++ break; ++ } ++ ++ /* Skip all carriage returns. */ ++ if (c == '\r') ++ continue; ++ ++ /* Replace tabs with spaces. */ ++ if (c == '\t') ++ c = ' '; ++ ++ /* The previous is a backslash, then... */ ++ if (literal) ++ { ++ /* If it is a newline, replace it with a space and continue. */ ++ if (c == '\n') ++ { ++ c = ' '; ++ ++ /* Go back to overwrite a backslash. */ ++ if (pos > 0) ++ pos--; ++ } ++ ++ literal = 0; ++ } ++ ++ /* translate characters first! */ ++ if (c == '\' && ! literal) ++ literal = 1; ++ ++ if (comment) ++ { ++ if (c == '\n') ++ comment = 0; ++ } ++ else if (! pos) ++ { ++ if (c == '#') ++ comment = 1; ++ else if ((c != ' ') && (c != '\n')) ++ cmdline[pos++] = c; ++ } ++ else ++ { ++ if (c == '\n') ++ break; ++ ++ if (pos < maxlen) ++ cmdline[pos++] = c; ++ } ++ } ++ ++ cmdline[pos] = 0; ++ ++ return pos; ++} ++ ++ ++/* This is the starting function in C. */ ++void ++cmain (void) ++{ ++ int config_len, menu_len, num_entries; ++ char *config_entries, *menu_entries; ++ char *kill_buf = (char *) KILL_BUF; ++ ++ auto void reset (void); ++ void reset (void) ++ { ++ count_lines = -1; ++ config_len = 0; ++ menu_len = 0; ++ num_entries = 0; ++ config_entries = (char *) mbi.drives_addr + mbi.drives_length; ++ menu_entries = (char *) MENU_BUF; ++ init_config (); ++ } ++ ++ /* Initialize the environment for restarting Stage 2. */ ++ grub_setjmp (restart_env); ++ ++ /* Initialize the kill buffer. */ ++ *kill_buf = 0; ++ ++ /* Never return. */ ++ for (;;) ++ { ++ int is_opened, is_preset; ++ ++ reset (); ++ ++ /* Here load the configuration file. */ ++ ++#ifdef GRUB_UTIL ++ if (use_config_file) ++#endif /* GRUB_UTIL */ ++ { ++ char *default_file = (char *) DEFAULT_FILE_BUF; ++ int i; ++ ++ /* Get a saved default entry if possible. */ ++ saved_entryno = 0; ++ *default_file = 0; ++ grub_strncat (default_file, config_file, DEFAULT_FILE_BUFLEN); ++ for (i = grub_strlen(default_file); i >= 0; i--) ++ if (default_file[i] == '/') ++ { ++ i++; ++ break; ++ } ++ default_file[i] = 0; ++ grub_strncat (default_file + i, "default", DEFAULT_FILE_BUFLEN - i); ++ if (grub_open (default_file)) ++ { ++ char buf[10]; /* This is good enough. */ ++ char *p = buf; ++ int len; ++ ++ len = grub_read (buf, sizeof (buf)); ++ if (len > 0) ++ { ++ buf[sizeof (buf) - 1] = 0; ++ safe_parse_maxint (&p, &saved_entryno); ++ } ++ ++ grub_close (); ++ } ++ errnum = ERR_NONE; ++ ++ do ++ { ++ /* STATE 0: Before any title command. ++ STATE 1: In a title command. ++ STATE >1: In a entry after a title command. */ ++ int state = 0, prev_config_len = 0, prev_menu_len = 0; ++ char *cmdline; ++ ++ /* Try the preset menu first. This will succeed at most once, ++ because close_preset_menu disables the preset menu. */ ++ is_opened = is_preset = open_preset_menu (); ++ if (! is_opened) ++ { ++ is_opened = grub_open (config_file); ++ errnum = ERR_NONE; ++ } ++ ++ if (! is_opened) ++ break; ++ ++ /* This is necessary, because the menu must be overrided. */ ++ reset (); ++ ++ cmdline = (char *) CMDLINE_BUF; ++ while (get_line_from_config (cmdline, NEW_HEAPSIZE, ++ ! is_preset)) ++ { ++ struct builtin *builtin; ++ ++ /* Get the pointer to the builtin structure. */ ++ builtin = find_command (cmdline); ++ errnum = 0; ++ if (! builtin) ++ /* Unknown command. Just skip now. */ ++ continue; ++ ++ if (builtin->flags & BUILTIN_TITLE) ++ { ++ char *ptr; ++ ++ /* the command "title" is specially treated. */ ++ if (state > 1) ++ { ++ /* The next title is found. */ ++ num_entries++; ++ config_entries[config_len++] = 0; ++ prev_menu_len = menu_len; ++ prev_config_len = config_len; ++ } ++ else ++ { ++ /* The first title is found. */ ++ menu_len = prev_menu_len; ++ config_len = prev_config_len; ++ } ++ ++ /* Reset the state. */ ++ state = 1; ++ ++ /* Copy title into menu area. */ ++ ptr = skip_to (1, cmdline); ++ while ((menu_entries[menu_len++] = *(ptr++)) != 0) ++ ; ++ } ++ else if (! state) ++ { ++ /* Run a command found is possible. */ ++ if (builtin->flags & BUILTIN_MENU) ++ { ++ char *arg = skip_to (1, cmdline); ++ (builtin->func) (arg, BUILTIN_MENU); ++ errnum = 0; ++ } ++ else ++ /* Ignored. */ ++ continue; ++ } ++ else ++ { ++ char *ptr = cmdline; ++ ++ state++; ++ /* Copy config file data to config area. */ ++ while ((config_entries[config_len++] = *ptr++) != 0) ++ ; ++ } ++ } ++ ++ if (state > 1) ++ { ++ /* Finish the last entry. */ ++ num_entries++; ++ config_entries[config_len++] = 0; ++ } ++ else ++ { ++ menu_len = prev_menu_len; ++ config_len = prev_config_len; ++ } ++ ++ menu_entries[menu_len++] = 0; ++ config_entries[config_len++] = 0; ++ grub_memmove (config_entries + config_len, menu_entries, ++ menu_len); ++ menu_entries = config_entries + config_len; ++ ++ /* Make sure that all fallback entries are valid. */ ++ if (fallback_entryno >= 0) ++ { ++ for (i = 0; i < MAX_FALLBACK_ENTRIES; i++) ++ { ++ if (fallback_entries[i] < 0) ++ break; ++ if (fallback_entries[i] >= num_entries) ++ { ++ grub_memmove (fallback_entries + i, ++ fallback_entries + i + 1, ++ ((MAX_FALLBACK_ENTRIES - i - 1) ++ * sizeof (int))); ++ i--; ++ } ++ } ++ ++ if (fallback_entries[0] < 0) ++ fallback_entryno = -1; ++ } ++ /* Check if the default entry is present. Otherwise reset ++ it to fallback if fallback is valid, or to DEFAULT_ENTRY ++ if not. */ ++ if (default_entry >= num_entries) ++ { ++ if (fallback_entryno >= 0) ++ { ++ default_entry = fallback_entries[0]; ++ fallback_entryno++; ++ if (fallback_entryno >= MAX_FALLBACK_ENTRIES ++ || fallback_entries[fallback_entryno] < 0) ++ fallback_entryno = -1; ++ } ++ else ++ default_entry = 0; ++ } ++ ++ if (is_preset) ++ close_preset_menu (); ++ else ++ grub_close (); ++ } ++ while (is_preset); ++ } ++ ++ if (! num_entries) ++ { ++ /* If no acceptable config file, goto command-line, starting ++ heap from where the config entries would have been stored ++ if there were any. */ ++ enter_cmdline (config_entries, 1); ++ } ++ else ++ { ++ /* Run menu interface. */ ++ run_menu (menu_entries, config_entries, num_entries, ++ menu_entries + menu_len, default_entry); ++ } ++ } ++} +diff -Nur grub-0.97/stage2/term.h grub-0.97-patched/stage2/term.h +--- grub-0.97/stage2/term.h 2003-07-09 13:45:53.000000000 +0200 ++++ grub-0.97-patched/stage2/term.h 2012-11-11 17:06:33.311470556 +0100 +@@ -60,6 +60,8 @@ + const char *name; + /* The feature flags defined above. */ + unsigned long flags; ++ /* Default for maximum number of lines if not specified */ ++ unsigned short max_lines; + /* Put a character. */ + void (*putchar) (int c); + /* Check if any input character is available. */ +@@ -79,6 +81,11 @@ + void (*setcolor) (int normal_color, int highlight_color); + /* Turn on/off the cursor. */ + int (*setcursor) (int on); ++ ++ /* function to start a terminal */ ++ int (*startup) (void); ++ /* function to use to shutdown a terminal */ ++ void (*shutdown) (void); + }; + + /* This lists up available terminals. */ +@@ -124,4 +131,23 @@ + int hercules_setcursor (int on); + #endif + ++#ifdef SUPPORT_GRAPHICS ++extern int foreground, background, border, graphics_inited; ++ ++void graphics_set_splash(char *splashfile); ++int set_videomode (int mode); ++void graphics_putchar (int c); ++int graphics_getxy(void); ++void graphics_gotoxy(int x, int y); ++void graphics_cls(void); ++void graphics_setcolorstate (color_state state); ++void graphics_setcolor (int normal_color, int highlight_color); ++void graphics_setcursor (int on); ++int graphics_init(void); ++void graphics_end(void); ++ ++int hex(int v); ++void graphics_set_palette(int idx, int red, int green, int blue); ++#endif /* SUPPORT_GRAPHICS */ ++ + #endif /* ! GRUB_TERM_HEADER */ +diff -Nur grub-0.97/THANKS grub-0.97-patched/THANKS +--- grub-0.97/THANKS 2005-05-08 04:17:43.000000000 +0200 ++++ grub-0.97-patched/THANKS 2012-11-11 17:07:12.709729021 +0100 +@@ -121,3 +121,4 @@ + Yedidyah Bar-David didi@post.tau.ac.il + Yury V. Umanets umka@namesys.com + Yuri Zaporogets yuriz@ukr.net ++Vitaly Fertman vitaly@namesys.com +diff -Nur grub-0.97/util/grub-install.in grub-0.97-patched/util/grub-install.in +--- grub-0.97/util/grub-install.in 2004-07-24 20:57:31.000000000 +0200 ++++ grub-0.97-patched/util/grub-install.in 2012-11-11 17:07:12.748730268 +0100 +@@ -96,24 +96,27 @@ + # Break the device name into the disk part and the partition part. + case "$host_os" in + linux*) +- tmp_disk=`echo "$1" | sed -e 's%([sh]d[a-z])[0-9]*$%\1%' \ ++ tmp_disk=`echo "$1" | sed -e 's%([shv]d[a-z])[0-9]*$%\1%' \ + -e 's%(d[0-9]*)p[0-9]*$%\1%' \ + -e 's%(fd[0-9]*)$%\1%' \ + -e 's%/part[0-9]*$%/disc%' \ +- -e 's%(c[0-7]d[0-9]*).*$%\1%'` +- tmp_part=`echo "$1" | sed -e 's%.*/[sh]d[a-z]([0-9]*)$%\1%' \ ++ -e 's%(c[0-7]d[0-9]*).*$%\1%' \ ++ -e 's%(e[0-9].[0-9]*).*$%\1%'` ++ tmp_part=`echo "$1" | sed -e 's%.*/[shv]d[a-z]([0-9]*)$%\1%' \ + -e 's%.*d[0-9]*p%%' \ + -e 's%.*/fd[0-9]*$%%' \ + -e 's%.*/floppy/[0-9]*$%%' \ + -e 's%.*/(disc|part([0-9]*))$%\2%' \ +- -e 's%.*c[0-7]d[0-9]*p%%'` ++ -e 's%.*c[0-7]d[0-9]*p*%%' \ ++ -e 's%.*e[0-9].[0-9]*p%%' \ ++ -e 's%.*e[0-9].[0-9]*$%%'` + ;; + gnu*) + tmp_disk=`echo "$1" | sed 's%([sh]d[0-9]*).*%\1%'` + tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;; + freebsd* | kfreebsd*-gnu) +- tmp_disk=`echo "$1" | sed 's%r{0,1}([saw]d[0-9]*).*$%r\1%' \ +- | sed 's%r{0,1}(da[0-9]*).*$%r\1%'` ++ tmp_disk=`echo "$1" | sed 's%r{0,1}([saw]d[0-9]*).*$%\1%' \ ++ | sed 's%r{0,1}(da[0-9]*).*$%\1%'` + tmp_part=`echo "$1" \ + | sed "s%.*/r{0,1}[saw]d[0-9](s[0-9]*[a-h])%\1%" \ + | sed "s%.*/r{0,1}da[0-9](s[0-9]*[a-h])%\1%"` +@@ -131,7 +134,7 @@ + + # Get the drive name. + tmp_drive=`grep -v '^#' $device_map | grep "$tmp_disk *$" \ +- | sed 's%.*(([hf]d[0-9][a-g0-9,]*)).*%\1%'` ++ | sed 's%.*(([hf]d[0-9][a-z0-9,]*)).*%\1%'` + + # If not found, print an error message and exit. + if test "x$tmp_drive" = x; then +@@ -148,13 +151,13 @@ + gnu*) + if echo $tmp_part | grep "^s" >/dev/null; then + tmp_pc_slice=`echo $tmp_part \ +- | sed "s%s([0-9]*)[a-g]*$%\1%"` ++ | sed "s%s([0-9]*)[a-z]*$%\1%"` + tmp_drive=`echo "$tmp_drive" \ + | sed "s%)%,`expr "$tmp_pc_slice" - 1`)%"` + fi +- if echo $tmp_part | grep "[a-g]$" >/dev/null; then ++ if echo $tmp_part | grep "[a-z]$" >/dev/null; then + tmp_bsd_partition=`echo "$tmp_part" \ +- | sed "s%[^a-g]*([a-g])$%\1%"` ++ | sed "s%[^a-z]*([a-z])$%\1%"` + tmp_drive=`echo "$tmp_drive" \ + | sed "s%)%,$tmp_bsd_partition)%"` + fi +@@ -336,6 +339,10 @@ + # Create a safe temporary file. + test -n "$mklog" && log_file=`$mklog` + ++ # Before all invocations of the grub shell, call sync to make sure ++ # the raw device is in sync with any bufferring in filesystems. ++ sync ++ + $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file + quit + EOF +@@ -450,6 +457,10 @@ + # Create a safe temporary file. + test -n "$mklog" && log_file=`$mklog` + ++# Before all invocations of the grub shell, call sync to make sure ++# the raw device is in sync with any bufferring in filesystems. ++sync ++ + # Now perform the installation. + $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file + root $root_drive +diff -Nur grub-0.97/util/grub-install.in.orig grub-0.97-patched/util/grub-install.in.orig +--- grub-0.97/util/grub-install.in.orig 1970-01-01 01:00:00.000000000 +0100 ++++ grub-0.97-patched/util/grub-install.in.orig 2004-07-24 20:57:31.000000000 +0200 +@@ -0,0 +1,477 @@ ++#! /bin/sh ++ ++# Install GRUB on your drive. ++# Copyright (C) 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc. ++# ++# This file 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. ++ ++# Initialize some variables. ++prefix=@prefix@ ++exec_prefix=@exec_prefix@ ++sbindir=@sbindir@ ++libdir=@libdir@ ++PACKAGE=@PACKAGE@ ++VERSION=@VERSION@ ++host_cpu=@host_cpu@ ++host_os=@host_os@ ++host_vendor=@host_vendor@ ++pkglibdir=${libdir}/${PACKAGE}/${host_cpu}-${host_vendor} ++ ++grub_shell=${sbindir}/grub ++grub_set_default=${sbindir}/grub-set-default ++log_file=/tmp/grub-install.log.$$ ++img_file=/tmp/grub-install.img.$$ ++rootdir= ++grub_prefix=/boot/grub ++ ++install_device= ++no_floppy= ++force_lba= ++recheck=no ++debug=no ++ ++# look for secure tempfile creation wrappers on this platform ++if test -x /bin/tempfile; then ++ mklog="/bin/tempfile --prefix=grub" ++ mkimg="/bin/tempfile --prefix=grub" ++elif test -x /bin/mktemp; then ++ mklog="/bin/mktemp /tmp/grub-install.log.XXXXXX" ++ mkimg="/bin/mktemp /tmp/grub-install.img.XXXXXX" ++else ++ mklog="" ++ mkimg="" ++fi ++ ++# Usage: usage ++# Print the usage. ++usage () { ++ cat <<EOF ++Usage: grub-install [OPTION] install_device ++Install GRUB on your drive. ++ ++ -h, --help print this message and exit ++ -v, --version print the version information and exit ++ --root-directory=DIR install GRUB images under the directory DIR ++ instead of the root directory ++ --grub-shell=FILE use FILE as the grub shell ++ --no-floppy do not probe any floppy drive ++ --force-lba force GRUB to use LBA mode even for a buggy ++ BIOS ++ --recheck probe a device map even if it already exists ++ ++INSTALL_DEVICE can be a GRUB device name or a system device filename. ++ ++grub-install copies GRUB images into the DIR/boot directory specfied by ++--root-directory, and uses the grub shell to install grub into the boot ++sector. ++ ++Report bugs to bug-grub@gnu.org. ++EOF ++} ++ ++# Usage: convert os_device ++# Convert an OS device to the corresponding GRUB drive. ++# This part is OS-specific. ++convert () { ++ # First, check if the device file exists. ++ if test -e "$1"; then ++ : ++ else ++ echo "$1: Not found or not a block device." 1>&2 ++ exit 1 ++ fi ++ ++ # Break the device name into the disk part and the partition part. ++ case "$host_os" in ++ linux*) ++ tmp_disk=`echo "$1" | sed -e 's%([sh]d[a-z])[0-9]*$%\1%' \ ++ -e 's%(d[0-9]*)p[0-9]*$%\1%' \ ++ -e 's%(fd[0-9]*)$%\1%' \ ++ -e 's%/part[0-9]*$%/disc%' \ ++ -e 's%(c[0-7]d[0-9]*).*$%\1%'` ++ tmp_part=`echo "$1" | sed -e 's%.*/[sh]d[a-z]([0-9]*)$%\1%' \ ++ -e 's%.*d[0-9]*p%%' \ ++ -e 's%.*/fd[0-9]*$%%' \ ++ -e 's%.*/floppy/[0-9]*$%%' \ ++ -e 's%.*/(disc|part([0-9]*))$%\2%' \ ++ -e 's%.*c[0-7]d[0-9]*p%%'` ++ ;; ++ gnu*) ++ tmp_disk=`echo "$1" | sed 's%([sh]d[0-9]*).*%\1%'` ++ tmp_part=`echo "$1" | sed "s%$tmp_disk%%"` ;; ++ freebsd* | kfreebsd*-gnu) ++ tmp_disk=`echo "$1" | sed 's%r{0,1}([saw]d[0-9]*).*$%r\1%' \ ++ | sed 's%r{0,1}(da[0-9]*).*$%r\1%'` ++ tmp_part=`echo "$1" \ ++ | sed "s%.*/r{0,1}[saw]d[0-9](s[0-9]*[a-h])%\1%" \ ++ | sed "s%.*/r{0,1}da[0-9](s[0-9]*[a-h])%\1%"` ++ ;; ++ netbsd* | knetbsd*-gnu) ++ tmp_disk=`echo "$1" | sed 's%r{0,1}([sw]d[0-9]*).*$%r\1d%' \ ++ | sed 's%r{0,1}(fd[0-9]*).*$%r\1a%'` ++ tmp_part=`echo "$1" \ ++ | sed "s%.*/r{0,1}[sw]d[0-9]([abe-p])%\1%"` ++ ;; ++ *) ++ echo "grub-install does not support your OS yet." 1>&2 ++ exit 1 ;; ++ esac ++ ++ # Get the drive name. ++ tmp_drive=`grep -v '^#' $device_map | grep "$tmp_disk *$" \ ++ | sed 's%.*(([hf]d[0-9][a-g0-9,]*)).*%\1%'` ++ ++ # If not found, print an error message and exit. ++ if test "x$tmp_drive" = x; then ++ echo "$1 does not have any corresponding BIOS drive." 1>&2 ++ exit 1 ++ fi ++ ++ if test "x$tmp_part" != x; then ++ # If a partition is specified, we need to translate it into the ++ # GRUB's syntax. ++ case "$host_os" in ++ linux*) ++ echo "$tmp_drive" | sed "s%)$%,`expr $tmp_part - 1`)%" ;; ++ gnu*) ++ if echo $tmp_part | grep "^s" >/dev/null; then ++ tmp_pc_slice=`echo $tmp_part \ ++ | sed "s%s([0-9]*)[a-g]*$%\1%"` ++ tmp_drive=`echo "$tmp_drive" \ ++ | sed "s%)%,`expr "$tmp_pc_slice" - 1`)%"` ++ fi ++ if echo $tmp_part | grep "[a-g]$" >/dev/null; then ++ tmp_bsd_partition=`echo "$tmp_part" \ ++ | sed "s%[^a-g]*([a-g])$%\1%"` ++ tmp_drive=`echo "$tmp_drive" \ ++ | sed "s%)%,$tmp_bsd_partition)%"` ++ fi ++ echo "$tmp_drive" ;; ++ freebsd* | kfreebsd*-gnu) ++ if echo $tmp_part | grep "^s" >/dev/null; then ++ tmp_pc_slice=`echo $tmp_part \ ++ | sed "s%s([0-9]*)[a-h]*$%\1%"` ++ tmp_drive=`echo "$tmp_drive" \ ++ | sed "s%)%,`expr "$tmp_pc_slice" - 1`)%"` ++ fi ++ if echo $tmp_part | grep "[a-h]$" >/dev/null; then ++ tmp_bsd_partition=`echo "$tmp_part" \ ++ | sed "s%s{0,1}[0-9]*([a-h])$%\1%"` ++ tmp_drive=`echo "$tmp_drive" \ ++ | sed "s%)%,$tmp_bsd_partition)%"` ++ fi ++ echo "$tmp_drive" ;; ++ netbsd* | knetbsd*-gnu) ++ if echo $tmp_part | grep "^[abe-p]$" >/dev/null; then ++ tmp_bsd_partition=`echo "$tmp_part" \ ++ | sed "s%([a-p])$%\1%"` ++ tmp_drive=`echo "$tmp_drive" \ ++ | sed "s%)%,$tmp_bsd_partition)%"` ++ fi ++ echo "$tmp_drive" ;; ++ esac ++ else ++ # If no partition is specified, just print the drive name. ++ echo "$tmp_drive" ++ fi ++} ++ ++# Usage: resolve_symlink file ++# Find the real file/device that file points at ++resolve_symlink () { ++ tmp_fname=$1 ++ # Resolve symlinks ++ while test -L $tmp_fname; do ++ tmp_new_fname=`ls -al $tmp_fname | sed -n 's%.*-> (.*)%\1%p'` ++ if test -z "$tmp_new_fname"; then ++ echo "Unrecognized ls output" 2>&1 ++ exit 1 ++ fi ++ ++ # Convert relative symlinks ++ case $tmp_new_fname in ++ /*) tmp_fname="$tmp_new_fname" ++ ;; ++ *) tmp_fname="`echo $tmp_fname | sed 's%/[^/]*$%%'`/$tmp_new_fname" ++ ;; ++ esac ++ done ++ echo "$tmp_fname" ++} ++ ++# Usage: find_device file ++# Find block device on which the file resides. ++find_device () { ++ # For now, this uses the program `df' to get the device name, but is ++ # this really portable? ++ tmp_fname=`df $1/ | sed -n 's%.*(/dev/[^ ]*).*%\1%p'` ++ ++ if test -z "$tmp_fname"; then ++ echo "Could not find device for $1" 2>&1 ++ exit 1 ++ fi ++ ++ tmp_fname=`resolve_symlink $tmp_fname` ++ ++ echo "$tmp_fname" ++} ++ ++# Check the arguments. ++for option in "$@"; do ++ case "$option" in ++ -h | --help) ++ usage ++ exit 0 ;; ++ -v | --version) ++ echo "grub-install (GNU GRUB ${VERSION})" ++ exit 0 ;; ++ --root-directory=*) ++ rootdir=`echo "$option" | sed 's/--root-directory=//'` ;; ++ --grub-shell=*) ++ grub_shell=`echo "$option" | sed 's/--grub-shell=//'` ;; ++ --no-floppy) ++ no_floppy="--no-floppy" ;; ++ --force-lba) ++ force_lba="--force-lba" ;; ++ --recheck) ++ recheck=yes ;; ++ # This is an undocumented feature... ++ --debug) ++ debug=yes ;; ++ -*) ++ echo "Unrecognized option `$option'" 1>&2 ++ usage ++ exit 1 ++ ;; ++ *) ++ if test "x$install_device" != x; then ++ echo "More than one install_devices?" 1>&2 ++ usage ++ exit 1 ++ fi ++ install_device="${option}" ;; ++ esac ++done ++ ++if test "x$install_device" = x; then ++ echo "install_device not specified." 1>&2 ++ usage ++ exit 1 ++fi ++ ++# If the debugging feature is enabled, print commands. ++if test $debug = yes; then ++ set -x ++fi ++ ++# Initialize these directories here, since ROOTDIR was initialized. ++case "$host_os" in ++netbsd* | openbsd*) ++ # Because /boot is used for the boot block in NetBSD and OpenBSD, use /grub ++ # instead of /boot/grub. ++ grub_prefix=/grub ++ bootdir=${rootdir} ++ ;; ++*) ++ # Use /boot/grub by default. ++ bootdir=${rootdir}/boot ++ ;; ++esac ++ ++grubdir=${bootdir}/grub ++device_map=${grubdir}/device.map ++ ++# Check if GRUB is installed. ++# This is necessary, because the user can specify "grub --read-only". ++set $grub_shell dummy ++if test -f "$1"; then ++ : ++else ++ echo "$1: Not found." 1>&2 ++ exit 1 ++fi ++ ++if test -f "$pkglibdir/stage1"; then ++ : ++else ++ echo "${pkglibdir}/stage1: Not found." 1>&2 ++ exit 1 ++fi ++ ++if test -f "$pkglibdir/stage2"; then ++ : ++else ++ echo "${pkglibdir}/stage2: Not found." 1>&2 ++ exit 1 ++fi ++ ++# Don't check for *stage1_5, because it is not fatal even if any ++# Stage 1.5 does not exist. ++ ++# Create the GRUB directory if it is not present. ++test -d "$bootdir" || mkdir "$bootdir" || exit 1 ++test -d "$grubdir" || mkdir "$grubdir" || exit 1 ++ ++# If --recheck is specified, remove the device map, if present. ++if test $recheck = yes; then ++ rm -f $device_map ++fi ++ ++# Create the device map file if it is not present. ++if test -f "$device_map"; then ++ : ++else ++ # Create a safe temporary file. ++ test -n "$mklog" && log_file=`$mklog` ++ ++ $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file ++quit ++EOF ++ if grep "Error [0-9]*: " $log_file >/dev/null; then ++ cat $log_file 1>&2 ++ exit 1 ++ fi ++ ++ rm -f $log_file ++fi ++ ++# Make sure that there is no duplicated entry. ++tmp=`sed -n '/^([fh]d[0-9]*)/s/(^(.*)).*/\1/p' $device_map \ ++ | sort | uniq -d | sed -n 1p` ++if test -n "$tmp"; then ++ echo "The drive $tmp is defined multiple times in the device map $device_map" 1>&2 ++ exit 1 ++fi ++ ++# Check for INSTALL_DEVICE. ++case "$install_device" in ++/dev/*) ++ install_device=`resolve_symlink "$install_device"` ++ install_drive=`convert "$install_device"` ++ # I don't know why, but some shells wouldn't die if exit is ++ # called in a function. ++ if test "x$install_drive" = x; then ++ exit 1 ++ fi ;; ++([hf]d[0-9]*)) ++ install_drive="$install_device" ;; ++[hf]d[0-9]*) ++ # The GRUB format with no parenthesis. ++ install_drive="($install_device)" ;; ++*) ++ echo "Format of install_device not recognized." 1>&2 ++ usage ++ exit 1 ;; ++esac ++ ++# Get the root drive. ++root_device=`find_device ${rootdir}` ++bootdir_device=`find_device ${bootdir}` ++ ++# Check if the boot directory is in the same device as the root directory. ++if test "x$root_device" != "x$bootdir_device"; then ++ # Perhaps the user has a separate boot partition. ++ root_device=$bootdir_device ++ grub_prefix="/grub" ++fi ++ ++# Convert the root device to a GRUB drive. ++root_drive=`convert "$root_device"` ++if test "x$root_drive" = x; then ++ exit 1 ++fi ++ ++# Check if the root directory exists in the same device as the grub ++# directory. ++grubdir_device=`find_device ${grubdir}` ++ ++if test "x$grubdir_device" != "x$root_device"; then ++ # For now, cannot deal with this situation. ++ cat <<EOF 1>&2 ++You must set the root directory by the option --root-directory, because ++$grubdir does not exist in the root device $root_device. ++EOF ++ exit 1 ++fi ++ ++# Copy the GRUB images to the GRUB directory. ++for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do ++ rm -f $file || exit 1 ++done ++for file in \ ++ ${pkglibdir}/stage1 ${pkglibdir}/stage2 ${pkglibdir}/*stage1_5; do ++ cp -f $file ${grubdir} || exit 1 ++done ++ ++# Make a default file. ++${grub_set_default} --root-directory=${rootdir} default ++ ++# Make sure that GRUB reads the same images as the host OS. ++test -n "$mkimg" && img_file=`$mkimg` ++test -n "$mklog" && log_file=`$mklog` ++ ++for file in ${grubdir}/stage1 ${grubdir}/stage2 ${grubdir}/*stage1_5; do ++ count=5 ++ tmp=`echo $file | sed "s|^${grubdir}|${grub_prefix}|"` ++ while test $count -gt 0; do ++ $grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file ++dump ${root_drive}${tmp} ${img_file} ++quit ++EOF ++ if grep "Error [0-9]*: " $log_file >/dev/null; then ++ : ++ elif cmp $file $img_file >/dev/null; then ++ break ++ fi ++ sleep 1 ++ count=`expr $count - 1` ++ done ++ if test $count -eq 0; then ++ echo "The file $file not read correctly." 1>&2 ++ exit 1 ++ fi ++done ++ ++rm -f $img_file ++rm -f $log_file ++ ++# Create a safe temporary file. ++test -n "$mklog" && log_file=`$mklog` ++ ++# Now perform the installation. ++$grub_shell --batch $no_floppy --device-map=$device_map <<EOF >$log_file ++root $root_drive ++setup $force_lba --stage2=$grubdir/stage2 --prefix=$grub_prefix $install_drive ++quit ++EOF ++ ++if grep "Error [0-9]*: " $log_file >/dev/null || test $debug = yes; then ++ cat $log_file 1>&2 ++ exit 1 ++fi ++ ++rm -f $log_file ++ ++# Prompt the user to check if the device map is correct. ++echo "Installation finished. No error reported." ++echo "This is the contents of the device map $device_map." ++echo "Check if this is correct or not. If any of the lines is incorrect," ++echo "fix it and re-run the script `grub-install'." ++echo ++ ++cat $device_map ++ ++# Bye. ++exit 0 +diff -Nur grub-0.97/util/mkbimage grub-0.97-patched/util/mkbimage +--- grub-0.97/util/mkbimage 2004-07-24 20:57:31.000000000 +0200 ++++ grub-0.97-patched/util/mkbimage 2012-11-11 17:07:12.744730138 +0100 +@@ -1,7 +1,7 @@ + #!/bin/sh + # MaKe a Bootable IMAGE --- 1.44, 2.88 and El Torito no-emulation mode + # C) 2001,2002,2003 Thierry Laronde tlaronde@polynum.org +-# C) 2001,2002,2003 Robert Millan robertmh@gnu.org ++# C) 2001,2002,2003 Robert Millan rmh@aybabtu.com + + + # This program is free software; you can redistribute it and/or modify +@@ -94,15 +94,13 @@ + display Version information and exit + + Copyright (c) 2001,2002,2003 Thierry Laronde tlaronde@polynum.org. +-Copyright (c) 2001,2002 Robert Millan zeratul2@wanadoo.es. + GPLed." + + version="mkbimage $version_number + +-Written by Thierry Laronde and Robert Millan. ++Written by Thierry Laronde. + + Copyright (c) 2001,2002,2003 Thierry Laronde tlaronde@polynum.org. +-Copyright (c) 2001,2002,2003 Robert Millan zeratul2@wanadoo.es. + + This is free software under the GPL version 2 or later; see the source for + copying conditions. There is NO warranty, not even for MERCHANTABILITY or
hooks/post-receive -- IPFire 2.x development tree