JFS and XFS support is added.
This commit is contained in:
parent
36fd6bd0fa
commit
d619861976
21 changed files with 6269 additions and 1781 deletions
2
AUTHORS
2
AUTHORS
|
@ -37,3 +37,5 @@ Christoph Plattner added support for Net Boot Image Proposal.
|
|||
Frank Mehnert added support for hercules console.
|
||||
|
||||
Kristoffer Branemyr added VSTa filesystem support.
|
||||
|
||||
Serguei Tzukanov added JFS and XFS support.
|
||||
|
|
45
ChangeLog
45
ChangeLog
|
@ -1,3 +1,48 @@
|
|||
2001-10-27 Yoshinori K. Okuji <okuji@gnu.org>
|
||||
|
||||
JFS and XFS support is added.
|
||||
|
||||
From Serguei Tzukanov <tzukanov@narod.ru>:
|
||||
* configure.in (--disable-jfs): New option.
|
||||
(--disable-xfs): Likewise.
|
||||
* stage2/Makefile.am (noinst_HEADERS): Added jfs.h and xfs.h.
|
||||
(libgrub_a_SOURCES): Added fsys_jfs.c and fsys_xfs.c.
|
||||
(libgrub_a_CFLAGS): Added -DFSYS_JFS=1 and -DFSYS_XFS=1.
|
||||
(pkgdata_DATA): Added jfs_stage1_5 and xfs_stage1_5.
|
||||
(noinst_PROGRAMS): Added jfs_stage1_5.exec and
|
||||
xfs_stage1_5.exec.
|
||||
(pre_stage2_exec_SOURCES): Added fsys_jfs.c and fsys_xfs.c.
|
||||
(jfs_stage1_5_exec_SOURCES): New variable.
|
||||
(jfs_stage1_5_exec_CFLAGS): Likewise.
|
||||
(jfs_stage1_5_exec_ASFLAGS): Likewise.
|
||||
(jfs_stage1_5_exec_LDFLAGS): Likewise.
|
||||
(xfs_stage1_5_exec_SOURCES): Likewise.
|
||||
(xfs_stage1_5_exec_CFLAGS): Likewise.
|
||||
(xfs_stage1_5_exec_ASFLAGS): Likewise.
|
||||
(xfs_stage1_5_exec_LDFLAGS): Likewise.
|
||||
* stage2/builtins.c (setup_func): Add items for JFS and XFS into
|
||||
STAGE1_5_MAP.
|
||||
* stage2/disk_io.c (fsys_table): Added entries for JFS and XFS.
|
||||
* stage2/filesys.h [FSYS_JFS] (FSYS_JFS_NUM): Set to 1.
|
||||
[FSYS_JFS] (jfs_mount): Declared.
|
||||
[FSYS_JFS] (jfs_read): Likewise.
|
||||
[FSYS_JFS] (jfs_dir): Likewise.
|
||||
[FSYS_JFS] (jfs_embed): Likewise.
|
||||
[!FSYS_JFS] (FSYS_JFS_NUM): Set to 0.
|
||||
[FSYS_XFS] (FSYS_XFS_NUM): Set to 1.
|
||||
[FSYS_XFS] (xfs_mount): Declared.
|
||||
[FSYS_XFS] (xfs_read): Likewise.
|
||||
[FSYS_XFS] (xfs_dir): Likewise.
|
||||
(NUM_FSYS): Added FSYS_JFS_NUM and FSYS_XFS_NUM.
|
||||
* stage2/shared.h (STAGE2_ID_JFS_STAGE1_5): New macro.
|
||||
(STAGE2_ID_XFS_STAGE1_5): Likewise.
|
||||
[FSYS_JFS] (STAGE2_ID): Set to STAGE2_ID_JFS_STAGE1_5.
|
||||
[FSYS_XFS] (STAGE2_ID): Set to STAGE2_ID_XFS_STAGE1_5.
|
||||
* stage2/fsys_jfs.c: New file.
|
||||
* stage2/fsys_xfs.c: Likewise.
|
||||
* stage2/jfs.h: Likewise.
|
||||
* stage2/xfs.h: Likewise.
|
||||
|
||||
2001-10-27 Yoshinori K. Okuji <okuji@gnu.org>
|
||||
|
||||
* stage2/apm.S: Always disconnect from APM. Written by Erich
|
||||
|
|
|
@ -103,9 +103,8 @@ RECURSIVE_TARGETS = info-recursive dvi-recursive install-info-recursive \
|
|||
uninstall-recursive check-recursive installcheck-recursive
|
||||
DIST_COMMON = README ./stamp-h.in AUTHORS COPYING ChangeLog INSTALL \
|
||||
Makefile.am Makefile.in NEWS THANKS TODO acconfig.h \
|
||||
acinclude.m4 aclocal.m4 compile config.guess config.h.in \
|
||||
config.sub configure configure.in depcomp install-sh missing \
|
||||
mkinstalldirs
|
||||
acinclude.m4 aclocal.m4 config.guess config.h.in config.sub \
|
||||
configure configure.in depcomp install-sh missing mkinstalldirs
|
||||
DIST_SUBDIRS = $(SUBDIRS)
|
||||
all: config.h
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-recursive
|
||||
|
|
5
NEWS
5
NEWS
|
@ -1,5 +1,10 @@
|
|||
NEWS - list of user-visible changes between releases of GRUB
|
||||
|
||||
New in 0.91:
|
||||
* Support for Linux DAC960 is added.
|
||||
* JFS and XFS support is added.
|
||||
* Important bugfixes are made for ReiserFS, APM, TFTP, etc.
|
||||
|
||||
New in 0.90 - 2001-07-11:
|
||||
* The command "setkey" resets key mappings, when no argument is
|
||||
specified.
|
||||
|
|
6
README
6
README
|
@ -4,9 +4,9 @@ personal computer BIOSes:
|
|||
|
||||
- provides fully-featured command line and graphical interfaces
|
||||
- recognizes fdisk partitions and BSD disklabels
|
||||
- can dynamically read Linux ext2fs and ReiserFS, BSD ufs, MS-DOS
|
||||
FAT16 and FAT32, Minix fs, and VSTa fs filesystems, plus hardcoded
|
||||
blocklists
|
||||
- can dynamically read Linux ext2fs, ReiserFS, JFS and XFS, BSD ufs,
|
||||
MS-DOS FAT16 and FAT32, Minix fs, and VSTa fs filesystems, plus
|
||||
hardcoded blocklists
|
||||
- can boot Multiboot-compliant kernels (such as GNU Mach), as well
|
||||
as standard Linux and *BSD kernels
|
||||
|
||||
|
|
1
THANKS
1
THANKS
|
@ -70,6 +70,7 @@ Ralf Medow <ralf.medow@t-online.de>
|
|||
Ramon van Handel <vhandel@chem.vu.nl>
|
||||
Roderich Schupp <rsch@ExperTeam.de>
|
||||
Rogelio M. Serrano Jr. <rogelio@victorio.com>
|
||||
Serguei Tzukanov <tzukanov@narod.ru>
|
||||
Stefan Ondrejicka <ondrej@idata.sk>
|
||||
Stephen Early <steve@greenend.org.uk>
|
||||
Takehiro Suzuki <takehiro@coral.ocn.ne.jp>
|
||||
|
|
2
TODO
2
TODO
|
@ -80,7 +80,7 @@ Things that may be done anytime:
|
|||
|
||||
* Add ISA PnP support.
|
||||
|
||||
* Add more filesystems support (XFS, NTFS, etc.)
|
||||
* Add more filesystems support (NTFS, etc.)
|
||||
|
||||
* Add more remote console support (parallel and net).
|
||||
|
||||
|
|
99
compile
Normal file
99
compile
Normal file
|
@ -0,0 +1,99 @@
|
|||
#! /bin/sh
|
||||
|
||||
# Wrapper for compilers which do not understand `-c -o'.
|
||||
|
||||
# Copyright 1999, 2000 Free Software Foundation, Inc.
|
||||
# Written by Tom Tromey <tromey@cygnus.com>.
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
# Usage:
|
||||
# compile PROGRAM [ARGS]...
|
||||
# `-o FOO.o' is removed from the args passed to the actual compile.
|
||||
|
||||
prog=$1
|
||||
shift
|
||||
|
||||
ofile=
|
||||
cfile=
|
||||
args=
|
||||
while test $# -gt 0; do
|
||||
case "$1" in
|
||||
-o)
|
||||
# configure might choose to run compile as `compile cc -o foo foo.c'.
|
||||
# So we do something ugly here.
|
||||
ofile=$2
|
||||
shift
|
||||
case "$ofile" in
|
||||
*.o | *.obj)
|
||||
;;
|
||||
*)
|
||||
args="$args -o $ofile"
|
||||
ofile=
|
||||
;;
|
||||
esac
|
||||
;;
|
||||
*.c)
|
||||
cfile=$1
|
||||
args="$args $1"
|
||||
;;
|
||||
*)
|
||||
args="$args $1"
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
if test -z "$ofile" || test -z "$cfile"; then
|
||||
# If no `-o' option was seen then we might have been invoked from a
|
||||
# pattern rule where we don't need one. That is ok -- this is a
|
||||
# normal compilation that the losing compiler can handle. If no
|
||||
# `.c' file was seen then we are probably linking. That is also
|
||||
# ok.
|
||||
exec "$prog" $args
|
||||
fi
|
||||
|
||||
# Name of file we expect compiler to create.
|
||||
cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
|
||||
|
||||
# Create the lock directory.
|
||||
# Note: use `[/.-]' here to ensure that we don't use the same name
|
||||
# that we are using for the .o file. Also, base the name on the expected
|
||||
# object file name, since that is what matters with a parallel build.
|
||||
lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d
|
||||
while true; do
|
||||
if mkdir $lockdir > /dev/null 2>&1; then
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
# FIXME: race condition here if user kills between mkdir and trap.
|
||||
trap "rmdir $lockdir; exit 1" 1 2 15
|
||||
|
||||
# Run the compile.
|
||||
"$prog" $args
|
||||
status=$?
|
||||
|
||||
if test -f "$cofile"; then
|
||||
mv "$cofile" "$ofile"
|
||||
fi
|
||||
|
||||
rmdir $lockdir
|
||||
exit $status
|
49
config.h.in
49
config.h.in
|
@ -1,4 +1,6 @@
|
|||
/* config.h.in. Generated automatically from configure.in by autoheader. */
|
||||
/* This file is still needed because the defines below are
|
||||
AC_DEFINEd in more than one place. */
|
||||
|
||||
/* Defined if you have a curses library (ncurses preferred). */
|
||||
#undef HAVE_LIBCURSES
|
||||
|
@ -33,36 +35,35 @@
|
|||
/* Defined if the user specified --enable-auto-linux-mem-opt. */
|
||||
#undef AUTO_LINUX_MEM_OPT
|
||||
|
||||
/* Define if you have the <curses.h> header file. */
|
||||
#undef HAVE_CURSES_H
|
||||
|
||||
/* Define if you have the <ncurses.h> header file. */
|
||||
#undef HAVE_NCURSES_H
|
||||
|
||||
/* Define if you have the <ncurses/curses.h> header file. */
|
||||
#undef HAVE_NCURSES_CURSES_H
|
||||
|
||||
/* Define if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
||||
/* Define if C symbols get an underscore after compilation */
|
||||
#undef HAVE_ASM_USCORE
|
||||
|
||||
/* Define it to "addr32" or "addr32;" to make GAS happy */
|
||||
#undef ADDR32
|
||||
|
||||
/* Define it to "data32" or "data32;" to make GAS happy */
|
||||
#undef DATA32
|
||||
|
||||
/* Define if C symbols get an underscore after compilation */
|
||||
#undef HAVE_ASM_USCORE
|
||||
|
||||
/* Define if you have the <curses.h> header file. */
|
||||
#undef HAVE_CURSES_H
|
||||
|
||||
/* Define if you have the <ncurses/curses.h> header file. */
|
||||
#undef HAVE_NCURSES_CURSES_H
|
||||
|
||||
/* Define if you have the <ncurses.h> header file. */
|
||||
#undef HAVE_NCURSES_H
|
||||
|
||||
/* Define if opendisk() in -lutil can be used */
|
||||
#undef HAVE_OPENDISK
|
||||
|
||||
/* Define if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Name of package */
|
||||
#undef PACKAGE
|
||||
|
||||
/* Version number of package */
|
||||
#undef VERSION
|
||||
|
|
14
configure.in
14
configure.in
|
@ -228,6 +228,20 @@ if test x"$enable_vstafs" != xno; then
|
|||
FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_VSTAFS=1"
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(jfs,
|
||||
[ --disable-jfs disable IBM JFS support in Stage 2])
|
||||
|
||||
if test x"$enable_jfs" != xno; then
|
||||
FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_JFS=1"
|
||||
fi
|
||||
|
||||
AC_ARG_ENABLE(xfs,
|
||||
[ --disable-xfs disable SGI XFS support in Stage 2])
|
||||
|
||||
if test x"$enable_xfs" != xno; then
|
||||
FSYS_CFLAGS="$FSYS_CFLAGS -DFSYS_XFS=1"
|
||||
fi
|
||||
|
||||
dnl AC_ARG_ENABLE(tftp,
|
||||
dnl [ --enable-tftp enable TFTP support in Stage 2])
|
||||
dnl
|
||||
|
|
|
@ -5,8 +5,8 @@ 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 mb_header.h mb_info.h md5.h pc_slice.h serial.h \
|
||||
shared.h smp-imps.h nbi.h vstafs.h
|
||||
imgact_aout.h jfs.h mb_header.h mb_info.h md5.h pc_slice.h \
|
||||
serial.h shared.h smp-imps.h nbi.h vstafs.h xfs.h
|
||||
EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS)
|
||||
|
||||
# For <stage1.h>.
|
||||
|
@ -16,11 +16,12 @@ INCLUDES = -I$(top_srcdir)/stage1
|
|||
noinst_LIBRARIES = libgrub.a
|
||||
libgrub_a_SOURCES = boot.c builtins.c common.c char_io.c cmdline.c \
|
||||
disk_io.c gunzip.c fsys_ffs.c fsys_ext2fs.c fsys_fat.c \
|
||||
fsys_minix.c fsys_reiserfs.c fsys_vstafs.c stage2.c md5.c
|
||||
fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_vstafs.c \
|
||||
fsys_xfs.c stage2.c md5.c
|
||||
libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \
|
||||
-DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \
|
||||
-DFSYS_MINIX=1 -DFSYS_REISERFS=1 -DFSYS_VSTAFS=1 \
|
||||
-DUSE_MD5_PASSWORDS=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.
|
||||
|
@ -30,19 +31,23 @@ EXTRA_PROGRAMS = nbloader.exec pxeloader.exec diskless.exec
|
|||
|
||||
if DISKLESS_SUPPORT
|
||||
pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \
|
||||
minix_stage1_5 reiserfs_stage1_5 vstafs_stage1_5 nbgrub pxegrub
|
||||
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 minix_stage1_5.exec \
|
||||
reiserfs_stage1_5.exec vstafs_stage1_5.exec nbloader.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
|
||||
else
|
||||
pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \
|
||||
minix_stage1_5 reiserfs_stage1_5 vstafs_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 minix_stage1_5.exec \
|
||||
reiserfs_stage1_5.exec vstafs_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
|
||||
endif
|
||||
MOSTLYCLEANFILES = $(noinst_PROGRAMS)
|
||||
|
||||
|
@ -78,8 +83,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 common.c \
|
||||
char_io.c cmdline.c disk_io.c gunzip.c fsys_ext2fs.c \
|
||||
fsys_fat.c fsys_ffs.c fsys_minix.c fsys_reiserfs.c \
|
||||
fsys_vstafs.c hercules.c serial.c smp-imps.c stage2.c md5.c
|
||||
fsys_fat.c fsys_ffs.c fsys_jfs.c fsys_minix.c fsys_reiserfs.c \
|
||||
fsys_vstafs.c fsys_xfs.c hercules.c serial.c smp-imps.c \
|
||||
stage2.c md5.c
|
||||
pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
|
||||
pre_stage2_exec_ASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
|
||||
pre_stage2_exec_LDFLAGS = $(PRE_STAGE2_LINK)
|
||||
|
@ -169,6 +175,24 @@ vstafs_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \
|
|||
-DNO_BLOCK_FILES=1
|
||||
vstafs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
|
||||
|
||||
# For jfs_stage1_5 target.
|
||||
jfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
|
||||
disk_io.c stage1_5.c fsys_jfs.c bios.c
|
||||
jfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
|
||||
-DNO_BLOCK_FILES=1
|
||||
jfs_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
|
||||
-DNO_BLOCK_FILES=1
|
||||
jfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
|
||||
|
||||
# For xfs_stage1_5 target.
|
||||
xfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
|
||||
disk_io.c stage1_5.c fsys_xfs.c bios.c
|
||||
xfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
|
||||
-DNO_BLOCK_FILES=1
|
||||
xfs_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
|
||||
-DNO_BLOCK_FILES=1
|
||||
xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
|
||||
|
||||
# For diskless target.
|
||||
diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES)
|
||||
diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \
|
||||
|
|
|
@ -96,8 +96,8 @@ 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 mb_header.h mb_info.h md5.h pc_slice.h serial.h \
|
||||
shared.h smp-imps.h nbi.h vstafs.h
|
||||
imgact_aout.h jfs.h mb_header.h mb_info.h md5.h pc_slice.h \
|
||||
serial.h shared.h smp-imps.h nbi.h vstafs.h xfs.h
|
||||
|
||||
EXTRA_DIST = setjmp.S apm.S $(noinst_SCRIPTS)
|
||||
|
||||
|
@ -108,33 +108,36 @@ INCLUDES = -I$(top_srcdir)/stage1
|
|||
noinst_LIBRARIES = libgrub.a
|
||||
libgrub_a_SOURCES = boot.c builtins.c common.c char_io.c cmdline.c \
|
||||
disk_io.c gunzip.c fsys_ffs.c fsys_ext2fs.c fsys_fat.c \
|
||||
fsys_minix.c fsys_reiserfs.c fsys_vstafs.c stage2.c md5.c
|
||||
fsys_jfs.c fsys_minix.c fsys_reiserfs.c fsys_vstafs.c \
|
||||
fsys_xfs.c stage2.c md5.c
|
||||
|
||||
libgrub_a_CFLAGS = $(GRUB_CFLAGS) -I$(top_srcdir)/lib \
|
||||
-DGRUB_UTIL=1 -DFSYS_EXT2FS=1 -DFSYS_FAT=1 -DFSYS_FFS=1 \
|
||||
-DFSYS_MINIX=1 -DFSYS_REISERFS=1 -DFSYS_VSTAFS=1 \
|
||||
-DUSE_MD5_PASSWORDS=1 \
|
||||
-DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 -fwritable-strings
|
||||
-DFSYS_JFS=1 -DFSYS_MINIX=1 -DFSYS_REISERFS=1 -DFSYS_VSTAFS=1
|
||||
|
||||
|
||||
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@ minix_stage1_5 reiserfs_stage1_5 vstafs_stage1_5 nbgrub pxegrub
|
||||
@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_FALSE@pkgdata_DATA = stage2 e2fs_stage1_5 fat_stage1_5 ffs_stage1_5 \
|
||||
@DISKLESS_SUPPORT_FALSE@ minix_stage1_5 reiserfs_stage1_5 vstafs_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_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 minix_stage1_5.exec \
|
||||
@DISKLESS_SUPPORT_TRUE@ reiserfs_stage1_5.exec vstafs_stage1_5.exec nbloader.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_FALSE@noinst_PROGRAMS = pre_stage2.exec start.exec e2fs_stage1_5.exec \
|
||||
@DISKLESS_SUPPORT_FALSE@ fat_stage1_5.exec ffs_stage1_5.exec minix_stage1_5.exec \
|
||||
@DISKLESS_SUPPORT_FALSE@ reiserfs_stage1_5.exec vstafs_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
|
||||
|
||||
MOSTLYCLEANFILES = $(noinst_PROGRAMS)
|
||||
|
||||
|
@ -162,8 +165,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 common.c \
|
||||
char_io.c cmdline.c disk_io.c gunzip.c fsys_ext2fs.c \
|
||||
fsys_fat.c fsys_ffs.c fsys_minix.c fsys_reiserfs.c \
|
||||
fsys_vstafs.c hercules.c serial.c smp-imps.c stage2.c md5.c
|
||||
fsys_fat.c fsys_ffs.c fsys_jfs.c fsys_minix.c fsys_reiserfs.c \
|
||||
fsys_vstafs.c fsys_xfs.c hercules.c serial.c smp-imps.c \
|
||||
stage2.c md5.c
|
||||
|
||||
pre_stage2_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
|
||||
pre_stage2_exec_ASFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS)
|
||||
|
@ -252,6 +256,30 @@ vstafs_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_VSTAFS=1 \
|
|||
|
||||
vstafs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
|
||||
|
||||
# For jfs_stage1_5 target.
|
||||
jfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
|
||||
disk_io.c stage1_5.c fsys_jfs.c bios.c
|
||||
|
||||
jfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
|
||||
-DNO_BLOCK_FILES=1
|
||||
|
||||
jfs_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_JFS=1 \
|
||||
-DNO_BLOCK_FILES=1
|
||||
|
||||
jfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
|
||||
|
||||
# For xfs_stage1_5 target.
|
||||
xfs_stage1_5_exec_SOURCES = start.S asm.S common.c char_io.c \
|
||||
disk_io.c stage1_5.c fsys_xfs.c bios.c
|
||||
|
||||
xfs_stage1_5_exec_CFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
|
||||
-DNO_BLOCK_FILES=1
|
||||
|
||||
xfs_stage1_5_exec_ASFLAGS = $(STAGE1_5_COMPILE) -DFSYS_XFS=1 \
|
||||
-DNO_BLOCK_FILES=1
|
||||
|
||||
xfs_stage1_5_exec_LDFLAGS = $(STAGE1_5_LINK)
|
||||
|
||||
# For diskless target.
|
||||
diskless_exec_SOURCES = $(pre_stage2_exec_SOURCES)
|
||||
diskless_exec_CFLAGS = $(STAGE2_COMPILE) $(FSYS_CFLAGS) \
|
||||
|
@ -285,10 +313,11 @@ am_libgrub_a_OBJECTS = libgrub_a-boot.$(OBJEXT) \
|
|||
libgrub_a-char_io.$(OBJEXT) libgrub_a-cmdline.$(OBJEXT) \
|
||||
libgrub_a-disk_io.$(OBJEXT) libgrub_a-gunzip.$(OBJEXT) \
|
||||
libgrub_a-fsys_ffs.$(OBJEXT) libgrub_a-fsys_ext2fs.$(OBJEXT) \
|
||||
libgrub_a-fsys_fat.$(OBJEXT) libgrub_a-fsys_minix.$(OBJEXT) \
|
||||
libgrub_a-fsys_fat.$(OBJEXT) libgrub_a-fsys_jfs.$(OBJEXT) \
|
||||
libgrub_a-fsys_minix.$(OBJEXT) \
|
||||
libgrub_a-fsys_reiserfs.$(OBJEXT) \
|
||||
libgrub_a-fsys_vstafs.$(OBJEXT) libgrub_a-stage2.$(OBJEXT) \
|
||||
libgrub_a-md5.$(OBJEXT)
|
||||
libgrub_a-fsys_vstafs.$(OBJEXT) libgrub_a-fsys_xfs.$(OBJEXT) \
|
||||
libgrub_a-stage2.$(OBJEXT) libgrub_a-md5.$(OBJEXT)
|
||||
libgrub_a_OBJECTS = $(am_libgrub_a_OBJECTS)
|
||||
EXTRA_PROGRAMS = nbloader.exec$(EXEEXT) pxeloader.exec$(EXEEXT) \
|
||||
diskless.exec$(EXEEXT)
|
||||
|
@ -297,9 +326,11 @@ EXTRA_PROGRAMS = nbloader.exec$(EXEEXT) pxeloader.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@ jfs_stage1_5.exec$(EXEEXT) \
|
||||
@DISKLESS_SUPPORT_TRUE@ minix_stage1_5.exec$(EXEEXT) \
|
||||
@DISKLESS_SUPPORT_TRUE@ reiserfs_stage1_5.exec$(EXEEXT) \
|
||||
@DISKLESS_SUPPORT_TRUE@ vstafs_stage1_5.exec$(EXEEXT) \
|
||||
@DISKLESS_SUPPORT_TRUE@ xfs_stage1_5.exec$(EXEEXT) \
|
||||
@DISKLESS_SUPPORT_TRUE@ nbloader.exec$(EXEEXT) \
|
||||
@DISKLESS_SUPPORT_TRUE@ pxeloader.exec$(EXEEXT) \
|
||||
@DISKLESS_SUPPORT_TRUE@ diskless.exec$(EXEEXT)
|
||||
|
@ -308,9 +339,11 @@ EXTRA_PROGRAMS = nbloader.exec$(EXEEXT) pxeloader.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@ jfs_stage1_5.exec$(EXEEXT) \
|
||||
@DISKLESS_SUPPORT_FALSE@ minix_stage1_5.exec$(EXEEXT) \
|
||||
@DISKLESS_SUPPORT_FALSE@ reiserfs_stage1_5.exec$(EXEEXT) \
|
||||
@DISKLESS_SUPPORT_FALSE@ vstafs_stage1_5.exec$(EXEEXT)
|
||||
@DISKLESS_SUPPORT_FALSE@ vstafs_stage1_5.exec$(EXEEXT) \
|
||||
@DISKLESS_SUPPORT_FALSE@ xfs_stage1_5.exec$(EXEEXT)
|
||||
PROGRAMS = $(noinst_PROGRAMS)
|
||||
|
||||
am_diskless_exec_OBJECTS = diskless_exec-asm.$(OBJEXT) \
|
||||
|
@ -321,9 +354,11 @@ am_diskless_exec_OBJECTS = diskless_exec-asm.$(OBJEXT) \
|
|||
diskless_exec-fsys_ext2fs.$(OBJEXT) \
|
||||
diskless_exec-fsys_fat.$(OBJEXT) \
|
||||
diskless_exec-fsys_ffs.$(OBJEXT) \
|
||||
diskless_exec-fsys_jfs.$(OBJEXT) \
|
||||
diskless_exec-fsys_minix.$(OBJEXT) \
|
||||
diskless_exec-fsys_reiserfs.$(OBJEXT) \
|
||||
diskless_exec-fsys_vstafs.$(OBJEXT) \
|
||||
diskless_exec-fsys_xfs.$(OBJEXT) \
|
||||
diskless_exec-hercules.$(OBJEXT) diskless_exec-serial.$(OBJEXT) \
|
||||
diskless_exec-smp-imps.$(OBJEXT) diskless_exec-stage2.$(OBJEXT) \
|
||||
diskless_exec-md5.$(OBJEXT)
|
||||
|
@ -362,6 +397,17 @@ 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_jfs_stage1_5_exec_OBJECTS = jfs_stage1_5_exec-start.$(OBJEXT) \
|
||||
jfs_stage1_5_exec-asm.$(OBJEXT) \
|
||||
jfs_stage1_5_exec-common.$(OBJEXT) \
|
||||
jfs_stage1_5_exec-char_io.$(OBJEXT) \
|
||||
jfs_stage1_5_exec-disk_io.$(OBJEXT) \
|
||||
jfs_stage1_5_exec-stage1_5.$(OBJEXT) \
|
||||
jfs_stage1_5_exec-fsys_jfs.$(OBJEXT) \
|
||||
jfs_stage1_5_exec-bios.$(OBJEXT)
|
||||
jfs_stage1_5_exec_OBJECTS = $(am_jfs_stage1_5_exec_OBJECTS)
|
||||
jfs_stage1_5_exec_LDADD = $(LDADD)
|
||||
jfs_stage1_5_exec_DEPENDENCIES =
|
||||
am_minix_stage1_5_exec_OBJECTS = minix_stage1_5_exec-start.$(OBJEXT) \
|
||||
minix_stage1_5_exec-asm.$(OBJEXT) \
|
||||
minix_stage1_5_exec-common.$(OBJEXT) \
|
||||
|
@ -388,9 +434,11 @@ 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_jfs.$(OBJEXT) \
|
||||
pre_stage2_exec-fsys_minix.$(OBJEXT) \
|
||||
pre_stage2_exec-fsys_reiserfs.$(OBJEXT) \
|
||||
pre_stage2_exec-fsys_vstafs.$(OBJEXT) \
|
||||
pre_stage2_exec-fsys_xfs.$(OBJEXT) \
|
||||
pre_stage2_exec-hercules.$(OBJEXT) \
|
||||
pre_stage2_exec-serial.$(OBJEXT) \
|
||||
pre_stage2_exec-smp-imps.$(OBJEXT) \
|
||||
|
@ -430,6 +478,17 @@ am_vstafs_stage1_5_exec_OBJECTS = vstafs_stage1_5_exec-start.$(OBJEXT) \
|
|||
vstafs_stage1_5_exec_OBJECTS = $(am_vstafs_stage1_5_exec_OBJECTS)
|
||||
vstafs_stage1_5_exec_LDADD = $(LDADD)
|
||||
vstafs_stage1_5_exec_DEPENDENCIES =
|
||||
am_xfs_stage1_5_exec_OBJECTS = xfs_stage1_5_exec-start.$(OBJEXT) \
|
||||
xfs_stage1_5_exec-asm.$(OBJEXT) \
|
||||
xfs_stage1_5_exec-common.$(OBJEXT) \
|
||||
xfs_stage1_5_exec-char_io.$(OBJEXT) \
|
||||
xfs_stage1_5_exec-disk_io.$(OBJEXT) \
|
||||
xfs_stage1_5_exec-stage1_5.$(OBJEXT) \
|
||||
xfs_stage1_5_exec-fsys_xfs.$(OBJEXT) \
|
||||
xfs_stage1_5_exec-bios.$(OBJEXT)
|
||||
xfs_stage1_5_exec_OBJECTS = $(am_xfs_stage1_5_exec_OBJECTS)
|
||||
xfs_stage1_5_exec_LDADD = $(LDADD)
|
||||
xfs_stage1_5_exec_DEPENDENCIES =
|
||||
SCRIPTS = $(noinst_SCRIPTS)
|
||||
|
||||
|
||||
|
@ -449,9 +508,11 @@ depcomp = $(SHELL) $(top_srcdir)/depcomp
|
|||
@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_jfs.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/diskless_exec-fsys_minix.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/diskless_exec-fsys_reiserfs.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/diskless_exec-fsys_vstafs.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/diskless_exec-fsys_xfs.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/diskless_exec-gunzip.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/diskless_exec-hercules.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/diskless_exec-md5.Po \
|
||||
|
@ -476,6 +537,12 @@ depcomp = $(SHELL) $(top_srcdir)/depcomp
|
|||
@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)/jfs_stage1_5_exec-bios.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/jfs_stage1_5_exec-char_io.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/jfs_stage1_5_exec-common.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/jfs_stage1_5_exec-disk_io.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/libgrub_a-boot.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/libgrub_a-builtins.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/libgrub_a-char_io.Po \
|
||||
|
@ -485,9 +552,11 @@ depcomp = $(SHELL) $(top_srcdir)/depcomp
|
|||
@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_jfs.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/libgrub_a-fsys_minix.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/libgrub_a-fsys_reiserfs.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/libgrub_a-fsys_vstafs.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/libgrub_a-fsys_xfs.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/libgrub_a-gunzip.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/libgrub_a-md5.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/libgrub_a-stage2.Po \
|
||||
|
@ -507,9 +576,11 @@ depcomp = $(SHELL) $(top_srcdir)/depcomp
|
|||
@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_jfs.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/pre_stage2_exec-fsys_minix.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/pre_stage2_exec-fsys_vstafs.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/pre_stage2_exec-fsys_xfs.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/pre_stage2_exec-gunzip.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/pre_stage2_exec-hercules.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/pre_stage2_exec-md5.Po \
|
||||
|
@ -527,7 +598,13 @@ depcomp = $(SHELL) $(top_srcdir)/depcomp
|
|||
@AMDEP_TRUE@ $(DEPDIR)/vstafs_stage1_5_exec-common.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/vstafs_stage1_5_exec-disk_io.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Po
|
||||
@AMDEP_TRUE@ $(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/xfs_stage1_5_exec-bios.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/xfs_stage1_5_exec-char_io.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/xfs_stage1_5_exec-common.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/xfs_stage1_5_exec-disk_io.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po \
|
||||
@AMDEP_TRUE@ $(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po
|
||||
ASCOMPILE = $(AS) $(AM_ASFLAGS) $(ASFLAGS)
|
||||
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
|
||||
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
|
||||
|
@ -536,16 +613,17 @@ LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
|
|||
CFLAGS = @CFLAGS@
|
||||
DIST_SOURCES = $(libgrub_a_SOURCES) $(diskless_exec_SOURCES) \
|
||||
$(e2fs_stage1_5_exec_SOURCES) $(fat_stage1_5_exec_SOURCES) \
|
||||
$(ffs_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)
|
||||
$(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)
|
||||
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) $(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)
|
||||
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)
|
||||
|
||||
all: $(BUILT_SOURCES)
|
||||
$(MAKE) $(AM_MAKEFLAGS) all-am
|
||||
|
@ -574,9 +652,11 @@ libgrub_a-gunzip.$(OBJEXT): gunzip.c
|
|||
libgrub_a-fsys_ffs.$(OBJEXT): fsys_ffs.c
|
||||
libgrub_a-fsys_ext2fs.$(OBJEXT): fsys_ext2fs.c
|
||||
libgrub_a-fsys_fat.$(OBJEXT): fsys_fat.c
|
||||
libgrub_a-fsys_jfs.$(OBJEXT): fsys_jfs.c
|
||||
libgrub_a-fsys_minix.$(OBJEXT): fsys_minix.c
|
||||
libgrub_a-fsys_reiserfs.$(OBJEXT): fsys_reiserfs.c
|
||||
libgrub_a-fsys_vstafs.$(OBJEXT): fsys_vstafs.c
|
||||
libgrub_a-fsys_xfs.$(OBJEXT): fsys_xfs.c
|
||||
libgrub_a-stage2.$(OBJEXT): stage2.c
|
||||
libgrub_a-md5.$(OBJEXT): md5.c
|
||||
libgrub.a: $(libgrub_a_OBJECTS) $(libgrub_a_DEPENDENCIES)
|
||||
|
@ -598,9 +678,11 @@ diskless_exec-gunzip.$(OBJEXT): gunzip.c
|
|||
diskless_exec-fsys_ext2fs.$(OBJEXT): fsys_ext2fs.c
|
||||
diskless_exec-fsys_fat.$(OBJEXT): fsys_fat.c
|
||||
diskless_exec-fsys_ffs.$(OBJEXT): fsys_ffs.c
|
||||
diskless_exec-fsys_jfs.$(OBJEXT): fsys_jfs.c
|
||||
diskless_exec-fsys_minix.$(OBJEXT): fsys_minix.c
|
||||
diskless_exec-fsys_reiserfs.$(OBJEXT): fsys_reiserfs.c
|
||||
diskless_exec-fsys_vstafs.$(OBJEXT): fsys_vstafs.c
|
||||
diskless_exec-fsys_xfs.$(OBJEXT): fsys_xfs.c
|
||||
diskless_exec-hercules.$(OBJEXT): hercules.c
|
||||
diskless_exec-serial.$(OBJEXT): serial.c
|
||||
diskless_exec-smp-imps.$(OBJEXT): smp-imps.c
|
||||
|
@ -642,6 +724,17 @@ ffs_stage1_5_exec-bios.$(OBJEXT): bios.c
|
|||
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)
|
||||
jfs_stage1_5_exec-start.$(OBJEXT): start.S
|
||||
jfs_stage1_5_exec-asm.$(OBJEXT): asm.S
|
||||
jfs_stage1_5_exec-common.$(OBJEXT): common.c
|
||||
jfs_stage1_5_exec-char_io.$(OBJEXT): char_io.c
|
||||
jfs_stage1_5_exec-disk_io.$(OBJEXT): disk_io.c
|
||||
jfs_stage1_5_exec-stage1_5.$(OBJEXT): stage1_5.c
|
||||
jfs_stage1_5_exec-fsys_jfs.$(OBJEXT): fsys_jfs.c
|
||||
jfs_stage1_5_exec-bios.$(OBJEXT): bios.c
|
||||
jfs_stage1_5.exec$(EXEEXT): $(jfs_stage1_5_exec_OBJECTS) $(jfs_stage1_5_exec_DEPENDENCIES)
|
||||
@rm -f jfs_stage1_5.exec$(EXEEXT)
|
||||
$(LINK) $(jfs_stage1_5_exec_LDFLAGS) $(jfs_stage1_5_exec_OBJECTS) $(jfs_stage1_5_exec_LDADD) $(LIBS)
|
||||
minix_stage1_5_exec-start.$(OBJEXT): start.S
|
||||
minix_stage1_5_exec-asm.$(OBJEXT): asm.S
|
||||
minix_stage1_5_exec-common.$(OBJEXT): common.c
|
||||
|
@ -669,9 +762,11 @@ pre_stage2_exec-gunzip.$(OBJEXT): gunzip.c
|
|||
pre_stage2_exec-fsys_ext2fs.$(OBJEXT): fsys_ext2fs.c
|
||||
pre_stage2_exec-fsys_fat.$(OBJEXT): fsys_fat.c
|
||||
pre_stage2_exec-fsys_ffs.$(OBJEXT): fsys_ffs.c
|
||||
pre_stage2_exec-fsys_jfs.$(OBJEXT): fsys_jfs.c
|
||||
pre_stage2_exec-fsys_minix.$(OBJEXT): fsys_minix.c
|
||||
pre_stage2_exec-fsys_reiserfs.$(OBJEXT): fsys_reiserfs.c
|
||||
pre_stage2_exec-fsys_vstafs.$(OBJEXT): fsys_vstafs.c
|
||||
pre_stage2_exec-fsys_xfs.$(OBJEXT): fsys_xfs.c
|
||||
pre_stage2_exec-hercules.$(OBJEXT): hercules.c
|
||||
pre_stage2_exec-serial.$(OBJEXT): serial.c
|
||||
pre_stage2_exec-smp-imps.$(OBJEXT): smp-imps.c
|
||||
|
@ -710,6 +805,17 @@ vstafs_stage1_5_exec-bios.$(OBJEXT): bios.c
|
|||
vstafs_stage1_5.exec$(EXEEXT): $(vstafs_stage1_5_exec_OBJECTS) $(vstafs_stage1_5_exec_DEPENDENCIES)
|
||||
@rm -f vstafs_stage1_5.exec$(EXEEXT)
|
||||
$(LINK) $(vstafs_stage1_5_exec_LDFLAGS) $(vstafs_stage1_5_exec_OBJECTS) $(vstafs_stage1_5_exec_LDADD) $(LIBS)
|
||||
xfs_stage1_5_exec-start.$(OBJEXT): start.S
|
||||
xfs_stage1_5_exec-asm.$(OBJEXT): asm.S
|
||||
xfs_stage1_5_exec-common.$(OBJEXT): common.c
|
||||
xfs_stage1_5_exec-char_io.$(OBJEXT): char_io.c
|
||||
xfs_stage1_5_exec-disk_io.$(OBJEXT): disk_io.c
|
||||
xfs_stage1_5_exec-stage1_5.$(OBJEXT): stage1_5.c
|
||||
xfs_stage1_5_exec-fsys_xfs.$(OBJEXT): fsys_xfs.c
|
||||
xfs_stage1_5_exec-bios.$(OBJEXT): bios.c
|
||||
xfs_stage1_5.exec$(EXEEXT): $(xfs_stage1_5_exec_OBJECTS) $(xfs_stage1_5_exec_DEPENDENCIES)
|
||||
@rm -f xfs_stage1_5.exec$(EXEEXT)
|
||||
$(LINK) $(xfs_stage1_5_exec_LDFLAGS) $(xfs_stage1_5_exec_OBJECTS) $(xfs_stage1_5_exec_LDADD) $(LIBS)
|
||||
|
||||
mostlyclean-compile:
|
||||
-rm -f *.$(OBJEXT) core *.core
|
||||
|
@ -727,9 +833,11 @@ 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_jfs.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/diskless_exec-fsys_minix.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/diskless_exec-fsys_reiserfs.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/diskless_exec-fsys_vstafs.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/diskless_exec-fsys_xfs.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/diskless_exec-gunzip.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/diskless_exec-hercules.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/diskless_exec-md5.Po@am__quote@
|
||||
|
@ -754,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)/jfs_stage1_5_exec-bios.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/jfs_stage1_5_exec-char_io.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/jfs_stage1_5_exec-common.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/jfs_stage1_5_exec-disk_io.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/libgrub_a-boot.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/libgrub_a-builtins.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/libgrub_a-char_io.Po@am__quote@
|
||||
|
@ -763,9 +877,11 @@ 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_jfs.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/libgrub_a-fsys_minix.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/libgrub_a-fsys_reiserfs.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/libgrub_a-fsys_vstafs.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/libgrub_a-fsys_xfs.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/libgrub_a-gunzip.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/libgrub_a-md5.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/libgrub_a-stage2.Po@am__quote@
|
||||
|
@ -785,9 +901,11 @@ 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_jfs.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pre_stage2_exec-fsys_minix.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pre_stage2_exec-fsys_reiserfs.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pre_stage2_exec-fsys_vstafs.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pre_stage2_exec-fsys_xfs.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pre_stage2_exec-gunzip.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pre_stage2_exec-hercules.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/pre_stage2_exec-md5.Po@am__quote@
|
||||
|
@ -806,6 +924,12 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/vstafs_stage1_5_exec-disk_io.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/vstafs_stage1_5_exec-fsys_vstafs.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/vstafs_stage1_5_exec-stage1_5.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xfs_stage1_5_exec-bios.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xfs_stage1_5_exec-char_io.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xfs_stage1_5_exec-common.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xfs_stage1_5_exec-disk_io.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po@am__quote@
|
||||
|
||||
distclean-depend:
|
||||
-rm -rf $(DEPDIR)
|
||||
|
@ -858,6 +982,18 @@ ffs_stage1_5_exec-asm.o: asm.S
|
|||
ffs_stage1_5_exec-asm.obj: asm.S
|
||||
$(AS) $(ffs_stage1_5_exec_ASFLAGS) $(ASFLAGS) -c -o ffs_stage1_5_exec-asm.obj `cygpath -w asm.S`
|
||||
|
||||
jfs_stage1_5_exec-start.o: start.S
|
||||
$(AS) $(jfs_stage1_5_exec_ASFLAGS) $(ASFLAGS) -c -o jfs_stage1_5_exec-start.o `test -f start.S || echo '$(srcdir)/'`start.S
|
||||
|
||||
jfs_stage1_5_exec-start.obj: start.S
|
||||
$(AS) $(jfs_stage1_5_exec_ASFLAGS) $(ASFLAGS) -c -o jfs_stage1_5_exec-start.obj `cygpath -w start.S`
|
||||
|
||||
jfs_stage1_5_exec-asm.o: asm.S
|
||||
$(AS) $(jfs_stage1_5_exec_ASFLAGS) $(ASFLAGS) -c -o jfs_stage1_5_exec-asm.o `test -f asm.S || echo '$(srcdir)/'`asm.S
|
||||
|
||||
jfs_stage1_5_exec-asm.obj: asm.S
|
||||
$(AS) $(jfs_stage1_5_exec_ASFLAGS) $(ASFLAGS) -c -o jfs_stage1_5_exec-asm.obj `cygpath -w asm.S`
|
||||
|
||||
minix_stage1_5_exec-start.o: start.S
|
||||
$(AS) $(minix_stage1_5_exec_ASFLAGS) $(ASFLAGS) -c -o minix_stage1_5_exec-start.o `test -f start.S || echo '$(srcdir)/'`start.S
|
||||
|
||||
|
@ -918,6 +1054,18 @@ vstafs_stage1_5_exec-asm.o: asm.S
|
|||
vstafs_stage1_5_exec-asm.obj: asm.S
|
||||
$(AS) $(vstafs_stage1_5_exec_ASFLAGS) $(ASFLAGS) -c -o vstafs_stage1_5_exec-asm.obj `cygpath -w asm.S`
|
||||
|
||||
xfs_stage1_5_exec-start.o: start.S
|
||||
$(AS) $(xfs_stage1_5_exec_ASFLAGS) $(ASFLAGS) -c -o xfs_stage1_5_exec-start.o `test -f start.S || echo '$(srcdir)/'`start.S
|
||||
|
||||
xfs_stage1_5_exec-start.obj: start.S
|
||||
$(AS) $(xfs_stage1_5_exec_ASFLAGS) $(ASFLAGS) -c -o xfs_stage1_5_exec-start.obj `cygpath -w start.S`
|
||||
|
||||
xfs_stage1_5_exec-asm.o: asm.S
|
||||
$(AS) $(xfs_stage1_5_exec_ASFLAGS) $(ASFLAGS) -c -o xfs_stage1_5_exec-asm.o `test -f asm.S || echo '$(srcdir)/'`asm.S
|
||||
|
||||
xfs_stage1_5_exec-asm.obj: asm.S
|
||||
$(AS) $(xfs_stage1_5_exec_ASFLAGS) $(ASFLAGS) -c -o xfs_stage1_5_exec-asm.obj `cygpath -w asm.S`
|
||||
|
||||
.c.o:
|
||||
@AMDEP_TRUE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
|
||||
|
@ -1050,6 +1198,18 @@ libgrub_a-fsys_fat.obj: fsys_fat.c
|
|||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_fat.obj `cygpath -w fsys_fat.c`
|
||||
|
||||
libgrub_a-fsys_jfs.o: fsys_jfs.c
|
||||
@AMDEP_TRUE@ source='fsys_jfs.c' object='libgrub_a-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/libgrub_a-fsys_jfs.Po' tmpdepfile='$(DEPDIR)/libgrub_a-fsys_jfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_jfs.o `test -f fsys_jfs.c || echo '$(srcdir)/'`fsys_jfs.c
|
||||
|
||||
libgrub_a-fsys_jfs.obj: fsys_jfs.c
|
||||
@AMDEP_TRUE@ source='fsys_jfs.c' object='libgrub_a-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/libgrub_a-fsys_jfs.Po' tmpdepfile='$(DEPDIR)/libgrub_a-fsys_jfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_jfs.obj `cygpath -w fsys_jfs.c`
|
||||
|
||||
libgrub_a-fsys_minix.o: fsys_minix.c
|
||||
@AMDEP_TRUE@ source='fsys_minix.c' object='libgrub_a-fsys_minix.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/libgrub_a-fsys_minix.Po' tmpdepfile='$(DEPDIR)/libgrub_a-fsys_minix.TPo' @AMDEPBACKSLASH@
|
||||
|
@ -1086,6 +1246,18 @@ libgrub_a-fsys_vstafs.obj: fsys_vstafs.c
|
|||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_vstafs.obj `cygpath -w fsys_vstafs.c`
|
||||
|
||||
libgrub_a-fsys_xfs.o: fsys_xfs.c
|
||||
@AMDEP_TRUE@ source='fsys_xfs.c' object='libgrub_a-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/libgrub_a-fsys_xfs.Po' tmpdepfile='$(DEPDIR)/libgrub_a-fsys_xfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_xfs.o `test -f fsys_xfs.c || echo '$(srcdir)/'`fsys_xfs.c
|
||||
|
||||
libgrub_a-fsys_xfs.obj: fsys_xfs.c
|
||||
@AMDEP_TRUE@ source='fsys_xfs.c' object='libgrub_a-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/libgrub_a-fsys_xfs.Po' tmpdepfile='$(DEPDIR)/libgrub_a-fsys_xfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libgrub_a_CFLAGS) $(CFLAGS) -c -o libgrub_a-fsys_xfs.obj `cygpath -w fsys_xfs.c`
|
||||
|
||||
libgrub_a-stage2.o: stage2.c
|
||||
@AMDEP_TRUE@ source='stage2.c' object='libgrub_a-stage2.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/libgrub_a-stage2.Po' tmpdepfile='$(DEPDIR)/libgrub_a-stage2.TPo' @AMDEPBACKSLASH@
|
||||
|
@ -1242,6 +1414,18 @@ diskless_exec-fsys_ffs.obj: fsys_ffs.c
|
|||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_ffs.obj `cygpath -w fsys_ffs.c`
|
||||
|
||||
diskless_exec-fsys_jfs.o: fsys_jfs.c
|
||||
@AMDEP_TRUE@ source='fsys_jfs.c' object='diskless_exec-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/diskless_exec-fsys_jfs.Po' tmpdepfile='$(DEPDIR)/diskless_exec-fsys_jfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_jfs.o `test -f fsys_jfs.c || echo '$(srcdir)/'`fsys_jfs.c
|
||||
|
||||
diskless_exec-fsys_jfs.obj: fsys_jfs.c
|
||||
@AMDEP_TRUE@ source='fsys_jfs.c' object='diskless_exec-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/diskless_exec-fsys_jfs.Po' tmpdepfile='$(DEPDIR)/diskless_exec-fsys_jfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_jfs.obj `cygpath -w fsys_jfs.c`
|
||||
|
||||
diskless_exec-fsys_minix.o: fsys_minix.c
|
||||
@AMDEP_TRUE@ source='fsys_minix.c' object='diskless_exec-fsys_minix.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/diskless_exec-fsys_minix.Po' tmpdepfile='$(DEPDIR)/diskless_exec-fsys_minix.TPo' @AMDEPBACKSLASH@
|
||||
|
@ -1278,6 +1462,18 @@ diskless_exec-fsys_vstafs.obj: fsys_vstafs.c
|
|||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_vstafs.obj `cygpath -w fsys_vstafs.c`
|
||||
|
||||
diskless_exec-fsys_xfs.o: fsys_xfs.c
|
||||
@AMDEP_TRUE@ source='fsys_xfs.c' object='diskless_exec-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/diskless_exec-fsys_xfs.Po' tmpdepfile='$(DEPDIR)/diskless_exec-fsys_xfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_xfs.o `test -f fsys_xfs.c || echo '$(srcdir)/'`fsys_xfs.c
|
||||
|
||||
diskless_exec-fsys_xfs.obj: fsys_xfs.c
|
||||
@AMDEP_TRUE@ source='fsys_xfs.c' object='diskless_exec-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/diskless_exec-fsys_xfs.Po' tmpdepfile='$(DEPDIR)/diskless_exec-fsys_xfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(diskless_exec_CFLAGS) $(CFLAGS) -c -o diskless_exec-fsys_xfs.obj `cygpath -w fsys_xfs.c`
|
||||
|
||||
diskless_exec-hercules.o: hercules.c
|
||||
@AMDEP_TRUE@ source='hercules.c' object='diskless_exec-hercules.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/diskless_exec-hercules.Po' tmpdepfile='$(DEPDIR)/diskless_exec-hercules.TPo' @AMDEPBACKSLASH@
|
||||
|
@ -1554,6 +1750,78 @@ ffs_stage1_5_exec-bios.obj: bios.c
|
|||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(ffs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o ffs_stage1_5_exec-bios.obj `cygpath -w bios.c`
|
||||
|
||||
jfs_stage1_5_exec-common.o: common.c
|
||||
@AMDEP_TRUE@ source='common.c' object='jfs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/jfs_stage1_5_exec-common.Po' tmpdepfile='$(DEPDIR)/jfs_stage1_5_exec-common.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-common.o `test -f common.c || echo '$(srcdir)/'`common.c
|
||||
|
||||
jfs_stage1_5_exec-common.obj: common.c
|
||||
@AMDEP_TRUE@ source='common.c' object='jfs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/jfs_stage1_5_exec-common.Po' tmpdepfile='$(DEPDIR)/jfs_stage1_5_exec-common.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-common.obj `cygpath -w common.c`
|
||||
|
||||
jfs_stage1_5_exec-char_io.o: char_io.c
|
||||
@AMDEP_TRUE@ source='char_io.c' object='jfs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/jfs_stage1_5_exec-char_io.Po' tmpdepfile='$(DEPDIR)/jfs_stage1_5_exec-char_io.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-char_io.o `test -f char_io.c || echo '$(srcdir)/'`char_io.c
|
||||
|
||||
jfs_stage1_5_exec-char_io.obj: char_io.c
|
||||
@AMDEP_TRUE@ source='char_io.c' object='jfs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/jfs_stage1_5_exec-char_io.Po' tmpdepfile='$(DEPDIR)/jfs_stage1_5_exec-char_io.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-char_io.obj `cygpath -w char_io.c`
|
||||
|
||||
jfs_stage1_5_exec-disk_io.o: disk_io.c
|
||||
@AMDEP_TRUE@ source='disk_io.c' object='jfs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/jfs_stage1_5_exec-disk_io.Po' tmpdepfile='$(DEPDIR)/jfs_stage1_5_exec-disk_io.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-disk_io.o `test -f disk_io.c || echo '$(srcdir)/'`disk_io.c
|
||||
|
||||
jfs_stage1_5_exec-disk_io.obj: disk_io.c
|
||||
@AMDEP_TRUE@ source='disk_io.c' object='jfs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/jfs_stage1_5_exec-disk_io.Po' tmpdepfile='$(DEPDIR)/jfs_stage1_5_exec-disk_io.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-disk_io.obj `cygpath -w disk_io.c`
|
||||
|
||||
jfs_stage1_5_exec-stage1_5.o: stage1_5.c
|
||||
@AMDEP_TRUE@ source='stage1_5.c' object='jfs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po' tmpdepfile='$(DEPDIR)/jfs_stage1_5_exec-stage1_5.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-stage1_5.o `test -f stage1_5.c || echo '$(srcdir)/'`stage1_5.c
|
||||
|
||||
jfs_stage1_5_exec-stage1_5.obj: stage1_5.c
|
||||
@AMDEP_TRUE@ source='stage1_5.c' object='jfs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/jfs_stage1_5_exec-stage1_5.Po' tmpdepfile='$(DEPDIR)/jfs_stage1_5_exec-stage1_5.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-stage1_5.obj `cygpath -w stage1_5.c`
|
||||
|
||||
jfs_stage1_5_exec-fsys_jfs.o: fsys_jfs.c
|
||||
@AMDEP_TRUE@ source='fsys_jfs.c' object='jfs_stage1_5_exec-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po' tmpdepfile='$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-fsys_jfs.o `test -f fsys_jfs.c || echo '$(srcdir)/'`fsys_jfs.c
|
||||
|
||||
jfs_stage1_5_exec-fsys_jfs.obj: fsys_jfs.c
|
||||
@AMDEP_TRUE@ source='fsys_jfs.c' object='jfs_stage1_5_exec-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.Po' tmpdepfile='$(DEPDIR)/jfs_stage1_5_exec-fsys_jfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-fsys_jfs.obj `cygpath -w fsys_jfs.c`
|
||||
|
||||
jfs_stage1_5_exec-bios.o: bios.c
|
||||
@AMDEP_TRUE@ source='bios.c' object='jfs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/jfs_stage1_5_exec-bios.Po' tmpdepfile='$(DEPDIR)/jfs_stage1_5_exec-bios.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-bios.o `test -f bios.c || echo '$(srcdir)/'`bios.c
|
||||
|
||||
jfs_stage1_5_exec-bios.obj: bios.c
|
||||
@AMDEP_TRUE@ source='bios.c' object='jfs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/jfs_stage1_5_exec-bios.Po' tmpdepfile='$(DEPDIR)/jfs_stage1_5_exec-bios.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(jfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o jfs_stage1_5_exec-bios.obj `cygpath -w bios.c`
|
||||
|
||||
minix_stage1_5_exec-common.o: common.c
|
||||
@AMDEP_TRUE@ source='common.c' object='minix_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/minix_stage1_5_exec-common.Po' tmpdepfile='$(DEPDIR)/minix_stage1_5_exec-common.TPo' @AMDEPBACKSLASH@
|
||||
|
@ -1758,6 +2026,18 @@ pre_stage2_exec-fsys_ffs.obj: fsys_ffs.c
|
|||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_ffs.obj `cygpath -w fsys_ffs.c`
|
||||
|
||||
pre_stage2_exec-fsys_jfs.o: fsys_jfs.c
|
||||
@AMDEP_TRUE@ source='fsys_jfs.c' object='pre_stage2_exec-fsys_jfs.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/pre_stage2_exec-fsys_jfs.Po' tmpdepfile='$(DEPDIR)/pre_stage2_exec-fsys_jfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_jfs.o `test -f fsys_jfs.c || echo '$(srcdir)/'`fsys_jfs.c
|
||||
|
||||
pre_stage2_exec-fsys_jfs.obj: fsys_jfs.c
|
||||
@AMDEP_TRUE@ source='fsys_jfs.c' object='pre_stage2_exec-fsys_jfs.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/pre_stage2_exec-fsys_jfs.Po' tmpdepfile='$(DEPDIR)/pre_stage2_exec-fsys_jfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_jfs.obj `cygpath -w fsys_jfs.c`
|
||||
|
||||
pre_stage2_exec-fsys_minix.o: fsys_minix.c
|
||||
@AMDEP_TRUE@ source='fsys_minix.c' object='pre_stage2_exec-fsys_minix.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/pre_stage2_exec-fsys_minix.Po' tmpdepfile='$(DEPDIR)/pre_stage2_exec-fsys_minix.TPo' @AMDEPBACKSLASH@
|
||||
|
@ -1794,6 +2074,18 @@ pre_stage2_exec-fsys_vstafs.obj: fsys_vstafs.c
|
|||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_vstafs.obj `cygpath -w fsys_vstafs.c`
|
||||
|
||||
pre_stage2_exec-fsys_xfs.o: fsys_xfs.c
|
||||
@AMDEP_TRUE@ source='fsys_xfs.c' object='pre_stage2_exec-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/pre_stage2_exec-fsys_xfs.Po' tmpdepfile='$(DEPDIR)/pre_stage2_exec-fsys_xfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_xfs.o `test -f fsys_xfs.c || echo '$(srcdir)/'`fsys_xfs.c
|
||||
|
||||
pre_stage2_exec-fsys_xfs.obj: fsys_xfs.c
|
||||
@AMDEP_TRUE@ source='fsys_xfs.c' object='pre_stage2_exec-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/pre_stage2_exec-fsys_xfs.Po' tmpdepfile='$(DEPDIR)/pre_stage2_exec-fsys_xfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(pre_stage2_exec_CFLAGS) $(CFLAGS) -c -o pre_stage2_exec-fsys_xfs.obj `cygpath -w fsys_xfs.c`
|
||||
|
||||
pre_stage2_exec-hercules.o: hercules.c
|
||||
@AMDEP_TRUE@ source='hercules.c' object='pre_stage2_exec-hercules.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/pre_stage2_exec-hercules.Po' tmpdepfile='$(DEPDIR)/pre_stage2_exec-hercules.TPo' @AMDEPBACKSLASH@
|
||||
|
@ -1997,6 +2289,78 @@ vstafs_stage1_5_exec-bios.obj: bios.c
|
|||
@AMDEP_TRUE@ depfile='$(DEPDIR)/vstafs_stage1_5_exec-bios.Po' tmpdepfile='$(DEPDIR)/vstafs_stage1_5_exec-bios.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(vstafs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o vstafs_stage1_5_exec-bios.obj `cygpath -w bios.c`
|
||||
|
||||
xfs_stage1_5_exec-common.o: common.c
|
||||
@AMDEP_TRUE@ source='common.c' object='xfs_stage1_5_exec-common.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/xfs_stage1_5_exec-common.Po' tmpdepfile='$(DEPDIR)/xfs_stage1_5_exec-common.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-common.o `test -f common.c || echo '$(srcdir)/'`common.c
|
||||
|
||||
xfs_stage1_5_exec-common.obj: common.c
|
||||
@AMDEP_TRUE@ source='common.c' object='xfs_stage1_5_exec-common.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/xfs_stage1_5_exec-common.Po' tmpdepfile='$(DEPDIR)/xfs_stage1_5_exec-common.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-common.obj `cygpath -w common.c`
|
||||
|
||||
xfs_stage1_5_exec-char_io.o: char_io.c
|
||||
@AMDEP_TRUE@ source='char_io.c' object='xfs_stage1_5_exec-char_io.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/xfs_stage1_5_exec-char_io.Po' tmpdepfile='$(DEPDIR)/xfs_stage1_5_exec-char_io.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-char_io.o `test -f char_io.c || echo '$(srcdir)/'`char_io.c
|
||||
|
||||
xfs_stage1_5_exec-char_io.obj: char_io.c
|
||||
@AMDEP_TRUE@ source='char_io.c' object='xfs_stage1_5_exec-char_io.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/xfs_stage1_5_exec-char_io.Po' tmpdepfile='$(DEPDIR)/xfs_stage1_5_exec-char_io.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-char_io.obj `cygpath -w char_io.c`
|
||||
|
||||
xfs_stage1_5_exec-disk_io.o: disk_io.c
|
||||
@AMDEP_TRUE@ source='disk_io.c' object='xfs_stage1_5_exec-disk_io.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/xfs_stage1_5_exec-disk_io.Po' tmpdepfile='$(DEPDIR)/xfs_stage1_5_exec-disk_io.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-disk_io.o `test -f disk_io.c || echo '$(srcdir)/'`disk_io.c
|
||||
|
||||
xfs_stage1_5_exec-disk_io.obj: disk_io.c
|
||||
@AMDEP_TRUE@ source='disk_io.c' object='xfs_stage1_5_exec-disk_io.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/xfs_stage1_5_exec-disk_io.Po' tmpdepfile='$(DEPDIR)/xfs_stage1_5_exec-disk_io.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-disk_io.obj `cygpath -w disk_io.c`
|
||||
|
||||
xfs_stage1_5_exec-stage1_5.o: stage1_5.c
|
||||
@AMDEP_TRUE@ source='stage1_5.c' object='xfs_stage1_5_exec-stage1_5.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po' tmpdepfile='$(DEPDIR)/xfs_stage1_5_exec-stage1_5.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-stage1_5.o `test -f stage1_5.c || echo '$(srcdir)/'`stage1_5.c
|
||||
|
||||
xfs_stage1_5_exec-stage1_5.obj: stage1_5.c
|
||||
@AMDEP_TRUE@ source='stage1_5.c' object='xfs_stage1_5_exec-stage1_5.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/xfs_stage1_5_exec-stage1_5.Po' tmpdepfile='$(DEPDIR)/xfs_stage1_5_exec-stage1_5.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-stage1_5.obj `cygpath -w stage1_5.c`
|
||||
|
||||
xfs_stage1_5_exec-fsys_xfs.o: fsys_xfs.c
|
||||
@AMDEP_TRUE@ source='fsys_xfs.c' object='xfs_stage1_5_exec-fsys_xfs.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po' tmpdepfile='$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-fsys_xfs.o `test -f fsys_xfs.c || echo '$(srcdir)/'`fsys_xfs.c
|
||||
|
||||
xfs_stage1_5_exec-fsys_xfs.obj: fsys_xfs.c
|
||||
@AMDEP_TRUE@ source='fsys_xfs.c' object='xfs_stage1_5_exec-fsys_xfs.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.Po' tmpdepfile='$(DEPDIR)/xfs_stage1_5_exec-fsys_xfs.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-fsys_xfs.obj `cygpath -w fsys_xfs.c`
|
||||
|
||||
xfs_stage1_5_exec-bios.o: bios.c
|
||||
@AMDEP_TRUE@ source='bios.c' object='xfs_stage1_5_exec-bios.o' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/xfs_stage1_5_exec-bios.Po' tmpdepfile='$(DEPDIR)/xfs_stage1_5_exec-bios.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-bios.o `test -f bios.c || echo '$(srcdir)/'`bios.c
|
||||
|
||||
xfs_stage1_5_exec-bios.obj: bios.c
|
||||
@AMDEP_TRUE@ source='bios.c' object='xfs_stage1_5_exec-bios.obj' libtool=no @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ depfile='$(DEPDIR)/xfs_stage1_5_exec-bios.Po' tmpdepfile='$(DEPDIR)/xfs_stage1_5_exec-bios.TPo' @AMDEPBACKSLASH@
|
||||
@AMDEP_TRUE@ $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||
$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xfs_stage1_5_exec_CFLAGS) $(CFLAGS) -c -o xfs_stage1_5_exec-bios.obj `cygpath -w bios.c`
|
||||
CCDEPMODE = @CCDEPMODE@
|
||||
uninstall-info-am:
|
||||
install-pkgdataDATA: $(pkgdata_DATA)
|
||||
|
@ -2208,6 +2572,8 @@ uninstall-am: uninstall-info-am uninstall-pkgdataDATA
|
|||
mostlyclean mostlyclean-compile mostlyclean-generic tags \
|
||||
uninstall uninstall-am uninstall-info-am uninstall-pkgdataDATA
|
||||
|
||||
-DFSYS_XFS=1 -DUSE_MD5_PASSWORDS=1 \
|
||||
-DSUPPORT_SERIAL=1 -DSUPPORT_HERCULES=1 -fwritable-strings
|
||||
|
||||
stage2_size.h: pre_stage2
|
||||
-rm -f stage2_size.h
|
||||
|
|
|
@ -3643,7 +3643,9 @@ setup_func (char *arg, int flags)
|
|||
{"ffs", "/ffs_stage1_5"},
|
||||
{"fat", "/fat_stage1_5"},
|
||||
{"minix", "/minix_stage1_5"},
|
||||
{"reiserfs", "/reiserfs_stage1_5"}
|
||||
{"reiserfs", "/reiserfs_stage1_5"},
|
||||
{"jfs", "/jfs_stage1_5"},
|
||||
{"xfs", "/xfs_stage1_5"}
|
||||
};
|
||||
|
||||
tmp_drive = saved_drive;
|
||||
|
|
|
@ -62,6 +62,12 @@ struct fsys_entry fsys_table[NUM_FSYS + 1] =
|
|||
# endif
|
||||
# ifdef FSYS_VSTAFS
|
||||
{"vstafs", vstafs_mount, vstafs_read, vstafs_dir, 0, 0},
|
||||
# endif
|
||||
# ifdef FSYS_JFS
|
||||
{"jfs", jfs_mount, jfs_read, jfs_dir, 0, jfs_embed},
|
||||
# endif
|
||||
# ifdef FSYS_XFS
|
||||
{"xfs", xfs_mount, xfs_read, xfs_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. */
|
||||
|
|
|
@ -77,6 +77,25 @@ int vstafs_dir (char *dirname);
|
|||
#define FSYS_VSTAFS_NUM 0
|
||||
#endif
|
||||
|
||||
#ifdef FSYS_JFS
|
||||
#define FSYS_JFS_NUM 1
|
||||
int jfs_mount (void);
|
||||
int jfs_read (char *buf, int len);
|
||||
int jfs_dir (char *dirname);
|
||||
int jfs_embed (int *start_sector, int needed_sectors);
|
||||
#else
|
||||
#define FSYS_JFS_NUM 0
|
||||
#endif
|
||||
|
||||
#ifdef FSYS_XFS
|
||||
#define FSYS_XFS_NUM 1
|
||||
int xfs_mount (void);
|
||||
int xfs_read (char *buf, int len);
|
||||
int xfs_dir (char *dirname);
|
||||
#else
|
||||
#define FSYS_XFS_NUM 0
|
||||
#endif
|
||||
|
||||
#ifdef FSYS_TFTP
|
||||
#define FSYS_TFTP_NUM 1
|
||||
int tftp_mount (void);
|
||||
|
@ -90,7 +109,8 @@ void tftp_close (void);
|
|||
#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_TFTP_NUM)
|
||||
+ FSYS_REISERFS_NUM + FSYS_VSTAFS_NUM + FSYS_JFS_NUM + FSYS_XFS_NUM \
|
||||
+ FSYS_TFTP_NUM)
|
||||
#endif
|
||||
|
||||
/* defines for the block filesystem info area */
|
||||
|
|
405
stage2/fsys_jfs.c
Normal file
405
stage2/fsys_jfs.c
Normal file
|
@ -0,0 +1,405 @@
|
|||
/* fsys_jfs.c - an implementation for the IBM JFS file system */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifdef FSYS_JFS
|
||||
|
||||
#include "shared.h"
|
||||
#include "filesys.h"
|
||||
#include "jfs.h"
|
||||
|
||||
#define MAX_LINK_COUNT 8
|
||||
|
||||
#define DTTYPE_INLINE 0
|
||||
#define DTTYPE_PAGE 1
|
||||
|
||||
struct jfs_info
|
||||
{
|
||||
int bsize;
|
||||
int l2bsize;
|
||||
int bdlog;
|
||||
int xindex;
|
||||
int xlastindex;
|
||||
int sindex;
|
||||
int slastindex;
|
||||
int de_index;
|
||||
int dttype;
|
||||
xad_t *xad;
|
||||
ldtentry_t *de;
|
||||
};
|
||||
|
||||
static struct jfs_info jfs;
|
||||
|
||||
#define xtpage ((xtpage_t *)FSYS_BUF)
|
||||
#define dtpage ((dtpage_t *)((char *)FSYS_BUF + 4096))
|
||||
#define fileset ((dinode_t *)((char *)FSYS_BUF + 8192))
|
||||
#define inode ((dinode_t *)((char *)FSYS_BUF + 8192 + sizeof(dinode_t)))
|
||||
#define dtroot ((dtroot_t *)(&inode->di_btroot))
|
||||
|
||||
static ldtentry_t de_always[2] = {
|
||||
{1, -1, 2, {'.', '.'}},
|
||||
{1, -1, 1, {'.'}}
|
||||
};
|
||||
|
||||
static int
|
||||
isinxt (s64 key, s64 offset, s64 len)
|
||||
{
|
||||
return (key >= offset) ? (key < offset + len ? 1 : 0) : 0;
|
||||
}
|
||||
|
||||
static xad_t *
|
||||
first_extent (dinode_t *di)
|
||||
{
|
||||
xtpage_t *xtp;
|
||||
|
||||
jfs.xindex = 2;
|
||||
xtp = (xtpage_t *)&di->di_btroot;
|
||||
jfs.xad = &xtp->xad[2];
|
||||
if (xtp->header.flag & BT_LEAF) {
|
||||
jfs.xlastindex = xtp->header.nextindex;
|
||||
} else {
|
||||
do {
|
||||
devread (addressXAD (jfs.xad) << jfs.bdlog, 0,
|
||||
sizeof(xtpage_t), (char *)xtpage);
|
||||
jfs.xad = &xtpage->xad[2];
|
||||
} while (!(xtpage->header.flag & BT_LEAF));
|
||||
jfs.xlastindex = xtpage->header.nextindex;
|
||||
}
|
||||
|
||||
return jfs.xad;
|
||||
}
|
||||
|
||||
static xad_t *
|
||||
next_extent (void)
|
||||
{
|
||||
if (++jfs.xindex < jfs.xlastindex) {
|
||||
} else if (xtpage->header.next) {
|
||||
devread (xtpage->header.next << jfs.bdlog, 0,
|
||||
sizeof(xtpage_t), (char *)xtpage);
|
||||
jfs.xlastindex = xtpage->header.nextindex;
|
||||
jfs.xindex = XTENTRYSTART;
|
||||
jfs.xad = &xtpage->xad[XTENTRYSTART];
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
return ++jfs.xad;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
di_read (u32 inum, dinode_t *di)
|
||||
{
|
||||
s64 key;
|
||||
u32 xd, ioffset;
|
||||
s64 offset;
|
||||
xad_t *xad;
|
||||
pxd_t pxd;
|
||||
|
||||
key = (((inum >> L2INOSPERIAG) << L2INOSPERIAG) + 4096) >> jfs.l2bsize;
|
||||
xd = (inum & (INOSPERIAG - 1)) >> L2INOSPEREXT;
|
||||
ioffset = ((inum & (INOSPERIAG - 1)) & (INOSPEREXT - 1)) << L2DISIZE;
|
||||
xad = first_extent (fileset);
|
||||
do {
|
||||
offset = offsetXAD (xad);
|
||||
if (isinxt (key, offset, lengthXAD (xad))) {
|
||||
devread ((addressXAD (xad) + key - offset) << jfs.bdlog,
|
||||
3072 + xd*sizeof(pxd_t), sizeof(pxd_t), (char *)&pxd);
|
||||
devread (addressPXD (&pxd) << jfs.bdlog,
|
||||
ioffset, DISIZE, (char *)di);
|
||||
break;
|
||||
}
|
||||
} while ((xad = next_extent ()));
|
||||
}
|
||||
|
||||
static ldtentry_t *
|
||||
next_dentry (void)
|
||||
{
|
||||
ldtentry_t *de;
|
||||
s8 *stbl;
|
||||
|
||||
if (jfs.dttype == DTTYPE_INLINE) {
|
||||
if (jfs.sindex < jfs.slastindex) {
|
||||
return (ldtentry_t *)&dtroot->slot[(int)dtroot->header.stbl[jfs.sindex++]];
|
||||
}
|
||||
} else {
|
||||
de = (ldtentry_t *)dtpage->slot;
|
||||
stbl = (s8 *)&de[(int)dtpage->header.stblindex];
|
||||
if (jfs.sindex < jfs.slastindex) {
|
||||
return &de[(int)stbl[jfs.sindex++]];
|
||||
} else if (dtpage->header.next) {
|
||||
devread (dtpage->header.next << jfs.bdlog, 0,
|
||||
sizeof(dtpage_t), (char *)dtpage);
|
||||
jfs.slastindex = dtpage->header.nextindex;
|
||||
jfs.sindex = 1;
|
||||
return &de[(int)((s8 *)&de[(int)dtpage->header.stblindex])[0]];
|
||||
}
|
||||
}
|
||||
|
||||
return (jfs.de_index < 2) ? &de_always[jfs.de_index++] : NULL;
|
||||
}
|
||||
|
||||
static ldtentry_t *
|
||||
first_dentry (void)
|
||||
{
|
||||
dtroot_t *dtr;
|
||||
pxd_t *xd;
|
||||
idtentry_t *de;
|
||||
|
||||
dtr = (dtroot_t *)&inode->di_btroot;
|
||||
jfs.sindex = 0;
|
||||
jfs.de_index = 0;
|
||||
|
||||
de_always[0].inumber = inode->di_parent;
|
||||
de_always[1].inumber = inode->di_number;
|
||||
if (dtr->header.flag & BT_LEAF) {
|
||||
jfs.dttype = DTTYPE_INLINE;
|
||||
jfs.slastindex = dtr->header.nextindex;
|
||||
} else {
|
||||
de = (idtentry_t *)dtpage->slot;
|
||||
jfs.dttype = DTTYPE_PAGE;
|
||||
xd = &((idtentry_t *)dtr->slot)[(int)dtr->header.stbl[0]].xd;
|
||||
for (;;) {
|
||||
devread (addressPXD (xd) << jfs.bdlog, 0,
|
||||
sizeof(dtpage_t), (char *)dtpage);
|
||||
if (dtpage->header.flag & BT_LEAF)
|
||||
break;
|
||||
xd = &de[(int)((s8 *)&de[(int)dtpage->header.stblindex])[0]].xd;
|
||||
}
|
||||
jfs.slastindex = dtpage->header.nextindex;
|
||||
}
|
||||
|
||||
return next_dentry ();
|
||||
}
|
||||
|
||||
|
||||
static dtslot_t *
|
||||
next_dslot (int next)
|
||||
{
|
||||
return (jfs.dttype == DTTYPE_INLINE)
|
||||
? (dtslot_t *)&dtroot->slot[next]
|
||||
: &((dtslot_t *)dtpage->slot)[next];
|
||||
}
|
||||
|
||||
static void
|
||||
uni2ansi (UniChar *uni, char *ansi, int len)
|
||||
{
|
||||
for (; len; len--, uni++)
|
||||
*ansi++ = (*uni & 0xff80) ? '?' : *(char *)uni;
|
||||
}
|
||||
|
||||
int
|
||||
jfs_mount (void)
|
||||
{
|
||||
struct jfs_superblock super;
|
||||
|
||||
if (part_length < MINJFS >> SECTOR_BITS
|
||||
|| !devread (SUPER1_OFF >> SECTOR_BITS, 0,
|
||||
sizeof(struct jfs_superblock), (char *)&super)
|
||||
|| (super.s_magic != JFS_MAGIC)
|
||||
|| !devread ((AITBL_OFF >> SECTOR_BITS) + FILESYSTEM_I,
|
||||
0, DISIZE, (char*)fileset)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
jfs.bsize = super.s_bsize;
|
||||
jfs.l2bsize = super.s_l2bsize;
|
||||
jfs.bdlog = jfs.l2bsize - SECTOR_BITS;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
jfs_read (char *buf, int len)
|
||||
{
|
||||
xad_t *xad;
|
||||
s64 endofprev, endofcur;
|
||||
s64 offset, xadlen;
|
||||
int toread, startpos, endpos;
|
||||
|
||||
startpos = filepos;
|
||||
endpos = filepos + len;
|
||||
endofprev = (1ULL << 62) - 1;
|
||||
xad = first_extent (inode);
|
||||
do {
|
||||
offset = offsetXAD (xad);
|
||||
xadlen = lengthXAD (xad);
|
||||
if (isinxt (filepos >> jfs.l2bsize, offset, xadlen)) {
|
||||
endofcur = (offset + xadlen) << jfs.l2bsize;
|
||||
toread = (endofcur >= endpos)
|
||||
? len : (endofcur - filepos);
|
||||
#ifndef STAGE1_5
|
||||
disk_read_func = disk_read_hook;
|
||||
#endif /* STAGE1_5 */
|
||||
devread (addressXAD (xad) << jfs.bdlog,
|
||||
filepos - (offset << jfs.l2bsize), toread, buf);
|
||||
#ifndef STAGE1_5
|
||||
disk_read_func = NULL;
|
||||
#endif /* STAGE1_5 */
|
||||
buf += toread;
|
||||
len -= toread;
|
||||
filepos += toread;
|
||||
} else if (offset > endofprev) {
|
||||
toread = ((offset << jfs.l2bsize) >= endpos)
|
||||
? len : ((offset - endofprev) << jfs.l2bsize);
|
||||
len -= toread;
|
||||
filepos += toread;
|
||||
for (; toread; toread--) {
|
||||
*buf++ = 0;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
endofprev = offset + xadlen;
|
||||
xad = next_extent ();
|
||||
} while (len > 0 && xad);
|
||||
|
||||
return filepos - startpos;
|
||||
}
|
||||
|
||||
int
|
||||
jfs_dir (char *dirname)
|
||||
{
|
||||
char *ptr, *rest, ch;
|
||||
ldtentry_t *de;
|
||||
dtslot_t *ds;
|
||||
u32 inum, parent_inum;
|
||||
s64 di_size;
|
||||
u32 di_mode;
|
||||
int namlen, cmp, n, link_count;
|
||||
char namebuf[JFS_NAME_MAX + 1], linkbuf[JFS_PATH_MAX];
|
||||
|
||||
parent_inum = inum = ROOT_I;
|
||||
link_count = 0;
|
||||
for (;;) {
|
||||
di_read (inum, inode);
|
||||
di_size = inode->di_size;
|
||||
di_mode = inode->di_mode;
|
||||
|
||||
if ((di_mode & IFMT) == IFLNK) {
|
||||
if (++link_count > MAX_LINK_COUNT) {
|
||||
errnum = ERR_SYMLINK_LOOP;
|
||||
return 0;
|
||||
}
|
||||
if (di_size < (di_mode & INLINEEA ? 256 : 128)) {
|
||||
grub_memmove (linkbuf, inode->di_fastsymlink, di_size);
|
||||
n = di_size;
|
||||
} else if (di_size < JFS_PATH_MAX - 1) {
|
||||
filepos = 0;
|
||||
filemax = di_size;
|
||||
n = jfs_read (linkbuf, filemax);
|
||||
} else {
|
||||
errnum = ERR_FILELENGTH;
|
||||
return 0;
|
||||
}
|
||||
|
||||
inum = (linkbuf[0] == '/') ? ROOT_I : parent_inum;
|
||||
while (n < (JFS_PATH_MAX - 1) && (linkbuf[n++] = *dirname++));
|
||||
linkbuf[n] = 0;
|
||||
dirname = linkbuf;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!*dirname || isspace (*dirname)) {
|
||||
if ((di_mode & IFMT) != IFREG) {
|
||||
errnum = ERR_BAD_FILETYPE;
|
||||
return 0;
|
||||
}
|
||||
filepos = 0;
|
||||
filemax = di_size;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ((di_mode & IFMT) != IFDIR) {
|
||||
errnum = ERR_BAD_FILETYPE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (; *dirname == '/'; dirname++);
|
||||
|
||||
for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/'; rest++);
|
||||
*rest = 0;
|
||||
|
||||
de = first_dentry ();
|
||||
for (;;) {
|
||||
namlen = de->namlen;
|
||||
if (de->next == -1) {
|
||||
uni2ansi (de->name, namebuf, namlen);
|
||||
namebuf[namlen] = 0;
|
||||
} else {
|
||||
uni2ansi (de->name, namebuf, DTLHDRDATALEN);
|
||||
ptr = namebuf;
|
||||
ptr += DTLHDRDATALEN;
|
||||
namlen -= DTLHDRDATALEN;
|
||||
ds = next_dslot (de->next);
|
||||
while (ds->next != -1) {
|
||||
uni2ansi (ds->name, ptr, DTSLOTDATALEN);
|
||||
ptr += DTSLOTDATALEN;
|
||||
namlen -= DTSLOTDATALEN;
|
||||
ds = next_dslot (ds->next);
|
||||
}
|
||||
uni2ansi (ds->name, ptr, namlen);
|
||||
ptr += namlen;
|
||||
*ptr = 0;
|
||||
}
|
||||
|
||||
cmp = (!*dirname) ? -1 : substring (dirname, namebuf);
|
||||
#ifndef STAGE1_5
|
||||
if (print_possibilities && ch != '/'
|
||||
&& cmp <= 0) {
|
||||
if (print_possibilities > 0)
|
||||
print_possibilities = -print_possibilities;
|
||||
print_a_completion (namebuf);
|
||||
} else
|
||||
#endif
|
||||
if (cmp == 0) {
|
||||
parent_inum = inum;
|
||||
inum = de->inumber;
|
||||
*(dirname = rest) = ch;
|
||||
break;
|
||||
}
|
||||
de = next_dentry ();
|
||||
if (de == NULL) {
|
||||
if (print_possibilities < 0)
|
||||
return 1;
|
||||
|
||||
errnum = ERR_FILE_NOT_FOUND;
|
||||
*rest = ch;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
jfs_embed (int *start_sector, int needed_sectors)
|
||||
{
|
||||
struct jfs_superblock super;
|
||||
|
||||
if (needed_sectors > 63
|
||||
|| !devread (SUPER1_OFF >> SECTOR_BITS, 0,
|
||||
sizeof (struct jfs_superblock),
|
||||
(char *)&super)
|
||||
|| (super.s_magic != JFS_MAGIC)) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
*start_sector = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
#endif /* FSYS_JFS */
|
617
stage2/fsys_xfs.c
Normal file
617
stage2/fsys_xfs.c
Normal file
|
@ -0,0 +1,617 @@
|
|||
/* fsys_xfs.c - an implementation for the SGI XFS file system */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
*/
|
||||
|
||||
#ifdef FSYS_XFS
|
||||
|
||||
#include "shared.h"
|
||||
#include "filesys.h"
|
||||
#include "xfs.h"
|
||||
|
||||
#define MAX_LINK_COUNT 8
|
||||
|
||||
typedef struct xad {
|
||||
xfs_fileoff_t offset;
|
||||
xfs_fsblock_t start;
|
||||
xfs_filblks_t len;
|
||||
} xad_t;
|
||||
|
||||
struct xfs_info {
|
||||
int bsize;
|
||||
int dirbsize;
|
||||
int isize;
|
||||
unsigned int agblocks;
|
||||
int bdlog;
|
||||
int blklog;
|
||||
int inopblog;
|
||||
int agblklog;
|
||||
int agnolog;
|
||||
unsigned int nextents;
|
||||
xfs_daddr_t next;
|
||||
xfs_daddr_t daddr;
|
||||
xfs_dablk_t forw;
|
||||
xfs_dablk_t dablk;
|
||||
xfs_bmbt_rec_32_t *xt;
|
||||
xfs_bmbt_ptr_t ptr0;
|
||||
int btnode_ptr0_off;
|
||||
int i8param;
|
||||
int dirpos;
|
||||
int dirmax;
|
||||
int blkoff;
|
||||
int fpos;
|
||||
xfs_ino_t rootino;
|
||||
};
|
||||
|
||||
static struct xfs_info xfs;
|
||||
|
||||
#define dirbuf ((char *)FSYS_BUF)
|
||||
#define filebuf ((char *)FSYS_BUF + 4096)
|
||||
#define inode ((xfs_dinode_t *)((char *)FSYS_BUF + 8192))
|
||||
#define icore (inode->di_core)
|
||||
|
||||
#define mask32lo(n) (((__uint32_t)1 << (n)) - 1)
|
||||
|
||||
#define XFS_INO_MASK(k) ((__uint32_t)((1ULL << (k)) - 1))
|
||||
#define XFS_INO_OFFSET_BITS xfs.inopblog
|
||||
#define XFS_INO_AGBNO_BITS xfs.agblklog
|
||||
#define XFS_INO_AGINO_BITS (xfs.agblklog + xfs.inopblog)
|
||||
#define XFS_INO_AGNO_BITS xfs.agnolog
|
||||
|
||||
static inline xfs_agblock_t
|
||||
agino2agbno (xfs_agino_t agino)
|
||||
{
|
||||
return agino >> XFS_INO_OFFSET_BITS;
|
||||
}
|
||||
|
||||
static inline xfs_agnumber_t
|
||||
ino2agno (xfs_ino_t ino)
|
||||
{
|
||||
return ino >> XFS_INO_AGINO_BITS;
|
||||
}
|
||||
|
||||
static inline xfs_agino_t
|
||||
ino2agino (xfs_ino_t ino)
|
||||
{
|
||||
return ino & XFS_INO_MASK(XFS_INO_AGINO_BITS);
|
||||
}
|
||||
|
||||
static inline int
|
||||
ino2offset (xfs_ino_t ino)
|
||||
{
|
||||
return ino & XFS_INO_MASK(XFS_INO_OFFSET_BITS);
|
||||
}
|
||||
|
||||
static inline __const__ __uint16_t
|
||||
le16 (__uint16_t x)
|
||||
{
|
||||
__asm__("xchgb %b0,%h0" \
|
||||
: "=q" (x) \
|
||||
: "0" (x)); \
|
||||
return x;
|
||||
}
|
||||
|
||||
static inline __const__ __uint32_t
|
||||
le32 (__uint32_t x)
|
||||
{
|
||||
__asm__("bswap %0" : "=r" (x) : "0" (x));
|
||||
return x;
|
||||
}
|
||||
|
||||
static inline __const__ __uint64_t
|
||||
le64 (__uint64_t x)
|
||||
{
|
||||
__uint32_t h = x >> 32;
|
||||
__uint32_t l = x & ((1ULL<<32)-1);
|
||||
return (((__uint64_t)le32(l)) << 32) | ((__uint64_t)(le32(h)));
|
||||
}
|
||||
|
||||
|
||||
static xfs_fsblock_t
|
||||
xt_start (xfs_bmbt_rec_32_t *r)
|
||||
{
|
||||
return (((xfs_fsblock_t)(le32 (r->l1) & mask32lo(9))) << 43) |
|
||||
(((xfs_fsblock_t)le32 (r->l2)) << 11) |
|
||||
(((xfs_fsblock_t)le32 (r->l3)) >> 21);
|
||||
}
|
||||
|
||||
static xfs_fileoff_t
|
||||
xt_offset (xfs_bmbt_rec_32_t *r)
|
||||
{
|
||||
return (((xfs_fileoff_t)le32 (r->l0) &
|
||||
mask32lo(31)) << 23) |
|
||||
(((xfs_fileoff_t)le32 (r->l1)) >> 9);
|
||||
}
|
||||
|
||||
static xfs_filblks_t
|
||||
xt_len (xfs_bmbt_rec_32_t *r)
|
||||
{
|
||||
return le32(r->l3) & mask32lo(21);
|
||||
}
|
||||
|
||||
static inline int
|
||||
xfs_highbit32(__uint32_t v)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (--v) {
|
||||
for (i = 0; i < 31; i++, v >>= 1) {
|
||||
if (v == 0)
|
||||
return i;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int
|
||||
isinxt (xfs_fileoff_t key, xfs_fileoff_t offset, xfs_filblks_t len)
|
||||
{
|
||||
return (key >= offset) ? (key < offset + len ? 1 : 0) : 0;
|
||||
}
|
||||
|
||||
static xfs_daddr_t
|
||||
agb2daddr (xfs_agnumber_t agno, xfs_agblock_t agbno)
|
||||
{
|
||||
return ((xfs_fsblock_t)agno*xfs.agblocks + agbno) << xfs.bdlog;
|
||||
}
|
||||
|
||||
static xfs_daddr_t
|
||||
fsb2daddr (xfs_fsblock_t fsbno)
|
||||
{
|
||||
return agb2daddr ((xfs_agnumber_t)(fsbno >> xfs.agblklog),
|
||||
(xfs_agblock_t)(fsbno & mask32lo(xfs.agblklog)));
|
||||
}
|
||||
|
||||
#undef offsetof
|
||||
#define offsetof(t,m) ((int)&(((t *)0)->m))
|
||||
|
||||
static inline int
|
||||
btroot_maxrecs (void)
|
||||
{
|
||||
int tmp = icore.di_forkoff ? (icore.di_forkoff << 3) : xfs.isize;
|
||||
|
||||
return (tmp - sizeof(xfs_bmdr_block_t) - offsetof(xfs_dinode_t, di_u)) /
|
||||
(sizeof (xfs_bmbt_key_t) + sizeof (xfs_bmbt_ptr_t));
|
||||
}
|
||||
|
||||
static int
|
||||
di_read (xfs_ino_t ino)
|
||||
{
|
||||
xfs_agino_t agino;
|
||||
xfs_agnumber_t agno;
|
||||
xfs_agblock_t agbno;
|
||||
xfs_daddr_t daddr;
|
||||
int offset;
|
||||
|
||||
agno = ino2agno (ino);
|
||||
agino = ino2agino (ino);
|
||||
agbno = agino2agbno (agino);
|
||||
offset = ino2offset (ino);
|
||||
daddr = agb2daddr (agno, agbno);
|
||||
|
||||
devread (daddr, offset*xfs.isize, xfs.isize, (char *)inode);
|
||||
|
||||
xfs.ptr0 = *(xfs_bmbt_ptr_t *)
|
||||
(inode->di_u.di_c + sizeof(xfs_bmdr_block_t)
|
||||
+ btroot_maxrecs ()*sizeof(xfs_bmbt_key_t));
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void
|
||||
init_extents (void)
|
||||
{
|
||||
xfs_bmbt_ptr_t ptr0;
|
||||
xfs_btree_lblock_t h;
|
||||
|
||||
switch (icore.di_format) {
|
||||
case XFS_DINODE_FMT_EXTENTS:
|
||||
xfs.xt = inode->di_u.di_bmx;
|
||||
xfs.nextents = le32 (icore.di_nextents);
|
||||
break;
|
||||
case XFS_DINODE_FMT_BTREE:
|
||||
ptr0 = xfs.ptr0;
|
||||
for (;;) {
|
||||
xfs.daddr = fsb2daddr (le64(ptr0));
|
||||
devread (xfs.daddr, 0,
|
||||
sizeof(xfs_btree_lblock_t), (char *)&h);
|
||||
if (!h.bb_level) {
|
||||
xfs.nextents = le16(h.bb_numrecs);
|
||||
xfs.next = fsb2daddr (le64(h.bb_rightsib));
|
||||
xfs.fpos = sizeof(xfs_btree_block_t);
|
||||
return;
|
||||
}
|
||||
devread (xfs.daddr, xfs.btnode_ptr0_off,
|
||||
sizeof(xfs_bmbt_ptr_t), (char *)&ptr0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static xad_t *
|
||||
next_extent (void)
|
||||
{
|
||||
static xad_t xad;
|
||||
|
||||
switch (icore.di_format) {
|
||||
case XFS_DINODE_FMT_EXTENTS:
|
||||
if (xfs.nextents == 0)
|
||||
return NULL;
|
||||
break;
|
||||
case XFS_DINODE_FMT_BTREE:
|
||||
if (xfs.nextents == 0) {
|
||||
xfs_btree_lblock_t h;
|
||||
if (xfs.next == 0)
|
||||
return NULL;
|
||||
xfs.daddr = xfs.next;
|
||||
devread (xfs.daddr, 0, sizeof(xfs_btree_lblock_t), (char *)&h);
|
||||
xfs.nextents = le16(h.bb_numrecs);
|
||||
xfs.next = fsb2daddr (le64(h.bb_rightsib));
|
||||
xfs.fpos = sizeof(xfs_btree_block_t);
|
||||
}
|
||||
/* Yeah, I know that's slow, but I really don't care */
|
||||
devread (xfs.daddr, xfs.fpos, sizeof(xfs_bmbt_rec_t), filebuf);
|
||||
xfs.xt = (xfs_bmbt_rec_32_t *)filebuf;
|
||||
xfs.fpos += sizeof(xfs_bmbt_rec_32_t);
|
||||
}
|
||||
xad.offset = xt_offset (xfs.xt);
|
||||
xad.start = xt_start (xfs.xt);
|
||||
xad.len = xt_len (xfs.xt);
|
||||
++xfs.xt;
|
||||
--xfs.nextents;
|
||||
|
||||
return &xad;
|
||||
}
|
||||
|
||||
/*
|
||||
* Name lies - the function reads only first 100 bytes
|
||||
*/
|
||||
static void
|
||||
xfs_dabread (void)
|
||||
{
|
||||
xad_t *xad;
|
||||
xfs_fileoff_t offset;;
|
||||
|
||||
init_extents ();
|
||||
while ((xad = next_extent ())) {
|
||||
offset = xad->offset;
|
||||
if (isinxt (xfs.dablk, offset, xad->len)) {
|
||||
devread (fsb2daddr (xad->start + xfs.dablk - offset),
|
||||
0, 100, dirbuf);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static inline xfs_ino_t
|
||||
sf_ino (char *sfe, int namelen)
|
||||
{
|
||||
void *p = sfe + namelen + 3;
|
||||
|
||||
return (xfs.i8param == 0)
|
||||
? le64(*(xfs_ino_t *)p) : le32(*(__uint32_t *)p);
|
||||
}
|
||||
|
||||
static inline xfs_ino_t
|
||||
sf_parent_ino (void)
|
||||
{
|
||||
return (xfs.i8param == 0)
|
||||
? le64(*(xfs_ino_t *)(&inode->di_u.di_dir2sf.hdr.parent))
|
||||
: le32(*(__uint32_t *)(&inode->di_u.di_dir2sf.hdr.parent));
|
||||
}
|
||||
|
||||
static inline int
|
||||
roundup8 (int n)
|
||||
{
|
||||
return ((n+7)&~7);
|
||||
}
|
||||
|
||||
static char *
|
||||
next_dentry (xfs_ino_t *ino)
|
||||
{
|
||||
int namelen = 1;
|
||||
int toread;
|
||||
static char *usual[2] = {".", ".."};
|
||||
static xfs_dir2_sf_entry_t *sfe;
|
||||
char *name = usual[0];
|
||||
|
||||
if (xfs.dirpos >= xfs.dirmax) {
|
||||
if (xfs.forw == 0)
|
||||
return NULL;
|
||||
xfs.dablk = xfs.forw;
|
||||
xfs_dabread ();
|
||||
#define h ((xfs_dir2_leaf_hdr_t *)dirbuf)
|
||||
xfs.dirmax = le16 (h->count) - le16 (h->stale);
|
||||
xfs.forw = le32 (h->info.forw);
|
||||
#undef h
|
||||
xfs.dirpos = 0;
|
||||
}
|
||||
|
||||
switch (icore.di_format) {
|
||||
case XFS_DINODE_FMT_LOCAL:
|
||||
switch (xfs.dirpos) {
|
||||
case -2:
|
||||
*ino = 0;
|
||||
break;
|
||||
case -1:
|
||||
*ino = sf_parent_ino ();
|
||||
++name;
|
||||
++namelen;
|
||||
sfe = (xfs_dir2_sf_entry_t *)
|
||||
(inode->di_u.di_c
|
||||
+ sizeof(xfs_dir2_sf_hdr_t)
|
||||
- xfs.i8param);
|
||||
break;
|
||||
default:
|
||||
namelen = sfe->namelen;
|
||||
*ino = sf_ino ((char *)sfe, namelen);
|
||||
name = sfe->name;
|
||||
sfe = (xfs_dir2_sf_entry_t *)
|
||||
((char *)sfe + namelen + 11 - xfs.i8param);
|
||||
}
|
||||
break;
|
||||
case XFS_DINODE_FMT_BTREE:
|
||||
case XFS_DINODE_FMT_EXTENTS:
|
||||
#define dau ((xfs_dir2_data_union_t *)dirbuf)
|
||||
for (;;) {
|
||||
if (xfs.blkoff >= xfs.dirbsize) {
|
||||
xfs.blkoff = sizeof(xfs_dir2_data_hdr_t);
|
||||
filepos &= ~(xfs.dirbsize - 1);
|
||||
filepos |= xfs.blkoff;
|
||||
}
|
||||
xfs_read (dirbuf, 4);
|
||||
xfs.blkoff += 4;
|
||||
if (dau->unused.freetag == XFS_DIR2_DATA_FREE_TAG) {
|
||||
toread = roundup8 (le16(dau->unused.length)) - 4;
|
||||
xfs.blkoff += toread;
|
||||
filepos += toread;
|
||||
continue;
|
||||
}
|
||||
break;
|
||||
}
|
||||
xfs_read ((char *)dirbuf + 4, 5);
|
||||
*ino = le64 (dau->entry.inumber);
|
||||
namelen = dau->entry.namelen;
|
||||
#undef dau
|
||||
toread = roundup8 (namelen + 11) - 9;
|
||||
xfs_read (dirbuf, toread);
|
||||
name = (char *)dirbuf;
|
||||
xfs.blkoff += toread + 5;
|
||||
}
|
||||
++xfs.dirpos;
|
||||
name[namelen] = 0;
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
static char *
|
||||
first_dentry (xfs_ino_t *ino)
|
||||
{
|
||||
xfs.forw = 0;
|
||||
switch (icore.di_format) {
|
||||
case XFS_DINODE_FMT_LOCAL:
|
||||
xfs.dirmax = inode->di_u.di_dir2sf.hdr.count;
|
||||
xfs.i8param = inode->di_u.di_dir2sf.hdr.i8count ? 0 : 4;
|
||||
xfs.dirpos = -2;
|
||||
break;
|
||||
case XFS_DINODE_FMT_EXTENTS:
|
||||
case XFS_DINODE_FMT_BTREE:
|
||||
filepos = 0;
|
||||
xfs_read (dirbuf, sizeof(xfs_dir2_data_hdr_t));
|
||||
if (((xfs_dir2_data_hdr_t *)dirbuf)->magic == le32(XFS_DIR2_BLOCK_MAGIC)) {
|
||||
#define tail ((xfs_dir2_block_tail_t *)dirbuf)
|
||||
filepos = xfs.dirbsize - sizeof(*tail);
|
||||
xfs_read (dirbuf, sizeof(*tail));
|
||||
xfs.dirmax = le32 (tail->count) - le32 (tail->stale);
|
||||
#undef tail
|
||||
} else {
|
||||
xfs.dablk = (1ULL << 35) >> xfs.blklog;
|
||||
#define h ((xfs_dir2_leaf_hdr_t *)dirbuf)
|
||||
#define n ((xfs_da_intnode_t *)dirbuf)
|
||||
for (;;) {
|
||||
xfs_dabread ();
|
||||
if ((n->hdr.info.magic == le16(XFS_DIR2_LEAFN_MAGIC))
|
||||
|| (n->hdr.info.magic == le16(XFS_DIR2_LEAF1_MAGIC))) {
|
||||
xfs.dirmax = le16 (h->count) - le16 (h->stale);
|
||||
xfs.forw = le32 (h->info.forw);
|
||||
break;
|
||||
}
|
||||
xfs.dablk = le32 (n->btree[0].before);
|
||||
}
|
||||
#undef n
|
||||
#undef h
|
||||
}
|
||||
xfs.blkoff = sizeof(xfs_dir2_data_hdr_t);
|
||||
filepos = xfs.blkoff;
|
||||
xfs.dirpos = 0;
|
||||
}
|
||||
return next_dentry (ino);
|
||||
}
|
||||
|
||||
int
|
||||
xfs_mount (void)
|
||||
{
|
||||
xfs_sb_t super;
|
||||
|
||||
if (!devread (0, 0, sizeof(super), (char *)&super)
|
||||
|| (le32(super.sb_magicnum) != XFS_SB_MAGIC)
|
||||
|| ((le16(super.sb_versionnum)
|
||||
& XFS_SB_VERSION_NUMBITS) != XFS_SB_VERSION_4) ) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
xfs.bsize = le32 (super.sb_blocksize);
|
||||
xfs.blklog = super.sb_blocklog;
|
||||
xfs.bdlog = xfs.blklog - SECTOR_BITS;
|
||||
xfs.rootino = le64 (super.sb_rootino);
|
||||
xfs.isize = le16 (super.sb_inodesize);
|
||||
xfs.agblocks = le32 (super.sb_agblocks);
|
||||
xfs.dirbsize = xfs.bsize << super.sb_dirblklog;
|
||||
|
||||
xfs.inopblog = super.sb_inopblog;
|
||||
xfs.agblklog = super.sb_agblklog;
|
||||
xfs.agnolog = xfs_highbit32 (le32(super.sb_agcount));
|
||||
|
||||
xfs.btnode_ptr0_off =
|
||||
((xfs.bsize - sizeof(xfs_btree_block_t)) /
|
||||
(sizeof (xfs_bmbt_key_t) + sizeof (xfs_bmbt_ptr_t)))
|
||||
* sizeof(xfs_bmbt_key_t) + sizeof(xfs_btree_block_t);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
int
|
||||
xfs_read (char *buf, int len)
|
||||
{
|
||||
xad_t *xad;
|
||||
xfs_fileoff_t endofprev, endofcur, offset;
|
||||
xfs_filblks_t xadlen;
|
||||
int toread, startpos, endpos;
|
||||
|
||||
if (icore.di_format == XFS_DINODE_FMT_LOCAL) {
|
||||
grub_memmove (buf, inode->di_u.di_c + filepos, len);
|
||||
filepos += len;
|
||||
return len;
|
||||
}
|
||||
|
||||
startpos = filepos;
|
||||
endpos = filepos + len;
|
||||
endofprev = (xfs_fileoff_t)-1;
|
||||
init_extents ();
|
||||
while (len > 0 && (xad = next_extent ())) {
|
||||
offset = xad->offset;
|
||||
xadlen = xad->len;
|
||||
if (isinxt (filepos >> xfs.blklog, offset, xadlen)) {
|
||||
endofcur = (offset + xadlen) << xfs.blklog;
|
||||
toread = (endofcur >= endpos)
|
||||
? len : (endofcur - filepos);
|
||||
#ifndef STAGE1_5
|
||||
disk_read_func = disk_read_hook;
|
||||
#endif /* STAGE1_5 */
|
||||
devread (fsb2daddr (xad->start),
|
||||
filepos - (offset << xfs.blklog), toread, buf);
|
||||
#ifndef STAGE1_5
|
||||
disk_read_func = NULL;
|
||||
#endif /* STAGE1_5 */
|
||||
buf += toread;
|
||||
len -= toread;
|
||||
filepos += toread;
|
||||
} else if (offset > endofprev) {
|
||||
toread = ((offset << xfs.blklog) >= endpos)
|
||||
? len : ((offset - endofprev) << xfs.blklog);
|
||||
len -= toread;
|
||||
filepos += toread;
|
||||
for (; toread; toread--) {
|
||||
*buf++ = 0;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
endofprev = offset + xadlen;
|
||||
}
|
||||
|
||||
return filepos - startpos;
|
||||
}
|
||||
|
||||
int
|
||||
xfs_dir (char *dirname)
|
||||
{
|
||||
xfs_ino_t ino, parent_ino, new_ino;
|
||||
xfs_fsize_t di_size;
|
||||
int di_mode;
|
||||
int cmp, n, link_count;
|
||||
char linkbuf[xfs.bsize];
|
||||
char *rest, *name, ch;
|
||||
|
||||
parent_ino = ino = xfs.rootino;
|
||||
link_count = 0;
|
||||
for (;;) {
|
||||
di_read (ino);
|
||||
di_size = le64 (icore.di_size);
|
||||
di_mode = le16 (icore.di_mode);
|
||||
|
||||
if ((di_mode & IFMT) == IFLNK) {
|
||||
if (++link_count > MAX_LINK_COUNT) {
|
||||
errnum = ERR_SYMLINK_LOOP;
|
||||
return 0;
|
||||
}
|
||||
if (di_size < xfs.bsize - 1) {
|
||||
filepos = 0;
|
||||
filemax = di_size;
|
||||
n = xfs_read (linkbuf, filemax);
|
||||
} else {
|
||||
errnum = ERR_FILELENGTH;
|
||||
return 0;
|
||||
}
|
||||
|
||||
ino = (linkbuf[0] == '/') ? xfs.rootino : parent_ino;
|
||||
while (n < (xfs.bsize - 1) && (linkbuf[n++] = *dirname++));
|
||||
linkbuf[n] = 0;
|
||||
dirname = linkbuf;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!*dirname || isspace (*dirname)) {
|
||||
if ((di_mode & IFMT) != IFREG) {
|
||||
errnum = ERR_BAD_FILETYPE;
|
||||
return 0;
|
||||
}
|
||||
filepos = 0;
|
||||
filemax = di_size;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ((di_mode & IFMT) != IFDIR) {
|
||||
errnum = ERR_BAD_FILETYPE;
|
||||
return 0;
|
||||
}
|
||||
|
||||
for (; *dirname == '/'; dirname++);
|
||||
|
||||
for (rest = dirname; (ch = *rest) && !isspace (ch) && ch != '/'; rest++);
|
||||
*rest = 0;
|
||||
|
||||
name = first_dentry (&new_ino);
|
||||
for (;;) {
|
||||
cmp = (!*dirname) ? -1 : substring (dirname, name);
|
||||
#ifndef STAGE1_5
|
||||
if (print_possibilities && ch != '/' && cmp <= 0) {
|
||||
if (print_possibilities > 0)
|
||||
print_possibilities = -print_possibilities;
|
||||
print_a_completion (name);
|
||||
} else
|
||||
#endif
|
||||
if (cmp == 0) {
|
||||
parent_ino = ino;
|
||||
if (new_ino)
|
||||
ino = new_ino;
|
||||
*(dirname = rest) = ch;
|
||||
break;
|
||||
}
|
||||
name = next_dentry (&new_ino);
|
||||
if (name == NULL) {
|
||||
if (print_possibilities < 0)
|
||||
return 1;
|
||||
|
||||
errnum = ERR_FILE_NOT_FOUND;
|
||||
*rest = ch;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#endif /* FSYS_XFS */
|
601
stage2/jfs.h
Normal file
601
stage2/jfs.h
Normal file
|
@ -0,0 +1,601 @@
|
|||
/* jfs.h - an extractions from linux/include/linux/jfs/jfs* into one file */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2000 International Business Machines Corp.
|
||||
* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See
|
||||
* the GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef _JFS_H_
|
||||
#define _JFS_H_
|
||||
|
||||
/* those are from jfs_filsys.h */
|
||||
|
||||
/*
|
||||
* file system option (superblock flag)
|
||||
*/
|
||||
/* platform option (conditional compilation) */
|
||||
#define JFS_AIX 0x80000000 /* AIX support */
|
||||
/* POSIX name/directory support */
|
||||
|
||||
#define JFS_OS2 0x40000000 /* OS/2 support */
|
||||
/* case-insensitive name/directory support */
|
||||
|
||||
#define JFS_LINUX 0x10000000 /* Linux support */
|
||||
/* case-sensitive name/directory support */
|
||||
|
||||
/* directory option */
|
||||
#define JFS_UNICODE 0x00000001 /* unicode name */
|
||||
|
||||
/* bba */
|
||||
#define JFS_SWAP_BYTES 0x00100000 /* running on big endian computer */
|
||||
|
||||
|
||||
/*
|
||||
* buffer cache configuration
|
||||
*/
|
||||
/* page size */
|
||||
#ifdef PSIZE
|
||||
#undef PSIZE
|
||||
#endif
|
||||
#define PSIZE 4096 /* page size (in byte) */
|
||||
|
||||
/*
|
||||
* fs fundamental size
|
||||
*
|
||||
* PSIZE >= file system block size >= PBSIZE >= DISIZE
|
||||
*/
|
||||
#define PBSIZE 512 /* physical block size (in byte) */
|
||||
#define DISIZE 512 /* on-disk inode size (in byte) */
|
||||
#define L2DISIZE 9
|
||||
#define INOSPERIAG 4096 /* number of disk inodes per iag */
|
||||
#define L2INOSPERIAG 12
|
||||
#define INOSPEREXT 32 /* number of disk inode per extent */
|
||||
#define L2INOSPEREXT 5
|
||||
|
||||
/* Minimum number of bytes supported for a JFS partition */
|
||||
#define MINJFS (0x1000000)
|
||||
|
||||
/*
|
||||
* fixed byte offset address
|
||||
*/
|
||||
#define SUPER1_OFF 0x8000 /* primary superblock */
|
||||
|
||||
#define AITBL_OFF (SUPER1_OFF + PSIZE + (PSIZE << 1))
|
||||
|
||||
/*
|
||||
* fixed reserved inode number
|
||||
*/
|
||||
/* aggregate inode */
|
||||
#define AGGREGATE_I 1 /* aggregate inode map inode */
|
||||
#define FILESYSTEM_I 16 /* 1st/only fileset inode in ait:
|
||||
* fileset inode map inode
|
||||
*/
|
||||
|
||||
/* per fileset inode */
|
||||
#define ROOT_I 2 /* fileset root inode */
|
||||
|
||||
/*
|
||||
* directory configuration
|
||||
*/
|
||||
#define JFS_NAME_MAX 255
|
||||
#define JFS_PATH_MAX PSIZE
|
||||
|
||||
typedef unsigned char u8;
|
||||
typedef char s8;
|
||||
typedef unsigned short u16;
|
||||
typedef short s16;
|
||||
typedef unsigned int u32;
|
||||
typedef int s32;
|
||||
typedef unsigned long long u64;
|
||||
typedef long long s64;
|
||||
|
||||
typedef u16 UniChar;
|
||||
|
||||
/* these from jfs_btree.h */
|
||||
|
||||
/* btpaget_t flag */
|
||||
#define BT_TYPE 0x07 /* B+-tree index */
|
||||
#define BT_ROOT 0x01 /* root page */
|
||||
#define BT_LEAF 0x02 /* leaf page */
|
||||
#define BT_INTERNAL 0x04 /* internal page */
|
||||
#define BT_RIGHTMOST 0x10 /* rightmost page */
|
||||
#define BT_LEFTMOST 0x20 /* leftmost page */
|
||||
|
||||
/* those are from jfs_types.h */
|
||||
|
||||
struct timestruc_t {
|
||||
u32 tv_sec;
|
||||
u32 tv_nsec;
|
||||
};
|
||||
|
||||
/*
|
||||
* physical xd (pxd)
|
||||
*/
|
||||
typedef struct {
|
||||
unsigned len:24;
|
||||
unsigned addr1:8;
|
||||
u32 addr2;
|
||||
} pxd_t;
|
||||
|
||||
/* xd_t field extraction */
|
||||
#define lengthPXD(pxd) ((pxd)->len)
|
||||
#define addressPXD(pxd) (((s64)((pxd)->addr1)) << 32 | ((pxd)->addr2))
|
||||
|
||||
/*
|
||||
* data extent descriptor (dxd)
|
||||
*/
|
||||
typedef struct {
|
||||
unsigned flag:8; /* 1: flags */
|
||||
unsigned rsrvd:24; /* 3: */
|
||||
u32 size; /* 4: size in byte */
|
||||
unsigned len:24; /* 3: length in unit of fsblksize */
|
||||
unsigned addr1:8; /* 1: address in unit of fsblksize */
|
||||
u32 addr2; /* 4: address in unit of fsblksize */
|
||||
} dxd_t; /* - 16 - */
|
||||
|
||||
/*
|
||||
* DASD limit information - stored in directory inode
|
||||
*/
|
||||
typedef struct dasd {
|
||||
u8 thresh; /* Alert Threshold (in percent) */
|
||||
u8 delta; /* Alert Threshold delta (in percent) */
|
||||
u8 rsrvd1;
|
||||
u8 limit_hi; /* DASD limit (in logical blocks) */
|
||||
u32 limit_lo; /* DASD limit (in logical blocks) */
|
||||
u8 rsrvd2[3];
|
||||
u8 used_hi; /* DASD usage (in logical blocks) */
|
||||
u32 used_lo; /* DASD usage (in logical blocks) */
|
||||
} dasd_t;
|
||||
|
||||
|
||||
/* from jfs_superblock.h */
|
||||
|
||||
#define JFS_MAGIC 0x3153464A /* "JFS1" */
|
||||
|
||||
struct jfs_superblock
|
||||
{
|
||||
u32 s_magic; /* 4: magic number */
|
||||
u32 s_version; /* 4: version number */
|
||||
|
||||
s64 s_size; /* 8: aggregate size in hardware/LVM blocks;
|
||||
* VFS: number of blocks
|
||||
*/
|
||||
s32 s_bsize; /* 4: aggregate block size in bytes;
|
||||
* VFS: fragment size
|
||||
*/
|
||||
s16 s_l2bsize; /* 2: log2 of s_bsize */
|
||||
s16 s_l2bfactor; /* 2: log2(s_bsize/hardware block size) */
|
||||
s32 s_pbsize; /* 4: hardware/LVM block size in bytes */
|
||||
s16 s_l2pbsize; /* 2: log2 of s_pbsize */
|
||||
s16 pad; /* 2: padding necessary for alignment */
|
||||
|
||||
u32 s_agsize; /* 4: allocation group size in aggr. blocks */
|
||||
|
||||
u32 s_flag; /* 4: aggregate attributes:
|
||||
* see jfs_filsys.h
|
||||
*/
|
||||
u32 s_state; /* 4: mount/unmount/recovery state:
|
||||
* see jfs_filsys.h
|
||||
*/
|
||||
s32 s_compress; /* 4: > 0 if data compression */
|
||||
|
||||
pxd_t s_ait2; /* 8: first extent of secondary
|
||||
* aggregate inode table
|
||||
*/
|
||||
|
||||
pxd_t s_aim2; /* 8: first extent of secondary
|
||||
* aggregate inode map
|
||||
*/
|
||||
u32 s_logdev; /* 4: device address of log */
|
||||
s32 s_logserial; /* 4: log serial number at aggregate mount */
|
||||
pxd_t s_logpxd; /* 8: inline log extent */
|
||||
|
||||
pxd_t s_fsckpxd; /* 8: inline fsck work space extent */
|
||||
|
||||
struct timestruc_t s_time; /* 8: time last updated */
|
||||
|
||||
s32 s_fsckloglen; /* 4: Number of filesystem blocks reserved for
|
||||
* the fsck service log.
|
||||
* N.B. These blocks are divided among the
|
||||
* versions kept. This is not a per
|
||||
* version size.
|
||||
* N.B. These blocks are included in the
|
||||
* length field of s_fsckpxd.
|
||||
*/
|
||||
s8 s_fscklog; /* 1: which fsck service log is most recent
|
||||
* 0 => no service log data yet
|
||||
* 1 => the first one
|
||||
* 2 => the 2nd one
|
||||
*/
|
||||
char s_fpack[11]; /* 11: file system volume name
|
||||
* N.B. This must be 11 bytes to
|
||||
* conform with the OS/2 BootSector
|
||||
* requirements
|
||||
*/
|
||||
|
||||
/* extendfs() parameter under s_state & FM_EXTENDFS */
|
||||
s64 s_xsize; /* 8: extendfs s_size */
|
||||
pxd_t s_xfsckpxd; /* 8: extendfs fsckpxd */
|
||||
pxd_t s_xlogpxd; /* 8: extendfs logpxd */
|
||||
/* - 128 byte boundary - */
|
||||
|
||||
/*
|
||||
* DFS VFS support (preliminary)
|
||||
*/
|
||||
char s_attach; /* 1: VFS: flag: set when aggregate is attached
|
||||
*/
|
||||
u8 rsrvd4[7]; /* 7: reserved - set to 0 */
|
||||
|
||||
u64 totalUsable; /* 8: VFS: total of 1K blocks which are
|
||||
* available to "normal" (non-root) users.
|
||||
*/
|
||||
u64 minFree; /* 8: VFS: # of 1K blocks held in reserve for
|
||||
* exclusive use of root. This value can be 0,
|
||||
* and if it is then totalUsable will be equal
|
||||
* to # of blocks in aggregate. I believe this
|
||||
* means that minFree + totalUsable = # blocks.
|
||||
* In that case, we don't need to store both
|
||||
* totalUsable and minFree since we can compute
|
||||
* one from the other. I would guess minFree
|
||||
* would be the one we should store, and
|
||||
* totalUsable would be the one we should
|
||||
* compute. (Just a guess...)
|
||||
*/
|
||||
|
||||
u64 realFree; /* 8: VFS: # of free 1K blocks can be used by
|
||||
* "normal" users. It may be this is something
|
||||
* we should compute when asked for instead of
|
||||
* storing in the superblock. I don't know how
|
||||
* often this information is needed.
|
||||
*/
|
||||
/*
|
||||
* graffiti area
|
||||
*/
|
||||
};
|
||||
|
||||
/* from jfs_dtree.h */
|
||||
|
||||
/*
|
||||
* entry segment/slot
|
||||
*
|
||||
* an entry consists of type dependent head/only segment/slot and
|
||||
* additional segments/slots linked vi next field;
|
||||
* N.B. last/only segment of entry is terminated by next = -1;
|
||||
*/
|
||||
/*
|
||||
* directory page slot
|
||||
*/
|
||||
typedef struct {
|
||||
s8 next; /* 1: */
|
||||
s8 cnt; /* 1: */
|
||||
UniChar name[15]; /* 30: */
|
||||
} dtslot_t; /* (32) */
|
||||
|
||||
#define DTSLOTDATALEN 15
|
||||
|
||||
/*
|
||||
* internal node entry head/only segment
|
||||
*/
|
||||
typedef struct {
|
||||
pxd_t xd; /* 8: child extent descriptor */
|
||||
|
||||
s8 next; /* 1: */
|
||||
u8 namlen; /* 1: */
|
||||
UniChar name[11]; /* 22: 2-byte aligned */
|
||||
} idtentry_t; /* (32) */
|
||||
|
||||
/*
|
||||
* leaf node entry head/only segment
|
||||
*
|
||||
* For legacy filesystems, name contains 13 unichars -- no index field
|
||||
*/
|
||||
typedef struct {
|
||||
u32 inumber; /* 4: 4-byte aligned */
|
||||
s8 next; /* 1: */
|
||||
u8 namlen; /* 1: */
|
||||
UniChar name[11]; /* 22: 2-byte aligned */
|
||||
u32 index; /* 4: index into dir_table */
|
||||
} ldtentry_t; /* (32) */
|
||||
|
||||
#define DTLHDRDATALEN 11
|
||||
|
||||
/*
|
||||
* dir_table used for directory traversal during readdir
|
||||
*/
|
||||
|
||||
/*
|
||||
* Maximum entry in inline directory table
|
||||
*/
|
||||
|
||||
typedef struct dir_table_slot {
|
||||
u8 rsrvd; /* 1: */
|
||||
u8 flag; /* 1: 0 if free */
|
||||
u8 slot; /* 1: slot within leaf page of entry */
|
||||
u8 addr1; /* 1: upper 8 bits of leaf page address */
|
||||
u32 addr2; /* 4: lower 32 bits of leaf page address -OR-
|
||||
index of next entry when this entry was deleted */
|
||||
} dir_table_slot_t; /* (8) */
|
||||
|
||||
/*
|
||||
* directory root page (in-line in on-disk inode):
|
||||
*
|
||||
* cf. dtpage_t below.
|
||||
*/
|
||||
typedef union {
|
||||
struct {
|
||||
dasd_t DASD; /* 16: DASD limit/usage info F226941 */
|
||||
|
||||
u8 flag; /* 1: */
|
||||
s8 nextindex; /* 1: next free entry in stbl */
|
||||
s8 freecnt; /* 1: free count */
|
||||
s8 freelist; /* 1: freelist header */
|
||||
|
||||
u32 idotdot; /* 4: parent inode number */
|
||||
|
||||
s8 stbl[8]; /* 8: sorted entry index table */
|
||||
} header; /* (32) */
|
||||
|
||||
dtslot_t slot[9];
|
||||
} dtroot_t;
|
||||
|
||||
/*
|
||||
* directory regular page:
|
||||
*
|
||||
* entry slot array of 32 byte slot
|
||||
*
|
||||
* sorted entry slot index table (stbl):
|
||||
* contiguous slots at slot specified by stblindex,
|
||||
* 1-byte per entry
|
||||
* 512 byte block: 16 entry tbl (1 slot)
|
||||
* 1024 byte block: 32 entry tbl (1 slot)
|
||||
* 2048 byte block: 64 entry tbl (2 slot)
|
||||
* 4096 byte block: 128 entry tbl (4 slot)
|
||||
*
|
||||
* data area:
|
||||
* 512 byte block: 16 - 2 = 14 slot
|
||||
* 1024 byte block: 32 - 2 = 30 slot
|
||||
* 2048 byte block: 64 - 3 = 61 slot
|
||||
* 4096 byte block: 128 - 5 = 123 slot
|
||||
*
|
||||
* N.B. index is 0-based; index fields refer to slot index
|
||||
* except nextindex which refers to entry index in stbl;
|
||||
* end of entry stot list or freelist is marked with -1.
|
||||
*/
|
||||
typedef union {
|
||||
struct {
|
||||
s64 next; /* 8: next sibling */
|
||||
s64 prev; /* 8: previous sibling */
|
||||
|
||||
u8 flag; /* 1: */
|
||||
s8 nextindex; /* 1: next entry index in stbl */
|
||||
s8 freecnt; /* 1: */
|
||||
s8 freelist; /* 1: slot index of head of freelist */
|
||||
|
||||
u8 maxslot; /* 1: number of slots in page slot[] */
|
||||
s8 stblindex; /* 1: slot index of start of stbl */
|
||||
u8 rsrvd[2]; /* 2: */
|
||||
|
||||
pxd_t self; /* 8: self pxd */
|
||||
} header; /* (32) */
|
||||
|
||||
dtslot_t slot[128];
|
||||
} dtpage_t;
|
||||
|
||||
/* from jfs_xtree.h */
|
||||
|
||||
/*
|
||||
* extent allocation descriptor (xad)
|
||||
*/
|
||||
typedef struct xad {
|
||||
unsigned flag:8; /* 1: flag */
|
||||
unsigned rsvrd:16; /* 2: reserved */
|
||||
unsigned off1:8; /* 1: offset in unit of fsblksize */
|
||||
u32 off2; /* 4: offset in unit of fsblksize */
|
||||
unsigned len:24; /* 3: length in unit of fsblksize */
|
||||
unsigned addr1:8; /* 1: address in unit of fsblksize */
|
||||
u32 addr2; /* 4: address in unit of fsblksize */
|
||||
} xad_t; /* (16) */
|
||||
|
||||
/* xad_t field extraction */
|
||||
#define offsetXAD(xad) (((s64)((xad)->off1)) << 32 | ((xad)->off2))
|
||||
#define addressXAD(xad) (((s64)((xad)->addr1)) << 32 | ((xad)->addr2))
|
||||
#define lengthXAD(xad) ((xad)->len)
|
||||
|
||||
/* possible values for maxentry */
|
||||
#define XTPAGEMAXSLOT 256
|
||||
#define XTENTRYSTART 2
|
||||
|
||||
/*
|
||||
* xtree page:
|
||||
*/
|
||||
typedef union {
|
||||
struct xtheader {
|
||||
s64 next; /* 8: */
|
||||
s64 prev; /* 8: */
|
||||
|
||||
u8 flag; /* 1: */
|
||||
u8 rsrvd1; /* 1: */
|
||||
s16 nextindex; /* 2: next index = number of entries */
|
||||
s16 maxentry; /* 2: max number of entries */
|
||||
s16 rsrvd2; /* 2: */
|
||||
|
||||
pxd_t self; /* 8: self */
|
||||
} header; /* (32) */
|
||||
|
||||
xad_t xad[XTPAGEMAXSLOT]; /* 16 * maxentry: xad array */
|
||||
} xtpage_t;
|
||||
|
||||
/* from jfs_dinode.h */
|
||||
|
||||
struct dinode {
|
||||
/*
|
||||
* I. base area (128 bytes)
|
||||
* ------------------------
|
||||
*
|
||||
* define generic/POSIX attributes
|
||||
*/
|
||||
u32 di_inostamp; /* 4: stamp to show inode belongs to fileset */
|
||||
s32 di_fileset; /* 4: fileset number */
|
||||
u32 di_number; /* 4: inode number, aka file serial number */
|
||||
u32 di_gen; /* 4: inode generation number */
|
||||
|
||||
pxd_t di_ixpxd; /* 8: inode extent descriptor */
|
||||
|
||||
s64 di_size; /* 8: size */
|
||||
s64 di_nblocks; /* 8: number of blocks allocated */
|
||||
|
||||
u32 di_nlink; /* 4: number of links to the object */
|
||||
|
||||
u32 di_uid; /* 4: user id of owner */
|
||||
u32 di_gid; /* 4: group id of owner */
|
||||
|
||||
u32 di_mode; /* 4: attribute, format and permission */
|
||||
|
||||
struct timestruc_t di_atime; /* 8: time last data accessed */
|
||||
struct timestruc_t di_ctime; /* 8: time last status changed */
|
||||
struct timestruc_t di_mtime; /* 8: time last data modified */
|
||||
struct timestruc_t di_otime; /* 8: time created */
|
||||
|
||||
dxd_t di_acl; /* 16: acl descriptor */
|
||||
|
||||
dxd_t di_ea; /* 16: ea descriptor */
|
||||
|
||||
s32 di_next_index; /* 4: Next available dir_table index */
|
||||
|
||||
s32 di_acltype; /* 4: Type of ACL */
|
||||
|
||||
/*
|
||||
* Extension Areas.
|
||||
*
|
||||
* Historically, the inode was partitioned into 4 128-byte areas,
|
||||
* the last 3 being defined as unions which could have multiple
|
||||
* uses. The first 96 bytes had been completely unused until
|
||||
* an index table was added to the directory. It is now more
|
||||
* useful to describe the last 3/4 of the inode as a single
|
||||
* union. We would probably be better off redesigning the
|
||||
* entire structure from scratch, but we don't want to break
|
||||
* commonality with OS/2's JFS at this time.
|
||||
*/
|
||||
union {
|
||||
struct {
|
||||
/*
|
||||
* This table contains the information needed to
|
||||
* find a directory entry from a 32-bit index.
|
||||
* If the index is small enough, the table is inline,
|
||||
* otherwise, an x-tree root overlays this table
|
||||
*/
|
||||
dir_table_slot_t _table[12]; /* 96: inline */
|
||||
|
||||
dtroot_t _dtroot; /* 288: dtree root */
|
||||
} _dir; /* (384) */
|
||||
#define di_dirtable u._dir._table
|
||||
#define di_dtroot u._dir._dtroot
|
||||
#define di_parent di_dtroot.header.idotdot
|
||||
#define di_DASD di_dtroot.header.DASD
|
||||
|
||||
struct {
|
||||
union {
|
||||
u8 _data[96]; /* 96: unused */
|
||||
struct {
|
||||
void *_imap; /* 4: unused */
|
||||
u32 _gengen; /* 4: generator */
|
||||
} _imap;
|
||||
} _u1; /* 96: */
|
||||
#define di_gengen u._file._u1._imap._gengen
|
||||
|
||||
union {
|
||||
xtpage_t _xtroot;
|
||||
struct {
|
||||
u8 unused[16]; /* 16: */
|
||||
dxd_t _dxd; /* 16: */
|
||||
union {
|
||||
u32 _rdev; /* 4: */
|
||||
u8 _fastsymlink[128];
|
||||
} _u;
|
||||
u8 _inlineea[128];
|
||||
} _special;
|
||||
} _u2;
|
||||
} _file;
|
||||
#define di_xtroot u._file._u2._xtroot
|
||||
#define di_dxd u._file._u2._special._dxd
|
||||
#define di_btroot di_xtroot
|
||||
#define di_inlinedata u._file._u2._special._u
|
||||
#define di_rdev u._file._u2._special._u._rdev
|
||||
#define di_fastsymlink u._file._u2._special._u._fastsymlink
|
||||
#define di_inlineea u._file._u2._special._inlineea
|
||||
} u;
|
||||
};
|
||||
|
||||
typedef struct dinode dinode_t;
|
||||
|
||||
/* di_mode */
|
||||
#define IFMT 0xF000 /* S_IFMT - mask of file type */
|
||||
#define IFDIR 0x4000 /* S_IFDIR - directory */
|
||||
#define IFREG 0x8000 /* S_IFREG - regular file */
|
||||
#define IFLNK 0xA000 /* S_IFLNK - symbolic link */
|
||||
|
||||
/* extended mode bits (on-disk inode di_mode) */
|
||||
#define INLINEEA 0x00040000 /* inline EA area free */
|
||||
|
||||
/* from jfs_imap.h */
|
||||
|
||||
#define EXTSPERIAG 128 /* number of disk inode extent per iag */
|
||||
#define SMAPSZ 4 /* number of words per summary map */
|
||||
#define MAXAG 128 /* maximum number of allocation groups */
|
||||
|
||||
/*
|
||||
* inode allocation map:
|
||||
*
|
||||
* inode allocation map consists of
|
||||
* . the inode map control page and
|
||||
* . inode allocation group pages (per 4096 inodes)
|
||||
* which are addressed by standard JFS xtree.
|
||||
*/
|
||||
/*
|
||||
* inode allocation group page (per 4096 inodes of an AG)
|
||||
*/
|
||||
typedef struct {
|
||||
s64 agstart; /* 8: starting block of ag */
|
||||
s32 iagnum; /* 4: inode allocation group number */
|
||||
s32 inofreefwd; /* 4: ag inode free list forward */
|
||||
s32 inofreeback; /* 4: ag inode free list back */
|
||||
s32 extfreefwd; /* 4: ag inode extent free list forward */
|
||||
s32 extfreeback; /* 4: ag inode extent free list back */
|
||||
s32 iagfree; /* 4: iag free list */
|
||||
|
||||
/* summary map: 1 bit per inode extent */
|
||||
s32 inosmap[SMAPSZ]; /* 16: sum map of mapwords w/ free inodes;
|
||||
* note: this indicates free and backed
|
||||
* inodes, if the extent is not backed the
|
||||
* value will be 1. if the extent is
|
||||
* backed but all inodes are being used the
|
||||
* value will be 1. if the extent is
|
||||
* backed but at least one of the inodes is
|
||||
* free the value will be 0.
|
||||
*/
|
||||
s32 extsmap[SMAPSZ]; /* 16: sum map of mapwords w/ free extents */
|
||||
s32 nfreeinos; /* 4: number of free inodes */
|
||||
s32 nfreeexts; /* 4: number of free extents */
|
||||
/* (72) */
|
||||
u8 pad[1976]; /* 1976: pad to 2048 bytes */
|
||||
/* allocation bit map: 1 bit per inode (0 - free, 1 - allocated) */
|
||||
u32 wmap[EXTSPERIAG]; /* 512: working allocation map */
|
||||
u32 pmap[EXTSPERIAG]; /* 512: persistent allocation map */
|
||||
pxd_t inoext[EXTSPERIAG]; /* 1024: inode extent addresses */
|
||||
} iag_t; /* (4096) */
|
||||
|
||||
#endif /* _JFS_H_ */
|
|
@ -207,6 +207,8 @@ extern char *grub_scratch_mem;
|
|||
#define STAGE2_ID_MINIX_STAGE1_5 4
|
||||
#define STAGE2_ID_REISERFS_STAGE1_5 5
|
||||
#define STAGE2_ID_VSTAFS_STAGE1_5 6
|
||||
#define STAGE2_ID_JFS_STAGE1_5 7
|
||||
#define STAGE2_ID_XFS_STAGE1_5 8
|
||||
|
||||
#ifndef STAGE1_5
|
||||
# define STAGE2_ID STAGE2_ID_STAGE2
|
||||
|
@ -223,6 +225,10 @@ extern char *grub_scratch_mem;
|
|||
# define STAGE2_ID STAGE2_ID_REISERFS_STAGE1_5
|
||||
# elif defined(FSYS_VSTAFS)
|
||||
# define STAGE2_ID STAGE2_ID_VSTAFS_STAGE1_5
|
||||
# elif defined(FSYS_JFS)
|
||||
# define STAGE2_ID STAGE2_ID_JFS_STAGE1_5
|
||||
# elif defined(FSYS_XFS)
|
||||
# define STAGE2_ID STAGE2_ID_XFS_STAGE1_5
|
||||
# else
|
||||
# error "unknown Stage 2"
|
||||
# endif
|
||||
|
|
546
stage2/xfs.h
Normal file
546
stage2/xfs.h
Normal file
|
@ -0,0 +1,546 @@
|
|||
/* xfs.h - an extraction from xfsprogs-1.3.5/include/xfs* into one file */
|
||||
/*
|
||||
* GRUB -- GRand Unified Bootloader
|
||||
* Copyright (C) 2000 Silicon Graphics, Inc. All Rights Reserved.
|
||||
* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it would be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
*
|
||||
* Further, this software is distributed without any warranty that it is
|
||||
* free of the rightful claim of any third person regarding infringement
|
||||
* or the like. Any license provided herein, whether implied or
|
||||
* otherwise, applies only to this software file. Patent licenses, if
|
||||
* any, provided herein do not apply to combinations of this program with
|
||||
* other software, or any other product whatsoever.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write the Free Software Foundation, Inc., 59
|
||||
* Temple Place - Suite 330, Boston MA 02111-1307, USA.
|
||||
*
|
||||
* Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy,
|
||||
* Mountain View, CA 94043, or:
|
||||
*
|
||||
* http://www.sgi.com
|
||||
*
|
||||
* For further information regarding this notice, see:
|
||||
*
|
||||
* http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/
|
||||
*/
|
||||
|
||||
#ifndef _BITS_TYPES_H
|
||||
typedef signed char __int8_t;
|
||||
typedef unsigned char __uint8_t;
|
||||
typedef short __int16_t;
|
||||
typedef unsigned short __uint16_t;
|
||||
typedef int __int32_t;
|
||||
typedef unsigned int __uint32_t;
|
||||
typedef long long __int64_t;
|
||||
typedef unsigned long long __uint64_t;
|
||||
#endif
|
||||
|
||||
typedef __uint64_t xfs_ino_t;
|
||||
typedef __uint32_t xfs_agino_t;
|
||||
typedef __int64_t xfs_daddr_t;
|
||||
typedef __int64_t xfs_off_t;
|
||||
typedef __uint8_t uuid_t[16];
|
||||
|
||||
|
||||
/* those are from xfs_types.h */
|
||||
|
||||
typedef __uint32_t xfs_agblock_t; /* blockno in alloc. group */
|
||||
typedef __uint32_t xfs_extlen_t; /* extent length in blocks */
|
||||
typedef __uint32_t xfs_agnumber_t; /* allocation group number */
|
||||
typedef __int32_t xfs_extnum_t; /* # of extents in a file */
|
||||
typedef __int16_t xfs_aextnum_t; /* # extents in an attribute fork */
|
||||
typedef __int64_t xfs_fsize_t; /* bytes in a file */
|
||||
|
||||
typedef __uint32_t xfs_dablk_t; /* dir/attr block number (in file) */
|
||||
typedef __uint32_t xfs_dahash_t; /* dir/attr hash value */
|
||||
|
||||
/*
|
||||
* Disk based types:
|
||||
*/
|
||||
typedef __uint64_t xfs_dfsbno_t; /* blockno in filesystem (agno|agbno) */
|
||||
typedef __uint64_t xfs_drfsbno_t; /* blockno in filesystem (raw) */
|
||||
typedef __uint64_t xfs_drtbno_t; /* extent (block) in realtime area */
|
||||
typedef __uint64_t xfs_dfiloff_t; /* block number in a file */
|
||||
|
||||
typedef __uint64_t xfs_fsblock_t; /* blockno in filesystem (agno|agbno) */
|
||||
typedef __uint64_t xfs_fileoff_t; /* block number in a file */
|
||||
typedef __uint64_t xfs_filblks_t; /* number of blocks in a file */
|
||||
|
||||
|
||||
/* those are from xfs_sb.h */
|
||||
|
||||
#define XFS_SB_MAGIC 0x58465342 /* 'XFSB'*/
|
||||
#define XFS_SB_VERSION_4 4 /* 6.2+ - bitmask version */
|
||||
#define XFS_SB_VERSION_NUMBITS 0x000f
|
||||
|
||||
typedef struct xfs_sb
|
||||
{
|
||||
__uint32_t sb_magicnum; /* magic number == XFS_SB_MAGIC */
|
||||
__uint32_t sb_blocksize; /* logical block size, bytes */
|
||||
xfs_drfsbno_t sb_dblocks; /* number of data blocks */
|
||||
xfs_drfsbno_t sb_rblocks; /* number of realtime blocks */
|
||||
xfs_drtbno_t sb_rextents; /* number of realtime extents */
|
||||
uuid_t sb_uuid; /* file system unique id */
|
||||
xfs_dfsbno_t sb_logstart; /* starting block of log if internal */
|
||||
xfs_ino_t sb_rootino; /* root inode number */
|
||||
xfs_ino_t sb_rbmino; /* bitmap inode for realtime extents */
|
||||
xfs_ino_t sb_rsumino; /* summary inode for rt bitmap */
|
||||
xfs_agblock_t sb_rextsize; /* realtime extent size, blocks */
|
||||
xfs_agblock_t sb_agblocks; /* size of an allocation group */
|
||||
xfs_agnumber_t sb_agcount; /* number of allocation groups */
|
||||
xfs_extlen_t sb_rbmblocks; /* number of rt bitmap blocks */
|
||||
xfs_extlen_t sb_logblocks; /* number of log blocks */
|
||||
__uint16_t sb_versionnum; /* header version == XFS_SB_VERSION */
|
||||
__uint16_t sb_sectsize; /* volume sector size, bytes */
|
||||
__uint16_t sb_inodesize; /* inode size, bytes */
|
||||
__uint16_t sb_inopblock; /* inodes per block */
|
||||
char sb_fname[12]; /* file system name */
|
||||
__uint8_t sb_blocklog; /* log2 of sb_blocksize */
|
||||
__uint8_t sb_sectlog; /* log2 of sb_sectsize */
|
||||
__uint8_t sb_inodelog; /* log2 of sb_inodesize */
|
||||
__uint8_t sb_inopblog; /* log2 of sb_inopblock */
|
||||
__uint8_t sb_agblklog; /* log2 of sb_agblocks (rounded up) */
|
||||
__uint8_t sb_rextslog; /* log2 of sb_rextents */
|
||||
__uint8_t sb_inprogress; /* mkfs is in progress, don't mount */
|
||||
__uint8_t sb_imax_pct; /* max % of fs for inode space */
|
||||
/* statistics */
|
||||
/*
|
||||
* These fields must remain contiguous. If you really
|
||||
* want to change their layout, make sure you fix the
|
||||
* code in xfs_trans_apply_sb_deltas().
|
||||
*/
|
||||
__uint64_t sb_icount; /* allocated inodes */
|
||||
__uint64_t sb_ifree; /* free inodes */
|
||||
__uint64_t sb_fdblocks; /* free data blocks */
|
||||
__uint64_t sb_frextents; /* free realtime extents */
|
||||
/*
|
||||
* End contiguous fields.
|
||||
*/
|
||||
xfs_ino_t sb_uquotino; /* user quota inode */
|
||||
xfs_ino_t sb_gquotino; /* group quota inode */
|
||||
__uint16_t sb_qflags; /* quota flags */
|
||||
__uint8_t sb_flags; /* misc. flags */
|
||||
__uint8_t sb_shared_vn; /* shared version number */
|
||||
xfs_extlen_t sb_inoalignmt; /* inode chunk alignment, fsblocks */
|
||||
__uint32_t sb_unit; /* stripe or raid unit */
|
||||
__uint32_t sb_width; /* stripe or raid width */
|
||||
__uint8_t sb_dirblklog; /* log2 of dir block size (fsbs) */
|
||||
__uint8_t sb_dummy[7]; /* padding */
|
||||
} xfs_sb_t;
|
||||
|
||||
|
||||
/* those are from xfs_btree.h */
|
||||
|
||||
/*
|
||||
* Long form header: bmap btrees.
|
||||
*/
|
||||
typedef struct xfs_btree_lblock
|
||||
{
|
||||
__uint32_t bb_magic; /* magic number for block type */
|
||||
__uint16_t bb_level; /* 0 is a leaf */
|
||||
__uint16_t bb_numrecs; /* current # of data records */
|
||||
xfs_dfsbno_t bb_leftsib; /* left sibling block or NULLDFSBNO */
|
||||
xfs_dfsbno_t bb_rightsib; /* right sibling block or NULLDFSBNO */
|
||||
} xfs_btree_lblock_t;
|
||||
|
||||
/*
|
||||
* Combined header and structure, used by common code.
|
||||
*/
|
||||
typedef struct xfs_btree_hdr
|
||||
{
|
||||
__uint32_t bb_magic; /* magic number for block type */
|
||||
__uint16_t bb_level; /* 0 is a leaf */
|
||||
__uint16_t bb_numrecs; /* current # of data records */
|
||||
} xfs_btree_hdr_t;
|
||||
|
||||
typedef struct xfs_btree_block
|
||||
{
|
||||
xfs_btree_hdr_t bb_h; /* header */
|
||||
union {
|
||||
struct {
|
||||
xfs_agblock_t bb_leftsib;
|
||||
xfs_agblock_t bb_rightsib;
|
||||
} s; /* short form pointers */
|
||||
struct {
|
||||
xfs_dfsbno_t bb_leftsib;
|
||||
xfs_dfsbno_t bb_rightsib;
|
||||
} l; /* long form pointers */
|
||||
} bb_u; /* rest */
|
||||
} xfs_btree_block_t;
|
||||
|
||||
/* those are from xfs_bmap_btree.h */
|
||||
|
||||
/*
|
||||
* Bmap root header, on-disk form only.
|
||||
*/
|
||||
typedef struct xfs_bmdr_block
|
||||
{
|
||||
__uint16_t bb_level; /* 0 is a leaf */
|
||||
__uint16_t bb_numrecs; /* current # of data records */
|
||||
} xfs_bmdr_block_t;
|
||||
|
||||
/*
|
||||
* Bmap btree record and extent descriptor.
|
||||
* For 32-bit kernels,
|
||||
* l0:31 is an extent flag (value 1 indicates non-normal).
|
||||
* l0:0-30 and l1:9-31 are startoff.
|
||||
* l1:0-8, l2:0-31, and l3:21-31 are startblock.
|
||||
* l3:0-20 are blockcount.
|
||||
* For 64-bit kernels,
|
||||
* l0:63 is an extent flag (value 1 indicates non-normal).
|
||||
* l0:9-62 are startoff.
|
||||
* l0:0-8 and l1:21-63 are startblock.
|
||||
* l1:0-20 are blockcount.
|
||||
*/
|
||||
|
||||
#define BMBT_USE_64 1
|
||||
|
||||
typedef struct xfs_bmbt_rec_32
|
||||
{
|
||||
__uint32_t l0, l1, l2, l3;
|
||||
} xfs_bmbt_rec_32_t;
|
||||
typedef struct xfs_bmbt_rec_64
|
||||
{
|
||||
__uint64_t l0, l1;
|
||||
} xfs_bmbt_rec_64_t;
|
||||
|
||||
#if BMBT_USE_64
|
||||
typedef __uint64_t xfs_bmbt_rec_base_t; /* use this for casts */
|
||||
typedef xfs_bmbt_rec_64_t xfs_bmbt_rec_t, xfs_bmdr_rec_t;
|
||||
#else /* !BMBT_USE_64 */
|
||||
typedef __uint32_t xfs_bmbt_rec_base_t; /* use this for casts */
|
||||
typedef xfs_bmbt_rec_32_t xfs_bmbt_rec_t, xfs_bmdr_rec_t;
|
||||
#endif /* BMBT_USE_64 */
|
||||
|
||||
/*
|
||||
* Key structure for non-leaf levels of the tree.
|
||||
*/
|
||||
typedef struct xfs_bmbt_key
|
||||
{
|
||||
xfs_dfiloff_t br_startoff; /* starting file offset */
|
||||
} xfs_bmbt_key_t, xfs_bmdr_key_t;
|
||||
|
||||
typedef xfs_dfsbno_t xfs_bmbt_ptr_t, xfs_bmdr_ptr_t; /* btree pointer type */
|
||||
/* btree block header type */
|
||||
typedef struct xfs_btree_lblock xfs_bmbt_block_t;
|
||||
|
||||
|
||||
/* those are from xfs_dir2.h */
|
||||
/*
|
||||
* Directory version 2.
|
||||
* There are 4 possible formats:
|
||||
* shortform
|
||||
* single block - data with embedded leaf at the end
|
||||
* multiple data blocks, single leaf+freeindex block
|
||||
* data blocks, node&leaf blocks (btree), freeindex blocks
|
||||
*
|
||||
* The shortform format is in xfs_dir2_sf.h.
|
||||
* The single block format is in xfs_dir2_block.h.
|
||||
* The data block format is in xfs_dir2_data.h.
|
||||
* The leaf and freeindex block formats are in xfs_dir2_leaf.h.
|
||||
* Node blocks are the same as the other version, in xfs_da_btree.h.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Byte offset in data block and shortform entry.
|
||||
*/
|
||||
typedef __uint16_t xfs_dir2_data_off_t;
|
||||
|
||||
/*
|
||||
* Byte offset in a directory.
|
||||
*/
|
||||
typedef xfs_off_t xfs_dir2_off_t;
|
||||
|
||||
/* those are from xfs_da_btree.h */
|
||||
/*========================================================================
|
||||
* Directory Structure when greater than XFS_LBSIZE(mp) bytes.
|
||||
*========================================================================*/
|
||||
|
||||
/*
|
||||
* This structure is common to both leaf nodes and non-leaf nodes in the Btree.
|
||||
*
|
||||
* Is is used to manage a doubly linked list of all blocks at the same
|
||||
* level in the Btree, and to identify which type of block this is.
|
||||
*/
|
||||
#define XFS_DIR2_LEAF1_MAGIC 0xd2f1 /* magic number: v2 dirlf single blks */
|
||||
#define XFS_DIR2_LEAFN_MAGIC 0xd2ff /* magic number: v2 dirlf multi blks */
|
||||
|
||||
typedef struct xfs_da_blkinfo {
|
||||
xfs_dablk_t forw; /* previous block in list */
|
||||
xfs_dablk_t back; /* following block in list */
|
||||
__uint16_t magic; /* validity check on block */
|
||||
__uint16_t pad; /* unused */
|
||||
} xfs_da_blkinfo_t;
|
||||
|
||||
/*
|
||||
* This is the structure of the root and intermediate nodes in the Btree.
|
||||
* The leaf nodes are defined above.
|
||||
*
|
||||
* Entries are not packed.
|
||||
*
|
||||
* Since we have duplicate keys, use a binary search but always follow
|
||||
* all match in the block, not just the first match found.
|
||||
*/
|
||||
|
||||
typedef struct xfs_da_intnode {
|
||||
struct xfs_da_node_hdr { /* constant-structure header block */
|
||||
xfs_da_blkinfo_t info; /* block type, links, etc. */
|
||||
__uint16_t count; /* count of active entries */
|
||||
__uint16_t level; /* level above leaves (leaf == 0) */
|
||||
} hdr;
|
||||
struct xfs_da_node_entry {
|
||||
xfs_dahash_t hashval; /* hash value for this descendant */
|
||||
xfs_dablk_t before; /* Btree block before this key */
|
||||
} btree[1]; /* variable sized array of keys */
|
||||
} xfs_da_intnode_t;
|
||||
|
||||
|
||||
/* those are from xfs_dir2_data.h */
|
||||
/*
|
||||
* Directory format 2, data block structures.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Constants.
|
||||
*/
|
||||
#define XFS_DIR2_DATA_FREE_TAG 0xffff
|
||||
#define XFS_DIR2_DATA_FD_COUNT 3
|
||||
|
||||
/*
|
||||
* Structures.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Describe a free area in the data block.
|
||||
* The freespace will be formatted as a xfs_dir2_data_unused_t.
|
||||
*/
|
||||
typedef struct xfs_dir2_data_free {
|
||||
xfs_dir2_data_off_t offset; /* start of freespace */
|
||||
xfs_dir2_data_off_t length; /* length of freespace */
|
||||
} xfs_dir2_data_free_t;
|
||||
|
||||
/*
|
||||
* Header for the data blocks.
|
||||
* Always at the beginning of a directory-sized block.
|
||||
* The code knows that XFS_DIR2_DATA_FD_COUNT is 3.
|
||||
*/
|
||||
typedef struct xfs_dir2_data_hdr {
|
||||
__uint32_t magic; /* XFS_DIR2_DATA_MAGIC */
|
||||
/* or XFS_DIR2_BLOCK_MAGIC */
|
||||
xfs_dir2_data_free_t bestfree[XFS_DIR2_DATA_FD_COUNT];
|
||||
} xfs_dir2_data_hdr_t;
|
||||
|
||||
/*
|
||||
* Active entry in a data block. Aligned to 8 bytes.
|
||||
* Tag appears as the last 2 bytes.
|
||||
*/
|
||||
typedef struct xfs_dir2_data_entry {
|
||||
xfs_ino_t inumber; /* inode number */
|
||||
__uint8_t namelen; /* name length */
|
||||
__uint8_t name[1]; /* name bytes, no null */
|
||||
/* variable offset */
|
||||
xfs_dir2_data_off_t tag; /* starting offset of us */
|
||||
} xfs_dir2_data_entry_t;
|
||||
|
||||
/*
|
||||
* Unused entry in a data block. Aligned to 8 bytes.
|
||||
* Tag appears as the last 2 bytes.
|
||||
*/
|
||||
typedef struct xfs_dir2_data_unused {
|
||||
__uint16_t freetag; /* XFS_DIR2_DATA_FREE_TAG */
|
||||
xfs_dir2_data_off_t length; /* total free length */
|
||||
/* variable offset */
|
||||
xfs_dir2_data_off_t tag; /* starting offset of us */
|
||||
} xfs_dir2_data_unused_t;
|
||||
|
||||
typedef union {
|
||||
xfs_dir2_data_entry_t entry;
|
||||
xfs_dir2_data_unused_t unused;
|
||||
} xfs_dir2_data_union_t;
|
||||
|
||||
|
||||
/* those are from xfs_dir2_leaf.h */
|
||||
/*
|
||||
* Directory version 2, leaf block structures.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Leaf block header.
|
||||
*/
|
||||
typedef struct xfs_dir2_leaf_hdr {
|
||||
xfs_da_blkinfo_t info; /* header for da routines */
|
||||
__uint16_t count; /* count of entries */
|
||||
__uint16_t stale; /* count of stale entries */
|
||||
} xfs_dir2_leaf_hdr_t;
|
||||
|
||||
|
||||
/* those are from xfs_dir2_block.h */
|
||||
/*
|
||||
* xfs_dir2_block.h
|
||||
* Directory version 2, single block format structures
|
||||
*/
|
||||
|
||||
/*
|
||||
* The single block format is as follows:
|
||||
* xfs_dir2_data_hdr_t structure
|
||||
* xfs_dir2_data_entry_t and xfs_dir2_data_unused_t structures
|
||||
* xfs_dir2_leaf_entry_t structures
|
||||
* xfs_dir2_block_tail_t structure
|
||||
*/
|
||||
|
||||
#define XFS_DIR2_BLOCK_MAGIC 0x58443242 /* XD2B: for one block dirs */
|
||||
|
||||
typedef struct xfs_dir2_block_tail {
|
||||
__uint32_t count; /* count of leaf entries */
|
||||
__uint32_t stale; /* count of stale lf entries */
|
||||
} xfs_dir2_block_tail_t;
|
||||
|
||||
|
||||
/* those are from xfs_dir2_sf.h */
|
||||
|
||||
/*
|
||||
* Directory layout when stored internal to an inode.
|
||||
*
|
||||
* Small directories are packed as tightly as possible so as to
|
||||
* fit into the literal area of the inode.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Inode number stored as 8 8-bit values.
|
||||
*/
|
||||
typedef struct { __uint8_t i[8]; } xfs_dir2_ino8_t;
|
||||
|
||||
/*
|
||||
* Inode number stored as 4 8-bit values.
|
||||
* Works a lot of the time, when all the inode numbers in a directory
|
||||
* fit in 32 bits.
|
||||
*/
|
||||
typedef struct { __uint8_t i[4]; } xfs_dir2_ino4_t;
|
||||
|
||||
typedef union {
|
||||
xfs_dir2_ino8_t i8;
|
||||
xfs_dir2_ino4_t i4;
|
||||
} xfs_dir2_inou_t;
|
||||
|
||||
/*
|
||||
* Normalized offset (in a data block) of the entry, really xfs_dir2_data_off_t.
|
||||
* Only need 16 bits, this is the byte offset into the single block form.
|
||||
*/
|
||||
typedef struct { __uint8_t i[2]; } xfs_dir2_sf_off_t;
|
||||
|
||||
/*
|
||||
* The parent directory has a dedicated field, and the self-pointer must
|
||||
* be calculated on the fly.
|
||||
*
|
||||
* Entries are packed toward the top as tightly as possible. The header
|
||||
* and the elements must be bcopy()'d out into a work area to get correct
|
||||
* alignment for the inode number fields.
|
||||
*/
|
||||
typedef struct xfs_dir2_sf_hdr {
|
||||
__uint8_t count; /* count of entries */
|
||||
__uint8_t i8count; /* count of 8-byte inode #s */
|
||||
xfs_dir2_inou_t parent; /* parent dir inode number */
|
||||
} xfs_dir2_sf_hdr_t;
|
||||
|
||||
typedef struct xfs_dir2_sf_entry {
|
||||
__uint8_t namelen; /* actual name length */
|
||||
xfs_dir2_sf_off_t offset; /* saved offset */
|
||||
__uint8_t name[1]; /* name, variable size */
|
||||
xfs_dir2_inou_t inumber; /* inode number, var. offset */
|
||||
} xfs_dir2_sf_entry_t;
|
||||
|
||||
typedef struct xfs_dir2_sf {
|
||||
xfs_dir2_sf_hdr_t hdr; /* shortform header */
|
||||
xfs_dir2_sf_entry_t list[1]; /* shortform entries */
|
||||
} xfs_dir2_sf_t;
|
||||
|
||||
/* those are from xfs_dinode.h */
|
||||
|
||||
#define XFS_DINODE_VERSION_1 1
|
||||
#define XFS_DINODE_VERSION_2 2
|
||||
#define XFS_DINODE_MAGIC 0x494e /* 'IN' */
|
||||
|
||||
/*
|
||||
* Disk inode structure.
|
||||
* This is just the header; the inode is expanded to fill a variable size
|
||||
* with the last field expanding. It is split into the core and "other"
|
||||
* because we only need the core part in the in-core inode.
|
||||
*/
|
||||
typedef struct xfs_timestamp {
|
||||
__int32_t t_sec; /* timestamp seconds */
|
||||
__int32_t t_nsec; /* timestamp nanoseconds */
|
||||
} xfs_timestamp_t;
|
||||
|
||||
/*
|
||||
* Note: Coordinate changes to this structure with the XFS_DI_* #defines
|
||||
* below and the offsets table in xfs_ialloc_log_di().
|
||||
*/
|
||||
typedef struct xfs_dinode_core
|
||||
{
|
||||
__uint16_t di_magic; /* inode magic # = XFS_DINODE_MAGIC */
|
||||
__uint16_t di_mode; /* mode and type of file */
|
||||
__int8_t di_version; /* inode version */
|
||||
__int8_t di_format; /* format of di_c data */
|
||||
__uint16_t di_onlink; /* old number of links to file */
|
||||
__uint32_t di_uid; /* owner's user id */
|
||||
__uint32_t di_gid; /* owner's group id */
|
||||
__uint32_t di_nlink; /* number of links to file */
|
||||
__uint16_t di_projid; /* owner's project id */
|
||||
__uint8_t di_pad[10]; /* unused, zeroed space */
|
||||
xfs_timestamp_t di_atime; /* time last accessed */
|
||||
xfs_timestamp_t di_mtime; /* time last modified */
|
||||
xfs_timestamp_t di_ctime; /* time created/inode modified */
|
||||
xfs_fsize_t di_size; /* number of bytes in file */
|
||||
xfs_drfsbno_t di_nblocks; /* # of direct & btree blocks used */
|
||||
xfs_extlen_t di_extsize; /* basic/minimum extent size for file */
|
||||
xfs_extnum_t di_nextents; /* number of extents in data fork */
|
||||
xfs_aextnum_t di_anextents; /* number of extents in attribute fork*/
|
||||
__uint8_t di_forkoff; /* attr fork offs, <<3 for 64b align */
|
||||
__int8_t di_aformat; /* format of attr fork's data */
|
||||
__uint32_t di_dmevmask; /* DMIG event mask */
|
||||
__uint16_t di_dmstate; /* DMIG state info */
|
||||
__uint16_t di_flags; /* random flags, XFS_DIFLAG_... */
|
||||
__uint32_t di_gen; /* generation number */
|
||||
} xfs_dinode_core_t;
|
||||
|
||||
typedef struct xfs_dinode
|
||||
{
|
||||
xfs_dinode_core_t di_core;
|
||||
xfs_agino_t di_next_unlinked;/* agi unlinked list ptr */
|
||||
union {
|
||||
xfs_bmdr_block_t di_bmbt; /* btree root block */
|
||||
xfs_bmbt_rec_32_t di_bmx[1]; /* extent list */
|
||||
xfs_dir2_sf_t di_dir2sf; /* shortform directory v2 */
|
||||
char di_c[1]; /* local contents */
|
||||
} di_u;
|
||||
} xfs_dinode_t;
|
||||
|
||||
/*
|
||||
* Values for di_format
|
||||
*/
|
||||
typedef enum xfs_dinode_fmt
|
||||
{
|
||||
XFS_DINODE_FMT_DEV, /* CHR, BLK: di_dev */
|
||||
XFS_DINODE_FMT_LOCAL, /* DIR, REG: di_c */
|
||||
/* LNK: di_symlink */
|
||||
XFS_DINODE_FMT_EXTENTS, /* DIR, REG, LNK: di_bmx */
|
||||
XFS_DINODE_FMT_BTREE, /* DIR, REG, LNK: di_bmbt */
|
||||
XFS_DINODE_FMT_UUID /* MNT: di_uuid */
|
||||
} xfs_dinode_fmt_t;
|
||||
|
||||
/*
|
||||
* File types (mode field)
|
||||
*/
|
||||
#define IFMT 0170000 /* type of file */
|
||||
#define IFDIR 0040000 /* directory */
|
||||
#define IFREG 0100000 /* regular */
|
||||
#define IFLNK 0120000 /* symbolic link */
|
Loading…
Add table
Add a link
Reference in a new issue