From 4f29a8af45b9c7edcb48b0bd2ccc34df1bb85cec Mon Sep 17 00:00:00 2001 From: okuji Date: Sat, 27 Mar 2004 17:02:54 +0000 Subject: [PATCH] 2004-03-27 Yoshinori K. Okuji * 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 : * 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. --- AUTHORS | 2 + ChangeLog | 95 ++++++++- INSTALL | 3 + NEWS | 2 + THANKS | 1 + configure | 11 + configure.ac | 9 +- docs/grub-md5-crypt.8 | 2 +- docs/grub-terminfo.8 | 2 +- grub/Makefile.in | 2 +- lib/device.c | 3 + stage1/stage1.S | 7 +- stage1/stage1.h | 5 +- stage2/Makefile.am | 76 ++++--- stage2/Makefile.in | 358 ++++++++++++++++++++++++++++---- stage2/asm.S | 58 +----- stage2/bios.c | 83 +++++++- stage2/builtins.c | 5 +- stage2/char_io.c | 6 + stage2/cmdline.c | 4 +- stage2/common.c | 15 +- stage2/disk_io.c | 133 ++++++++---- stage2/filesys.h | 13 +- stage2/fsys_iso9660.c | 442 ++++++++++++++++++++++++++++++++++++++++ stage2/iso9660.h | 206 +++++++++++++++++++ stage2/shared.h | 15 +- stage2/stage2.c | 4 +- stage2/start_eltorito.S | 326 +++++++++++++++++++++++++++++ 28 files changed, 1700 insertions(+), 188 deletions(-) create mode 100644 stage2/fsys_iso9660.c create mode 100644 stage2/iso9660.h create mode 100644 stage2/start_eltorito.S diff --git a/AUTHORS b/AUTHORS index 8f36d68e4..ea8cb4a1b 100644 --- a/AUTHORS +++ b/AUTHORS @@ -50,3 +50,5 @@ KB Sriram added a better detection of FAT filesystem and fixed a network device completion. Eric Kvaalen fixed a lot of problems in the GRUB manual. + +Leonid Lisovskiy added El Torito support. diff --git a/ChangeLog b/ChangeLog index d3bf5b117..cb0f8167d 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,98 @@ -2004-03-13 Yoshinori K. Okuji +2004-03-27 Yoshinori K. Okuji + * 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 : + * 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 + From Daniele Zelante : * stage2/asm.S (stop_floppy): Use INT 13, AH=00h to stop the floppy controller instead of a direct I/O. diff --git a/INSTALL b/INSTALL index bc215a8be..a5a68de82 100644 --- a/INSTALL +++ b/INSTALL @@ -216,6 +216,9 @@ operates. `--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. diff --git a/NEWS b/NEWS index eff7a952c..ecb841ca4 100644 --- a/NEWS +++ b/NEWS @@ -4,6 +4,8 @@ New: * 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. diff --git a/THANKS b/THANKS index ce6a8adc0..87b7b190b 100644 --- a/THANKS +++ b/THANKS @@ -71,6 +71,7 @@ Klaus Reichl Kristoffer Branemyr Kunihiro Ishiguro Leendert Meyer +Leonid Lisovskiy M. Meiarashi Mark Kettenis Mark Lundeberg diff --git a/configure b/configure index b6adca8c0..c26ea52cd 100644 --- a/configure +++ b/configure @@ -864,6 +864,7 @@ Optional Features: --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 @@ -5098,6 +5099,16 @@ if test x"$enable_xfs" != xno; then FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_XFS=1" fi +# Check whether --enable-iso9660 or --disable-iso9660 was given. +if test "${enable_iso9660+set}" = set; then + enableval="$enable_iso9660" + +fi; + +if test x"$enable_iso9660" != xno; then + FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_ISO9660=1" +fi + # Check whether --enable-gunzip or --disable-gunzip was given. if test "${enable_gunzip+set}" = set; then diff --git a/configure.ac b/configure.ac index 8000a76f9..8bb18b56a 100644 --- a/configure.ac +++ b/configure.ac @@ -1,5 +1,5 @@ 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 @@ -262,6 +262,13 @@ if test x"$enable_xfs" != xno; then 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 diff --git a/docs/grub-md5-crypt.8 b/docs/grub-md5-crypt.8 index 9c7aa2454..28505648c 100644 --- a/docs/grub-md5-crypt.8 +++ b/docs/grub-md5-crypt.8 @@ -1,5 +1,5 @@ .\" 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 diff --git a/docs/grub-terminfo.8 b/docs/grub-terminfo.8 index 46f6a306c..869d08c43 100644 --- a/docs/grub-terminfo.8 +++ b/docs/grub-terminfo.8 @@ -1,5 +1,5 @@ .\" 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 diff --git a/grub/Makefile.in b/grub/Makefile.in index eef7a20fc..2da761b2b 100644 --- a/grub/Makefile.in +++ b/grub/Makefile.in @@ -142,9 +142,9 @@ sharedstatedir = @sharedstatedir@ 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 \ diff --git a/lib/device.c b/lib/device.c index afddee819..3a54cef4c 100644 --- a/lib/device.c +++ b/lib/device.c @@ -108,6 +108,9 @@ get_drive_geometry (struct geometry *geom, char **map, int drive) else fd = geom->flags; + /* XXX This is the default size. */ + geom->sector_size = SECTOR_SIZE; + #if defined(__linux__) /* Linux */ { diff --git a/stage1/stage1.S b/stage1/stage1.S index cb41fe6bf..50c63e4ae 100644 --- a/stage1/stage1.S +++ b/stage1/stage1.S @@ -1,7 +1,7 @@ /* -*-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 @@ -91,8 +91,7 @@ cylinder_start: 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: @@ -138,7 +137,7 @@ real_start: * 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: diff --git a/stage1/stage1.h b/stage1/stage1.h index 402a3663e..4205a5fd8 100644 --- a/stage1/stage1.h +++ b/stage1/stage1.h @@ -1,6 +1,6 @@ /* * 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 @@ -80,4 +80,7 @@ floppy. */ #define STAGE1_BIOS_HD_FLAG 0x80 +/* The drive number of an invalid drive. */ +#define GRUB_INVALID_DRIVE 0xFF + #endif /* ! STAGE1_HEADER */ diff --git a/stage2/Makefile.am b/stage2/Makefile.am index 729a6c326..cf4dc01f2 100644 --- a/stage2/Makefile.am +++ b/stage2/Makefile.am @@ -5,9 +5,9 @@ noinst_SCRIPTS = $(TESTS) # For dist target. noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \ fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \ - imgact_aout.h 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 . @@ -16,13 +16,13 @@ INCLUDES = -I$(top_srcdir)/stage1 # The library for /sbin/grub. noinst_LIBRARIES = libgrub.a libgrub_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \ - disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_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. @@ -31,24 +31,24 @@ pkgdatadir = $(datadir)/$(PACKAGE)/$(host_cpu)-$(host_vendor) 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) @@ -56,6 +56,7 @@ PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200 START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000 NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0 PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 +START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 if NETBOOT_SUPPORT NETBOOT_FLAGS = -I$(top_srcdir)/netboot -DSUPPORT_NETBOOT=1 @@ -84,9 +85,9 @@ STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1 # For stage2 target. pre_stage2_exec_SOURCES = asm.S bios.c boot.c builtins.c char_io.c \ cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \ - fsys_fat.c fsys_ffs.c fsys_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) @@ -122,6 +123,16 @@ stage2: pre_stage2 start -rm -f stage2 cat start pre_stage2 > stage2 +start_eltorito_exec_SOURCES = start_eltorito.S +start_eltorito_exec_CCASFLAGS = $(STAGE2_COMPILE) +start_eltorito_exec_LDFLAGS = $(START_ELTORITO_LINK) + +start_eltorito_exec-start.$(OBJEXT): stage2_size.h + +stage2_eltorito: pre_stage2 start_eltorito + -rm -f stage2_eltorito + cat start_eltorito pre_stage2 > stage2_eltorito + # For e2fs_stage1_5 target. e2fs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ stage1_5.c fsys_ext2fs.c bios.c @@ -194,6 +205,15 @@ xfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \ -DNO_BLOCK_FILES=1 xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) +# For iso9660_stage1_5 target. +iso9660_stage1_5_exec_SOURCES = start_eltorito.S asm.S common.c char_io.c \ + disk_io.c stage1_5.c fsys_iso9660.c bios.c +iso9660_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ + -DNO_BLOCK_FILES=1 +iso9660_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_ISO9660=1 \ + -DNO_BLOCK_FILES=1 +iso9660_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK) + # For diskless target. diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES) diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \ diff --git a/stage2/Makefile.in b/stage2/Makefile.in index 92ac31c92..f4771eeab 100644 --- a/stage2/Makefile.in +++ b/stage2/Makefile.in @@ -151,9 +151,9 @@ noinst_SCRIPTS = $(TESTS) # For dist target. noinst_HEADERS = apic.h defs.h dir.h disk_inode.h disk_inode_ffs.h \ fat.h filesys.h freebsd.h fs.h hercules.h i386-elf.h \ - imgact_aout.h 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) @@ -163,39 +163,39 @@ INCLUDES = -I$(top_srcdir)/stage1 # The library for /sbin/grub. noinst_LIBRARIES = libgrub.a libgrub_a_SOURCES = boot.c builtins.c char_io.c cmdline.c common.c \ - disk_io.c fsys_ext2fs.c fsys_fat.c fsys_ffs.c fsys_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) @@ -203,12 +203,13 @@ PRE_STAGE2_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8200 START_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,8000 NBLOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,0 PXELOADER_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 +START_ELTORITO_LINK = -nostdlib -Wl,-N -Wl,-Ttext -Wl,7C00 @NETBOOT_SUPPORT_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 @@ -223,9 +224,9 @@ STAGE1_5_COMPILE = $(STAGE2_COMPILE) -DNO_DECOMPRESSION=1 -DSTAGE1_5=1 # For stage2 target. pre_stage2_exec_SOURCES = asm.S bios.c boot.c builtins.c char_io.c \ cmdline.c common.c console.c disk_io.c fsys_ext2fs.c \ - fsys_fat.c fsys_ffs.c fsys_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) @@ -242,6 +243,10 @@ start_exec_SOURCES = start.S start_exec_CCASFLAGS = $(STAGE2_COMPILE) start_exec_LDFLAGS = $(START_LINK) +start_eltorito_exec_SOURCES = start_eltorito.S +start_eltorito_exec_CCASFLAGS = $(STAGE2_COMPILE) +start_eltorito_exec_LDFLAGS = $(START_ELTORITO_LINK) + # For e2fs_stage1_5 target. e2fs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c disk_io.c \ stage1_5.c fsys_ext2fs.c bios.c @@ -338,6 +343,18 @@ xfs_stage1_5_exec_CCASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=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) \ @@ -371,7 +388,8 @@ am_libgrub_a_OBJECTS = libgrub_a-boot.$(OBJEXT) \ libgrub_a-cmdline.$(OBJEXT) libgrub_a-common.$(OBJEXT) \ libgrub_a-disk_io.$(OBJEXT) libgrub_a-fsys_ext2fs.$(OBJEXT) \ libgrub_a-fsys_fat.$(OBJEXT) libgrub_a-fsys_ffs.$(OBJEXT) \ - libgrub_a-fsys_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) \ @@ -382,9 +400,11 @@ EXTRA_PROGRAMS = nbloader.exec$(EXEEXT) pxeloader.exec$(EXEEXT) \ 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) \ @@ -395,9 +415,11 @@ EXTRA_PROGRAMS = nbloader.exec$(EXEEXT) pxeloader.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) \ @@ -413,6 +435,7 @@ am__objects_1 = diskless_exec-asm.$(OBJEXT) diskless_exec-bios.$(OBJEXT) \ diskless_exec-fsys_ext2fs.$(OBJEXT) \ diskless_exec-fsys_fat.$(OBJEXT) \ diskless_exec-fsys_ffs.$(OBJEXT) \ + diskless_exec-fsys_iso9660.$(OBJEXT) \ diskless_exec-fsys_jfs.$(OBJEXT) \ diskless_exec-fsys_minix.$(OBJEXT) \ diskless_exec-fsys_reiserfs.$(OBJEXT) \ @@ -458,6 +481,18 @@ am_ffs_stage1_5_exec_OBJECTS = ffs_stage1_5_exec-start.$(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) \ @@ -495,6 +530,7 @@ am_pre_stage2_exec_OBJECTS = pre_stage2_exec-asm.$(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) \ @@ -531,6 +567,11 @@ am_start_exec_OBJECTS = start_exec-start.$(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) \ @@ -570,6 +611,7 @@ am__depfiles_maybe = depfiles @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 \ @@ -601,6 +643,12 @@ am__depfiles_maybe = depfiles @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 \ @@ -616,6 +664,7 @@ am__depfiles_maybe = depfiles @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 \ @@ -644,6 +693,7 @@ am__depfiles_maybe = depfiles @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 \ @@ -682,17 +732,18 @@ CCLD = $(CC) 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 @@ -728,6 +779,9 @@ fat_stage1_5.exec$(EXEEXT): $(fat_stage1_5_exec_OBJECTS) $(fat_stage1_5_exec_DEP 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) @@ -749,6 +803,9 @@ reiserfs_stage1_5.exec$(EXEEXT): $(reiserfs_stage1_5_exec_OBJECTS) $(reiserfs_st 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) @@ -773,6 +830,7 @@ distclean-compile: @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@ @@ -804,6 +862,12 @@ distclean-compile: @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@ @@ -819,6 +883,7 @@ distclean-compile: @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@ @@ -847,6 +912,7 @@ distclean-compile: @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@ @@ -930,6 +996,18 @@ ffs_stage1_5_exec-asm.o: asm.S ffs_stage1_5_exec-asm.obj: asm.S $(CCAS) $(ffs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o ffs_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` +iso9660_stage1_5_exec-start_eltorito.o: start_eltorito.S + $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-start_eltorito.o `test -f 'start_eltorito.S' || echo '$(srcdir)/'`start_eltorito.S + +iso9660_stage1_5_exec-start_eltorito.obj: start_eltorito.S + $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-start_eltorito.obj `if test -f 'start_eltorito.S'; then $(CYGPATH_W) 'start_eltorito.S'; else $(CYGPATH_W) '$(srcdir)/start_eltorito.S'; fi` + +iso9660_stage1_5_exec-asm.o: asm.S + $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-asm.o `test -f 'asm.S' || echo '$(srcdir)/'`asm.S + +iso9660_stage1_5_exec-asm.obj: asm.S + $(CCAS) $(iso9660_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o iso9660_stage1_5_exec-asm.obj `if test -f 'asm.S'; then $(CYGPATH_W) 'asm.S'; else $(CYGPATH_W) '$(srcdir)/asm.S'; fi` + jfs_stage1_5_exec-start.o: start.S $(CCAS) $(jfs_stage1_5_exec_CCASFLAGS) $(CCASFLAGS) -c -o jfs_stage1_5_exec-start.o `test -f 'start.S' || echo '$(srcdir)/'`start.S @@ -990,6 +1068,12 @@ start_exec-start.o: 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 @@ -1234,6 +1318,28 @@ libgrub_a-fsys_ffs.obj: fsys_ffs.c @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; \ @@ -1718,6 +1824,28 @@ diskless_exec-fsys_ffs.obj: fsys_ffs.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; \ @@ -2400,6 +2528,138 @@ ffs_stage1_5_exec-bios.obj: bios.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; \ @@ -2906,6 +3166,28 @@ pre_stage2_exec-fsys_ffs.obj: fsys_ffs.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; \ @@ -3875,6 +4157,12 @@ stage2: pre_stage2 start -rm -f stage2 cat start pre_stage2 > stage2 +start_eltorito_exec-start.$(OBJEXT): stage2_size.h + +stage2_eltorito: pre_stage2 start_eltorito + -rm -f stage2_eltorito + cat start_eltorito pre_stage2 > stage2_eltorito + diskless_size.h: diskless -rm -f $@ set dummy `ls -l $^`; \ diff --git a/stage2/asm.S b/stage2/asm.S index 248490dd0..2dd07088e 100644 --- a/stage2/asm.S +++ b/stage2/asm.S @@ -938,9 +938,9 @@ realcseg: /* - * 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. */ @@ -950,6 +950,7 @@ ENTRY(biosdisk_int13_extensions) movl %esp, %ebp pushl %esi + pushl %ebx /* compute the address of disk_address_packet */ movl 0x10(%ebp), %eax @@ -960,13 +961,13 @@ ENTRY(biosdisk_int13_extensions) /* 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 */ @@ -979,6 +980,7 @@ ENTRY(biosdisk_int13_extensions) movb %dl, %al /* return value in %eax */ + popl %ebx popl %esi popl %ebp @@ -1107,52 +1109,6 @@ ENTRY(check_int13_extensions) 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) diff --git a/stage2/bios.c b/stage2/bios.c index 558034d37..2d85e40b9 100644 --- a/stage2/bios.c +++ b/stage2/bios.c @@ -1,7 +1,7 @@ /* 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 @@ -23,12 +23,11 @@ /* 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, @@ -61,7 +60,7 @@ biosdisk (int read, int drive, struct geometry *geometry, 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, @@ -81,12 +80,15 @@ biosdisk (int read, int drive, struct geometry *geometry, 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 @@ -119,6 +121,63 @@ biosdisk (int read, int drive, struct geometry *geometry, 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 @@ -131,11 +190,19 @@ get_diskinfo (int drive, struct geometry *geometry) 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 @@ -177,7 +244,7 @@ get_diskinfo (int drive, struct geometry *geometry) 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. */ @@ -216,6 +283,7 @@ get_diskinfo (int drive, struct geometry *geometry) * geometry->sectors); } geometry->total_sectors = total_sectors; + geometry->sector_size = SECTOR_SIZE; } else { @@ -242,6 +310,7 @@ get_diskinfo (int drive, struct geometry *geometry) geometry->total_sectors = (geometry->cylinders * geometry->heads * geometry->sectors); + geometry->sector_size = SECTOR_SIZE; } return 0; diff --git a/stage2/builtins.c b/stage2/builtins.c index ca8e4e4a7..9abacb272 100644 --- a/stage2/builtins.c +++ b/stage2/builtins.c @@ -1720,7 +1720,7 @@ install_func (char *arg, int flags) /* 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; @@ -2051,7 +2051,7 @@ install_func (char *arg, int flags) /* 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; @@ -3748,6 +3748,7 @@ setup_func (char *arg, int flags) {"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"}, diff --git a/stage2/char_io.c b/stage2/char_io.c index 307dd176d..f07613ba8 100644 --- a/stage2/char_io.c +++ b/stage2/char_io.c @@ -1265,3 +1265,9 @@ grub_strcpy (char *dest, const char *src) return dest; } #endif /* ! STAGE1_5 */ + +#ifndef GRUB_UTIL +# undef memcpy +/* GCC emits references to memcpy() for struct copies etc. */ +void *memcpy (void *dest, const void *src, int n) __attribute__ ((alias ("grub_memmove"))); +#endif diff --git a/stage2/cmdline.c b/stage2/cmdline.c index 50529afbb..d6ea1281c 100644 --- a/stage2/cmdline.c +++ b/stage2/cmdline.c @@ -1,7 +1,7 @@ /* 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 @@ -101,7 +101,7 @@ init_cmdline (void) /* Initialization. */ saved_drive = boot_drive; saved_partition = install_partition; - current_drive = 0xFF; + current_drive = GRUB_INVALID_DRIVE; errnum = 0; count_lines = -1; diff --git a/stage2/common.c b/stage2/common.c index 2e047c94a..09f9e31fd 100644 --- a/stage2/common.c +++ b/stage2/common.c @@ -1,7 +1,7 @@ /* 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 @@ -32,6 +32,7 @@ struct multiboot_info mbi; unsigned long saved_drive; unsigned long saved_partition; +unsigned long cdrom_drive; #ifndef STAGE1_5 unsigned long saved_mem_upper; @@ -319,6 +320,18 @@ init_bios_info (void) 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 (); } diff --git a/stage2/disk_io.c b/stage2/disk_io.c index b75c18c48..745f3f660 100644 --- a/stage2/disk_io.c +++ b/stage2/disk_io.c @@ -1,7 +1,7 @@ /* 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 @@ -72,6 +72,9 @@ struct fsys_entry fsys_table[NUM_FSYS + 1] = # 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 @@ -83,7 +86,7 @@ struct fsys_entry fsys_table[NUM_FSYS + 1] = /* 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 @@ -121,17 +124,28 @@ struct geometry buf_geom; 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 @@ -146,6 +160,7 @@ rawread (int drive, int sector, int byte_offset, int byte_len, char *buf) } buf_drive = drive; buf_track = -1; + sector_size_bits = log2 (buf_geom.sector_size); } /* Make sure that SECTOR is valid. */ @@ -155,15 +170,25 @@ rawread (int drive, int sector, int byte_offset, int byte_len, char *buf) 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 @@ -174,7 +199,7 @@ rawread (int drive, int sector, int byte_offset, int byte_len, char *buf) { read_start = sector; read_len = num_sect; - bufaddr = BUFFERADDR + byte_offset; + bufaddr = (char *) BUFFERADDR + byte_offset; } bios_err = biosdisk (BIOSDISK_READ, drive, &buf_geom, @@ -196,7 +221,7 @@ rawread (int drive, int sector, int byte_offset, int byte_len, char *buf) sector, slen, BUFFERSEG)) errnum = ERR_READ; - bufaddr = BUFFERADDR + byte_offset; + bufaddr = (char *) BUFFERADDR + byte_offset; } } else @@ -213,7 +238,8 @@ rawread (int drive, int sector, int byte_offset, int byte_len, char *buf) { /* 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 { @@ -224,8 +250,8 @@ rawread (int drive, int sector, int byte_offset, int byte_len, char *buf) } } - 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. @@ -233,28 +259,27 @@ rawread (int drive, int sector, int byte_offset, int byte_len, char *buf) 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; } @@ -371,7 +396,8 @@ sane_partition (void) 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) @@ -918,8 +944,8 @@ set_device (char *device) 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; @@ -949,10 +975,12 @@ set_device (char *device) { 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 @@ -968,26 +996,31 @@ set_device (char *device) 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; + } } } @@ -1145,7 +1178,7 @@ setup_part (char *filename) if (! (filename = set_device (filename))) { - current_drive = 0xFF; + current_drive = GRUB_INVALID_DRIVE; return 0; } @@ -1162,7 +1195,7 @@ setup_part (char *filename) { if ((filename = set_device (filename)) == 0) { - current_drive = 0xFF; + current_drive = GRUB_INVALID_DRIVE; return 0; } # ifndef NO_BLOCK_FILES @@ -1337,9 +1370,12 @@ print_completions (int is_filename, int is_completion) 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); @@ -1359,11 +1395,20 @@ print_completions (int is_filename, int is_completion) } } } + + 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 */ diff --git a/stage2/filesys.h b/stage2/filesys.h index c9fbd1e7c..801b3deff 100644 --- a/stage2/filesys.h +++ b/stage2/filesys.h @@ -1,7 +1,7 @@ /* 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 @@ -105,11 +105,20 @@ void tftp_close (void); #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 */ diff --git a/stage2/fsys_iso9660.c b/stage2/fsys_iso9660.c new file mode 100644 index 000000000..d83feed28 --- /dev/null +++ b/stage2/fsys_iso9660.c @@ -0,0 +1,442 @@ +/* + * ISO 9660 filesystem backend for GRUB (GRand Unified Bootloader) + * including Rock Ridge Extensions support + * + * Copyright (C) 1998, 1999 Kousuke Takai + * + * 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 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 */ diff --git a/stage2/iso9660.h b/stage2/iso9660.h new file mode 100644 index 000000000..4a6a8cc60 --- /dev/null +++ b/stage2/iso9660.h @@ -0,0 +1,206 @@ +/* + * ISO 9660 filesystem backend for GRUB (GRand Unified Bootloader) + * including Rock Ridge Extensions support + * + * Copyright (C) 1998, 1999 Kousuke Takai + * + * 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< ", new_heap, NEW_HEAPSIZE + 1, 0, 1)) diff --git a/stage2/start_eltorito.S b/stage2/start_eltorito.S new file mode 100644 index 000000000..99a710997 --- /dev/null +++ b/stage2/start_eltorito.S @@ -0,0 +1,326 @@ +/* + * 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!!! */