network device completion.
Eric Kvaalen fixed a lot of problems in the GRUB manual.
+
+Leonid Lisovskiy added El Torito support.
-2004-03-13 Yoshinori K. Okuji <okuji@enbug.org>
+2004-03-27 Yoshinori K. Okuji <okuji@enbug.org>
+
+ * stage2/char_io.c [!GRUB_UTIL] (memcpy): New function. It is
+ defined as an alias of grub_memmove. This is copied from GRUB 2.
+
+ * stage2/disk_io.c (print_completions): Simplified conditionals
+ to make it easier to edit the file with Emacs.
+ Added support for (cd).
+ (set_device): Likewise.
+
+ * stage2/common.c (init_bios_info): Check if BOOT_DRIVE is a
+ CDROM drive. If it is true, set CDROM_DRIVE to BOOT_DRIVE.
+ (cdrom_drive): New variable.
+
+ From Leonid Lisovskiy <lly@pisem.net>:
+ * stage2/start_eltorito.S: New file.
+
+ * stage2/stage2.c (run_menu): Use GRUB_INVALID_DRIVE instead of
+ 0xFF.
+
+ * stage2/shared.h (STAGE2_ID_ISO9660_STAGE1_5): New macro.
+ [FSYS_ISO9660] (STAGE2_ID): Set to STAGE2_ID_ISO9660_STAGE1_5.
+ (struct geometry): Added a new member ``sector_size''.
+ (BIOSDISK_FLAG_CDROM): New macro.
+ (cdrom_drive): Declared.
+
+ * stage2/fsys_iso9660.c: New file.
+ * stage2/iso9660.h: Likewise.
+
+ * stage2/filesys.h (FSYS_ISO9660_NUM): New macro.
+ [FSYS_ISO9660] (iso9660_mount): Declared.
+ [FSYS_ISO9660] (iso9660_read): Likewise.
+ [FSYS_ISO9660] (iso9660_dir): Likewise.
+ (NUM_FSYS): Added FSYS_ISO9660_NUM.
+
+ * stage2/disk_io.c (fsys_table) [FSYS_ISO9660]: Added iso9660.
+ (current_drive): Use GRUB_INVALID_DRIVE.
+ (log2): New function.
+ (rawread): Use BUF_GEOM.SECTOR_SIZE instead of SECTOR_SIZE.
+ Change the type of BUFADDR from int to char *.
+ Use a virtual track to make sure that one track fits in the
+ buffer.
+ (sane_partition): Allow CURRENT_DRIVE to be CDROM_DRIVE, because
+ a bios drive for a CD-ROM is often assigned to greater than
+ 0x88.
+ (set_device): Use GRUB_INVALID_DRIVE instead of 0xFF.
+ (setup_part): Likewise.
+
+ * stage2/cmdline.c (init_cmdline): Use GRUB_INVALID_DRIVE.
+
+ * stage2/builtins.c (install_func): Use GRUB_INVALID_DRIVE.
+ (setup_func): Added iso9660_stage1_5.
+
+ * stage2/bios.c (biosdisk): Don't fall back to the CHS mode
+ if the drive is a CDROM.
+ (get_cdinfo): New function.
+ (get_diskinfo): Call get_cdinfo if the drive is greater than or
+ equal to 0x88 or the drive supports LBA.
+ Set the sector size to SECTOR_SIZE if it is not a CD-ROM.
+
+ * stage2/asm.S (biosdisk_int13_extensions): Take a word
+ argument AX instead of a byte argument AH.
+ (get_diskinfo_int13_extensions): Removed.
+
+ * stage2/Makefile.am (noinst_HEADERS): Added iso9660.h.
+ (libgrub_a_SOURCES): Added fsys_iso9660.c.
+ (libgrub_a_CFLAGS): Added -DFSYS_ISO9660=1.
+ (pkgdata_DATA): Added iso9660_stage1_5 and stage2_eltorito.
+ (noinst_PROGRAMS): Added iso9660_stage1_5.exec and
+ start_eltorito.exec.
+ (noinst_DATA): Added start_eltorito.
+ (pre_stage2_exec_SOURCES): Added fsys_iso9660.c.
+ (START_ELTORITO_LINK): New variable.
+ (start_eltorito_exec_SOURCES): Likewise.
+ (start_eltorito_exec_CCASFLAGS): Likewise.
+ (start_eltorito_exec_LDFLAGS): Likewise.
+ (start_eltorito_exec-start.$(OBJEXT)): New dependency.
+ (stage2_eltorito): New target.
+ (iso9660_stage1_5_exec_SOURCES): New variable.
+ (iso9660_stage1_5_exec_CFLAGS): Likewise.
+ (iso9660_stage1_5_exec_CCASFLAGS): Likewise.
+ (iso9660_stage1_5_exec_LDFLAGS): Likewise.
+
+ * stage1/stage1.h (GRUB_INVALID_DRIVE): New macro.
+
+ * stage1/stage1.S (boot_drive): Use the macro GRUB_INVALID_DRIVE.
+ (real_start): Likewise.
+
+ * lib/device.c (get_drive_geometry): Set GEOM->SECTOR_SIZE to
+ SECTOR_SIZE by default.
+
+ * configure.ac (--disable-iso9660): New option.
+2004-03-13 Yoshinori K. Okuji <okuji@enbug.org>
+
From Daniele Zelante <zeldan@email.it>:
* stage2/asm.S (stop_floppy): Use INT 13, AH=00h to stop the
floppy controller instead of a direct I/O.
`--disable-xfs'
Omit the XFS support in Stage 2.
+`--disable-iso9660'
+ Omit the ISO9660 support in Stage 2.
+
`--disable-gunzip'
Omit the decompression support in Stage 2.
* Add support for ReiserFS 3.
* Fix support for FreeBSD 5.
* Support ATARAID for Linux in the grub shell and grub-install.
+* Add CDROM support for El Torito with no emulation mode. You can use
+ (cd) as a CDROM drive in the config file.
New in 0.94 - 2004-01-25:
* Support building on x86-64 with gcc -m32.
Kristoffer Branemyr <ztion@swipnet.se>
Kunihiro Ishiguro <kunihiro@zebra.org>
Leendert Meyer <leen.meyer@home.nl>
+Leonid Lisovskiy <lly@pisem.net>
M. Meiarashi <mes@st.rim.or.jp>
Mark Kettenis <kettenis@chello.nl>
Mark Lundeberg <aa026@pgfn.bc.ca>
--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
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
dnl Configure script for GRUB.
-dnl Copyright 1999,2000,2001,2002,2003 Free Software Foundation, Inc.
+dnl Copyright 1999,2000,2001,2002,2003,2004 Free Software Foundation, Inc.
dnl Permission to use, copy, modify and distribute this software and its
dnl documentation is hereby granted, provided that both the copyright
FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_XFS=1"
fi
+AC_ARG_ENABLE(iso9660,
+ [ --disable-iso9660 disable ISO9660 support in Stage 2])
+
+if test x"$enable_iso9660" != xno; then
+ FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_ISO9660=1"
+fi
+
dnl AC_ARG_ENABLE(tftp,
dnl [ --enable-tftp enable TFTP support in Stage 2])
dnl
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23.
-.TH GRUB-MD5-CRYPT "8" "January 2004" "grub-md5-crypt (GNU GRUB )" FSF
+.TH GRUB-MD5-CRYPT "8" "March 2004" "grub-md5-crypt (GNU GRUB )" FSF
.SH NAME
grub-md5-crypt \- Encrypt a password in MD5 format
.SH SYNOPSIS
.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.23.
-.TH GRUB-TERMINFO "8" "January 2004" "grub-terminfo (GNU GRUB 0.94)" FSF
+.TH GRUB-TERMINFO "8" "March 2004" "grub-terminfo (GNU GRUB 0.94)" FSF
.SH NAME
grub-terminfo \- Generate a terminfo command from a terminfo name
.SH SYNOPSIS
sysconfdir = @sysconfdir@
target_alias = @target_alias@
sbin_PROGRAMS = grub
-@SERIAL_SPEED_SIMULATION_FALSE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1
@SERIAL_SPEED_SIMULATION_TRUE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1 -DSIMULATE_SLOWNESS_OF_SERIAL=1
+@SERIAL_SPEED_SIMULATION_FALSE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1
AM_CPPFLAGS = -DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 \
-DFSYS_FFS=1 -DFSYS_MINIX=1 -DSUPPORT_HERCULES=1 \
else
fd = geom->flags;
+ /* XXX This is the default size. */
+ geom->sector_size = SECTOR_SIZE;
+
#if defined(__linux__)
/* Linux */
{
/* -*-Asm-*- */
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 1999,2000,2001,2002 Free Software Foundation, Inc.
+ * 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
stage1_version:
.byte COMPAT_VERSION_MAJOR, COMPAT_VERSION_MINOR
boot_drive:
- .byte 0xff /* the disk to load stage2 from */
- /* 0xff means use the boot drive */
+ .byte GRUB_INVALID_DRIVE /* the disk to load stage2 from */
force_lba:
.byte 0
stage2_address:
* Check if we have a forced disk reference here
*/
MOV_MEM_TO_AL(ABS(boot_drive)) /* movb ABS(boot_drive), %al */
- cmpb $0xff, %al
+ cmpb $GRUB_INVALID_DRIVE, %al
je 1f
movb %al, %dl
1:
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 1999,2000,2002 Free Software Foundation, Inc.
+ * Copyright (C) 1999,2000,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
floppy. */
#define STAGE1_BIOS_HD_FLAG 0x80
+/* The drive number of an invalid drive. */
+#define GRUB_INVALID_DRIVE 0xFF
+
#endif /* ! STAGE1_HEADER */
# 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 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 vstafs.h xfs.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 vstafs.h xfs.h
EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS)
# For <stage1.h>.
# 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_jfs.c \
- fsys_minix.c fsys_reiserfs.c fsys_vstafs.c fsys_xfs.c gunzip.c \
- md5.c serial.c stage2.c terminfo.c tparm.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_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_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 -DFSYS_VSTAFS=1 \
- -DFSYS_XFS=1 -DUSE_MD5_PASSWORDS=1 \
+ -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \
+ -DFSYS_VSTAFS=1 -DFSYS_XFS=1 -DUSE_MD5_PASSWORDS=1 \
-DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 -fwritable-strings
# Stage 2 and Stage 1.5's.
EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec
if DISKLESS_SUPPORT
-pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \
- jfs_stage1_5 minix_stage1_5 reiserfs_stage1_5 vstafs_stage1_5 \
- xfs_stage1_5 nbgrub pxegrub
-noinst_DATA = pre_stage2 start nbloader pxeloader diskless
-noinst_PROGRAMS = pre_stage2.exec start.exec e2fs_stage1_5.exec \
- fat_stage1_5.exec ffs_stage1_5.exec jfs_stage1_5.exec \
- minix_stage1_5.exec reiserfs_stage1_5.exec \
- vstafs_stage1_5.exec xfs_stage1_5.exec nbloader.exec \
- pxeloader.exec diskless.exec
+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 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 vstafs_stage1_5.exec xfs_stage1_5.exec \
+ nbloader.exec pxeloader.exec diskless.exec
else
-pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \
- jfs_stage1_5 minix_stage1_5 reiserfs_stage1_5 vstafs_stage1_5 \
- xfs_stage1_5
-noinst_DATA = pre_stage2 start
-noinst_PROGRAMS = pre_stage2.exec start.exec e2fs_stage1_5.exec \
- fat_stage1_5.exec ffs_stage1_5.exec jfs_stage1_5.exec \
- minix_stage1_5.exec reiserfs_stage1_5.exec \
- vstafs_stage1_5.exec xfs_stage1_5.exec
+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 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 vstafs_stage1_5.exec xfs_stage1_5.exec
endif
MOSTLYCLEANFILES = $(noinst_PROGRAMS)
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
# 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_jfs.c fsys_minix.c fsys_reiserfs.c \
- fsys_vstafs.c fsys_xfs.c gunzip.c hercules.c md5.c serial.c \
- smp-imps.c stage2.c terminfo.c tparm.c
+ fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \
+ fsys_reiserfs.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)
-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
-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) \
# 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 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 vstafs.h xfs.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 vstafs.h xfs.h
EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS)
# 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_jfs.c \
- fsys_minix.c fsys_reiserfs.c fsys_vstafs.c fsys_xfs.c gunzip.c \
- md5.c serial.c stage2.c terminfo.c tparm.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_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_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 -DFSYS_VSTAFS=1 \
- -DFSYS_XFS=1 -DUSE_MD5_PASSWORDS=1 \
+ -DFSYS_ISO9660=1 -DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 \
+ -DFSYS_VSTAFS=1 -DFSYS_XFS=1 -DUSE_MD5_PASSWORDS=1 \
-DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 -fwritable-strings
EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec
-@DISKLESS_SUPPORT_TRUE@pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \
-@DISKLESS_SUPPORT_TRUE@ jfs_stage1_5 minix_stage1_5 reiserfs_stage1_5 vstafs_stage1_5 \
-@DISKLESS_SUPPORT_TRUE@ xfs_stage1_5 nbgrub pxegrub
+@DISKLESS_SUPPORT_TRUE@pkgdata_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 vstafs_stage1_5 xfs_stage1_5 nbgrub pxegrub
-@DISKLESS_SUPPORT_FALSE@pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \
-@DISKLESS_SUPPORT_FALSE@ jfs_stage1_5 minix_stage1_5 reiserfs_stage1_5 vstafs_stage1_5 \
-@DISKLESS_SUPPORT_FALSE@ xfs_stage1_5
+@DISKLESS_SUPPORT_FALSE@pkgdata_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 vstafs_stage1_5 xfs_stage1_5
-@DISKLESS_SUPPORT_TRUE@noinst_DATA = pre_stage2 start nbloader pxeloader diskless
-@DISKLESS_SUPPORT_FALSE@noinst_DATA = pre_stage2 start
-@DISKLESS_SUPPORT_TRUE@noinst_PROGRAMS = pre_stage2.exec start.exec e2fs_stage1_5.exec \
-@DISKLESS_SUPPORT_TRUE@ fat_stage1_5.exec ffs_stage1_5.exec jfs_stage1_5.exec \
-@DISKLESS_SUPPORT_TRUE@ minix_stage1_5.exec reiserfs_stage1_5.exec \
-@DISKLESS_SUPPORT_TRUE@ vstafs_stage1_5.exec xfs_stage1_5.exec nbloader.exec \
-@DISKLESS_SUPPORT_TRUE@ pxeloader.exec diskless.exec
+@DISKLESS_SUPPORT_TRUE@noinst_DATA = pre_stage2 start start_eltorito nbloader pxeloader diskless
+@DISKLESS_SUPPORT_FALSE@noinst_DATA = pre_stage2 start start_eltorito
+@DISKLESS_SUPPORT_TRUE@noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \
+@DISKLESS_SUPPORT_TRUE@ e2fs_stage1_5.exec fat_stage1_5.exec ffs_stage1_5.exec \
+@DISKLESS_SUPPORT_TRUE@ iso9660_stage1_5.exec jfs_stage1_5.exec minix_stage1_5.exec \
+@DISKLESS_SUPPORT_TRUE@ reiserfs_stage1_5.exec vstafs_stage1_5.exec xfs_stage1_5.exec \
+@DISKLESS_SUPPORT_TRUE@ nbloader.exec pxeloader.exec diskless.exec
-@DISKLESS_SUPPORT_FALSE@noinst_PROGRAMS = pre_stage2.exec start.exec e2fs_stage1_5.exec \
-@DISKLESS_SUPPORT_FALSE@ fat_stage1_5.exec ffs_stage1_5.exec jfs_stage1_5.exec \
-@DISKLESS_SUPPORT_FALSE@ minix_stage1_5.exec reiserfs_stage1_5.exec \
-@DISKLESS_SUPPORT_FALSE@ vstafs_stage1_5.exec xfs_stage1_5.exec
+@DISKLESS_SUPPORT_FALSE@noinst_PROGRAMS = pre_stage2.exec start.exec start_eltorito.exec \
+@DISKLESS_SUPPORT_FALSE@ e2fs_stage1_5.exec fat_stage1_5.exec ffs_stage1_5.exec \
+@DISKLESS_SUPPORT_FALSE@ iso9660_stage1_5.exec jfs_stage1_5.exec minix_stage1_5.exec \
+@DISKLESS_SUPPORT_FALSE@ reiserfs_stage1_5.exec vstafs_stage1_5.exec xfs_stage1_5.exec
MOSTLYCLEANFILES = $(noinst_PROGRAMS)
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_TRUE@NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1
@NETBOOT_SUPPORT_FALSE@NETBOOT_FLAGS =
-@SERIAL_SUPPORT_FALSE@SERIAL_FLAGS =
@SERIAL_SUPPORT_TRUE@SERIAL_FLAGS = -DSUPPORT_SERIAL=1
+@SERIAL_SUPPORT_FALSE@SERIAL_FLAGS =
@HERCULES_SUPPORT_FALSE@HERCULES_FLAGS =
@HERCULES_SUPPORT_TRUE@HERCULES_FLAGS = -DSUPPORT_HERCULES=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_jfs.c fsys_minix.c fsys_reiserfs.c \
- fsys_vstafs.c fsys_xfs.c gunzip.c hercules.c md5.c serial.c \
- smp-imps.c stage2.c terminfo.c tparm.c
+ fsys_fat.c fsys_ffs.c fsys_iso9660.c fsys_jfs.c fsys_minix.c \
+ fsys_reiserfs.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)
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
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) \
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_jfs.$(OBJEXT) libgrub_a-fsys_minix.$(OBJEXT) \
+ libgrub_a-fsys_iso9660.$(OBJEXT) libgrub_a-fsys_jfs.$(OBJEXT) \
+ libgrub_a-fsys_minix.$(OBJEXT) \
libgrub_a-fsys_reiserfs.$(OBJEXT) \
libgrub_a-fsys_vstafs.$(OBJEXT) libgrub_a-fsys_xfs.$(OBJEXT) \
libgrub_a-gunzip.$(OBJEXT) libgrub_a-md5.$(OBJEXT) \
diskless.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@ 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_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) \
ffs_stage1_5_exec_OBJECTS = $(am_ffs_stage1_5_exec_OBJECTS)
ffs_stage1_5_exec_LDADD = $(LDADD)
ffs_stage1_5_exec_DEPENDENCIES =
+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)
+iso9660_stage1_5_exec_DEPENDENCIES =
am_jfs_stage1_5_exec_OBJECTS = jfs_stage1_5_exec-start.$(OBJEXT) \
jfs_stage1_5_exec-asm.$(OBJEXT) \
jfs_stage1_5_exec-common.$(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) \
start_exec_OBJECTS = $(am_start_exec_OBJECTS)
start_exec_LDADD = $(LDADD)
start_exec_DEPENDENCIES =
+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)
+start_eltorito_exec_DEPENDENCIES =
am_vstafs_stage1_5_exec_OBJECTS = vstafs_stage1_5_exec-start.$(OBJEXT) \
vstafs_stage1_5_exec-asm.$(OBJEXT) \
vstafs_stage1_5_exec-common.$(OBJEXT) \
@AMDEP_TRUE@ ./$(DEPDIR)/diskless_exec-fsys_ext2fs.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/diskless_exec-fsys_fat.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/diskless_exec-fsys_ffs.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/diskless_exec-fsys_iso9660.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/diskless_exec-fsys_jfs.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/diskless_exec-fsys_minix.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/diskless_exec-fsys_reiserfs.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/ffs_stage1_5_exec-disk_io.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/ffs_stage1_5_exec-fsys_ffs.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/ffs_stage1_5_exec-stage1_5.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/iso9660_stage1_5_exec-bios.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/iso9660_stage1_5_exec-common.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/jfs_stage1_5_exec-bios.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/jfs_stage1_5_exec-char_io.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/jfs_stage1_5_exec-common.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/libgrub_a-fsys_ext2fs.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/libgrub_a-fsys_fat.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/libgrub_a-fsys_ffs.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/libgrub_a-fsys_iso9660.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/libgrub_a-fsys_jfs.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/libgrub_a-fsys_minix.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/libgrub_a-fsys_reiserfs.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/pre_stage2_exec-fsys_ext2fs.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/pre_stage2_exec-fsys_fat.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/pre_stage2_exec-fsys_ffs.Po \
+@AMDEP_TRUE@ ./$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/pre_stage2_exec-fsys_jfs.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/pre_stage2_exec-fsys_minix.Po \
@AMDEP_TRUE@ ./$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Po \
LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
DIST_SOURCES = $(libgrub_a_SOURCES) $(diskless_exec_SOURCES) \
$(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) \
- $(ffs_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) \
+ $(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) \
$(vstafs_stage1_5_exec_SOURCES) $(xfs_stage1_5_exec_SOURCES)
DATA = $(noinst_DATA) $(pkgdata_DATA)
HEADERS = $(noinst_HEADERS)
DIST_COMMON = $(noinst_HEADERS) Makefile.am Makefile.in
-SOURCES = $(libgrub_a_SOURCES) $(diskless_exec_SOURCES) $(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) $(ffs_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) $(vstafs_stage1_5_exec_SOURCES) $(xfs_stage1_5_exec_SOURCES)
+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) $(vstafs_stage1_5_exec_SOURCES) $(xfs_stage1_5_exec_SOURCES)
all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
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)
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)
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)
@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)/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)/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)/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@
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
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`
+
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
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -c -o libgrub_a-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \
+@am__fastdepCC_TRUE@ then mv "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" "$(DEPDIR)/libgrub_a-fsys_iso9660.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='libgrub_a-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libgrub_a-fsys_iso9660.Po' tmpdepfile='$(DEPDIR)/libgrub_a-fsys_iso9660.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -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 "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo" "$(DEPDIR)/libgrub_a-fsys_iso9660.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/libgrub_a-fsys_iso9660.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='libgrub_a-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/libgrub_a-fsys_iso9660.Po' tmpdepfile='$(DEPDIR)/libgrub_a-fsys_iso9660.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
@am__fastdepCC_TRUE@ -c -o libgrub_a-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -c -o diskless_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \
+@am__fastdepCC_TRUE@ then mv "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" "$(DEPDIR)/diskless_exec-fsys_iso9660.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='diskless_exec-fsys_iso9660.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/diskless_exec-fsys_iso9660.Po' tmpdepfile='$(DEPDIR)/diskless_exec-fsys_iso9660.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -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 "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo" "$(DEPDIR)/diskless_exec-fsys_iso9660.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/diskless_exec-fsys_iso9660.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='fsys_iso9660.c' object='diskless_exec-fsys_iso9660.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/diskless_exec-fsys_iso9660.Po' tmpdepfile='$(DEPDIR)/diskless_exec-fsys_iso9660.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
@am__fastdepCC_TRUE@ -c -o diskless_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -c -o iso9660_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \
+@am__fastdepCC_TRUE@ then mv "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-common.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='iso9660_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/iso9660_stage1_5_exec-common.Po' tmpdepfile='$(DEPDIR)/iso9660_stage1_5_exec-common.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -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 "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-common.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-common.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='common.c' object='iso9660_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/iso9660_stage1_5_exec-common.Po' tmpdepfile='$(DEPDIR)/iso9660_stage1_5_exec-common.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -c -o iso9660_stage1_5_exec-char_io.o `test -f 'char_io.c' || echo '$(srcdir)/'`char_io.c; \
+@am__fastdepCC_TRUE@ then mv "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ 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@ depfile='$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po' tmpdepfile='$(DEPDIR)/iso9660_stage1_5_exec-char_io.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -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 "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-char_io.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ 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@ depfile='$(DEPDIR)/iso9660_stage1_5_exec-char_io.Po' tmpdepfile='$(DEPDIR)/iso9660_stage1_5_exec-char_io.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -c -o iso9660_stage1_5_exec-disk_io.o `test -f 'disk_io.c' || echo '$(srcdir)/'`disk_io.c; \
+@am__fastdepCC_TRUE@ then mv "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ 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@ depfile='$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po' tmpdepfile='$(DEPDIR)/iso9660_stage1_5_exec-disk_io.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -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 "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ 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@ depfile='$(DEPDIR)/iso9660_stage1_5_exec-disk_io.Po' tmpdepfile='$(DEPDIR)/iso9660_stage1_5_exec-disk_io.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -c -o iso9660_stage1_5_exec-stage1_5.o `test -f 'stage1_5.c' || echo '$(srcdir)/'`stage1_5.c; \
+@am__fastdepCC_TRUE@ then mv "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ 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@ depfile='$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po' tmpdepfile='$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -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 "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ 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@ depfile='$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.Po' tmpdepfile='$(DEPDIR)/iso9660_stage1_5_exec-stage1_5.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -c -o iso9660_stage1_5_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \
+@am__fastdepCC_TRUE@ then mv "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ 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@ depfile='$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po' tmpdepfile='$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -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 "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ 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@ depfile='$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.Po' tmpdepfile='$(DEPDIR)/iso9660_stage1_5_exec-fsys_iso9660.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -c -o iso9660_stage1_5_exec-bios.o `test -f 'bios.c' || echo '$(srcdir)/'`bios.c; \
+@am__fastdepCC_TRUE@ then mv "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-bios.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='iso9660_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/iso9660_stage1_5_exec-bios.Po' tmpdepfile='$(DEPDIR)/iso9660_stage1_5_exec-bios.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -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 "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo" "$(DEPDIR)/iso9660_stage1_5_exec-bios.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/iso9660_stage1_5_exec-bios.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ fi
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='bios.c' object='iso9660_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ depfile='$(DEPDIR)/iso9660_stage1_5_exec-bios.Po' tmpdepfile='$(DEPDIR)/iso9660_stage1_5_exec-bios.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
@am__fastdepCC_TRUE@ -c -o jfs_stage1_5_exec-common.o `test -f 'common.c' || echo '$(srcdir)/'`common.c; \
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -c -o pre_stage2_exec-fsys_iso9660.o `test -f 'fsys_iso9660.c' || echo '$(srcdir)/'`fsys_iso9660.c; \
+@am__fastdepCC_TRUE@ then mv "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ 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@ depfile='$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po' tmpdepfile='$(DEPDIR)/pre_stage2_exec-fsys_iso9660.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
+@am__fastdepCC_TRUE@ -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 "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo" "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po"; \
+@am__fastdepCC_TRUE@ else rm -f "$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Tpo"; exit 1; \
+@am__fastdepCC_TRUE@ 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@ depfile='$(DEPDIR)/pre_stage2_exec-fsys_iso9660.Po' tmpdepfile='$(DEPDIR)/pre_stage2_exec-fsys_iso9660.TPo' @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(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" \
@am__fastdepCC_TRUE@ -c -o pre_stage2_exec-fsys_jfs.o `test -f 'fsys_jfs.c' || echo '$(srcdir)/'`fsys_jfs.c; \
-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 $^`; \
/*
- * int biosdisk_int13_extensions (int ah, int drive, void *dap)
+ * int biosdisk_int13_extensions (int ax, int drive, void *dap)
*
- * Call IBM/MS INT13 Extensions (int 13 %ah=AH) for DRIVE. DAP
+ * Call IBM/MS INT13 Extensions (int 13 %ax=AX) for DRIVE. DAP
* is passed for disk address packet. If an error occurs, return
* non-zero, otherwise zero.
*/
movl %esp, %ebp
pushl %esi
+ pushl %ebx
/* compute the address of disk_address_packet */
movl 0x10(%ebp), %eax
/* drive */
movb 0xc(%ebp), %dl
- /* ah */
- movb 0x8(%ebp), %dh
+ /* ax */
+ movw 0x8(%ebp), %bx
/* enter real mode */
call EXT_C(prot_to_real)
.code16
- movb %dh, %ah
+ movw %bx, %ax
movw %cx, %ds
int $0x13 /* do the operation */
movb %ah, %dl /* save return value */
movb %dl, %al /* return value in %eax */
+ popl %ebx
popl %esi
popl %ebp
ret
-/*
- * int get_diskinfo_int13_extensions (int drive, void *drp)
- *
- * Return the geometry of DRIVE in a drive parameters, DRP. If an error
- * occurs, then return non-zero, otherwise zero.
- */
-
-ENTRY(get_diskinfo_int13_extensions)
- pushl %ebp
- movl %esp, %ebp
-
- pushl %ebx
- pushl %esi
-
- /* compute the address of drive parameters */
- movl 0xc(%ebp), %eax
- movw %ax, %si
- xorw %ax, %ax
- shrl $4, %eax
- movw %ax, %bx /* save the segment into %bx */
- /* drive */
- movb 0x8(%ebp), %dl
- /* enter real mode */
- call EXT_C(prot_to_real)
-
- .code16
- movb $0x48, %ah
- movw %bx, %ds
- int $0x13 /* do the operation */
- movb %ah, %bl /* save return value in %bl */
- /* clear the data segment */
- xorw %ax, %ax
- movw %ax, %ds
- /* back to protected mode */
- DATA32 call EXT_C(real_to_prot)
- .code32
-
- movb %bl, %al /* return value in %eax */
-
- popl %esi
- popl %ebx
- popl %ebp
-
- ret
-
-
/*
* int get_diskinfo_standard (int drive, unsigned long *cylinders,
* unsigned long *heads, unsigned long *sectors)
/* bios.c - implement C part of low-level BIOS disk input and output */
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 1999,2000,2003 Free Software Foundation, Inc.
+ * Copyright (C) 1999,2000,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
\f
/* These are defined in asm.S, and never be used elsewhere, so declare the
prototypes here. */
-extern int biosdisk_int13_extensions (int ah, int drive, void *dap);
+extern int biosdisk_int13_extensions (int ax, int drive, void *dap);
extern int biosdisk_standard (int ah, int drive,
int coff, int hoff, int soff,
int nsec, int segment);
extern int check_int13_extensions (int drive);
-extern int get_diskinfo_int13_extensions (int drive, void *drp);
extern int get_diskinfo_standard (int drive,
unsigned long *cylinders,
unsigned long *heads,
unsigned short blocks;
unsigned long buffer;
unsigned long long block;
- } dap;
+ } __attribute__ ((packed)) dap;
/* XXX: Don't check the geometry by default, because some buggy
BIOSes don't return the number of total sectors correctly,
SEGMENT:ADDRESS. */
dap.buffer = segment << 16;
- err = biosdisk_int13_extensions (read + 0x42, drive, &dap);
+ err = biosdisk_int13_extensions ((read + 0x42) << 8, drive, &dap);
/* #undef NO_INT13_FALLBACK */
#ifndef NO_INT13_FALLBACK
if (err)
{
+ if (geometry->flags & BIOSDISK_FLAG_CDROM)
+ return err;
+
geometry->flags &= ~BIOSDISK_FLAG_LBA_EXTENSION;
geometry->total_sectors = (geometry->cylinders
* geometry->heads
return err;
}
+/* Check bootable CD-ROM emulation status. */
+static int
+get_cdinfo (int drive, struct geometry *geometry)
+{
+ int err;
+ struct iso_spec_packet
+ {
+ unsigned char size;
+ unsigned char media_type;
+ unsigned char drive_no;
+ unsigned char controller_no;
+ unsigned long image_lba;
+ unsigned short device_spec;
+ unsigned short cache_seg;
+ unsigned short load_seg;
+ unsigned short length_sec512;
+ unsigned char cylinders;
+ unsigned char sectors;
+ unsigned char heads;
+
+ unsigned char dummy[16];
+ } __attribute__ ((packed)) cdrp;
+
+ grub_memset (&cdrp, 0, sizeof (cdrp));
+ cdrp.size = sizeof (cdrp) - sizeof (cdrp.dummy);
+ err = biosdisk_int13_extensions (0x4B01, drive, &cdrp);
+ if (! err && cdrp.drive_no == drive)
+ {
+ if ((cdrp.media_type & 0x0F) == 0)
+ {
+ /* No emulation bootable CD-ROM */
+ geometry->flags = BIOSDISK_FLAG_LBA_EXTENSION | BIOSDISK_FLAG_CDROM;
+ geometry->cylinders = 0;
+ geometry->heads = 1;
+ geometry->sectors = 15;
+ geometry->sector_size = 2048;
+ geometry->total_sectors = MAXINT;
+ return 1;
+ }
+ else
+ {
+ /* Floppy or hard-disk emulation */
+ geometry->cylinders
+ = ((unsigned int) cdrp.cylinders
+ + (((unsigned int) (cdrp.sectors & 0xC0)) << 2));
+ geometry->heads = cdrp.heads;
+ geometry->sectors = cdrp.sectors & 0x3F;
+ geometry->sector_size = SECTOR_SIZE;
+ geometry->total_sectors = (geometry->cylinders
+ * geometry->heads
+ * geometry->sectors);
+ return -1;
+ }
+ }
+ return 0;
+}
+
/* Return the geometry of DRIVE in GEOMETRY. If an error occurs, return
non-zero, otherwise zero. */
int
if (drive & 0x80)
{
- /* hard disk */
+ /* hard disk or CD-ROM */
int version;
unsigned long total_sectors = 0;
version = check_int13_extensions (drive);
+
+ if (drive >= 0x88 || version)
+ {
+ /* Possible CD-ROM - check the status. */
+ if (get_cdinfo (drive, geometry))
+ return 0;
+ }
+
if (version)
{
struct drive_parameters
bytes. */
drp.size = sizeof (drp) - sizeof (drp.dummy);
- err = get_diskinfo_int13_extensions (drive, &drp);
+ err = biosdisk_int13_extensions (0x4800, drive, &drp);
if (! err)
{
/* Set the LBA flag. */
* geometry->sectors);
}
geometry->total_sectors = total_sectors;
+ geometry->sector_size = SECTOR_SIZE;
}
else
{
geometry->total_sectors = (geometry->cylinders
* geometry->heads
* geometry->sectors);
+ geometry->sector_size = SECTOR_SIZE;
}
return 0;
/* XXX: Probably SECTOR_SIZE is reasonable. */
char *config_filename = stage2_second_buffer + SECTOR_SIZE;
char *dummy = config_filename + SECTOR_SIZE;
- int new_drive = 0xFF;
+ int new_drive = GRUB_INVALID_DRIVE;
int dest_drive, dest_partition, dest_sector;
int src_drive, src_partition, src_part_start;
int i;
/* 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 = 0xFF;
+ current_drive = GRUB_INVALID_DRIVE;
}
device = (current_drive << 24) | current_partition;
{"ext2fs", "/e2fs_stage1_5"},
{"fat", "/fat_stage1_5"},
{"ffs", "/ffs_stage1_5"},
+ {"iso9660", "/iso9660_stage1_5"},
{"jfs", "/jfs_stage1_5"},
{"minix", "/minix_stage1_5"},
{"reiserfs", "/reiserfs_stage1_5"},
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
/* cmdline.c - the device-independent GRUB text command line */
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 1999,2000,2001,2002 Free Software Foundation, Inc.
+ * 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
/* Initialization. */
saved_drive = boot_drive;
saved_partition = install_partition;
- current_drive = 0xFF;
+ current_drive = GRUB_INVALID_DRIVE;
errnum = 0;
count_lines = -1;
/* common.c - miscellaneous shared variables and routines */
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 1999,2000,2001,2002 Free Software Foundation, Inc.
+ * 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
struct multiboot_info mbi;
unsigned long saved_drive;
unsigned long saved_partition;
+unsigned long cdrom_drive;
#ifndef STAGE1_5
unsigned long saved_mem_upper;
saved_drive = boot_drive;
saved_partition = install_partition;
+ /* Set cdrom drive. */
+ {
+ struct geometry geom;
+
+ /* Get the geometry. */
+ if (get_diskinfo (boot_drive, &geom)
+ || ! (geom.flags & BIOSDISK_FLAG_CDROM))
+ cdrom_drive = GRUB_INVALID_DRIVE;
+ else
+ cdrom_drive = boot_drive;
+ }
+
/* Start main routine here. */
cmain ();
}
/* disk_io.c - implement abstract BIOS disk input and output */
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 1999,2000,2001,2002,2003 Free Software Foundation, Inc.
+ * 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
# ifdef FSYS_XFS
{"xfs", xfs_mount, xfs_read, xfs_dir, 0, 0},
# endif
+#ifdef FSYS_ISO9660
+ { "iso9660", iso9660_mount, iso9660_read, iso9660_dir, 0, 0},
+#endif
/* XX FFS should come last as it's superblock is commonly crossing tracks
on floppies from track 1 to 2, while others only use 1. */
# ifdef FSYS_FFS
/* These have the same format as "boot_drive" and "install_partition", but
are meant to be working values. */
-unsigned long current_drive = 0xFF;
+unsigned long current_drive = GRUB_INVALID_DRIVE;
unsigned long current_partition;
#ifndef STAGE1_5
int filepos;
int filemax;
+static inline unsigned long
+log2 (unsigned long word)
+{
+ asm volatile ("bsfl %1,%0"
+ : "=r" (word)
+ : "r" (word));
+ return word;
+}
+
int
rawread (int drive, int sector, int byte_offset, int byte_len, char *buf)
{
- int slen = (byte_offset + byte_len + SECTOR_SIZE - 1) >> SECTOR_BITS;
+ int slen, sectors_per_vtrack;
+ int sector_size_bits = log2 (buf_geom.sector_size);
if (byte_len <= 0)
return 1;
while (byte_len > 0 && !errnum)
{
- int soff, num_sect, bufaddr, track, size = byte_len;
+ int soff, num_sect, track, size = byte_len;
+ char *bufaddr;
/*
* Check track buffer. If it isn't valid or it is from the
}
buf_drive = drive;
buf_track = -1;
+ sector_size_bits = log2 (buf_geom.sector_size);
}
/* Make sure that SECTOR is valid. */
return 0;
}
- /* Get first sector of track */
- soff = sector % buf_geom.sectors;
+ slen = ((byte_offset + byte_len + buf_geom.sector_size - 1)
+ >> sector_size_bits);
+
+ /* Eliminate a buffer overflow. */
+ if ((buf_geom.sectors << sector_size_bits) > BUFFERLEN)
+ sectors_per_vtrack = (BUFFERLEN >> sector_size_bits);
+ else
+ sectors_per_vtrack = buf_geom.sectors;
+
+ /* Get the first sector of track. */
+ soff = sector % sectors_per_vtrack;
track = sector - soff;
- num_sect = buf_geom.sectors - soff;
- bufaddr = BUFFERADDR + (soff * SECTOR_SIZE) + byte_offset;
+ num_sect = sectors_per_vtrack - soff;
+ bufaddr = ((char *) BUFFERADDR
+ + (soff << sector_size_bits) + byte_offset);
if (track != buf_track)
{
- int bios_err, read_start = track, read_len = buf_geom.sectors;
+ int bios_err, read_start = track, read_len = sectors_per_vtrack;
/*
* If there's more than one read in this entire loop, then
{
read_start = sector;
read_len = num_sect;
- bufaddr = BUFFERADDR + byte_offset;
+ bufaddr = (char *) BUFFERADDR + byte_offset;
}
bios_err = biosdisk (BIOSDISK_READ, drive, &buf_geom,
sector, slen, BUFFERSEG))
errnum = ERR_READ;
- bufaddr = BUFFERADDR + byte_offset;
+ bufaddr = (char *) BUFFERADDR + byte_offset;
}
}
else
{
/* We already read the sector 1, copy it to sector 0 */
memmove ((char *) BUFFERADDR,
- (char *) BUFFERADDR + SECTOR_SIZE, SECTOR_SIZE);
+ (char *) BUFFERADDR + buf_geom.sector_size,
+ buf_geom.sector_size);
}
else
{
}
}
- if (size > ((num_sect * SECTOR_SIZE) - byte_offset))
- size = (num_sect * SECTOR_SIZE) - byte_offset;
+ if (size > ((num_sect << sector_size_bits) - byte_offset))
+ size = (num_sect << sector_size_bits) - byte_offset;
/*
* Instrumentation to tell which sectors were read and used.
if (disk_read_func)
{
int sector_num = sector;
- int length = SECTOR_SIZE - byte_offset;
+ int length = buf_geom.sector_size - byte_offset;
if (length > size)
length = size;
(*disk_read_func) (sector_num++, byte_offset, length);
length = size - length;
if (length > 0)
{
- while (length > SECTOR_SIZE)
+ while (length > buf_geom.sector_size)
{
- (*disk_read_func) (sector_num++, 0, SECTOR_SIZE);
- length -= SECTOR_SIZE;
+ (*disk_read_func) (sector_num++, 0, buf_geom.sector_size);
+ length -= buf_geom.sector_size;
}
(*disk_read_func) (sector_num, 0, length);
}
}
- memmove (buf, (char *) bufaddr, size);
+ grub_memmove (buf, bufaddr, size);
buf += size;
byte_len -= size;
sector += num_sect;
- slen -= num_sect;
byte_offset = 0;
}
return 1;
if (!(current_partition & 0xFF000000uL)
- && (current_drive & 0xFFFFFF7F) < 8
+ && ((current_drive & 0xFFFFFF7F) < 8
+ || current_drive == cdrom_drive)
&& (current_partition & 0xFF) == 0xFF
&& ((current_partition & 0xFF00) == 0xFF00
|| (current_partition & 0xFF00) < 0x800)
int drive = (dev >> 24) & 0xFF;
int partition = dev & 0xFFFFFF;
- /* If DRIVE is disabled (0xFF), use SAVED_DRIVE instead. */
- if (drive == 0xFF)
+ /* If DRIVE is disabled, use SAVED_DRIVE instead. */
+ if (drive == GRUB_INVALID_DRIVE)
current_drive = saved_drive;
else
current_drive = drive;
{
char ch = *device;
#ifdef SUPPORT_NETBOOT
- if (*device == 'f' || *device == 'h' ||
- (*device == 'n' && network_ready))
+ if (*device == 'f' || *device == 'h'
+ || (*device == 'n' && network_ready)
+ || (*device == 'c' && cdrom_drive != GRUB_INVALID_DRIVE))
#else
- if (*device == 'f' || *device == 'h')
+ if (*device == 'f' || *device == 'h'
+ || (*device == 'c' && cdrom_drive != GRUB_INVALID_DRIVE))
#endif /* SUPPORT_NETBOOT */
{
/* user has given '([fhn]', check for resp. add 'd' and
return device + 2;
}
+ if ((*device == 'f'
+ || *device == 'h'
#ifdef SUPPORT_NETBOOT
- if ((*device == 'f' || *device == 'h' ||
- (*device == 'n' && network_ready))
-#else
- if ((*device == 'f' || *device == 'h')
-#endif /* SUPPORT_NETBOOT */
+ || (*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 (ch == 'n' && network_ready)
current_drive = NETWORK_DRIVE;
else
#endif /* SUPPORT_NETBOOT */
{
- safe_parse_maxint (&device, (int *) ¤t_drive);
-
- disk_choice = 0;
- if (ch == 'h')
- current_drive += 0x80;
+ if (*device == 'c' && cdrom_drive != GRUB_INVALID_DRIVE)
+ current_drive = cdrom_drive;
+ else
+ {
+ safe_parse_maxint (&device, (int *) ¤t_drive);
+
+ disk_choice = 0;
+ if (ch == 'h')
+ current_drive += 0x80;
+ }
}
}
if (! (filename = set_device (filename)))
{
- current_drive = 0xFF;
+ current_drive = GRUB_INVALID_DRIVE;
return 0;
}
{
if ((filename = set_device (filename)) == 0)
{
- current_drive = 0xFF;
+ current_drive = GRUB_INVALID_DRIVE;
return 0;
}
# ifndef NO_BLOCK_FILES
if (! is_completion)
grub_printf (" Possible disks are: ");
+ if (!ptr
+ || *(ptr-1) != 'd'
#ifdef SUPPORT_NETBOOT
- if (!ptr || *(ptr-1) != 'd' || *(ptr-2) != 'n')
+ || *(ptr-2) != 'n'
#endif /* SUPPORT_NETBOOT */
+ || *(ptr-2) != 'c')
{
for (i = (ptr && (*(ptr-1) == 'd' && *(ptr-2) == 'h') ? 1:0);
i < (ptr && (*(ptr-1) == 'd' && *(ptr-2) == 'f') ? 1:2);
}
}
}
+
+ if (cdrom_drive != GRUB_INVALID_DRIVE
+ && (disk_choice || cdrom_drive == current_drive)
+ && (!ptr
+ || *(ptr-1) == '('
+ || (*(ptr-1) == 'd' && *(ptr-2) == 'c')))
+ print_a_completion ("cd");
+
# ifdef SUPPORT_NETBOOT
- if (network_ready &&
- (disk_choice || NETWORK_DRIVE == current_drive) &&
- (!ptr || *(ptr-1) == '(' ||
- (*(ptr-1) == 'd' && *(ptr-2) == 'n')))
+ if (network_ready
+ && (disk_choice || NETWORK_DRIVE == current_drive)
+ && (!ptr
+ || *(ptr-1) == '('
+ || (*(ptr-1) == 'd' && *(ptr-2) == 'n')))
print_a_completion ("nd");
# endif /* SUPPORT_NETBOOT */
/* filesys.h - abstract filesystem interface */
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 1999, 2000, 2001 Free Software Foundation, Inc.
+ * Copyright (C) 1999,2000,2001,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
#define FSYS_TFTP_NUM 0
#endif
+#ifdef FSYS_ISO9660
+#define FSYS_ISO9660_NUM 1
+int iso9660_mount (void);
+int iso9660_read (char *buf, int len);
+int iso9660_dir (char *dirname);
+#else
+#define FSYS_ISO9660_NUM 0
+#endif
+
#ifndef NUM_FSYS
#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_TFTP_NUM + FSYS_ISO9660_NUM)
#endif
/* defines for the block filesystem info area */
--- /dev/null
+/*
+ * ISO 9660 filesystem backend for GRUB (GRand Unified Bootloader)
+ * including Rock Ridge Extensions support
+ *
+ * Copyright (C) 1998, 1999 Kousuke Takai <tak@kmc.kyoto-u.ac.jp>
+ *
+ * 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.
+ */
+/*
+ * References:
+ * linux/fs/isofs/rock.[ch]
+ * mkisofs-1.11.1/diag/isoinfo.c
+ * mkisofs-1.11.1/iso9660.h
+ * (all are written by Eric Youngdale)
+ *
+ * Modifications by:
+ * Leonid Lisovskiy <lly@pisem.net> 2003
+ */
+
+#ifdef FSYS_ISO9660
+
+#include "shared.h"
+#include "filesys.h"
+#include "iso9660.h"
+
+/* iso9660 super-block data in memory */
+struct iso_sb_info {
+ unsigned long vol_sector;
+
+};
+
+/* iso fs inode data in memory */
+struct iso_inode_info {
+ unsigned long file_start;
+};
+
+#define ISO_SUPER \
+ ((struct iso_sb_info *)(FSYS_BUF))
+#define INODE \
+ ((struct iso_inode_info *)(FSYS_BUF+sizeof(struct iso_sb_info)))
+#define PRIMDESC ((struct iso_primary_descriptor *)(FSYS_BUF + 2048))
+#define DIRREC ((struct iso_directory_record *)(FSYS_BUF + 4096))
+#define RRCONT_BUF ((unsigned char *)(FSYS_BUF + 6144))
+#define NAME_BUF ((unsigned char *)(FSYS_BUF + 8192))
+
+
+static inline unsigned long
+log2 (unsigned long word)
+{
+ asm volatile ("bsfl %1,%0"
+ : "=r" (word)
+ : "r" (word));
+ return 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);
+
+ /*
+ * We have to use own devread() function since BIOS return wrong geometry
+ */
+ if (sector < 0)
+ {
+ errnum = ERR_OUTSIDE_PART;
+ return 0;
+ }
+ 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)),
+ "0"(sector));
+
+#if !defined(STAGE1_5)
+ if (disk_read_hook && debug)
+ printf ("<%d, %d, %d>", sector, byte_offset, byte_len);
+#endif /* !STAGE1_5 */
+
+ return rawread(current_drive, part_start + sector, byte_offset, byte_len, buf);
+}
+
+int
+iso9660_mount (void)
+{
+ unsigned int sector;
+
+ /*
+ * Because there is no defined slice type ID for ISO-9660 filesystem,
+ * this test will pass only either (1) if entire disk is used, or
+ * (2) if current partition is BSD style sub-partition whose ID is
+ * ISO-9660.
+ */
+ if ((current_partition != 0xFFFFFF)
+ && !IS_PC_SLICE_TYPE_BSD_WITH_FS(current_slice, FS_ISO9660))
+ return 0;
+
+ /*
+ * Currently, only FIRST session of MultiSession disks are supported !!!
+ */
+ for (sector = 16 ; sector < 32 ; sector++)
+ {
+ if (!iso9660_devread(sector, 0, sizeof(*PRIMDESC), (char *)PRIMDESC))
+ break;
+ /* check ISO_VD_PRIMARY and ISO_STANDARD_ID */
+ if (PRIMDESC->type.l == ISO_VD_PRIMARY
+ && !__builtin_memcmp(PRIMDESC->id, ISO_STANDARD_ID, sizeof(PRIMDESC->id)))
+ {
+ ISO_SUPER->vol_sector = sector;
+ INODE->file_start = 0;
+ fsmax = PRIMDESC->volume_space_size.l;
+ return 1;
+ }
+ }
+
+ return 0;
+}
+
+int
+iso9660_dir (char *dirname)
+{
+ struct iso_directory_record *idr;
+ RR_ptr_t rr_ptr;
+ struct rock_ridge *ce_ptr;
+ unsigned int pathlen;
+ int size;
+ unsigned int extent;
+ unsigned char file_type;
+ unsigned int rr_len;
+ unsigned char rr_flag;
+
+ idr = &PRIMDESC->root_directory_record;
+ INODE->file_start = 0;
+
+ do
+ {
+ while (*dirname == '/') /* skip leading slashes */
+ dirname++;
+ /* pathlen = strcspn(dirname, "/\n\t "); */
+ for (pathlen = 0 ;
+ dirname[pathlen]
+ && !isspace(dirname[pathlen]) && dirname[pathlen] != '/' ;
+ pathlen++)
+ ;
+
+ size = idr->size.l;
+ extent = idr->extent.l;
+
+ while (size > 0)
+ {
+ if (!iso9660_devread(extent, 0, ISO_SECTOR_SIZE, (char *)DIRREC))
+ {
+ errnum = ERR_FSYS_CORRUPT;
+ return 0;
+ }
+ extent++;
+
+ idr = (struct iso_directory_record *)DIRREC;
+ for (; idr->length.l > 0;
+ idr = (struct iso_directory_record *)((char *)idr + idr->length.l) )
+ {
+ const char *name = idr->name;
+ unsigned int name_len = idr->name_len.l;
+
+ file_type = (idr->flags.l & 2) ? ISO_DIRECTORY : ISO_REGULAR;
+ if (name_len == 1)
+ {
+ if ((name[0] == 0) || /* self */
+ (name[0] == 1)) /* parent */
+ continue;
+ }
+ if (name_len > 2 && CHECK2(name + name_len - 2, ';', '1'))
+ {
+ name_len -= 2; /* truncate trailing file version */
+ if (name_len > 1 && name[name_len - 1] == '.')
+ name_len--; /* truncate trailing dot */
+ }
+
+ /*
+ * Parse Rock-Ridge extension
+ */
+ rr_len = (idr->length.l - idr->name_len.l
+ - sizeof(struct iso_directory_record)
+ + sizeof(idr->name));
+ rr_ptr.ptr = ((unsigned char *)idr + idr->name_len.l
+ + sizeof(struct iso_directory_record)
+ - sizeof(idr->name));
+ if (rr_ptr.i & 1)
+ rr_ptr.i++, rr_len--;
+ ce_ptr = NULL;
+ rr_flag = RR_FLAG_NM | RR_FLAG_PX /*| RR_FLAG_SL*/;
+
+ while (rr_len >= 4)
+ {
+ if (rr_ptr.rr->version != 1)
+ {
+#ifndef STAGE1_5
+ if (debug)
+ printf(
+ "Non-supported version (%d) RockRidge chunk "
+ "`%c%c'\n", rr_ptr.rr->version,
+ rr_ptr.rr->signature & 0xFF,
+ rr_ptr.rr->signature >> 8);
+#endif
+ }
+ else
+ {
+ switch (rr_ptr.rr->signature)
+ {
+ case RRMAGIC('R', 'R'):
+ if ( rr_ptr.rr->len >= (4+sizeof(struct RR)))
+ rr_flag &= rr_ptr.rr->u.rr.flags.l;
+ break;
+ case RRMAGIC('N', 'M'):
+ name = rr_ptr.rr->u.nm.name;
+ name_len = rr_ptr.rr->len - (4+sizeof(struct NM));
+ rr_flag &= ~RR_FLAG_NM;
+ break;
+ case RRMAGIC('P', 'X'):
+ if (rr_ptr.rr->len >= (4+sizeof(struct PX)))
+ {
+ file_type = ((rr_ptr.rr->u.px.mode.l & POSIX_S_IFMT)
+ == POSIX_S_IFREG
+ ? ISO_REGULAR
+ : ((rr_ptr.rr->u.px.mode.l & POSIX_S_IFMT)
+ == POSIX_S_IFDIR
+ ? ISO_DIRECTORY : ISO_OTHER));
+ rr_flag &= ~RR_FLAG_PX;
+ }
+ break;
+ case RRMAGIC('C', 'E'):
+ if (rr_ptr.rr->len >= (4+sizeof(struct CE)))
+ ce_ptr = rr_ptr.rr;
+ break;
+#if 0 // RockRidge symlinks are not supported yet
+ case RRMAGIC('S', 'L'):
+ {
+ int slen;
+ unsigned char rootflag, prevflag;
+ char *rpnt = NAME_BUF+1024;
+ struct SL_component *slp;
+
+ slen = rr_ptr.rr->len - (4+1);
+ slp = &rr_ptr.rr->u.sl.link;
+ while (slen > 1)
+ {
+ rootflag = 0;
+ switch (slp->flags.l)
+ {
+ case 0:
+ memcpy(rpnt, slp->text, slp->len);
+ rpnt += slp->len;
+ break;
+ case 4:
+ *rpnt++ = '.';
+ /* fallthru */
+ case 2:
+ *rpnt++ = '.';
+ break;
+ case 8:
+ rootflag = 1;
+ *rpnt++ = '/';
+ break;
+ default:
+ printf("Symlink component flag not implemented (%d)\n",
+ slp->flags.l);
+ slen = 0;
+ break;
+ }
+ slen -= slp->len + 2;
+ prevflag = slp->flags.l;
+ slp = (struct SL_component *) ((char *) slp + slp->len + 2);
+
+ if (slen < 2)
+ {
+ /*
+ * If there is another SL record, and this component
+ * record isn't continued, then add a slash.
+ */
+ if ((!rootflag) && (rr_ptr.rr->u.sl.flags.l & 1) && !(prevflag & 1))
+ *rpnt++='/';
+ break;
+ }
+
+ /*
+ * If this component record isn't continued, then append a '/'.
+ */
+ if (!rootflag && !(prevflag & 1))
+ *rpnt++ = '/';
+ }
+ *rpnt++ = '\0';
+ grub_putstr(NAME_BUF+1024);// debug print!
+ }
+ rr_flag &= ~RR_FLAG_SL;
+ break;
+#endif
+ default:
+ break;
+ }
+ }
+ if (!rr_flag)
+ /*
+ * There is no more extension we expects...
+ */
+ break;
+
+ rr_len -= rr_ptr.rr->len;
+ rr_ptr.ptr += rr_ptr.rr->len;
+ if (rr_len < 4 && ce_ptr != NULL)
+ {
+ /* preserve name before loading new extent. */
+ if( RRCONT_BUF <= (unsigned char *)name
+ && (unsigned char *)name < RRCONT_BUF + ISO_SECTOR_SIZE )
+ {
+ memcpy(NAME_BUF, name, name_len);
+ name = NAME_BUF;
+ }
+ rr_ptr.ptr = RRCONT_BUF + ce_ptr->u.ce.offset.l;
+ rr_len = ce_ptr->u.ce.size.l;
+ if (!iso9660_devread(ce_ptr->u.ce.extent.l, 0, ISO_SECTOR_SIZE, RRCONT_BUF))
+ {
+ errnum = 0; /* this is not fatal. */
+ break;
+ }
+ ce_ptr = NULL;
+ }
+ } /* rr_len >= 4 */
+
+ filemax = MAXINT;
+ if (name_len >= pathlen
+ && !__builtin_memcmp(name, dirname, pathlen))
+ {
+ if (dirname[pathlen] == '/' || !print_possibilities)
+ {
+ /*
+ * DIRNAME is directory component of pathname,
+ * or we are to open a file.
+ */
+ if (pathlen == name_len)
+ {
+ if (dirname[pathlen] == '/')
+ {
+ if (file_type != ISO_DIRECTORY)
+ {
+ errnum = ERR_BAD_FILETYPE;
+ return 0;
+ }
+ goto next_dir_level;
+ }
+ if (file_type != ISO_REGULAR)
+ {
+ errnum = ERR_BAD_FILETYPE;
+ return 0;
+ }
+ INODE->file_start = idr->extent.l;
+ filepos = 0;
+ filemax = idr->size.l;
+ return 1;
+ }
+ }
+ else /* Completion */
+ {
+#ifndef STAGE1_5
+ if (print_possibilities > 0)
+ print_possibilities = -print_possibilities;
+ memcpy(NAME_BUF, name, name_len);
+ NAME_BUF[name_len] = '\0';
+ print_a_completion (NAME_BUF);
+#endif
+ }
+ }
+ } /* for */
+
+ size -= ISO_SECTOR_SIZE;
+ } /* size>0 */
+
+ if (dirname[pathlen] == '/' || print_possibilities >= 0)
+ {
+ errnum = ERR_FILE_NOT_FOUND;
+ return 0;
+ }
+
+ next_dir_level:
+ dirname += pathlen;
+
+ } while (*dirname == '/');
+
+ return 1;
+}
+
+int
+iso9660_read (char *buf, int len)
+{
+ int sector, blkoffset, size, ret;
+
+ if (INODE->file_start == 0)
+ return 0;
+
+ ret = 0;
+ blkoffset = filepos & (ISO_SECTOR_SIZE - 1);
+ sector = filepos >> ISO_SECTOR_BITS;
+ while (len > 0)
+ {
+ size = ISO_SECTOR_SIZE - blkoffset;
+ if (size > len)
+ size = len;
+
+ disk_read_func = disk_read_hook;
+
+ if (!iso9660_devread(INODE->file_start + sector, blkoffset, size, buf))
+ return 0;
+
+ disk_read_func = NULL;
+
+ len -= size;
+ buf += size;
+ ret += size;
+ filepos += size;
+ sector++;
+ blkoffset = 0;
+ }
+
+ return ret;
+}
+
+#endif /* FSYS_ISO9660 */
--- /dev/null
+/*
+ * ISO 9660 filesystem backend for GRUB (GRand Unified Bootloader)
+ * including Rock Ridge Extensions support
+ *
+ * Copyright (C) 1998, 1999 Kousuke Takai <tak@kmc.kyoto-u.ac.jp>
+ *
+ * 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.
+ */
+/*
+ * References:
+ * linux/fs/isofs/rock.[ch]
+ * mkisofs-1.11.1/diag/isoinfo.c
+ * mkisofs-1.11.1/iso9660.h
+ * (all are written by Eric Youngdale)
+ */
+
+#ifndef _ISO9660_H_
+#define _ISO9660_H_
+
+#define ISO_SECTOR_BITS (11)
+#define ISO_SECTOR_SIZE (1<<ISO_SECTOR_BITS)
+
+#define ISO_REGULAR 1 /* regular file */
+#define ISO_DIRECTORY 2 /* directory */
+#define ISO_OTHER 0 /* other file (with Rock Ridge) */
+
+#define RR_FLAG_PX 0x01 /* have POSIX file attributes */
+#define RR_FLAG_PN 0x02 /* POSIX devices */
+#define RR_FLAG_SL 0x04 /* Symbolic link */
+#define RR_FLAG_NM 0x08 /* have alternate file name */
+#define RR_FLAG_CL 0x10 /* Child link */
+#define RR_FLAG_PL 0x20 /* Parent link */
+#define RR_FLAG_RE 0x40 /* Relocation directory */
+#define RR_FLAG_TF 0x80 /* Timestamps */
+
+/* POSIX file attributes for Rock Ridge extensions */
+#define POSIX_S_IFMT 0xF000
+#define POSIX_S_IFREG 0x8000
+#define POSIX_S_IFDIR 0x4000
+
+/* volume descriptor types */
+#define ISO_VD_PRIMARY 1
+#define ISO_VD_END 255
+
+#define ISO_STANDARD_ID "CD001"
+
+#ifndef ASM_FILE
+
+#ifndef __BIT_TYPES_DEFINED__
+typedef int int8_t __attribute__((mode(QI)));
+typedef unsigned int u_int8_t __attribute__((mode(QI)));
+typedef int int16_t __attribute__((mode(HI)));
+typedef unsigned int u_int16_t __attribute__((mode(HI)));
+typedef int int32_t __attribute__((mode(SI)));
+typedef unsigned int u_int32_t __attribute__((mode(SI)));
+#endif
+
+typedef union {
+ u_int8_t l,b;
+} iso_8bit_t;
+
+typedef struct __iso_16bit {
+ u_int16_t l, b;
+} iso_16bit_t __attribute__ ((packed));
+
+typedef struct __iso_32bit {
+ u_int32_t l, b;
+} iso_32bit_t __attribute__ ((packed));
+
+typedef u_int8_t iso_date_t[7];
+
+struct iso_directory_record {
+ iso_8bit_t length;
+ iso_8bit_t ext_attr_length;
+ iso_32bit_t extent;
+ iso_32bit_t size;
+ iso_date_t date;
+ iso_8bit_t flags;
+ iso_8bit_t file_unit_size;
+ iso_8bit_t interleave;
+ iso_16bit_t volume_seq_number;
+ iso_8bit_t name_len;
+ u_int8_t name[1];
+} __attribute__ ((packed));
+
+struct iso_primary_descriptor {
+ iso_8bit_t type;
+ u_int8_t id[5];
+ iso_8bit_t version;
+ u_int8_t _unused1[1];
+ u_int8_t system_id[32];
+ u_int8_t volume_id[32];
+ u_int8_t _unused2[8];
+ iso_32bit_t volume_space_size;
+ u_int8_t _unused3[32];
+ iso_16bit_t volume_set_size;
+ iso_16bit_t volume_seq_number;
+ iso_16bit_t logical_block_size;
+ iso_32bit_t path_table_size;
+ u_int8_t type_l_path_table[4];
+ u_int8_t opt_type_l_path_table[4];
+ u_int8_t type_m_path_table[4];
+ u_int8_t opt_type_m_path_table[4];
+ struct iso_directory_record root_directory_record;
+ u_int8_t volume_set_id[128];
+ u_int8_t publisher_id[128];
+ u_int8_t preparer_id[128];
+ u_int8_t application_id[128];
+ u_int8_t copyright_file_id[37];
+ u_int8_t abstract_file_id[37];
+ u_int8_t bibliographic_file_id[37];
+ u_int8_t creation_date[17];
+ u_int8_t modification_date[17];
+ u_int8_t expiration_date[17];
+ u_int8_t effective_date[17];
+ iso_8bit_t file_structure_version;
+ u_int8_t _unused4[1];
+ u_int8_t application_data[512];
+ u_int8_t _unused5[653];
+} __attribute__ ((packed));
+
+struct rock_ridge {
+ u_int16_t signature;
+ u_int8_t len;
+ u_int8_t version;
+ union {
+ struct SP {
+ u_int16_t magic;
+ u_int8_t skip;
+ } sp;
+ struct CE {
+ iso_32bit_t extent;
+ iso_32bit_t offset;
+ iso_32bit_t size;
+ } ce;
+ struct ER {
+ u_int8_t len_id;
+ u_int8_t len_des;
+ u_int8_t len_src;
+ u_int8_t ext_ver;
+ u_int8_t data[0];
+ } er;
+ struct RR {
+ iso_8bit_t flags;
+ } rr;
+ struct PX {
+ iso_32bit_t mode;
+ iso_32bit_t nlink;
+ iso_32bit_t uid;
+ iso_32bit_t gid;
+ } px;
+ struct PN {
+ iso_32bit_t dev_high;
+ iso_32bit_t dev_low;
+ } pn;
+ struct SL {
+ iso_8bit_t flags;
+ struct SL_component {
+ iso_8bit_t flags;
+ u_int8_t len;
+ u_int8_t text[0];
+ } link;
+ } sl;
+ struct NM {
+ iso_8bit_t flags;
+ u_int8_t name[0];
+ } nm;
+ struct CL {
+ iso_32bit_t location;
+ } cl;
+ struct PL {
+ iso_32bit_t location;
+ } pl;
+ struct TF {
+ iso_8bit_t flags;
+ iso_date_t times[0];
+ } tf;
+ } u;
+} __attribute__ ((packed));
+
+typedef union RR_ptr {
+ struct rock_ridge *rr;
+ char *ptr;
+ int i;
+} RR_ptr_t;
+
+#define RRMAGIC(c1, c2) ((c1)|(c2) << 8)
+
+#define CHECK2(ptr, c1, c2) \
+ (*(unsigned short *)(ptr) == (((c1) | (c2) << 8) & 0xFFFF))
+
+#endif /* !ASM_FILE */
+
+#endif /* _ISO9660_H_ */
/*
* BIOS disk defines
*/
-#define BIOSDISK_READ 0x0
-#define BIOSDISK_WRITE 0x1
-#define BIOSDISK_ERROR_GEOMETRY 0x100
-#define BIOSDISK_FLAG_LBA_EXTENSION 0x1
+#define BIOSDISK_READ 0x0
+#define BIOSDISK_WRITE 0x1
+#define BIOSDISK_ERROR_GEOMETRY 0x100
+#define BIOSDISK_FLAG_LBA_EXTENSION 0x1
+#define BIOSDISK_FLAG_CDROM 0x2
/*
* This is the filesystem (not raw device) buffer.
#define STAGE2_ID_VSTAFS_STAGE1_5 6
#define STAGE2_ID_JFS_STAGE1_5 7
#define STAGE2_ID_XFS_STAGE1_5 8
+#define STAGE2_ID_ISO9660_STAGE1_5 9
#ifndef STAGE1_5
# define STAGE2_ID STAGE2_ID_STAGE2
# define STAGE2_ID STAGE2_ID_JFS_STAGE1_5
# elif defined(FSYS_XFS)
# define STAGE2_ID STAGE2_ID_XFS_STAGE1_5
+# elif defined(FSYS_ISO9660)
+# define STAGE2_ID STAGE2_ID_ISO9660_STAGE1_5
# else
# error "unknown Stage 2"
# endif
unsigned long sectors;
/* The total number of sectors */
unsigned long total_sectors;
+ /* Device sector size */
+ unsigned long sector_size;
/* Flags */
unsigned long flags;
};
extern struct multiboot_info mbi;
extern unsigned long saved_drive;
extern unsigned long saved_partition;
+extern unsigned long cdrom_drive;
#ifndef STAGE1_5
extern unsigned long saved_mem_upper;
extern unsigned long extended_memory;
/*
* GRUB -- GRand Unified Bootloader
- * Copyright (C) 2000,2001,2002 Free Software Foundation, Inc.
+ * Copyright (C) 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
saved_drive = boot_drive;
saved_partition = install_partition;
- current_drive = 0xFF;
+ current_drive = GRUB_INVALID_DRIVE;
if (! get_cmdline (PACKAGE " edit> ", new_heap,
NEW_HEAPSIZE + 1, 0, 1))
--- /dev/null
+/*
+ * GRUB -- GRand Unified Bootloader
+ * Copyright (C) 1994-2002 H. Peter Anvin
+ * Copyright (C) 1999,2000,2001,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.
+ *
+ */
+
+/*
+ Most of this file was originally "isolinux.asm" from SYSLINUX package.
+ It has been very heavily modified.
+*/
+
+#define ASM_FILE
+#include "stage1.h"
+#include "shared.h"
+#include "iso9660.h"
+
+#ifndef STAGE1_5
+#include "stage2_size.h"
+#endif
+
+
+ /* Absolute addresses
+ This makes the assembler generate the address without support
+ from the linker. (ELF can't relocate 16-bit addresses!) */
+#define ABS(x) (x-_start+BOOTSEC_LOCATION)
+
+#ifdef STAGE1_5
+# define STAGE_ADDR 0x2000
+#else
+# define STAGE_ADDR 0x8000
+#endif /* STAGE1_5 */
+
+ /* Print message string */
+#define MSG(x) mov $ABS(x), %si; call message;
+
+ .file "start_eltorito.S"
+
+ .text
+
+ /* Tell GAS to generate 16-bit instructions so that this code works
+ in real mode. */
+ .code16
+
+ .globl start, _start
+
+/*
+ * Primary entry point. Because BIOSes are buggy, we only load the first
+ * CD-ROM sector (2K) of the file, so the number one priority is actually
+ * loading the rest.
+ */
+start:
+_start:
+ cli
+ ljmp $0, $ABS(real_start)
+
+ . = _start + 8 /* Pad to file offset 8 */
+
+ /* This table gets filled in by mkisofs using the
+ -boot-info-table option */
+bi_pvd: .long 0xDEADBEEF /* LBA of primary volume descript */
+bi_file: .long 0xDEADBEEF /* LBA of boot file */
+bi_length: .long 0xDEADBEEF /* Length of boot file */
+bi_csum: .long 0xDEADBEEF /* Checksum of boot file */
+bi_reserved: .space (10*4) /* Reserved */
+
+real_start:
+ xor %ax, %ax
+ mov %ax, %ss
+ mov %ax, %ds
+ mov %ax, %es
+ mov %ax, %fs
+ mov %ax, %gs
+ mov $STAGE1_STACKSEG, %sp /* set up the REAL stack */
+ sti
+ cld
+
+ /* save drive reference first thing! */
+ mov %dl, ABS(BootDrive)
+
+ /* print a notification message on the screen */
+ MSG(notification_string)
+
+load_image:
+ /* Set up boot file sector, size, load address */
+ mov ABS(bi_length), %eax
+ add $(ISO_SECTOR_SIZE-1), %eax
+ shr $ISO_SECTOR_BITS, %eax /* dwords->sectors */
+ mov %ax, %bp /* boot file sectors */
+ mov $(STAGE_ADDR >> 4), %bx
+ mov %bx, %es
+ xor %bx, %bx
+ mov ABS(bi_file), %eax
+ call getlinsec
+ mov %ds, %ax
+ mov %ax, %es
+
+ MSG(notification_done)
+bootit:
+ /* save the sector number of the second sector in %ebp */
+ mov $ABS(firstlist - BOOTSEC_LISTSIZE), %si
+ mov (%si), %ebp
+ mov ABS(BootDrive), %dl /* this makes sure %dl is our "boot" drive */
+ ljmp $0, $(STAGE_ADDR+SECTOR_SIZE) /* jump to main() in asm.S */
+
+/* go here when you need to stop the machine hard after an error condition */
+stop: jmp stop
+
+
+/*
+ * Get linear sectors - EBIOS LBA addressing, 2048-byte sectors.
+ *
+ * Note that we can't always do this as a single request, because at least
+ * Phoenix BIOSes has a 127-sector limit. To be on the safe side, stick
+ * to 16 sectors (32K) per request.
+ *
+ * Input:
+ * EAX - Linear sector number
+ * ES:BX - Target buffer
+ * BP - Sector count
+ */
+getlinsec:
+ mov $ABS(dapa), %si /* Load up the DAPA */
+ mov %bx, 4(%si)
+ mov %es, %bx
+ mov %bx, 6(%si)
+ mov %eax, 8(%si)
+1:
+ push %bp
+ push %si
+ cmp ABS(MaxTransfer), %bp
+ jbe 2f
+ mov ABS(MaxTransfer), %bp
+2:
+ mov %bp, 2(%si)
+ mov ABS(BootDrive), %dl
+ mov $0x42, %ah /* Extended Read */
+ call xint13
+ pop %si
+ pop %bp
+ movzwl 2(%si), %eax /* Sectors we read */
+ add %eax, 8(%si) /* Advance sector pointer */
+ sub %ax, %bp /* Sectors left */
+ shl $(ISO_SECTOR_BITS-4), %ax /* 2048-byte sectors -> segment */
+ add %ax, 6(%si) /* Advance buffer pointer */
+
+ pushal
+ MSG(notification_step)
+ popal
+ cmp $0, %bp
+ ja 1b
+ mov 8(%si), %eax /* Return next sector */
+ ret
+
+/*
+ * INT 13h with retry
+ */
+xint13:
+ movb $6, ABS(RetryCount)
+ pushal
+.try:
+ int $0x13
+ jc 1f
+ add $(8*4), %sp /* Clean up stack */
+ ret
+1:
+ mov %ah, %dl /* Save error code */
+ decb ABS(RetryCount)
+ jz .real_error
+ mov ABS(RetryCount), %al
+ mov ABS(dapa+2), %ah /* Sector transfer count */
+ cmp $2, %al /* Only 2 attempts left */
+ ja 2f
+ mov $1, %ah /* Drop transfer size to 1 */
+ jmp .setmaxtr
+2:
+ cmp $3, %al
+ ja 3f /* First time, just try again */
+ shr $1, %ah /* Otherwise, try to reduce */
+ adc $0, %ah /* the max transfer size, but not */
+.setmaxtr:
+ mov %ah, ABS(MaxTransfer)
+ mov %ah, ABS(dapa+2)
+3:
+ popal
+ jmp .try
+
+.real_error:
+ MSG(read_error_string)
+ mov %dl, %al
+ call printhex2
+ popal
+ jmp stop
+
+
+
+/*
+ * message: write the string pointed to by %si
+ *
+ * WARNING: trashes %si, %ax, and %bx
+ */
+
+ /*
+ * Use BIOS "int 10H Function 0Eh" to write character in teletype mode
+ * %ah = 0xe %al = character
+ * %bh = page %bl = foreground color (graphics modes)
+ */
+1:
+ mov $0x0001, %bx
+ mov $0x0E, %ah
+ int $0x10 /* display a byte */
+
+message:
+ lodsb
+ or %al, %al
+ jne 1b /* if not end of string, jmp to display */
+ ret
+
+/*
+ * printhex[248]: Write a hex number in (AL, AX, EAX) to the console
+ */
+printhex2:
+ pushal
+ rol $24, %eax
+ mov $2, %cx
+ jmp 1f
+printhex4:
+ pushal
+ rol $16, %eax
+ mov $4, %cx
+ jmp 1f
+printhex8:
+ pushal
+ mov $8, %cx
+1:
+ rol $4, %eax
+ push %eax
+ and $0x0F, %al
+ cmp $10, %al
+ jae .high
+.low: add $('0'), %al
+ jmp 2f
+.high: add $('A'-10), %al
+2:
+ mov $0x0001, %bx
+ mov $0x0E, %ah
+ int $0x10 /* display a char */
+ pop %eax
+ loop 1b
+ popal
+ ret
+
+/**************************************************************************/
+#ifdef STAGE1_5
+notification_string: .string "Loading stage1.5 "
+#else
+notification_string: .string "Loading stage2 "
+#endif
+
+notification_step: .string "."
+notification_done: .string "\r\n"
+
+read_error_string: .string "Read error 0x"
+
+/*
+ * EBIOS disk address packet
+ */
+ .align 8
+dapa: .byte 16 /* Packet size */
+ .byte 0 /* reserved */
+ .word 0 /* +2 Block count */
+ .word 0 /* +4 Offset of buffer */
+ .word 0 /* +6 Segment of buffer */
+ .long 0 /* +8 LBA (LSW) */
+ .long 0 /* +C LBA (MSW) */
+
+VARIABLE(BootDrive)
+ .byte 0xFF
+VARIABLE(MaxTransfer)
+ .word 16 /* Max sectors per transfer (32Kb) */
+VARIABLE(RetryCount)
+ .byte 0
+
+
+/*
+ * This area is an empty space between the main body of code below which
+ * grows up (fixed after compilation, but between releases it may change
+ * in size easily), and the lists of sectors to read, which grows down
+ * from a fixed top location.
+ */
+
+ .word 0
+ .word 0
+
+ . = _start + SECTOR_SIZE - BOOTSEC_LISTSIZE
+
+ /* fill the first data listing with the default */
+blocklist_default_start:/* this is the sector start parameter, in logical
+ sectors from the start of the disk, sector 0 */
+ .long 0
+
+blocklist_default_len: /* this is the number of sectors to read */
+#ifdef STAGE1_5
+ .word 0
+#else
+ .word (STAGE2_SIZE + ISO_SECTOR_SIZE - 1) >> ISO_SECTOR_BITS
+#endif
+blocklist_default_seg: /* this is the segment of the starting address
+ to load the data into */
+ .word (STAGE_ADDR + SECTOR_SIZE) >> 4
+
+firstlist: /* this label has to be after the list data!!! */