mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-28 18:19:23 +00:00
Compare commits
15
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
e8f07821cc | ||
|
|
dc3286ade4 | ||
|
|
46f8d358ef | ||
|
|
09c479006c | ||
|
|
4d6c69536e | ||
|
|
faf4a65e1e | ||
|
|
e5fa26e573 | ||
|
|
569766e49b | ||
|
|
4127206896 | ||
|
|
f7c7c4d4ad | ||
|
|
57bc5d431b | ||
|
|
6a7957f9f5 | ||
|
|
e88f0420b9 | ||
|
|
da98622662 | ||
|
|
fba31b5f69 |
No files matched your search
@@ -1,3 +1,73 @@
|
|||||||
|
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* configure.ac: Set version to 2.02~beta2.
|
||||||
|
|
||||||
|
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/efi/efidisk.c (name_devices): Skip Apple ghosts.
|
||||||
|
|
||||||
|
2013-12-24 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* util/grub-probe.c: Improve help message and simplify list handling.
|
||||||
|
|
||||||
|
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Fix buffer overflow in grub_efi_print_device_path.
|
||||||
|
|
||||||
|
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Show SATA device path.
|
||||||
|
|
||||||
|
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Revert grub-file usage in grub-mkconfig.
|
||||||
|
|
||||||
|
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Make newly-created files other than grub.cfg world-readable.
|
||||||
|
|
||||||
|
2013-12-24 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* util/grub.d/00_header.in: Improve compatibility with old config.
|
||||||
|
|
||||||
|
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Make rijndael.c respect aliasing rules.
|
||||||
|
|
||||||
|
Trivial backport of dfb4673da8ee52d95e0a62c9f49ca8599943f22e.
|
||||||
|
|
||||||
|
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Make grub_util_device_is_mapped_stat available in grub-emu core.
|
||||||
|
|
||||||
|
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Add -Qn to TARGET_CFLAGS if it's supported.
|
||||||
|
Fixes compilation on cygwin.
|
||||||
|
|
||||||
|
Reported by: Andrey Borzenkov.
|
||||||
|
Suggested by: Andrey Borzenkov.
|
||||||
|
|
||||||
|
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Save TARGET_CC version in modinfo.sh.
|
||||||
|
|
||||||
|
Suggested by: Andrey Borzenkov.
|
||||||
|
|
||||||
|
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Make grub_util_devmapper_part_to_disk and grub_util_find_partition_start
|
||||||
|
follow the same algorithm to avoid method mismatch. Don't assume
|
||||||
|
DMRAID- UUID to mean full disk but instead check that mapping is linear.
|
||||||
|
|
||||||
|
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Declare GRUB_EFI_VENDOR_APPLE_GUID.
|
||||||
|
|
||||||
|
2013-12-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Dump type and vendor specific data when printing device path.
|
||||||
|
|
||||||
2013-12-23 Colin Watson <cjwatson@debian.org>
|
2013-12-23 Colin Watson <cjwatson@debian.org>
|
||||||
|
|
||||||
Update some documentation to refer to Git rather than Bazaar.
|
Update some documentation to refer to Git rather than Bazaar.
|
||||||
|
|||||||
+7
-1
@@ -119,7 +119,6 @@ library = {
|
|||||||
common = grub-core/fs/sfs.c;
|
common = grub-core/fs/sfs.c;
|
||||||
common = grub-core/fs/squash4.c;
|
common = grub-core/fs/squash4.c;
|
||||||
common = grub-core/fs/tar.c;
|
common = grub-core/fs/tar.c;
|
||||||
common = grub-core/fs/greffs.c;
|
|
||||||
common = grub-core/fs/udf.c;
|
common = grub-core/fs/udf.c;
|
||||||
common = grub-core/fs/ufs2.c;
|
common = grub-core/fs/ufs2.c;
|
||||||
common = grub-core/fs/ufs.c;
|
common = grub-core/fs/ufs.c;
|
||||||
@@ -440,42 +439,49 @@ script = {
|
|||||||
name = '10_hurd';
|
name = '10_hurd';
|
||||||
common = util/grub.d/10_hurd.in;
|
common = util/grub.d/10_hurd.in;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
|
condition = COND_HOST_HURD;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
name = '10_kfreebsd';
|
name = '10_kfreebsd';
|
||||||
common = util/grub.d/10_kfreebsd.in;
|
common = util/grub.d/10_kfreebsd.in;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
|
condition = COND_HOST_KFREEBSD;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
name = '10_illumos';
|
name = '10_illumos';
|
||||||
common = util/grub.d/10_illumos.in;
|
common = util/grub.d/10_illumos.in;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
|
condition = COND_HOST_ILLUMOS;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
name = '10_netbsd';
|
name = '10_netbsd';
|
||||||
common = util/grub.d/10_netbsd.in;
|
common = util/grub.d/10_netbsd.in;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
|
condition = COND_HOST_NETBSD;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
name = '10_linux';
|
name = '10_linux';
|
||||||
common = util/grub.d/10_linux.in;
|
common = util/grub.d/10_linux.in;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
|
condition = COND_HOST_LINUX;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
name = '10_xnu';
|
name = '10_xnu';
|
||||||
common = util/grub.d/10_xnu.in;
|
common = util/grub.d/10_xnu.in;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
|
condition = COND_HOST_XNU;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
name = '20_linux_xen';
|
name = '20_linux_xen';
|
||||||
common = util/grub.d/20_linux_xen.in;
|
common = util/grub.d/20_linux_xen.in;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
|
condition = COND_HOST_LINUX;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
|
|||||||
@@ -210,6 +210,80 @@ fi
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
|
dnl Mass confusion!
|
||||||
|
dnl Older versions of GAS interpret `.code16' to mean ``generate 32-bit
|
||||||
|
dnl instructions, but implicitly insert addr32 and data32 bytes so
|
||||||
|
dnl that the code works in real mode''.
|
||||||
|
dnl
|
||||||
|
dnl Newer versions of GAS interpret `.code16' to mean ``generate 16-bit
|
||||||
|
dnl instructions,'' which seems right. This requires the programmer
|
||||||
|
dnl to explicitly insert addr32 and data32 instructions when they want
|
||||||
|
dnl them.
|
||||||
|
dnl
|
||||||
|
dnl We only support the newer versions, because the old versions cause
|
||||||
|
dnl major pain, by requiring manual assembly to get 16-bit instructions into
|
||||||
|
dnl asm files.
|
||||||
|
AC_DEFUN([grub_I386_ASM_ADDR32],
|
||||||
|
[AC_REQUIRE([AC_PROG_CC])
|
||||||
|
AC_REQUIRE([grub_I386_ASM_PREFIX_REQUIREMENT])
|
||||||
|
AC_MSG_CHECKING([for .code16 addr32 assembler support])
|
||||||
|
AC_CACHE_VAL(grub_cv_i386_asm_addr32,
|
||||||
|
[cat > conftest.s.in <<\EOF
|
||||||
|
.code16
|
||||||
|
l1: @ADDR32@ movb %al, l1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if test "x$grub_cv_i386_asm_prefix_requirement" = xyes; then
|
||||||
|
sed -e s/@ADDR32@/addr32/ < conftest.s.in > conftest.s
|
||||||
|
else
|
||||||
|
sed -e s/@ADDR32@/addr32\;/ < conftest.s.in > conftest.s
|
||||||
|
fi
|
||||||
|
|
||||||
|
if AC_TRY_COMMAND([${CC-cc} ${TARGET_CCASFLAGS} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then
|
||||||
|
grub_cv_i386_asm_addr32=yes
|
||||||
|
else
|
||||||
|
grub_cv_i386_asm_addr32=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f conftest*])
|
||||||
|
|
||||||
|
AC_MSG_RESULT([$grub_cv_i386_asm_addr32])])
|
||||||
|
|
||||||
|
dnl Later versions of GAS requires that addr32 and data32 prefixes
|
||||||
|
dnl appear in the same lines as the instructions they modify, while
|
||||||
|
dnl earlier versions requires that they appear in separate lines.
|
||||||
|
AC_DEFUN([grub_I386_ASM_PREFIX_REQUIREMENT],
|
||||||
|
[AC_REQUIRE([AC_PROG_CC])
|
||||||
|
AC_MSG_CHECKING(dnl
|
||||||
|
[whether addr32 must be in the same line as the instruction])
|
||||||
|
AC_CACHE_VAL(grub_cv_i386_asm_prefix_requirement,
|
||||||
|
[cat > conftest.s <<\EOF
|
||||||
|
.code16
|
||||||
|
l1: addr32 movb %al, l1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if AC_TRY_COMMAND([${CC-cc} ${TARGET_CCASFLAGS} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then
|
||||||
|
grub_cv_i386_asm_prefix_requirement=yes
|
||||||
|
else
|
||||||
|
grub_cv_i386_asm_prefix_requirement=no
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f conftest*])
|
||||||
|
|
||||||
|
if test "x$grub_cv_i386_asm_prefix_requirement" = xyes; then
|
||||||
|
grub_tmp_addr32="addr32"
|
||||||
|
grub_tmp_data32="data32"
|
||||||
|
else
|
||||||
|
grub_tmp_addr32="addr32;"
|
||||||
|
grub_tmp_data32="data32;"
|
||||||
|
fi
|
||||||
|
|
||||||
|
ADDR32=$grub_tmp_addr32
|
||||||
|
DATA32=$grub_tmp_data32
|
||||||
|
|
||||||
|
AC_MSG_RESULT([$grub_cv_i386_asm_prefix_requirement])])
|
||||||
|
|
||||||
|
|
||||||
dnl Check what symbol is defined as a bss start symbol.
|
dnl Check what symbol is defined as a bss start symbol.
|
||||||
dnl Written by Michael Hohmoth and Yoshinori K. Okuji.
|
dnl Written by Michael Hohmoth and Yoshinori K. Okuji.
|
||||||
AC_DEFUN([grub_CHECK_BSS_START_SYMBOL],
|
AC_DEFUN([grub_CHECK_BSS_START_SYMBOL],
|
||||||
|
|||||||
@@ -31,6 +31,10 @@
|
|||||||
#define HAVE_FONT_SOURCE @HAVE_FONT_SOURCE@
|
#define HAVE_FONT_SOURCE @HAVE_FONT_SOURCE@
|
||||||
/* Define if C symbols get an underscore after compilation. */
|
/* Define if C symbols get an underscore after compilation. */
|
||||||
#define HAVE_ASM_USCORE @HAVE_ASM_USCORE@
|
#define HAVE_ASM_USCORE @HAVE_ASM_USCORE@
|
||||||
|
/* Define it to \"addr32\" or \"addr32;\" to make GAS happy. */
|
||||||
|
#define ADDR32 @ADDR32@
|
||||||
|
/* Define it to \"data32\" or \"data32;\" to make GAS happy. */
|
||||||
|
#define DATA32 @DATA32@
|
||||||
/* Define it to one of __bss_start, edata and _edata. */
|
/* Define it to one of __bss_start, edata and _edata. */
|
||||||
#define BSS_START_SYMBOL @BSS_START_SYMBOL@
|
#define BSS_START_SYMBOL @BSS_START_SYMBOL@
|
||||||
/* Define it to either end or _end. */
|
/* Define it to either end or _end. */
|
||||||
|
|||||||
+25
-24
@@ -32,7 +32,7 @@ dnl type, so there is no conflict. Variables with the prefix "TARGET_"
|
|||||||
dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target
|
dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target
|
||||||
dnl type.
|
dnl type.
|
||||||
|
|
||||||
AC_INIT([GRUB],[2.02~beta1],[bug-grub@gnu.org])
|
AC_INIT([GRUB],[2.02~beta2],[bug-grub@gnu.org])
|
||||||
|
|
||||||
AC_CONFIG_AUX_DIR([build-aux])
|
AC_CONFIG_AUX_DIR([build-aux])
|
||||||
|
|
||||||
@@ -503,6 +503,8 @@ if test "x$target_cpu" != xi386 && test "x$target_cpu" != xx86_64; then
|
|||||||
TARGET_CFLAGS="$TARGET_CFLAGS -Wcast-align"
|
TARGET_CFLAGS="$TARGET_CFLAGS -Wcast-align"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
TARGET_CC_VERSION="$(LC_ALL=C $TARGET_CC --version | head -n1)"
|
||||||
|
|
||||||
AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
|
AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
|
||||||
LDFLAGS="$TARGET_LDFLAGS -nostdlib -static"
|
LDFLAGS="$TARGET_LDFLAGS -nostdlib -static"
|
||||||
|
|
||||||
@@ -538,33 +540,12 @@ AC_COMPILE_IFELSE(
|
|||||||
# on arm clang doesn't support .arch directive
|
# on arm clang doesn't support .arch directive
|
||||||
# on mips clang doesn't support privilegied instructions, doubleword store/load
|
# on mips clang doesn't support privilegied instructions, doubleword store/load
|
||||||
# and crashes with hand-written assembly
|
# and crashes with hand-written assembly
|
||||||
if test "x$grub_cv_cc_target_clang" = xyes && ( test "x$target_cpu" = xarm \
|
if test "x$grub_cv_cc_target_clang" = xyes && ( test "x$target_cpu" = xi386 \
|
||||||
|
|| test "x$target_cpu" = xx86_64 || test "x$target_cpu" = xarm \
|
||||||
|| test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ); then
|
|| test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ); then
|
||||||
TARGET_CCASFLAGS="$TARGET_CCASFLAGS -no-integrated-as"
|
TARGET_CCASFLAGS="$TARGET_CCASFLAGS -no-integrated-as"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$grub_cv_cc_target_clang" = xyes && ( test "x$target_cpu" = xi386 \
|
|
||||||
|| test "x$target_cpu" = xx86_64 ); then
|
|
||||||
AC_CACHE_CHECK([if clang can handle .code16], [grub_cv_cc_target_clang_code16]
|
|
||||||
[
|
|
||||||
CFLAGS="$TARGET_CCASFLAGS"
|
|
||||||
AC_COMPILE_IFELSE(
|
|
||||||
[AC_LANG_PROGRAM([], [[
|
|
||||||
asm volatile (".code16\n"
|
|
||||||
"xorw %ax, %ax\n"
|
|
||||||
#ifdef __x86_64__
|
|
||||||
".code64\n"
|
|
||||||
#else
|
|
||||||
".code32\n"
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
]])],
|
|
||||||
[grub_cv_cc_target_clang_code16=yes], [grub_cv_cc_target_clang_code16=no])])
|
|
||||||
if test x$grub_cv_cc_target_clang_code16 = xno ; then
|
|
||||||
TARGET_CCASFLAGS="$TARGET_CCASFLAGS -no-integrated-as"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$grub_cv_cc_target_clang" = xyes && test "x$target_cpu" = xpowerpc; then
|
if test "x$grub_cv_cc_target_clang" = xyes && test "x$target_cpu" = xpowerpc; then
|
||||||
AC_CACHE_CHECK([if clang can handle ame instruction], [grub_cv_cc_target_clang_ame]
|
AC_CACHE_CHECK([if clang can handle ame instruction], [grub_cv_cc_target_clang_ame]
|
||||||
[
|
[
|
||||||
@@ -932,6 +913,15 @@ if test "x$target_cpu" = xarm; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
AC_CACHE_CHECK([whether option -Qn works], grub_cv_target_cc_qn, [
|
||||||
|
CFLAGS="$TARGET_CFLAGS -Qn -Werror"
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
|
[grub_cv_target_cc_qn=yes],
|
||||||
|
[grub_cv_target_cc_qn=no])])
|
||||||
|
if test "x$grub_cv_target_cc_qn" = xyes; then
|
||||||
|
TARGET_CFLAGS="$TARGET_CFLAGS -Qn"
|
||||||
|
fi
|
||||||
|
|
||||||
#
|
#
|
||||||
# Compiler features.
|
# Compiler features.
|
||||||
#
|
#
|
||||||
@@ -1067,6 +1057,8 @@ if test "x$target_cpu" = xi386; then
|
|||||||
grub_CHECK_END_SYMBOL
|
grub_CHECK_END_SYMBOL
|
||||||
fi
|
fi
|
||||||
CFLAGS="$TARGET_CFLAGS"
|
CFLAGS="$TARGET_CFLAGS"
|
||||||
|
grub_I386_ASM_PREFIX_REQUIREMENT
|
||||||
|
grub_I386_ASM_ADDR32
|
||||||
fi
|
fi
|
||||||
|
|
||||||
grub_PROG_NM_WORKS
|
grub_PROG_NM_WORKS
|
||||||
@@ -1587,6 +1579,8 @@ AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu],
|
|||||||
[AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)])
|
[AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)])
|
||||||
|
|
||||||
AC_SUBST(HAVE_ASM_USCORE)
|
AC_SUBST(HAVE_ASM_USCORE)
|
||||||
|
AC_SUBST(ADDR32)
|
||||||
|
AC_SUBST(DATA32)
|
||||||
AC_SUBST(BSS_START_SYMBOL)
|
AC_SUBST(BSS_START_SYMBOL)
|
||||||
AC_SUBST(END_SYMBOL)
|
AC_SUBST(END_SYMBOL)
|
||||||
AC_SUBST(PACKAGE)
|
AC_SUBST(PACKAGE)
|
||||||
@@ -1622,6 +1616,7 @@ AC_SUBST(TARGET_CPP)
|
|||||||
AC_SUBST(TARGET_CCAS)
|
AC_SUBST(TARGET_CCAS)
|
||||||
AC_SUBST(TARGET_OBJ2ELF)
|
AC_SUBST(TARGET_OBJ2ELF)
|
||||||
AC_SUBST(TARGET_MODULE_FORMAT)
|
AC_SUBST(TARGET_MODULE_FORMAT)
|
||||||
|
AC_SUBST(TARGET_CC_VERSION)
|
||||||
|
|
||||||
AC_SUBST(TARGET_CFLAGS)
|
AC_SUBST(TARGET_CFLAGS)
|
||||||
AC_SUBST(TARGET_LDFLAGS)
|
AC_SUBST(TARGET_LDFLAGS)
|
||||||
@@ -1671,7 +1666,13 @@ AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi])
|
|||||||
AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
|
AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
|
||||||
AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
|
AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
|
||||||
|
|
||||||
|
AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd])
|
||||||
|
AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux])
|
||||||
|
AM_CONDITIONAL([COND_HOST_NETBSD], [test x$host_kernel = xnetbsd])
|
||||||
AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
|
AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
|
||||||
|
AM_CONDITIONAL([COND_HOST_KFREEBSD], [test x$host_kernel = xkfreebsd])
|
||||||
|
AM_CONDITIONAL([COND_HOST_XNU], [test x$host_kernel = xxnu])
|
||||||
|
AM_CONDITIONAL([COND_HOST_ILLUMOS], [test x$host_kernel = xillumos])
|
||||||
|
|
||||||
AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
|
AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
|
||||||
AM_CONDITIONAL([COND_GRUB_EMU_USB], [test x$enable_grub_emu_usb = xyes])
|
AM_CONDITIONAL([COND_GRUB_EMU_USB], [test x$enable_grub_emu_usb = xyes])
|
||||||
|
|||||||
@@ -1399,11 +1399,6 @@ module = {
|
|||||||
common = fs/tar.c;
|
common = fs/tar.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = greffs;
|
|
||||||
common = fs/greffs.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = udf;
|
name = udf;
|
||||||
common = fs/udf.c;
|
common = fs/udf.c;
|
||||||
|
|||||||
@@ -165,8 +165,8 @@ start:
|
|||||||
* this area.
|
* this area.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.org GRUB_BOOT_MACHINE_BPB_START
|
. = _start + GRUB_BOOT_MACHINE_BPB_START
|
||||||
.org 4
|
. = _start + 4
|
||||||
#endif
|
#endif
|
||||||
#ifdef HYBRID_BOOT
|
#ifdef HYBRID_BOOT
|
||||||
floppy
|
floppy
|
||||||
@@ -174,7 +174,7 @@ start:
|
|||||||
scratch
|
scratch
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.org GRUB_BOOT_MACHINE_BPB_END
|
. = _start + GRUB_BOOT_MACHINE_BPB_END
|
||||||
/*
|
/*
|
||||||
* End of BIOS parameter block.
|
* End of BIOS parameter block.
|
||||||
*/
|
*/
|
||||||
@@ -183,14 +183,14 @@ kernel_address:
|
|||||||
.word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
.word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
||||||
|
|
||||||
#ifndef HYBRID_BOOT
|
#ifndef HYBRID_BOOT
|
||||||
.org GRUB_BOOT_MACHINE_KERNEL_SECTOR
|
. = _start + GRUB_BOOT_MACHINE_KERNEL_SECTOR
|
||||||
kernel_sector:
|
kernel_sector:
|
||||||
.long 1
|
.long 1
|
||||||
kernel_sector_high:
|
kernel_sector_high:
|
||||||
.long 0
|
.long 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.org GRUB_BOOT_MACHINE_BOOT_DRIVE
|
. = _start + GRUB_BOOT_MACHINE_BOOT_DRIVE
|
||||||
boot_drive:
|
boot_drive:
|
||||||
.byte 0xff /* the disk to load kernel from */
|
.byte 0xff /* the disk to load kernel from */
|
||||||
/* 0xff means use the boot drive */
|
/* 0xff means use the boot drive */
|
||||||
@@ -208,7 +208,7 @@ LOCAL(after_BPB):
|
|||||||
* possible boot drive. If GRUB is installed into a floppy,
|
* possible boot drive. If GRUB is installed into a floppy,
|
||||||
* this does nothing (only jump).
|
* this does nothing (only jump).
|
||||||
*/
|
*/
|
||||||
.org GRUB_BOOT_MACHINE_DRIVE_CHECK
|
. = _start + GRUB_BOOT_MACHINE_DRIVE_CHECK
|
||||||
boot_drive_check:
|
boot_drive_check:
|
||||||
jmp 3f /* grub-setup may overwrite this jump */
|
jmp 3f /* grub-setup may overwrite this jump */
|
||||||
testb $0x80, %dl
|
testb $0x80, %dl
|
||||||
@@ -511,13 +511,13 @@ LOCAL(message):
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HYBRID_BOOT
|
#ifdef HYBRID_BOOT
|
||||||
.org 0x1b0
|
. = _start + 0x1b0
|
||||||
kernel_sector:
|
kernel_sector:
|
||||||
.long 1
|
.long 1
|
||||||
kernel_sector_high:
|
kernel_sector_high:
|
||||||
.long 0
|
.long 0
|
||||||
#endif
|
#endif
|
||||||
.org GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC
|
. = _start + GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC
|
||||||
nt_magic:
|
nt_magic:
|
||||||
.long 0
|
.long 0
|
||||||
.word 0
|
.word 0
|
||||||
@@ -528,7 +528,7 @@ nt_magic:
|
|||||||
* sneaky, huh?
|
* sneaky, huh?
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.org GRUB_BOOT_MACHINE_PART_START
|
. = _start + GRUB_BOOT_MACHINE_PART_START
|
||||||
|
|
||||||
#ifndef HYBRID_BOOT
|
#ifndef HYBRID_BOOT
|
||||||
floppy
|
floppy
|
||||||
@@ -536,7 +536,7 @@ nt_magic:
|
|||||||
scratch
|
scratch
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
.org GRUB_BOOT_MACHINE_PART_END
|
. = _start + GRUB_BOOT_MACHINE_PART_END
|
||||||
|
|
||||||
/* the last 2 bytes in the sector 0 contain the signature */
|
/* the last 2 bytes in the sector 0 contain the signature */
|
||||||
.word GRUB_BOOT_MACHINE_SIGNATURE
|
.word GRUB_BOOT_MACHINE_SIGNATURE
|
||||||
@@ -43,7 +43,7 @@ _start:
|
|||||||
LOCAL(next):
|
LOCAL(next):
|
||||||
jmp 1f
|
jmp 1f
|
||||||
|
|
||||||
.org 8
|
. = start + 8
|
||||||
|
|
||||||
bi_pvd:
|
bi_pvd:
|
||||||
.long 0 /* LBA of primary volume descriptor. */
|
.long 0 /* LBA of primary volume descriptor. */
|
||||||
@@ -168,6 +168,6 @@ err_noboot_msg:
|
|||||||
err_cdfail_msg:
|
err_cdfail_msg:
|
||||||
.ascii "cdrom read fails\0"
|
.ascii "cdrom read fails\0"
|
||||||
|
|
||||||
.org 0x7FF
|
. = start + 0x7FF
|
||||||
|
|
||||||
.byte 0
|
.byte 0
|
||||||
@@ -362,7 +362,7 @@ LOCAL(message):
|
|||||||
.word 0
|
.word 0
|
||||||
.word 0
|
.word 0
|
||||||
|
|
||||||
.org 0x200 - GRUB_BOOT_MACHINE_LIST_SIZE
|
. = _start + 0x200 - GRUB_BOOT_MACHINE_LIST_SIZE
|
||||||
LOCAL(firstlist): /* this label has to be before the first list entry!!! */
|
LOCAL(firstlist): /* this label has to be before the first list entry!!! */
|
||||||
/* fill the first data listing with the default */
|
/* fill the first data listing with the default */
|
||||||
blocklist_default_start:
|
blocklist_default_start:
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ data_start:
|
|||||||
xorl %ebp, %ebp
|
xorl %ebp, %ebp
|
||||||
jmp LOCAL(linux_next)
|
jmp LOCAL(linux_next)
|
||||||
|
|
||||||
.org 0x1F1
|
. = data_start + 0x1F1
|
||||||
|
|
||||||
setup_sects:
|
setup_sects:
|
||||||
.byte CODE_SECTORS
|
.byte CODE_SECTORS
|
||||||
@@ -292,4 +292,4 @@ LOCAL(fail):
|
|||||||
err_int15_msg:
|
err_int15_msg:
|
||||||
.ascii "move memory fails\0"
|
.ascii "move memory fails\0"
|
||||||
|
|
||||||
.org (CODE_SECTORS + 1) * 512
|
. = _start + CODE_SECTORS * 512
|
||||||
@@ -38,5 +38,5 @@ start:
|
|||||||
/* This region is a junk. Do you say that this is wasteful?
|
/* This region is a junk. Do you say that this is wasteful?
|
||||||
But I like that the memory layout of the body is consistent
|
But I like that the memory layout of the body is consistent
|
||||||
among different kernels rather than scamping just for 1.5KB. */
|
among different kernels rather than scamping just for 1.5KB. */
|
||||||
.org 0x8200 - 0x7C00 - 0x200 - 1
|
. = _start + 0x8200 - 0x7C00 - 0x200 - 1
|
||||||
.byte 0
|
.byte 0
|
||||||
@@ -50,23 +50,23 @@ LOCAL (base):
|
|||||||
* This is a special data area.
|
* This is a special data area.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.org GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
. = _start + GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
||||||
LOCAL(compressed_size):
|
LOCAL(compressed_size):
|
||||||
.long 0
|
.long 0
|
||||||
.org GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
. = _start + GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
||||||
LOCAL(uncompressed_size):
|
LOCAL(uncompressed_size):
|
||||||
.long 0
|
.long 0
|
||||||
|
|
||||||
.org GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY
|
. = _start + GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY
|
||||||
reed_solomon_redundancy:
|
reed_solomon_redundancy:
|
||||||
.long 0
|
.long 0
|
||||||
.org GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_LENGTH
|
. = _start + GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_LENGTH
|
||||||
.short (LOCAL(reed_solomon_part) - _start)
|
.short (LOCAL(reed_solomon_part) - _start)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is the area for all of the special variables.
|
* This is the area for all of the special variables.
|
||||||
*/
|
*/
|
||||||
.org GRUB_DECOMPRESSOR_I386_PC_BOOT_DEVICE
|
. = _start + GRUB_DECOMPRESSOR_I386_PC_BOOT_DEVICE
|
||||||
LOCAL(boot_dev):
|
LOCAL(boot_dev):
|
||||||
.byte 0xFF, 0xFF, 0xFF
|
.byte 0xFF, 0xFF, 0xFF
|
||||||
LOCAL(boot_drive):
|
LOCAL(boot_drive):
|
||||||
@@ -89,13 +89,13 @@ LOCAL (codestart):
|
|||||||
sti /* we're safe again */
|
sti /* we're safe again */
|
||||||
|
|
||||||
/* save the boot drive */
|
/* save the boot drive */
|
||||||
movb %dl, LOCAL(boot_drive)
|
ADDR32 movb %dl, LOCAL(boot_drive)
|
||||||
|
|
||||||
/* reset disk system (%ah = 0) */
|
/* reset disk system (%ah = 0) */
|
||||||
int $0x13
|
int $0x13
|
||||||
|
|
||||||
/* transition to protected mode */
|
/* transition to protected mode */
|
||||||
calll real_to_prot
|
DATA32 call real_to_prot
|
||||||
|
|
||||||
/* The ".code32" directive takes GAS out of 16-bit mode. */
|
/* The ".code32" directive takes GAS out of 16-bit mode. */
|
||||||
.code32
|
.code32
|
||||||
@@ -149,7 +149,7 @@ gate_a20_try_bios:
|
|||||||
movw $0x2401, %ax
|
movw $0x2401, %ax
|
||||||
int $0x15
|
int $0x15
|
||||||
|
|
||||||
calll real_to_prot
|
DATA32 call real_to_prot
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
popl %ebp
|
popl %ebp
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ _start:
|
|||||||
|
|
||||||
jmp 1f
|
jmp 1f
|
||||||
|
|
||||||
.org GRUB_BOOT_I386_QEMU_CORE_ENTRY_ADDR
|
. = _start + GRUB_BOOT_I386_QEMU_CORE_ENTRY_ADDR
|
||||||
VARIABLE(grub_core_entry_addr)
|
VARIABLE(grub_core_entry_addr)
|
||||||
.long 0
|
.long 0
|
||||||
1:
|
1:
|
||||||
@@ -48,7 +48,7 @@ VARIABLE(grub_core_entry_addr)
|
|||||||
/* Transition to protected mode. We use pushl to force generation
|
/* Transition to protected mode. We use pushl to force generation
|
||||||
of a flat return address. */
|
of a flat return address. */
|
||||||
pushl $1f
|
pushl $1f
|
||||||
jmpl real_to_prot
|
DATA32 jmp real_to_prot
|
||||||
.code32
|
.code32
|
||||||
/* Ensure A20 is enabled. We're in qemu, so control port A works
|
/* Ensure A20 is enabled. We're in qemu, so control port A works
|
||||||
and there is no need to wait since there is no real logic, it's
|
and there is no need to wait since there is no real logic, it's
|
||||||
@@ -66,9 +66,9 @@ VARIABLE(grub_core_entry_addr)
|
|||||||
/* Intel, in its infinite wisdom, decided to put the i8086 entry point
|
/* Intel, in its infinite wisdom, decided to put the i8086 entry point
|
||||||
*right here* and this is why we need this kludge. */
|
*right here* and this is why we need this kludge. */
|
||||||
|
|
||||||
.org GRUB_BOOT_MACHINE_SIZE - 16
|
. = GRUB_BOOT_MACHINE_SIZE - 16
|
||||||
|
|
||||||
.code16
|
.code16
|
||||||
|
|
||||||
jmp _start
|
jmp _start
|
||||||
.org GRUB_BOOT_MACHINE_SIZE
|
. = GRUB_BOOT_MACHINE_SIZE
|
||||||
@@ -162,7 +162,7 @@ retry_cs5536:
|
|||||||
|
|
||||||
b continue
|
b continue
|
||||||
|
|
||||||
.org GRUB_CPU_LOONGSON_FLASH_TLB_REFILL - GRUB_CPU_LOONGSON_FLASH_START
|
. = start + GRUB_CPU_LOONGSON_FLASH_TLB_REFILL - GRUB_CPU_LOONGSON_FLASH_START
|
||||||
tlb_refill:
|
tlb_refill:
|
||||||
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
||||||
mfc0 $s2, GRUB_CPU_LOONGSON_COP0_BADVADDR
|
mfc0 $s2, GRUB_CPU_LOONGSON_COP0_BADVADDR
|
||||||
@@ -196,13 +196,13 @@ tlb_refill:
|
|||||||
b fatal
|
b fatal
|
||||||
addiu $a0, $a0, %lo(unhandled_tlb_refill)
|
addiu $a0, $a0, %lo(unhandled_tlb_refill)
|
||||||
|
|
||||||
.org GRUB_CPU_LOONGSON_FLASH_CACHE_ERROR - GRUB_CPU_LOONGSON_FLASH_START
|
. = start + GRUB_CPU_LOONGSON_FLASH_CACHE_ERROR - GRUB_CPU_LOONGSON_FLASH_START
|
||||||
cache_error:
|
cache_error:
|
||||||
lui $a0, %hi(unhandled_cache_error)
|
lui $a0, %hi(unhandled_cache_error)
|
||||||
b fatal
|
b fatal
|
||||||
addiu $a0, $a0, %lo(unhandled_cache_error)
|
addiu $a0, $a0, %lo(unhandled_cache_error)
|
||||||
|
|
||||||
.org GRUB_CPU_LOONGSON_FLASH_OTHER_EXCEPTION - GRUB_CPU_LOONGSON_FLASH_START
|
. = start + GRUB_CPU_LOONGSON_FLASH_OTHER_EXCEPTION - GRUB_CPU_LOONGSON_FLASH_START
|
||||||
other_exception:
|
other_exception:
|
||||||
mfc0 $s0, GRUB_CPU_LOONGSON_COP0_CAUSE
|
mfc0 $s0, GRUB_CPU_LOONGSON_COP0_CAUSE
|
||||||
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
||||||
|
|||||||
@@ -39,13 +39,13 @@ start:
|
|||||||
bal codestart
|
bal codestart
|
||||||
nop
|
nop
|
||||||
base:
|
base:
|
||||||
.org GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
. = _start + GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
||||||
compressed_size:
|
compressed_size:
|
||||||
.long 0
|
.long 0
|
||||||
.org GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
. = _start + GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
||||||
uncompressed_size:
|
uncompressed_size:
|
||||||
.long 0
|
.long 0
|
||||||
.org GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_ADDR
|
. = _start + GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_ADDR
|
||||||
uncompressed_addr:
|
uncompressed_addr:
|
||||||
.long 0
|
.long 0
|
||||||
codestart:
|
codestart:
|
||||||
|
|||||||
@@ -41,9 +41,9 @@ pic_base:
|
|||||||
* After loading in that block we will execute it by jumping to the
|
* After loading in that block we will execute it by jumping to the
|
||||||
* load address plus the size of the prepended A.OUT header (32 bytes).
|
* load address plus the size of the prepended A.OUT header (32 bytes).
|
||||||
*/
|
*/
|
||||||
.org GRUB_BOOT_MACHINE_BOOT_DEVPATH
|
. = _start + GRUB_BOOT_MACHINE_BOOT_DEVPATH
|
||||||
boot_path:
|
boot_path:
|
||||||
.org GRUB_BOOT_MACHINE_KERNEL_BYTE
|
. = _start + GRUB_BOOT_MACHINE_KERNEL_BYTE
|
||||||
boot_path_end:
|
boot_path_end:
|
||||||
kernel_byte: .xword (2 << 9)
|
kernel_byte: .xword (2 << 9)
|
||||||
kernel_address: .word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
kernel_address: .word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
||||||
@@ -52,7 +52,7 @@ kernel_address: .word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
|||||||
#define boot_path_end (_start + 1024)
|
#define boot_path_end (_start + 1024)
|
||||||
#include <grub/offsets.h>
|
#include <grub/offsets.h>
|
||||||
|
|
||||||
.org 8
|
. = _start + 8
|
||||||
kernel_byte: .xword (2 << 9)
|
kernel_byte: .xword (2 << 9)
|
||||||
kernel_size: .word 512
|
kernel_size: .word 512
|
||||||
kernel_address: .word GRUB_BOOT_SPARC64_IEEE1275_IMAGE_ADDRESS
|
kernel_address: .word GRUB_BOOT_SPARC64_IEEE1275_IMAGE_ADDRESS
|
||||||
@@ -224,7 +224,7 @@ bootpath_known:
|
|||||||
#else
|
#else
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
.org GRUB_BOOT_MACHINE_CODE_END
|
. = _start + GRUB_BOOT_MACHINE_CODE_END
|
||||||
|
|
||||||
/* the last 4 bytes in the sector 0 contain the signature */
|
/* the last 4 bytes in the sector 0 contain the signature */
|
||||||
.word GRUB_BOOT_MACHINE_SIGNATURE
|
.word GRUB_BOOT_MACHINE_SIGNATURE
|
||||||
@@ -136,7 +136,7 @@ lastlist:
|
|||||||
.word 0
|
.word 0
|
||||||
.word 0
|
.word 0
|
||||||
|
|
||||||
.org (0x200 - GRUB_BOOT_SPARC64_IEEE1275_LIST_SIZE)
|
. = _start + (0x200 - GRUB_BOOT_SPARC64_IEEE1275_LIST_SIZE)
|
||||||
blocklist_default_start:
|
blocklist_default_start:
|
||||||
.word 0
|
.word 0
|
||||||
.word 2
|
.word 2
|
||||||
|
|||||||
@@ -669,7 +669,6 @@ grub_efidisk_get_device_handle (grub_disk_t disk)
|
|||||||
|
|
||||||
case 'h':
|
case 'h':
|
||||||
/* If this is the whole disk, just return its own data. */
|
/* If this is the whole disk, just return its own data. */
|
||||||
grub_printf ("parent handle = %p\n", d->handle);
|
|
||||||
if (! disk->partition)
|
if (! disk->partition)
|
||||||
return d->handle;
|
return d->handle;
|
||||||
|
|
||||||
@@ -680,24 +679,13 @@ grub_efidisk_get_device_handle (grub_disk_t disk)
|
|||||||
struct grub_efidisk_data *c;
|
struct grub_efidisk_data *c;
|
||||||
|
|
||||||
devices = make_devices ();
|
devices = make_devices ();
|
||||||
grub_efi_print_device_path (d->device_path);
|
FOR_CHILDREN (c, devices)
|
||||||
for (c = devices; c; c = c->next)
|
|
||||||
{
|
{
|
||||||
grub_efi_hard_drive_device_path_t *hd;
|
grub_efi_hard_drive_device_path_t *hd;
|
||||||
|
|
||||||
hd = (grub_efi_hard_drive_device_path_t *) c->last_device_path;
|
hd = (grub_efi_hard_drive_device_path_t *) c->last_device_path;
|
||||||
|
|
||||||
grub_efi_print_device_path (c->device_path);
|
if ((GRUB_EFI_DEVICE_PATH_TYPE (c->last_device_path)
|
||||||
grub_printf ("part %d = %x, %x, %x, %x, %x, %x\n",
|
|
||||||
is_child (c, d),
|
|
||||||
(int) GRUB_EFI_DEVICE_PATH_TYPE (c->last_device_path),
|
|
||||||
(int) GRUB_EFI_DEVICE_PATH_SUBTYPE (c->last_device_path),
|
|
||||||
(int) hd->partition_start, (int) hd->partition_size,
|
|
||||||
(int) grub_partition_get_start (disk->partition),
|
|
||||||
(int) grub_partition_get_len (disk->partition));
|
|
||||||
|
|
||||||
if (is_child (c, d)
|
|
||||||
&& (GRUB_EFI_DEVICE_PATH_TYPE (c->last_device_path)
|
|
||||||
== GRUB_EFI_MEDIA_DEVICE_PATH_TYPE)
|
== GRUB_EFI_MEDIA_DEVICE_PATH_TYPE)
|
||||||
&& (GRUB_EFI_DEVICE_PATH_SUBTYPE (c->last_device_path)
|
&& (GRUB_EFI_DEVICE_PATH_SUBTYPE (c->last_device_path)
|
||||||
== GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE)
|
== GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE)
|
||||||
|
|||||||
@@ -1,314 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2013 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 3 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, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/disk.h>
|
|
||||||
#include <grub/archelp.h>
|
|
||||||
|
|
||||||
#include <grub/file.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/dl.h>
|
|
||||||
#include <grub/i18n.h>
|
|
||||||
#include <grub/greffs.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
|
||||||
|
|
||||||
struct grub_greffs_data
|
|
||||||
{
|
|
||||||
grub_uint32_t dofs;
|
|
||||||
};
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
get_string (grub_disk_t disk,
|
|
||||||
const struct grub_greffs_header *head,
|
|
||||||
grub_uint32_t fn,
|
|
||||||
char **buf, grub_size_t *size)
|
|
||||||
{
|
|
||||||
grub_uint32_t desc[2];
|
|
||||||
grub_size_t read_size;
|
|
||||||
|
|
||||||
if (grub_disk_read (disk, 0,
|
|
||||||
grub_cpu_to_le32 (head->string_ptrs_offset)
|
|
||||||
+ fn * sizeof (desc[0]), sizeof (desc), &desc))
|
|
||||||
return grub_errno;
|
|
||||||
read_size = desc[1] - desc[0];
|
|
||||||
if (*size < read_size + 1)
|
|
||||||
{
|
|
||||||
grub_free (*buf);
|
|
||||||
*size = (read_size + 4) * 2;
|
|
||||||
*buf = grub_malloc (*size);
|
|
||||||
if (!*buf)
|
|
||||||
{
|
|
||||||
*size = 0;
|
|
||||||
return grub_errno;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (grub_disk_read (disk, 0, desc[0], read_size, *buf))
|
|
||||||
return grub_errno;
|
|
||||||
(*buf)[read_size] = '\0';
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
find_file (grub_disk_t disk,
|
|
||||||
struct grub_greffs_header *head,
|
|
||||||
const char *name_in, grub_uint32_t *f, int exact)
|
|
||||||
{
|
|
||||||
grub_uint32_t num_files, cur_file = 0;
|
|
||||||
int i;
|
|
||||||
char *buf = NULL;
|
|
||||||
grub_size_t buf_size = 0;
|
|
||||||
grub_err_t err;
|
|
||||||
|
|
||||||
num_files = grub_le_to_cpu32 (head->nfiles);
|
|
||||||
|
|
||||||
for (i = 31; i >= 0; i--)
|
|
||||||
{
|
|
||||||
int cmp;
|
|
||||||
if ((cur_file | (1 << i)) > num_files)
|
|
||||||
continue;
|
|
||||||
err = get_string (disk, head, (cur_file | (1 << i)) - 1, &buf, &buf_size);
|
|
||||||
if (err)
|
|
||||||
{
|
|
||||||
grub_free (buf);
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
cmp = grub_strcmp (buf, name_in);
|
|
||||||
if (cmp <= 0)
|
|
||||||
cur_file |= (1 << i);
|
|
||||||
if (cmp == 0)
|
|
||||||
{
|
|
||||||
grub_free (buf);
|
|
||||||
*f = cur_file - 1;
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_free (buf);
|
|
||||||
if (!exact)
|
|
||||||
{
|
|
||||||
*f = cur_file;
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"),
|
|
||||||
name_in);
|
|
||||||
}
|
|
||||||
|
|
||||||
static char *
|
|
||||||
canonicalize (const char *name_in, int make_dir)
|
|
||||||
{
|
|
||||||
const char *iptr;
|
|
||||||
char *out, *optr;
|
|
||||||
out = grub_malloc (grub_strlen (name_in) + 2);
|
|
||||||
if (!out)
|
|
||||||
return NULL;
|
|
||||||
for (iptr = name_in, optr = out; *iptr; )
|
|
||||||
{
|
|
||||||
while (*iptr == '/')
|
|
||||||
iptr++;
|
|
||||||
if (iptr[0] == '.' && (iptr[1] == '/' || iptr[1] == 0))
|
|
||||||
{
|
|
||||||
iptr += 2;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (iptr[0] == '.' && iptr[1] == '.' && (iptr[2] == '/' || iptr[2] == 0))
|
|
||||||
{
|
|
||||||
iptr += 3;
|
|
||||||
if (optr == out)
|
|
||||||
continue;
|
|
||||||
for (optr -= 2; optr >= out && *optr != '/'; optr--);
|
|
||||||
optr++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
while (*iptr && *iptr != '/')
|
|
||||||
*optr++ = *iptr++;
|
|
||||||
if (*iptr)
|
|
||||||
*optr++ = *iptr++;
|
|
||||||
else if (make_dir && optr != out)
|
|
||||||
*optr++ = '/';
|
|
||||||
}
|
|
||||||
*optr = 0;
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_greffs_dir (grub_device_t device, const char *path_in,
|
|
||||||
grub_fs_dir_hook_t hook, void *hook_data)
|
|
||||||
{
|
|
||||||
grub_err_t err;
|
|
||||||
grub_uint32_t cur_file, num_files;
|
|
||||||
char *buf = 0;
|
|
||||||
grub_size_t buf_size = 0;
|
|
||||||
char *can;
|
|
||||||
grub_size_t len;
|
|
||||||
struct grub_greffs_header head;
|
|
||||||
|
|
||||||
if (grub_disk_read (device->disk, 0, 0, sizeof (head), &head))
|
|
||||||
return grub_error (GRUB_ERR_BAD_FS, "not a greffs filesystem");
|
|
||||||
|
|
||||||
if (grub_memcmp (head.magic, GRUB_GREFFS_MAGIC, sizeof (head.magic)) != 0)
|
|
||||||
return grub_error (GRUB_ERR_BAD_FS, "not a greffs filesystem");
|
|
||||||
|
|
||||||
can = canonicalize (path_in, 1);
|
|
||||||
if (!can)
|
|
||||||
return grub_errno;
|
|
||||||
|
|
||||||
if (can[0] == '\0')
|
|
||||||
cur_file = 0;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
err = find_file (device->disk, &head, can, &cur_file, 0);
|
|
||||||
if (err)
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
num_files = grub_le_to_cpu32 (head.nfiles);
|
|
||||||
|
|
||||||
len = grub_strlen (can);
|
|
||||||
|
|
||||||
while (cur_file < num_files)
|
|
||||||
{
|
|
||||||
char *p, *n;
|
|
||||||
struct grub_dirhook_info info;
|
|
||||||
|
|
||||||
err = get_string (device->disk, &head, cur_file, &buf, &buf_size);
|
|
||||||
if (err)
|
|
||||||
goto fail;
|
|
||||||
if (grub_memcmp (can, buf, len) != 0)
|
|
||||||
break;
|
|
||||||
grub_memset (&info, 0, sizeof (info));
|
|
||||||
|
|
||||||
n = buf + len;
|
|
||||||
while (*n == '/')
|
|
||||||
n++;
|
|
||||||
|
|
||||||
p = grub_strchr (n, '/');
|
|
||||||
if (p)
|
|
||||||
*p = 0;
|
|
||||||
info.dir = (p != NULL);
|
|
||||||
if (hook (n, &info, hook_data))
|
|
||||||
goto fail;
|
|
||||||
if (!p)
|
|
||||||
cur_file++;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*p = '/' + 1;
|
|
||||||
p[1] = '\0';
|
|
||||||
err = find_file (device->disk, &head, buf, &cur_file, 0);
|
|
||||||
if (err)
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fail:
|
|
||||||
grub_free (buf);
|
|
||||||
grub_free (can);
|
|
||||||
return grub_errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_greffs_open (grub_file_t file, const char *name_in)
|
|
||||||
{
|
|
||||||
struct grub_greffs_header head;
|
|
||||||
struct grub_greffs_data *data;
|
|
||||||
struct grub_greffs_inode inode;
|
|
||||||
grub_err_t err;
|
|
||||||
grub_uint32_t cur_file;
|
|
||||||
char *can;
|
|
||||||
|
|
||||||
if (grub_disk_read (file->device->disk, 0, 0, sizeof (head), &head))
|
|
||||||
return grub_error (GRUB_ERR_BAD_FS, "not a greffs filesystem");
|
|
||||||
|
|
||||||
if (grub_memcmp (head.magic, GRUB_GREFFS_MAGIC, sizeof (head.magic)) != 0)
|
|
||||||
return grub_error (GRUB_ERR_BAD_FS, "not a greffs filesystem");
|
|
||||||
|
|
||||||
can = canonicalize (name_in, 0);
|
|
||||||
if (!can)
|
|
||||||
return grub_errno;
|
|
||||||
|
|
||||||
err = find_file (file->device->disk, &head, can, &cur_file, 1);
|
|
||||||
grub_free (can);
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
data = grub_malloc (sizeof (*data));
|
|
||||||
if (!data)
|
|
||||||
return grub_errno;
|
|
||||||
if (grub_disk_read (file->device->disk,
|
|
||||||
0, grub_le_to_cpu32 (head.inodes_offset)
|
|
||||||
+ sizeof (inode) * cur_file, sizeof (inode), &inode))
|
|
||||||
return grub_error (GRUB_ERR_BAD_FS, "not a greffs filesystem");
|
|
||||||
|
|
||||||
data->dofs = grub_cpu_to_le32 (inode.start);
|
|
||||||
file->size = grub_cpu_to_le32 (inode.size);
|
|
||||||
|
|
||||||
file->data = data;
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_ssize_t
|
|
||||||
grub_greffs_read (grub_file_t file, char *buf, grub_size_t len)
|
|
||||||
{
|
|
||||||
struct grub_greffs_data *data;
|
|
||||||
grub_ssize_t ret;
|
|
||||||
|
|
||||||
data = file->data;
|
|
||||||
|
|
||||||
file->device->disk->read_hook = file->read_hook;
|
|
||||||
file->device->disk->read_hook_data = file->read_hook_data;
|
|
||||||
ret = (grub_disk_read (file->device->disk, 0, data->dofs + file->offset,
|
|
||||||
len, buf)) ? -1 : (grub_ssize_t) len;
|
|
||||||
file->device->disk->read_hook = 0;
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_greffs_close (grub_file_t file)
|
|
||||||
{
|
|
||||||
struct grub_greffs_data *data;
|
|
||||||
|
|
||||||
data = file->data;
|
|
||||||
grub_free (data);
|
|
||||||
|
|
||||||
return grub_errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct grub_fs grub_greffs_fs = {
|
|
||||||
.name = "greffs",
|
|
||||||
.dir = grub_greffs_dir,
|
|
||||||
.open = grub_greffs_open,
|
|
||||||
.read = grub_greffs_read,
|
|
||||||
.close = grub_greffs_close,
|
|
||||||
#ifdef GRUB_UTIL
|
|
||||||
.reserved_first_sector = 0,
|
|
||||||
.blocklist_install = 0,
|
|
||||||
#endif
|
|
||||||
};
|
|
||||||
|
|
||||||
GRUB_MOD_INIT (greffs)
|
|
||||||
{
|
|
||||||
grub_fs_register (&grub_greffs_fs);
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_FINI (greffs)
|
|
||||||
{
|
|
||||||
grub_fs_unregister (&grub_greffs_fs);
|
|
||||||
}
|
|
||||||
@@ -51,7 +51,7 @@ FUNCTION(_start)
|
|||||||
b codestart
|
b codestart
|
||||||
|
|
||||||
@ Size of final image integrated module blob - set by grub-mkimage
|
@ Size of final image integrated module blob - set by grub-mkimage
|
||||||
.org GRUB_KERNEL_MACHINE_TOTAL_MODULE_SIZE
|
.org _start + GRUB_KERNEL_MACHINE_TOTAL_MODULE_SIZE
|
||||||
VARIABLE(grub_total_module_size)
|
VARIABLE(grub_total_module_size)
|
||||||
.long 0
|
.long 0
|
||||||
|
|
||||||
|
|||||||
+144
-132
@@ -447,28 +447,28 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp)
|
|||||||
{
|
{
|
||||||
case GRUB_EFI_PCI_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_PCI_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_pci_device_path_t pci;
|
grub_efi_pci_device_path_t *pci
|
||||||
grub_memcpy (&pci, dp, len);
|
= (grub_efi_pci_device_path_t *) dp;
|
||||||
grub_printf ("/PCI(%x,%x)",
|
grub_printf ("/PCI(%x,%x)",
|
||||||
(unsigned) pci.function, (unsigned) pci.device);
|
(unsigned) pci->function, (unsigned) pci->device);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_PCCARD_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_PCCARD_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_pccard_device_path_t pccard;
|
grub_efi_pccard_device_path_t *pccard
|
||||||
grub_memcpy (&pccard, dp, len);
|
= (grub_efi_pccard_device_path_t *) dp;
|
||||||
grub_printf ("/PCCARD(%x)",
|
grub_printf ("/PCCARD(%x)",
|
||||||
(unsigned) pccard.function);
|
(unsigned) pccard->function);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_MEMORY_MAPPED_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_MEMORY_MAPPED_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_memory_mapped_device_path_t mmapped;
|
grub_efi_memory_mapped_device_path_t *mmapped
|
||||||
grub_memcpy (&mmapped, dp, len);
|
= (grub_efi_memory_mapped_device_path_t *) dp;
|
||||||
grub_printf ("/MMap(%x,%llx,%llx)",
|
grub_printf ("/MMap(%x,%llx,%llx)",
|
||||||
(unsigned) mmapped.memory_type,
|
(unsigned) mmapped->memory_type,
|
||||||
(unsigned long long) mmapped.start_address,
|
(unsigned long long) mmapped->start_address,
|
||||||
(unsigned long long) mmapped.end_address);
|
(unsigned long long) mmapped->end_address);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_VENDOR_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_VENDOR_DEVICE_PATH_SUBTYPE:
|
||||||
@@ -477,10 +477,10 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp)
|
|||||||
break;
|
break;
|
||||||
case GRUB_EFI_CONTROLLER_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_CONTROLLER_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_controller_device_path_t controller;
|
grub_efi_controller_device_path_t *controller
|
||||||
grub_memcpy (&controller, dp, len);
|
= (grub_efi_controller_device_path_t *) dp;
|
||||||
grub_printf ("/Ctrl(%x)",
|
grub_printf ("/Ctrl(%x)",
|
||||||
(unsigned) controller.controller_number);
|
(unsigned) controller->controller_number);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -494,31 +494,31 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp)
|
|||||||
{
|
{
|
||||||
case GRUB_EFI_ACPI_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_ACPI_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_acpi_device_path_t acpi;
|
grub_efi_acpi_device_path_t *acpi
|
||||||
grub_memcpy (&acpi, dp, len);
|
= (grub_efi_acpi_device_path_t *) dp;
|
||||||
grub_printf ("/ACPI(%x,%x)",
|
grub_printf ("/ACPI(%x,%x)",
|
||||||
(unsigned) acpi.hid,
|
(unsigned) acpi->hid,
|
||||||
(unsigned) acpi.uid);
|
(unsigned) acpi->uid);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_EXPANDED_ACPI_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_EXPANDED_ACPI_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_expanded_acpi_device_path_t eacpi;
|
grub_efi_expanded_acpi_device_path_t *eacpi
|
||||||
grub_memcpy (&eacpi, dp, sizeof (eacpi));
|
= (grub_efi_expanded_acpi_device_path_t *) dp;
|
||||||
grub_printf ("/ACPI(");
|
grub_printf ("/ACPI(");
|
||||||
|
|
||||||
if (GRUB_EFI_EXPANDED_ACPI_HIDSTR (dp)[0] == '\0')
|
if (GRUB_EFI_EXPANDED_ACPI_HIDSTR (dp)[0] == '\0')
|
||||||
grub_printf ("%x,", (unsigned) eacpi.hid);
|
grub_printf ("%x,", (unsigned) eacpi->hid);
|
||||||
else
|
else
|
||||||
grub_printf ("%s,", GRUB_EFI_EXPANDED_ACPI_HIDSTR (dp));
|
grub_printf ("%s,", GRUB_EFI_EXPANDED_ACPI_HIDSTR (dp));
|
||||||
|
|
||||||
if (GRUB_EFI_EXPANDED_ACPI_UIDSTR (dp)[0] == '\0')
|
if (GRUB_EFI_EXPANDED_ACPI_UIDSTR (dp)[0] == '\0')
|
||||||
grub_printf ("%x,", (unsigned) eacpi.uid);
|
grub_printf ("%x,", (unsigned) eacpi->uid);
|
||||||
else
|
else
|
||||||
grub_printf ("%s,", GRUB_EFI_EXPANDED_ACPI_UIDSTR (dp));
|
grub_printf ("%s,", GRUB_EFI_EXPANDED_ACPI_UIDSTR (dp));
|
||||||
|
|
||||||
if (GRUB_EFI_EXPANDED_ACPI_CIDSTR (dp)[0] == '\0')
|
if (GRUB_EFI_EXPANDED_ACPI_CIDSTR (dp)[0] == '\0')
|
||||||
grub_printf ("%x)", (unsigned) eacpi.cid);
|
grub_printf ("%x)", (unsigned) eacpi->cid);
|
||||||
else
|
else
|
||||||
grub_printf ("%s)", GRUB_EFI_EXPANDED_ACPI_CIDSTR (dp));
|
grub_printf ("%s)", GRUB_EFI_EXPANDED_ACPI_CIDSTR (dp));
|
||||||
}
|
}
|
||||||
@@ -534,149 +534,161 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp)
|
|||||||
{
|
{
|
||||||
case GRUB_EFI_ATAPI_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_ATAPI_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_atapi_device_path_t atapi;
|
grub_efi_atapi_device_path_t *atapi
|
||||||
grub_memcpy (&atapi, dp, len);
|
= (grub_efi_atapi_device_path_t *) dp;
|
||||||
grub_printf ("/ATAPI(%x,%x,%x)",
|
grub_printf ("/ATAPI(%x,%x,%x)",
|
||||||
(unsigned) atapi.primary_secondary,
|
(unsigned) atapi->primary_secondary,
|
||||||
(unsigned) atapi.slave_master,
|
(unsigned) atapi->slave_master,
|
||||||
(unsigned) atapi.lun);
|
(unsigned) atapi->lun);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_SCSI_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_SCSI_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_scsi_device_path_t scsi;
|
grub_efi_scsi_device_path_t *scsi
|
||||||
grub_memcpy (&scsi, dp, len);
|
= (grub_efi_scsi_device_path_t *) dp;
|
||||||
grub_printf ("/SCSI(%x,%x)",
|
grub_printf ("/SCSI(%x,%x)",
|
||||||
(unsigned) scsi.pun,
|
(unsigned) scsi->pun,
|
||||||
(unsigned) scsi.lun);
|
(unsigned) scsi->lun);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_FIBRE_CHANNEL_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_FIBRE_CHANNEL_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_fibre_channel_device_path_t fc;
|
grub_efi_fibre_channel_device_path_t *fc
|
||||||
grub_memcpy (&fc, dp, len);
|
= (grub_efi_fibre_channel_device_path_t *) dp;
|
||||||
grub_printf ("/FibreChannel(%llx,%llx)",
|
grub_printf ("/FibreChannel(%llx,%llx)",
|
||||||
(unsigned long long) fc.wwn,
|
(unsigned long long) fc->wwn,
|
||||||
(unsigned long long) fc.lun);
|
(unsigned long long) fc->lun);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_1394_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_1394_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_1394_device_path_t firewire;
|
grub_efi_1394_device_path_t *firewire
|
||||||
grub_memcpy (&firewire, dp, len);
|
= (grub_efi_1394_device_path_t *) dp;
|
||||||
grub_printf ("/1394(%llx)", (unsigned long long) firewire.guid);
|
grub_printf ("/1394(%llx)",
|
||||||
|
(unsigned long long) firewire->guid);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_USB_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_USB_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_usb_device_path_t usb;
|
grub_efi_usb_device_path_t *usb
|
||||||
grub_memcpy (&usb, dp, len);
|
= (grub_efi_usb_device_path_t *) dp;
|
||||||
grub_printf ("/USB(%x,%x)",
|
grub_printf ("/USB(%x,%x)",
|
||||||
(unsigned) usb.parent_port_number,
|
(unsigned) usb->parent_port_number,
|
||||||
(unsigned) usb.usb_interface);
|
(unsigned) usb->usb_interface);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_USB_CLASS_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_USB_CLASS_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_usb_class_device_path_t usb_class;
|
grub_efi_usb_class_device_path_t *usb_class
|
||||||
grub_memcpy (&usb_class, dp, len);
|
= (grub_efi_usb_class_device_path_t *) dp;
|
||||||
grub_printf ("/USBClass(%x,%x,%x,%x,%x)",
|
grub_printf ("/USBClass(%x,%x,%x,%x,%x)",
|
||||||
(unsigned) usb_class.vendor_id,
|
(unsigned) usb_class->vendor_id,
|
||||||
(unsigned) usb_class.product_id,
|
(unsigned) usb_class->product_id,
|
||||||
(unsigned) usb_class.device_class,
|
(unsigned) usb_class->device_class,
|
||||||
(unsigned) usb_class.device_subclass,
|
(unsigned) usb_class->device_subclass,
|
||||||
(unsigned) usb_class.device_protocol);
|
(unsigned) usb_class->device_protocol);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_I2O_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_I2O_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_i2o_device_path_t i2o;
|
grub_efi_i2o_device_path_t *i2o
|
||||||
grub_memcpy (&i2o, dp, len);
|
= (grub_efi_i2o_device_path_t *) dp;
|
||||||
grub_printf ("/I2O(%x)", (unsigned) i2o.tid);
|
grub_printf ("/I2O(%x)", (unsigned) i2o->tid);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_MAC_ADDRESS_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_mac_address_device_path_t mac;
|
grub_efi_mac_address_device_path_t *mac
|
||||||
grub_memcpy (&mac, dp, len);
|
= (grub_efi_mac_address_device_path_t *) dp;
|
||||||
grub_printf ("/MacAddr(%02x:%02x:%02x:%02x:%02x:%02x,%x)",
|
grub_printf ("/MacAddr(%02x:%02x:%02x:%02x:%02x:%02x,%x)",
|
||||||
(unsigned) mac.mac_address[0],
|
(unsigned) mac->mac_address[0],
|
||||||
(unsigned) mac.mac_address[1],
|
(unsigned) mac->mac_address[1],
|
||||||
(unsigned) mac.mac_address[2],
|
(unsigned) mac->mac_address[2],
|
||||||
(unsigned) mac.mac_address[3],
|
(unsigned) mac->mac_address[3],
|
||||||
(unsigned) mac.mac_address[4],
|
(unsigned) mac->mac_address[4],
|
||||||
(unsigned) mac.mac_address[5],
|
(unsigned) mac->mac_address[5],
|
||||||
(unsigned) mac.if_type);
|
(unsigned) mac->if_type);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_IPV4_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_ipv4_device_path_t ipv4;
|
grub_efi_ipv4_device_path_t *ipv4
|
||||||
grub_memcpy (&ipv4, dp, len);
|
= (grub_efi_ipv4_device_path_t *) dp;
|
||||||
grub_printf ("/IPv4(%u.%u.%u.%u,%u.%u.%u.%u,%u,%u,%x,%x)",
|
grub_printf ("/IPv4(%u.%u.%u.%u,%u.%u.%u.%u,%u,%u,%x,%x)",
|
||||||
(unsigned) ipv4.local_ip_address[0],
|
(unsigned) ipv4->local_ip_address[0],
|
||||||
(unsigned) ipv4.local_ip_address[1],
|
(unsigned) ipv4->local_ip_address[1],
|
||||||
(unsigned) ipv4.local_ip_address[2],
|
(unsigned) ipv4->local_ip_address[2],
|
||||||
(unsigned) ipv4.local_ip_address[3],
|
(unsigned) ipv4->local_ip_address[3],
|
||||||
(unsigned) ipv4.remote_ip_address[0],
|
(unsigned) ipv4->remote_ip_address[0],
|
||||||
(unsigned) ipv4.remote_ip_address[1],
|
(unsigned) ipv4->remote_ip_address[1],
|
||||||
(unsigned) ipv4.remote_ip_address[2],
|
(unsigned) ipv4->remote_ip_address[2],
|
||||||
(unsigned) ipv4.remote_ip_address[3],
|
(unsigned) ipv4->remote_ip_address[3],
|
||||||
(unsigned) ipv4.local_port,
|
(unsigned) ipv4->local_port,
|
||||||
(unsigned) ipv4.remote_port,
|
(unsigned) ipv4->remote_port,
|
||||||
(unsigned) ipv4.protocol,
|
(unsigned) ipv4->protocol,
|
||||||
(unsigned) ipv4.static_ip_address);
|
(unsigned) ipv4->static_ip_address);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_IPV6_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_ipv6_device_path_t ipv6;
|
grub_efi_ipv6_device_path_t *ipv6
|
||||||
grub_memcpy (&ipv6, dp, len);
|
= (grub_efi_ipv6_device_path_t *) dp;
|
||||||
grub_printf ("/IPv6(%x:%x:%x:%x:%x:%x:%x:%x,%x:%x:%x:%x:%x:%x:%x:%x,%u,%u,%x,%x)",
|
grub_printf ("/IPv6(%x:%x:%x:%x:%x:%x:%x:%x,%x:%x:%x:%x:%x:%x:%x:%x,%u,%u,%x,%x)",
|
||||||
(unsigned) ipv6.local_ip_address[0],
|
(unsigned) ipv6->local_ip_address[0],
|
||||||
(unsigned) ipv6.local_ip_address[1],
|
(unsigned) ipv6->local_ip_address[1],
|
||||||
(unsigned) ipv6.local_ip_address[2],
|
(unsigned) ipv6->local_ip_address[2],
|
||||||
(unsigned) ipv6.local_ip_address[3],
|
(unsigned) ipv6->local_ip_address[3],
|
||||||
(unsigned) ipv6.local_ip_address[4],
|
(unsigned) ipv6->local_ip_address[4],
|
||||||
(unsigned) ipv6.local_ip_address[5],
|
(unsigned) ipv6->local_ip_address[5],
|
||||||
(unsigned) ipv6.local_ip_address[6],
|
(unsigned) ipv6->local_ip_address[6],
|
||||||
(unsigned) ipv6.local_ip_address[7],
|
(unsigned) ipv6->local_ip_address[7],
|
||||||
(unsigned) ipv6.remote_ip_address[0],
|
(unsigned) ipv6->remote_ip_address[0],
|
||||||
(unsigned) ipv6.remote_ip_address[1],
|
(unsigned) ipv6->remote_ip_address[1],
|
||||||
(unsigned) ipv6.remote_ip_address[2],
|
(unsigned) ipv6->remote_ip_address[2],
|
||||||
(unsigned) ipv6.remote_ip_address[3],
|
(unsigned) ipv6->remote_ip_address[3],
|
||||||
(unsigned) ipv6.remote_ip_address[4],
|
(unsigned) ipv6->remote_ip_address[4],
|
||||||
(unsigned) ipv6.remote_ip_address[5],
|
(unsigned) ipv6->remote_ip_address[5],
|
||||||
(unsigned) ipv6.remote_ip_address[6],
|
(unsigned) ipv6->remote_ip_address[6],
|
||||||
(unsigned) ipv6.remote_ip_address[7],
|
(unsigned) ipv6->remote_ip_address[7],
|
||||||
(unsigned) ipv6.local_port,
|
(unsigned) ipv6->local_port,
|
||||||
(unsigned) ipv6.remote_port,
|
(unsigned) ipv6->remote_port,
|
||||||
(unsigned) ipv6.protocol,
|
(unsigned) ipv6->protocol,
|
||||||
(unsigned) ipv6.static_ip_address);
|
(unsigned) ipv6->static_ip_address);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_INFINIBAND_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_INFINIBAND_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_infiniband_device_path_t ib;
|
grub_efi_infiniband_device_path_t *ib
|
||||||
grub_memcpy (&ib, dp, len);
|
= (grub_efi_infiniband_device_path_t *) dp;
|
||||||
grub_printf ("/InfiniBand(%x,%llx,%llx,%llx)",
|
grub_printf ("/InfiniBand(%x,%llx,%llx,%llx)",
|
||||||
(unsigned) ib.port_gid[0], /* XXX */
|
(unsigned) ib->port_gid[0], /* XXX */
|
||||||
(unsigned long long) ib.remote_id,
|
(unsigned long long) ib->remote_id,
|
||||||
(unsigned long long) ib.target_port_id,
|
(unsigned long long) ib->target_port_id,
|
||||||
(unsigned long long) ib.device_id);
|
(unsigned long long) ib->device_id);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_UART_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_UART_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_uart_device_path_t uart;
|
grub_efi_uart_device_path_t *uart
|
||||||
grub_memcpy (&uart, dp, len);
|
= (grub_efi_uart_device_path_t *) dp;
|
||||||
grub_printf ("/UART(%llu,%u,%x,%x)",
|
grub_printf ("/UART(%llu,%u,%x,%x)",
|
||||||
(unsigned long long) uart.baud_rate,
|
(unsigned long long) uart->baud_rate,
|
||||||
uart.data_bits,
|
uart->data_bits,
|
||||||
uart.parity,
|
uart->parity,
|
||||||
uart.stop_bits);
|
uart->stop_bits);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case GRUB_EFI_SATA_DEVICE_PATH_SUBTYPE:
|
||||||
|
{
|
||||||
|
grub_efi_sata_device_path_t *sata;
|
||||||
|
sata = (grub_efi_sata_device_path_t *) dp;
|
||||||
|
grub_printf ("/Sata(%x,%x,%x)",
|
||||||
|
sata->hba_port,
|
||||||
|
sata->multiplier_port,
|
||||||
|
sata->lun);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE:
|
||||||
dump_vendor_path ("Messaging",
|
dump_vendor_path ("Messaging",
|
||||||
(grub_efi_vendor_device_path_t *) dp);
|
(grub_efi_vendor_device_path_t *) dp);
|
||||||
@@ -711,12 +723,12 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp)
|
|||||||
break;
|
break;
|
||||||
case GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_cdrom_device_path_t cd;
|
grub_efi_cdrom_device_path_t *cd
|
||||||
grub_memcpy (&cd, dp, len);
|
= (grub_efi_cdrom_device_path_t *) dp;
|
||||||
grub_printf ("/CD(%u,%llx,%llx)",
|
grub_printf ("/CD(%u,%llx,%llx)",
|
||||||
cd.boot_entry,
|
cd->boot_entry,
|
||||||
(unsigned long long) cd.partition_start,
|
(unsigned long long) cd->partition_start,
|
||||||
(unsigned long long) cd.partition_size);
|
(unsigned long long) cd->partition_size);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE:
|
||||||
@@ -741,20 +753,20 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp)
|
|||||||
break;
|
break;
|
||||||
case GRUB_EFI_PROTOCOL_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_PROTOCOL_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_protocol_device_path_t proto;
|
grub_efi_protocol_device_path_t *proto
|
||||||
grub_memcpy (&proto, dp, sizeof (proto));
|
= (grub_efi_protocol_device_path_t *) dp;
|
||||||
grub_printf ("/Protocol(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)",
|
grub_printf ("/Protocol(%08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x)",
|
||||||
(unsigned) proto.guid.data1,
|
(unsigned) proto->guid.data1,
|
||||||
(unsigned) proto.guid.data2,
|
(unsigned) proto->guid.data2,
|
||||||
(unsigned) proto.guid.data3,
|
(unsigned) proto->guid.data3,
|
||||||
(unsigned) proto.guid.data4[0],
|
(unsigned) proto->guid.data4[0],
|
||||||
(unsigned) proto.guid.data4[1],
|
(unsigned) proto->guid.data4[1],
|
||||||
(unsigned) proto.guid.data4[2],
|
(unsigned) proto->guid.data4[2],
|
||||||
(unsigned) proto.guid.data4[3],
|
(unsigned) proto->guid.data4[3],
|
||||||
(unsigned) proto.guid.data4[4],
|
(unsigned) proto->guid.data4[4],
|
||||||
(unsigned) proto.guid.data4[5],
|
(unsigned) proto->guid.data4[5],
|
||||||
(unsigned) proto.guid.data4[6],
|
(unsigned) proto->guid.data4[6],
|
||||||
(unsigned) proto.guid.data4[7]);
|
(unsigned) proto->guid.data4[7]);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -768,11 +780,11 @@ grub_efi_print_device_path (grub_efi_device_path_t *dp)
|
|||||||
{
|
{
|
||||||
case GRUB_EFI_BIOS_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_BIOS_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
grub_efi_bios_device_path_t bios;
|
grub_efi_bios_device_path_t *bios
|
||||||
grub_memcpy (&bios, dp, sizeof (bios));
|
= (grub_efi_bios_device_path_t *) dp;
|
||||||
grub_printf ("/BIOS(%x,%x,%s)",
|
grub_printf ("/BIOS(%x,%x,%s)",
|
||||||
(unsigned) bios.device_type,
|
(unsigned) bios->device_type,
|
||||||
(unsigned) bios.status_flags,
|
(unsigned) bios->status_flags,
|
||||||
(char *) (dp + 1));
|
(char *) (dp + 1));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -67,8 +67,6 @@ grub_file_open (const char *name)
|
|||||||
const char *file_name;
|
const char *file_name;
|
||||||
grub_file_filter_id_t filter;
|
grub_file_filter_id_t filter;
|
||||||
|
|
||||||
grub_boot_time ("Opening '%s'", name);
|
|
||||||
|
|
||||||
device_name = grub_file_get_device_name (name);
|
device_name = grub_file_get_device_name (name);
|
||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|||||||
@@ -135,7 +135,7 @@ LOCAL(prot_to_real_addr):
|
|||||||
|
|
||||||
.macro REAL_TO_PROT
|
.macro REAL_TO_PROT
|
||||||
movl LOCAL(real_to_prot_addr), %eax
|
movl LOCAL(real_to_prot_addr), %eax
|
||||||
calll *%eax
|
DATA32 call *%ax
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -28,7 +28,7 @@
|
|||||||
_start:
|
_start:
|
||||||
jmp codestart
|
jmp codestart
|
||||||
|
|
||||||
.org GRUB_KERNEL_I386_QEMU_CORE_ENTRY_ADDR
|
. = _start + GRUB_KERNEL_I386_QEMU_CORE_ENTRY_ADDR
|
||||||
VARIABLE(grub_core_entry_addr)
|
VARIABLE(grub_core_entry_addr)
|
||||||
.long 0
|
.long 0
|
||||||
|
|
||||||
|
|||||||
@@ -54,7 +54,7 @@ protstack:
|
|||||||
.endm
|
.endm
|
||||||
|
|
||||||
.macro REAL_TO_PROT
|
.macro REAL_TO_PROT
|
||||||
calll real_to_prot
|
DATA32 call real_to_prot
|
||||||
.endm
|
.endm
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -137,7 +137,7 @@ real_to_prot:
|
|||||||
/* load the GDT register */
|
/* load the GDT register */
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
movw %ax, %ds
|
movw %ax, %ds
|
||||||
lgdtl gdtdesc
|
DATA32 ADDR32 lgdt gdtdesc
|
||||||
|
|
||||||
/* turn on protected mode */
|
/* turn on protected mode */
|
||||||
movl %cr0, %eax
|
movl %cr0, %eax
|
||||||
@@ -145,7 +145,7 @@ real_to_prot:
|
|||||||
movl %eax, %cr0
|
movl %eax, %cr0
|
||||||
|
|
||||||
/* jump to relocation, flush prefetch queue, and reload %cs */
|
/* jump to relocation, flush prefetch queue, and reload %cs */
|
||||||
ljmpl $GRUB_MEMORY_MACHINE_PROT_MODE_CSEG, $protcseg
|
DATA32 ljmp $GRUB_MEMORY_MACHINE_PROT_MODE_CSEG, $protcseg
|
||||||
|
|
||||||
.code32
|
.code32
|
||||||
protcseg:
|
protcseg:
|
||||||
@@ -237,7 +237,7 @@ tmpcseg:
|
|||||||
movl %eax, %cr0
|
movl %eax, %cr0
|
||||||
|
|
||||||
/* flush prefetch queue, reload %cs */
|
/* flush prefetch queue, reload %cs */
|
||||||
ljmpl $0, $realcseg
|
DATA32 ljmp $0, $realcseg
|
||||||
|
|
||||||
realcseg:
|
realcseg:
|
||||||
/* we are in real mode now
|
/* we are in real mode now
|
||||||
@@ -258,6 +258,6 @@ realcseg:
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* return on new stack! */
|
/* return on new stack! */
|
||||||
retl
|
DATA32 ret
|
||||||
|
|
||||||
.code32
|
.code32
|
||||||
@@ -36,7 +36,7 @@ start:
|
|||||||
bal cont
|
bal cont
|
||||||
nop
|
nop
|
||||||
|
|
||||||
.org GRUB_KERNEL_MACHINE_TOTAL_MODULE_SIZE
|
. = _start + GRUB_KERNEL_MACHINE_TOTAL_MODULE_SIZE
|
||||||
VARIABLE(grub_total_modules_size)
|
VARIABLE(grub_total_modules_size)
|
||||||
.long 0
|
.long 0
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ _start:
|
|||||||
ba codestart
|
ba codestart
|
||||||
mov %o4, %o0
|
mov %o4, %o0
|
||||||
|
|
||||||
.org GRUB_KERNEL_MACHINE_TOTAL_MODULE_SIZE
|
. = EXT_C(_start) + GRUB_KERNEL_MACHINE_TOTAL_MODULE_SIZE
|
||||||
|
|
||||||
VARIABLE(grub_total_module_size)
|
VARIABLE(grub_total_module_size)
|
||||||
.word 0
|
.word 0
|
||||||
|
|||||||
@@ -357,7 +357,7 @@ do_setkey (RIJNDAEL_context *ctx, const byte *key, const unsigned keylen)
|
|||||||
|
|
||||||
for (j = KC-1; j >= 0; j--)
|
for (j = KC-1; j >= 0; j--)
|
||||||
{
|
{
|
||||||
*((u32*)tk[j]) = *((u32*)k[j]);
|
*((u32_a_t*)tk[j]) = *((u32_a_t*)k[j]);
|
||||||
}
|
}
|
||||||
r = 0;
|
r = 0;
|
||||||
t = 0;
|
t = 0;
|
||||||
@@ -366,7 +366,7 @@ do_setkey (RIJNDAEL_context *ctx, const byte *key, const unsigned keylen)
|
|||||||
{
|
{
|
||||||
for (; (j < KC) && (t < 4); j++, t++)
|
for (; (j < KC) && (t < 4); j++, t++)
|
||||||
{
|
{
|
||||||
*((u32*)W[r][t]) = *((u32*)tk[j]);
|
*((u32_a_t*)W[r][t]) = *((u32_a_t*)tk[j]);
|
||||||
}
|
}
|
||||||
if (t == 4)
|
if (t == 4)
|
||||||
{
|
{
|
||||||
@@ -389,14 +389,14 @@ do_setkey (RIJNDAEL_context *ctx, const byte *key, const unsigned keylen)
|
|||||||
{
|
{
|
||||||
for (j = 1; j < KC; j++)
|
for (j = 1; j < KC; j++)
|
||||||
{
|
{
|
||||||
*((u32*)tk[j]) ^= *((u32*)tk[j-1]);
|
*((u32_a_t*)tk[j]) ^= *((u32_a_t*)tk[j-1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
for (j = 1; j < KC/2; j++)
|
for (j = 1; j < KC/2; j++)
|
||||||
{
|
{
|
||||||
*((u32*)tk[j]) ^= *((u32*)tk[j-1]);
|
*((u32_a_t*)tk[j]) ^= *((u32_a_t*)tk[j-1]);
|
||||||
}
|
}
|
||||||
tk[KC/2][0] ^= S[tk[KC/2 - 1][0]];
|
tk[KC/2][0] ^= S[tk[KC/2 - 1][0]];
|
||||||
tk[KC/2][1] ^= S[tk[KC/2 - 1][1]];
|
tk[KC/2][1] ^= S[tk[KC/2 - 1][1]];
|
||||||
@@ -404,7 +404,7 @@ do_setkey (RIJNDAEL_context *ctx, const byte *key, const unsigned keylen)
|
|||||||
tk[KC/2][3] ^= S[tk[KC/2 - 1][3]];
|
tk[KC/2][3] ^= S[tk[KC/2 - 1][3]];
|
||||||
for (j = KC/2 + 1; j < KC; j++)
|
for (j = KC/2 + 1; j < KC; j++)
|
||||||
{
|
{
|
||||||
*((u32*)tk[j]) ^= *((u32*)tk[j-1]);
|
*((u32_a_t*)tk[j]) ^= *((u32_a_t*)tk[j-1]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -413,7 +413,7 @@ do_setkey (RIJNDAEL_context *ctx, const byte *key, const unsigned keylen)
|
|||||||
{
|
{
|
||||||
for (; (j < KC) && (t < 4); j++, t++)
|
for (; (j < KC) && (t < 4); j++, t++)
|
||||||
{
|
{
|
||||||
*((u32*)W[r][t]) = *((u32*)tk[j]);
|
*((u32_a_t*)W[r][t]) = *((u32_a_t*)tk[j]);
|
||||||
}
|
}
|
||||||
if (t == 4)
|
if (t == 4)
|
||||||
{
|
{
|
||||||
@@ -483,29 +483,29 @@ prepare_decryption( RIJNDAEL_context *ctx )
|
|||||||
|
|
||||||
for (r=0; r < MAXROUNDS+1; r++ )
|
for (r=0; r < MAXROUNDS+1; r++ )
|
||||||
{
|
{
|
||||||
*((u32*)ctx->keyschdec[r][0]) = *((u32*)ctx->keyschenc[r][0]);
|
*((u32_a_t*)ctx->keyschdec[r][0]) = *((u32_a_t*)ctx->keyschenc[r][0]);
|
||||||
*((u32*)ctx->keyschdec[r][1]) = *((u32*)ctx->keyschenc[r][1]);
|
*((u32_a_t*)ctx->keyschdec[r][1]) = *((u32_a_t*)ctx->keyschenc[r][1]);
|
||||||
*((u32*)ctx->keyschdec[r][2]) = *((u32*)ctx->keyschenc[r][2]);
|
*((u32_a_t*)ctx->keyschdec[r][2]) = *((u32_a_t*)ctx->keyschenc[r][2]);
|
||||||
*((u32*)ctx->keyschdec[r][3]) = *((u32*)ctx->keyschenc[r][3]);
|
*((u32_a_t*)ctx->keyschdec[r][3]) = *((u32_a_t*)ctx->keyschenc[r][3]);
|
||||||
}
|
}
|
||||||
#define W (ctx->keyschdec)
|
#define W (ctx->keyschdec)
|
||||||
for (r = 1; r < ctx->rounds; r++)
|
for (r = 1; r < ctx->rounds; r++)
|
||||||
{
|
{
|
||||||
w = W[r][0];
|
w = W[r][0];
|
||||||
*((u32*)w) = *((u32*)U1[w[0]]) ^ *((u32*)U2[w[1]])
|
*((u32_a_t*)w) = *((u32_a_t*)U1[w[0]]) ^ *((u32_a_t*)U2[w[1]])
|
||||||
^ *((u32*)U3[w[2]]) ^ *((u32*)U4[w[3]]);
|
^ *((u32_a_t*)U3[w[2]]) ^ *((u32_a_t*)U4[w[3]]);
|
||||||
|
|
||||||
w = W[r][1];
|
w = W[r][1];
|
||||||
*((u32*)w) = *((u32*)U1[w[0]]) ^ *((u32*)U2[w[1]])
|
*((u32_a_t*)w) = *((u32_a_t*)U1[w[0]]) ^ *((u32_a_t*)U2[w[1]])
|
||||||
^ *((u32*)U3[w[2]]) ^ *((u32*)U4[w[3]]);
|
^ *((u32_a_t*)U3[w[2]]) ^ *((u32_a_t*)U4[w[3]]);
|
||||||
|
|
||||||
w = W[r][2];
|
w = W[r][2];
|
||||||
*((u32*)w) = *((u32*)U1[w[0]]) ^ *((u32*)U2[w[1]])
|
*((u32_a_t*)w) = *((u32_a_t*)U1[w[0]]) ^ *((u32_a_t*)U2[w[1]])
|
||||||
^ *((u32*)U3[w[2]]) ^ *((u32*)U4[w[3]]);
|
^ *((u32_a_t*)U3[w[2]]) ^ *((u32_a_t*)U4[w[3]]);
|
||||||
|
|
||||||
w = W[r][3];
|
w = W[r][3];
|
||||||
*((u32*)w) = *((u32*)U1[w[0]]) ^ *((u32*)U2[w[1]])
|
*((u32_a_t*)w) = *((u32_a_t*)U1[w[0]]) ^ *((u32_a_t*)U2[w[1]])
|
||||||
^ *((u32*)U3[w[2]]) ^ *((u32*)U4[w[3]]);
|
^ *((u32_a_t*)U3[w[2]]) ^ *((u32_a_t*)U4[w[3]]);
|
||||||
}
|
}
|
||||||
#undef W
|
#undef W
|
||||||
#undef w
|
#undef w
|
||||||
|
|||||||
@@ -249,8 +249,7 @@ grub_cmd_chainloader (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
if (! dp)
|
if (! dp)
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_DEVICE, "not a valid root device (%p, %p)",
|
grub_error (GRUB_ERR_BAD_DEVICE, "not a valid root device");
|
||||||
dev_handle, dp);
|
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -9,11 +9,14 @@ grub_have_font_source=@HAVE_FONT_SOURCE@
|
|||||||
|
|
||||||
# Autodetected config
|
# Autodetected config
|
||||||
grub_have_asm_uscore=@HAVE_ASM_USCORE@
|
grub_have_asm_uscore=@HAVE_ASM_USCORE@
|
||||||
|
grub_i8086_addr32="@ADDR32@"
|
||||||
|
grub_i8086_data32="@DATA32@"
|
||||||
grub_bss_start_symbol="@BSS_START_SYMBOL@"
|
grub_bss_start_symbol="@BSS_START_SYMBOL@"
|
||||||
grub_end_symbol="@END_SYMBOL@"
|
grub_end_symbol="@END_SYMBOL@"
|
||||||
|
|
||||||
# Build environment
|
# Build environment
|
||||||
grub_target_cc='@TARGET_CC@'
|
grub_target_cc='@TARGET_CC@'
|
||||||
|
grub_target_cc_version='@TARGET_CC_VERSION@'
|
||||||
grub_target_cflags='@TARGET_CFLAGS@'
|
grub_target_cflags='@TARGET_CFLAGS@'
|
||||||
grub_target_cppflags='@TARGET_CPPFLAGS@'
|
grub_target_cppflags='@TARGET_CPPFLAGS@'
|
||||||
grub_target_ccasflags='@TARGET_CCASFLAGS@'
|
grub_target_ccasflags='@TARGET_CCASFLAGS@'
|
||||||
|
|||||||
@@ -230,18 +230,12 @@ read_lists (const char *val)
|
|||||||
{
|
{
|
||||||
if (! grub_no_modules)
|
if (! grub_no_modules)
|
||||||
{
|
{
|
||||||
grub_boot_time ("Reading commands");
|
|
||||||
read_command_list (val);
|
read_command_list (val);
|
||||||
grub_boot_time ("Reading filesystems");
|
|
||||||
read_fs_list (val);
|
read_fs_list (val);
|
||||||
grub_boot_time ("Reading crypto");
|
|
||||||
read_crypto_list (val);
|
read_crypto_list (val);
|
||||||
grub_boot_time ("Reading terminal");
|
|
||||||
read_terminal_list (val);
|
read_terminal_list (val);
|
||||||
}
|
}
|
||||||
grub_boot_time ("Reading gettext");
|
|
||||||
grub_gettext_reread_prefix (val);
|
grub_gettext_reread_prefix (val);
|
||||||
grub_boot_time ("Lists reread");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
|
|||||||
@@ -80,11 +80,11 @@ grub_util_fd_open (const char *os_dev, int flags)
|
|||||||
flags |= O_BINARY;
|
flags |= O_BINARY;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ret = open (os_dev, flags, S_IRUSR | S_IWUSR);
|
ret = open (os_dev, flags, S_IROTH | S_IRGRP | S_IRUSR | S_IWUSR);
|
||||||
|
|
||||||
/* If we can't have exclusive access, try shared access */
|
/* If we can't have exclusive access, try shared access */
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
ret = open (os_dev, flags | O_SHLOCK, S_IRUSR | S_IWUSR);
|
ret = open (os_dev, flags | O_SHLOCK, S_IROTH | S_IRGRP | S_IRUSR | S_IWUSR);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -180,7 +180,7 @@ grub_util_fd_open (const char *dev, int flg)
|
|||||||
if (dev[0] != '/' || dev[1] != '/' || dev[2] != ':')
|
if (dev[0] != '/' || dev[1] != '/' || dev[2] != ':')
|
||||||
{
|
{
|
||||||
ret->type = GRUB_UTIL_FD_FILE;
|
ret->type = GRUB_UTIL_FD_FILE;
|
||||||
ret->fd = open (dev, flg, S_IRUSR | S_IWUSR);
|
ret->fd = open (dev, flg, S_IROTH | S_IRGRP | S_IRUSR | S_IWUSR);
|
||||||
if (ret->fd < 0)
|
if (ret->fd < 0)
|
||||||
{
|
{
|
||||||
free (ret);
|
free (ret);
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ grub_util_fd_open (const char *os_dev, int flags)
|
|||||||
flags |= O_BINARY;
|
flags |= O_BINARY;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
ret = open (os_dev, flags, S_IRUSR | S_IWUSR);
|
ret = open (os_dev, flags, S_IROTH | S_IRGRP | S_IRUSR | S_IWUSR);
|
||||||
if (ret >= 0)
|
if (ret >= 0)
|
||||||
configure_device_driver (fd);
|
configure_device_driver (fd);
|
||||||
return ret;
|
return ret;
|
||||||
|
|||||||
@@ -211,22 +211,6 @@ grub_util_devmapper_part_to_disk (struct stat *st,
|
|||||||
return xstrdup (path);
|
return xstrdup (path);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
grub_util_device_is_mapped_stat (struct stat *st)
|
|
||||||
{
|
|
||||||
#if GRUB_DISK_DEVS_ARE_CHAR
|
|
||||||
if (! S_ISCHR (st->st_mode))
|
|
||||||
#else
|
|
||||||
if (! S_ISBLK (st->st_mode))
|
|
||||||
#endif
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (!grub_device_mapper_supported ())
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return dm_is_dm_major (major (st->st_rdev));
|
|
||||||
}
|
|
||||||
|
|
||||||
char *
|
char *
|
||||||
grub_util_get_devmapper_grub_dev (const char *os_dev)
|
grub_util_get_devmapper_grub_dev (const char *os_dev)
|
||||||
{
|
{
|
||||||
@@ -311,12 +295,6 @@ grub_util_pull_devmapper (const char *os_dev __attribute__ ((unused)))
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
grub_util_device_is_mapped_stat (struct stat *st __attribute__ ((unused)))
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_util_devmapper_cleanup (void)
|
grub_util_devmapper_cleanup (void)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -82,6 +82,23 @@ grub_util_device_is_mapped (const char *dev)
|
|||||||
return dm_is_dm_major (major (st.st_rdev));
|
return dm_is_dm_major (major (st.st_rdev));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
grub_util_device_is_mapped_stat (struct stat *st)
|
||||||
|
{
|
||||||
|
#if GRUB_DISK_DEVS_ARE_CHAR
|
||||||
|
if (! S_ISCHR (st->st_mode))
|
||||||
|
#else
|
||||||
|
if (! S_ISBLK (st->st_mode))
|
||||||
|
#endif
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (!grub_device_mapper_supported ())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
return dm_is_dm_major (major (st->st_rdev));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
grub_util_get_dm_node_linear_info (dev_t dev,
|
grub_util_get_dm_node_linear_info (dev_t dev,
|
||||||
int *maj, int *min,
|
int *maj, int *min,
|
||||||
@@ -199,4 +216,10 @@ grub_util_get_dm_node_linear_info (dev_t dev __attribute__ ((unused)),
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
grub_util_device_is_mapped_stat (struct stat *st __attribute__ ((unused)))
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -106,7 +106,7 @@ grub_util_fd_open (const char *os_dev, int flags)
|
|||||||
return GRUB_UTIL_FD_INVALID;
|
return GRUB_UTIL_FD_INVALID;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = open (os_dev, flags, S_IRUSR | S_IWUSR);
|
ret = open (os_dev, flags, S_IROTH | S_IRGRP | S_IRUSR | S_IWUSR);
|
||||||
|
|
||||||
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
|
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
|
||||||
if (! (sysctl_oldflags & 0x10)
|
if (! (sysctl_oldflags & 0x10)
|
||||||
|
|||||||
@@ -181,7 +181,7 @@ grub_util_fd_open (const char *os_dev, int flags)
|
|||||||
flags |= O_BINARY;
|
flags |= O_BINARY;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
return open (os_dev, flags, S_IRUSR | S_IWUSR);
|
return open (os_dev, flags, S_IROTH | S_IRGRP | S_IRUSR | S_IWUSR);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -46,5 +46,5 @@ message:
|
|||||||
.ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n"
|
.ascii "Boot Test Passed Successfully\n" SUCCESSFUL_BOOT_STRING "\n"
|
||||||
.byte 0
|
.byte 0
|
||||||
|
|
||||||
.org 510
|
. = base + 510
|
||||||
.short 0xaa55
|
.short 0xaa55
|
||||||
@@ -819,6 +819,17 @@ struct grub_efi_uart_device_path
|
|||||||
} GRUB_PACKED;
|
} GRUB_PACKED;
|
||||||
typedef struct grub_efi_uart_device_path grub_efi_uart_device_path_t;
|
typedef struct grub_efi_uart_device_path grub_efi_uart_device_path_t;
|
||||||
|
|
||||||
|
#define GRUB_EFI_SATA_DEVICE_PATH_SUBTYPE 18
|
||||||
|
|
||||||
|
struct grub_efi_sata_device_path
|
||||||
|
{
|
||||||
|
grub_efi_device_path_t header;
|
||||||
|
grub_efi_uint16_t hba_port;
|
||||||
|
grub_efi_uint16_t multiplier_port;
|
||||||
|
grub_efi_uint16_t lun;
|
||||||
|
} GRUB_PACKED;
|
||||||
|
typedef struct grub_efi_sata_device_path grub_efi_sata_device_path_t;
|
||||||
|
|
||||||
#define GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE 10
|
#define GRUB_EFI_VENDOR_MESSAGING_DEVICE_PATH_SUBTYPE 10
|
||||||
|
|
||||||
/* Media Device Path. */
|
/* Media Device Path. */
|
||||||
|
|||||||
@@ -1,55 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2013 Free Software Foundation, Inc.
|
|
||||||
*
|
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* GRUB is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef GRUB_GREFFS_HEADER
|
|
||||||
#define GRUB_GREFFS_HEADER 1
|
|
||||||
|
|
||||||
#include <grub/types.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
Layout:
|
|
||||||
header
|
|
||||||
grub_uint32_t[] pointers to names
|
|
||||||
inodes
|
|
||||||
names
|
|
||||||
contents.
|
|
||||||
Everything is little-endian.
|
|
||||||
*/
|
|
||||||
|
|
||||||
struct grub_greffs_header
|
|
||||||
{
|
|
||||||
char magic[4];
|
|
||||||
#define GRUB_GREFFS_MAGIC "gref"
|
|
||||||
grub_uint32_t nfiles;
|
|
||||||
/* must be divisible by 4. */
|
|
||||||
grub_uint32_t inodes_offset;
|
|
||||||
/* must be divisible by 4. */
|
|
||||||
grub_uint32_t string_ptrs_offset;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct grub_greffs_inode
|
|
||||||
{
|
|
||||||
grub_uint32_t start;
|
|
||||||
grub_uint32_t size;
|
|
||||||
grub_uint32_t mtime;
|
|
||||||
/* Currently always 0. If we ever need symlinks,
|
|
||||||
it could be added. */
|
|
||||||
grub_uint32_t type;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -68,7 +68,7 @@ grub_util_rename (const char *from, const char *to)
|
|||||||
return rename (from, to);
|
return rename (from, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define grub_util_mkdir(a) mkdir (a, 0700)
|
#define grub_util_mkdir(a) mkdir ((a), 0755)
|
||||||
|
|
||||||
struct grub_util_fd
|
struct grub_util_fd
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ grub_util_rename (const char *from, const char *to)
|
|||||||
return rename (from, to);
|
return rename (from, to);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define grub_util_mkdir(a) mkdir ((a), 0700)
|
#define grub_util_mkdir(a) mkdir ((a), 0755)
|
||||||
|
|
||||||
#if defined (__NetBSD__)
|
#if defined (__NetBSD__)
|
||||||
/* NetBSD uses /boot for its boot block. */
|
/* NetBSD uses /boot for its boot block. */
|
||||||
|
|||||||
+8
-47
@@ -55,7 +55,6 @@ usage () {
|
|||||||
gettext "Generate a grub config file"; echo
|
gettext "Generate a grub config file"; echo
|
||||||
echo
|
echo
|
||||||
print_option_help "-o, --output=$(gettext FILE)" "$(gettext "output generated config to FILE [default=stdout]")"
|
print_option_help "-o, --output=$(gettext FILE)" "$(gettext "output generated config to FILE [default=stdout]")"
|
||||||
print_option_help "-r, --root-directory=$(gettext DIR)" "$(gettext "use DIR as root directory [default=/]")"
|
|
||||||
print_option_help "-h, --help" "$(gettext "print this message and exit")"
|
print_option_help "-h, --help" "$(gettext "print this message and exit")"
|
||||||
print_option_help "-v, --version" "$(gettext "print the version information and exit")"
|
print_option_help "-v, --version" "$(gettext "print the version information and exit")"
|
||||||
echo
|
echo
|
||||||
@@ -73,8 +72,6 @@ argument () {
|
|||||||
echo $1
|
echo $1
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_ROOT=
|
|
||||||
|
|
||||||
# Check the arguments.
|
# Check the arguments.
|
||||||
while test $# -gt 0
|
while test $# -gt 0
|
||||||
do
|
do
|
||||||
@@ -93,11 +90,6 @@ do
|
|||||||
--output=*)
|
--output=*)
|
||||||
grub_cfg=`echo "$option" | sed 's/--output=//'`
|
grub_cfg=`echo "$option" | sed 's/--output=//'`
|
||||||
;;
|
;;
|
||||||
-r | --root-directory)
|
|
||||||
GRUB_ROOT=`argument $option "$@"`; shift;;
|
|
||||||
--root-directory=*)
|
|
||||||
GRUB_ROOT=`echo "$option" | sed 's/--output=//'`
|
|
||||||
;;
|
|
||||||
-*)
|
-*)
|
||||||
gettext_printf "Unrecognized option \`%s'\n" "$option" 1>&2
|
gettext_printf "Unrecognized option \`%s'\n" "$option" 1>&2
|
||||||
usage
|
usage
|
||||||
@@ -137,19 +129,19 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Device containing our userland. Typically used for root= parameter.
|
# Device containing our userland. Typically used for root= parameter.
|
||||||
GRUB_DEVICE="`${grub_probe} --target=device "$GRUB_ROOT"/`"
|
GRUB_DEVICE="`${grub_probe} --target=device /`"
|
||||||
GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true
|
GRUB_DEVICE_UUID="`${grub_probe} --device ${GRUB_DEVICE} --target=fs_uuid 2> /dev/null`" || true
|
||||||
|
|
||||||
# Device containing our /boot partition. Usually the same as GRUB_DEVICE.
|
# Device containing our /boot partition. Usually the same as GRUB_DEVICE.
|
||||||
GRUB_DEVICE_BOOT="`${grub_probe} --target=device "$GRUB_ROOT"/boot`"
|
GRUB_DEVICE_BOOT="`${grub_probe} --target=device /boot`"
|
||||||
GRUB_DEVICE_BOOT_UUID="`${grub_probe} --device ${GRUB_DEVICE_BOOT} --target=fs_uuid 2> /dev/null`" || true
|
GRUB_DEVICE_BOOT_UUID="`${grub_probe} --device ${GRUB_DEVICE_BOOT} --target=fs_uuid 2> /dev/null`" || true
|
||||||
|
|
||||||
# Filesystem for the device containing our userland. Used for stuff like
|
# Filesystem for the device containing our userland. Used for stuff like
|
||||||
# choosing Hurd filesystem module.
|
# choosing Hurd filesystem module.
|
||||||
GRUB_FS="`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2> /dev/null || echo unknown`"
|
GRUB_FS="`${grub_probe} --device ${GRUB_DEVICE} --target=fs 2> /dev/null || echo unknown`"
|
||||||
|
|
||||||
if [ x"$GRUB_FS" = x ] || [ x"$GRUB_FS" = xunknown ]; then
|
if [ x"$GRUB_FS" = xunknown ]; then
|
||||||
GRUB_FS="$(stat -f --printf=%T "$GRUB_ROOT"/ || echo unknown)"
|
GRUB_FS="$(stat -f --printf=%T / || echo unknown)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -f ${sysconfdir}/default/grub ; then
|
if test -f ${sysconfdir}/default/grub ; then
|
||||||
@@ -186,7 +178,6 @@ if [ "x${GRUB_ACTUAL_DEFAULT}" = "xsaved" ] ; then GRUB_ACTUAL_DEFAULT="`"${grub
|
|||||||
# These are defined in this script, export them here so that user can
|
# These are defined in this script, export them here so that user can
|
||||||
# override them.
|
# override them.
|
||||||
export GRUB_DEVICE \
|
export GRUB_DEVICE \
|
||||||
GRUB_ROOT \
|
|
||||||
GRUB_DEVICE_UUID \
|
GRUB_DEVICE_UUID \
|
||||||
GRUB_DEVICE_BOOT \
|
GRUB_DEVICE_BOOT \
|
||||||
GRUB_DEVICE_BOOT_UUID \
|
GRUB_DEVICE_BOOT_UUID \
|
||||||
@@ -256,46 +247,16 @@ EOF
|
|||||||
|
|
||||||
for i in "${grub_mkconfig_dir}"/* ; do
|
for i in "${grub_mkconfig_dir}"/* ; do
|
||||||
case "$i" in
|
case "$i" in
|
||||||
"${grub_mkconfig_dir}"/00_header \
|
|
||||||
| "${grub_mkconfig_dir}"/30_os-prober \
|
|
||||||
| "${grub_mkconfig_dir}"/40_custom \
|
|
||||||
| "${grub_mkconfig_dir}"/41_custom)
|
|
||||||
if test -x "$i" ; then
|
|
||||||
echo
|
|
||||||
echo "### BEGIN $i ###"
|
|
||||||
"$i"
|
|
||||||
echo "### END $i ###"
|
|
||||||
fi
|
|
||||||
;;
|
|
||||||
# emacsen backup files. FIXME: support other editors
|
# emacsen backup files. FIXME: support other editors
|
||||||
*~) ;;
|
*~) ;;
|
||||||
# emacsen autosave files. FIXME: support other editors
|
# emacsen autosave files. FIXME: support other editors
|
||||||
*/\#*\#) ;;
|
*/\#*\#) ;;
|
||||||
*)
|
*)
|
||||||
if grub_file_is_not_garbage "$i" && test -x "$i" ; then
|
if grub_file_is_not_garbage "$i" && test -x "$i" ; then
|
||||||
for platform in x86 i386-xen-pae x86_64-xen mips mipsel sparc64 powerpc ia64 arm arm64; do
|
echo
|
||||||
|
echo "### BEGIN $i ###"
|
||||||
GRUB_PLATFORM=$platform
|
"$i"
|
||||||
export GRUB_PLATFORM
|
echo "### END $i ###"
|
||||||
buf="$($i)"
|
|
||||||
if [ x"$buf" != x ]; then
|
|
||||||
echo
|
|
||||||
echo "### BEGIN $i ($platform) ###"
|
|
||||||
case x$platform in
|
|
||||||
xx86)
|
|
||||||
echo "if [ x\"\$grub_platform\" != xxen -a \\( x\"\$grub_cpu\" = xi386 -o x\"\$grub_cpu\" = xx86_64 -o x\"\$grub_platform\" = x \\) ]; then" ;;
|
|
||||||
xi386-xen-pae)
|
|
||||||
echo "if [ x\"\$grub_cpu-\$grub_platform\" = xi386-xen -o x\"\$grub_cpu-\$grub_platform\" = x- ]; then" ;;
|
|
||||||
xx86_64-xen)
|
|
||||||
echo "if [ x\"\$grub_cpu-\$grub_platform\" = xx86_64-xen -o x\"\$grub_cpu-\$grub_platform\" = x- ]; then" ;;
|
|
||||||
*)
|
|
||||||
echo "if [ x\"\$grub_cpu\" = x$platform -o x\"\$grub_platform\" = x ]; then" ;;
|
|
||||||
esac
|
|
||||||
echo "$buf"
|
|
||||||
echo "fi"
|
|
||||||
echo "### END $i ($platform) ###"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|||||||
+124
-155
@@ -21,7 +21,6 @@
|
|||||||
#include <grub/util/install.h>
|
#include <grub/util/install.h>
|
||||||
#include <grub/util/misc.h>
|
#include <grub/util/misc.h>
|
||||||
#include <grub/emu/config.h>
|
#include <grub/emu/config.h>
|
||||||
#include <grub/greffs.h>
|
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
@@ -35,6 +34,7 @@ static char *output_image;
|
|||||||
static char **files;
|
static char **files;
|
||||||
static int nfiles;
|
static int nfiles;
|
||||||
const struct grub_install_image_target_desc *format;
|
const struct grub_install_image_target_desc *format;
|
||||||
|
static FILE *memdisk;
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@@ -116,56 +116,91 @@ struct argp argp = {
|
|||||||
NULL, help_filter, NULL
|
NULL, help_filter, NULL
|
||||||
};
|
};
|
||||||
|
|
||||||
struct file_desc
|
/* tar support */
|
||||||
|
#define MAGIC "ustar"
|
||||||
|
struct head
|
||||||
{
|
{
|
||||||
char *name;
|
char name[100];
|
||||||
char *source;
|
char mode[8];
|
||||||
grub_size_t size;
|
char uid[8];
|
||||||
grub_size_t mtime;
|
char gid[8];
|
||||||
};
|
char size[12];
|
||||||
static struct file_desc *file_descs;
|
char mtime[12];
|
||||||
static size_t n_file_descs, alloc_file_descs;
|
char chksum[8];
|
||||||
|
char typeflag;
|
||||||
|
char linkname[100];
|
||||||
|
char magic[6];
|
||||||
|
char version[2];
|
||||||
|
char uname[32];
|
||||||
|
char gname[32];
|
||||||
|
char devmajor[8];
|
||||||
|
char devminor[8];
|
||||||
|
char prefix[155];
|
||||||
|
char pad[12];
|
||||||
|
} GRUB_PACKED;
|
||||||
|
|
||||||
static inline void
|
static void
|
||||||
canonicalize (char *name)
|
write_zeros (unsigned rsz)
|
||||||
{
|
{
|
||||||
char *iptr, *optr;
|
char buf[512];
|
||||||
for (iptr = name, optr = name; *iptr; )
|
|
||||||
{
|
memset (buf, 0, 512);
|
||||||
while (*iptr == '/')
|
fwrite (buf, 1, rsz, memdisk);
|
||||||
iptr++;
|
}
|
||||||
if (iptr[0] == '.' && (iptr[1] == '/' || iptr[1] == 0))
|
|
||||||
{
|
static void
|
||||||
iptr += 2;
|
write_pad (unsigned sz)
|
||||||
continue;
|
{
|
||||||
}
|
write_zeros ((~sz + 1) & 511);
|
||||||
if (iptr[0] == '.' && iptr[1] == '.' && (iptr[2] == '/' || iptr[2] == 0))
|
}
|
||||||
{
|
|
||||||
iptr += 3;
|
static void
|
||||||
if (optr == name)
|
set_tar_value (char *field, grub_uint32_t val,
|
||||||
continue;
|
unsigned len)
|
||||||
for (optr -= 2; optr >= name && *optr != '/'; optr--);
|
{
|
||||||
optr++;
|
unsigned i;
|
||||||
continue;
|
for (i = 0; i < len - 1; i++)
|
||||||
}
|
field[len - 2 - i] = '0' + ((val >> (3 * i)) & 7);
|
||||||
while (*iptr && *iptr != '/')
|
}
|
||||||
*optr++ = *iptr++;
|
|
||||||
if (*iptr)
|
static void
|
||||||
*optr++ = *iptr++;
|
compute_checksum (struct head *hd)
|
||||||
}
|
{
|
||||||
*optr = 0;
|
unsigned int chk = 0;
|
||||||
|
unsigned char *ptr;
|
||||||
|
memset (hd->chksum, ' ', 8);
|
||||||
|
for (ptr = (unsigned char *) hd; ptr < (unsigned char *) (hd + 1); ptr++)
|
||||||
|
chk += *ptr;
|
||||||
|
set_tar_value (hd->chksum, chk, 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
add_tar_file (const char *from,
|
add_tar_file (const char *from,
|
||||||
const char *to)
|
const char *to)
|
||||||
{
|
{
|
||||||
|
char *tcn;
|
||||||
|
const char *iptr;
|
||||||
|
char *optr;
|
||||||
|
struct head hd;
|
||||||
grub_util_fd_t in;
|
grub_util_fd_t in;
|
||||||
size_t idx;
|
ssize_t r;
|
||||||
|
grub_uint32_t mtime = 0;
|
||||||
|
grub_uint32_t size;
|
||||||
|
|
||||||
|
COMPILE_TIME_ASSERT (sizeof (hd) == 512);
|
||||||
|
|
||||||
if (grub_util_is_special_file (from))
|
if (grub_util_is_special_file (from))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
mtime = grub_util_get_mtime (from);
|
||||||
|
|
||||||
|
optr = tcn = xmalloc (strlen (to) + 1);
|
||||||
|
for (iptr = to; *iptr == '/'; iptr++);
|
||||||
|
for (; *iptr; iptr++)
|
||||||
|
if (!(iptr[0] == '/' && iptr[1] == '/'))
|
||||||
|
*optr++ = *iptr;
|
||||||
|
*optr = '\0';
|
||||||
|
|
||||||
if (grub_util_is_directory (from))
|
if (grub_util_is_directory (from))
|
||||||
{
|
{
|
||||||
grub_util_fd_dir_t d;
|
grub_util_fd_dir_t d;
|
||||||
@@ -186,138 +221,69 @@ add_tar_file (const char *from,
|
|||||||
free (fp);
|
free (fp);
|
||||||
}
|
}
|
||||||
grub_util_fd_closedir (d);
|
grub_util_fd_closedir (d);
|
||||||
|
free (tcn);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
idx = n_file_descs++;
|
if (optr - tcn > 99)
|
||||||
if (idx >= alloc_file_descs)
|
|
||||||
{
|
{
|
||||||
alloc_file_descs = 2 * n_file_descs;
|
memset (&hd, 0, sizeof (hd));
|
||||||
file_descs = xrealloc (file_descs, alloc_file_descs
|
memcpy (hd.name, tcn, 99);
|
||||||
* sizeof (file_descs[0]));
|
memcpy (hd.mode, "0000600", 7);
|
||||||
|
memcpy (hd.uid, "0001750", 7);
|
||||||
|
memcpy (hd.gid, "0001750", 7);
|
||||||
|
|
||||||
|
set_tar_value (hd.size, optr - tcn, 12);
|
||||||
|
set_tar_value (hd.mtime, mtime, 12);
|
||||||
|
hd.typeflag = 'L';
|
||||||
|
memcpy (hd.magic, "ustar ", 7);
|
||||||
|
memcpy (hd.uname, "grub", 4);
|
||||||
|
memcpy (hd.gname, "grub", 4);
|
||||||
|
|
||||||
|
compute_checksum (&hd);
|
||||||
|
|
||||||
|
fwrite (&hd, 1, sizeof (hd), memdisk);
|
||||||
|
fwrite (tcn, 1, optr - tcn, memdisk);
|
||||||
|
|
||||||
|
write_pad (optr - tcn);
|
||||||
}
|
}
|
||||||
|
|
||||||
in = grub_util_fd_open (from, GRUB_UTIL_FD_O_RDONLY);
|
in = grub_util_fd_open (from, GRUB_UTIL_FD_O_RDONLY);
|
||||||
if (!GRUB_UTIL_FD_IS_VALID (in))
|
if (!GRUB_UTIL_FD_IS_VALID (in))
|
||||||
grub_util_error (_("cannot open `%s': %s"), from, grub_util_fd_strerror ());
|
grub_util_error (_("cannot open `%s': %s"), from, grub_util_fd_strerror ());
|
||||||
|
|
||||||
file_descs[idx].name = xstrdup (to);
|
|
||||||
file_descs[idx].source = xstrdup (from);
|
|
||||||
canonicalize (file_descs[idx].name);
|
|
||||||
file_descs[idx].mtime = grub_util_get_mtime (from);
|
|
||||||
file_descs[idx].size = grub_util_get_fd_size (in, from, NULL);
|
|
||||||
|
|
||||||
grub_util_fd_close (in);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
filecmp (const void *p1, const void *p2)
|
|
||||||
{
|
|
||||||
const struct file_desc *a = p1, *b = p2;
|
|
||||||
|
|
||||||
/* Don't use strcmp, it's buggy on some systems. */
|
|
||||||
return grub_strcmp (a->name, b->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
write_memdisk (char *memdisk_img)
|
|
||||||
{
|
|
||||||
FILE *memdisk;
|
|
||||||
struct grub_greffs_header head;
|
|
||||||
struct grub_greffs_inode inode;
|
|
||||||
size_t total_strlen = 0, i;
|
|
||||||
size_t name_pad = 0;
|
|
||||||
grub_uint32_t file_offset;
|
|
||||||
|
|
||||||
qsort (file_descs, n_file_descs, sizeof (file_descs[0]), filecmp);
|
|
||||||
|
|
||||||
for (i = 0; i < n_file_descs; i++)
|
|
||||||
total_strlen += grub_strlen (file_descs[i].name);
|
|
||||||
name_pad = ALIGN_UP (total_strlen, 4) - total_strlen;
|
|
||||||
total_strlen += name_pad;
|
|
||||||
|
|
||||||
grub_memcpy (head.magic, GRUB_GREFFS_MAGIC, sizeof (head.magic));
|
|
||||||
head.nfiles = grub_cpu_to_le32 (n_file_descs);
|
|
||||||
head.inodes_offset = grub_cpu_to_le32 (sizeof (head)
|
|
||||||
+ sizeof (grub_uint32_t)
|
|
||||||
* (n_file_descs + 1));
|
|
||||||
head.string_ptrs_offset = grub_cpu_to_le32 (sizeof (head));
|
|
||||||
|
|
||||||
memdisk = grub_util_fopen (memdisk_img, "wb");
|
|
||||||
if (!memdisk)
|
|
||||||
grub_util_error (_("Can't create file: %s"), strerror (errno));
|
|
||||||
|
|
||||||
fwrite (&head, 1, sizeof (head), memdisk);
|
|
||||||
|
|
||||||
grub_uint32_t curname = sizeof (head) + sizeof (grub_uint32_t)
|
|
||||||
* (n_file_descs + 1) + sizeof (inode) * n_file_descs;
|
|
||||||
for (i = 0; i <= n_file_descs; i++)
|
|
||||||
{
|
|
||||||
grub_uint32_t curname_le = grub_cpu_to_le32 (curname);
|
|
||||||
fwrite (&curname_le, 1, sizeof (curname_le), memdisk);
|
|
||||||
if (i != n_file_descs)
|
|
||||||
curname += grub_strlen (file_descs[i].name);
|
|
||||||
}
|
|
||||||
|
|
||||||
file_offset = sizeof (head) + sizeof (grub_uint32_t)
|
|
||||||
* (n_file_descs + 1) + sizeof (inode) * n_file_descs + total_strlen;
|
|
||||||
for (i = 0; i < n_file_descs; i++)
|
|
||||||
{
|
|
||||||
inode.start = grub_cpu_to_le32 (file_offset);
|
|
||||||
inode.size = grub_cpu_to_le32 (file_descs[i].size);
|
|
||||||
inode.mtime = grub_cpu_to_le32 (file_descs[i].mtime);
|
|
||||||
inode.type = 0;
|
|
||||||
fwrite (&inode, 1, sizeof (inode), memdisk);
|
|
||||||
file_offset += file_descs[i].size;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < n_file_descs; i++)
|
|
||||||
fwrite (file_descs[i].name, 1, grub_strlen (file_descs[i].name), memdisk);
|
|
||||||
|
|
||||||
if (!grub_install_copy_buffer)
|
if (!grub_install_copy_buffer)
|
||||||
grub_install_copy_buffer = xmalloc (GRUB_INSTALL_COPY_BUFFER_SIZE);
|
grub_install_copy_buffer = xmalloc (GRUB_INSTALL_COPY_BUFFER_SIZE);
|
||||||
|
|
||||||
grub_memset (grub_install_copy_buffer, 0, 4);
|
size = grub_util_get_fd_size (in, from, NULL);
|
||||||
fwrite (grub_install_copy_buffer, 1, name_pad, memdisk);
|
|
||||||
|
|
||||||
for (i = 0; i < n_file_descs; i++)
|
memset (&hd, 0, sizeof (hd));
|
||||||
|
memcpy (hd.name, tcn, optr - tcn < 99 ? optr - tcn : 99);
|
||||||
|
memcpy (hd.mode, "0000600", 7);
|
||||||
|
memcpy (hd.uid, "0001750", 7);
|
||||||
|
memcpy (hd.gid, "0001750", 7);
|
||||||
|
|
||||||
|
set_tar_value (hd.size, size, 12);
|
||||||
|
set_tar_value (hd.mtime, mtime, 12);
|
||||||
|
hd.typeflag = '0';
|
||||||
|
memcpy (hd.magic, "ustar ", 7);
|
||||||
|
memcpy (hd.uname, "grub", 4);
|
||||||
|
memcpy (hd.gname, "grub", 4);
|
||||||
|
|
||||||
|
compute_checksum (&hd);
|
||||||
|
|
||||||
|
fwrite (&hd, 1, sizeof (hd), memdisk);
|
||||||
|
|
||||||
|
while (1)
|
||||||
{
|
{
|
||||||
grub_util_fd_t in;
|
r = grub_util_fd_read (in, grub_install_copy_buffer, GRUB_INSTALL_COPY_BUFFER_SIZE);
|
||||||
size_t remaining = file_descs[i].size;
|
if (r <= 0)
|
||||||
in = grub_util_fd_open (file_descs[i].source, GRUB_UTIL_FD_O_RDONLY);
|
break;
|
||||||
if (!GRUB_UTIL_FD_IS_VALID (in))
|
fwrite (grub_install_copy_buffer, 1, r, memdisk);
|
||||||
grub_util_error (_("cannot open `%s': %s"),
|
|
||||||
file_descs[i].source, grub_util_fd_strerror ());
|
|
||||||
|
|
||||||
while (remaining)
|
|
||||||
{
|
|
||||||
size_t toread = remaining;
|
|
||||||
ssize_t r;
|
|
||||||
if (remaining > GRUB_INSTALL_COPY_BUFFER_SIZE)
|
|
||||||
toread = GRUB_INSTALL_COPY_BUFFER_SIZE;
|
|
||||||
r = grub_util_fd_read (in, grub_install_copy_buffer, toread);
|
|
||||||
if (r <= 0)
|
|
||||||
break;
|
|
||||||
fwrite (grub_install_copy_buffer, 1, r, memdisk);
|
|
||||||
if (r >= remaining)
|
|
||||||
remaining = 0;
|
|
||||||
else
|
|
||||||
remaining -= r;
|
|
||||||
}
|
|
||||||
grub_util_fd_close (in);
|
|
||||||
|
|
||||||
grub_memset (grub_install_copy_buffer, 0, GRUB_INSTALL_COPY_BUFFER_SIZE);
|
|
||||||
while (remaining)
|
|
||||||
{
|
|
||||||
size_t toread = remaining;
|
|
||||||
if (remaining > GRUB_INSTALL_COPY_BUFFER_SIZE)
|
|
||||||
toread = GRUB_INSTALL_COPY_BUFFER_SIZE;
|
|
||||||
fwrite (grub_install_copy_buffer, 1, toread, memdisk);
|
|
||||||
remaining -= toread;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
grub_util_fd_close (in);
|
||||||
|
|
||||||
fclose (memdisk);
|
write_pad (size);
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
@@ -353,6 +319,8 @@ main (int argc, char *argv[])
|
|||||||
|
|
||||||
char *memdisk_img = grub_util_make_temporary_file ();
|
char *memdisk_img = grub_util_make_temporary_file ();
|
||||||
|
|
||||||
|
memdisk = grub_util_fopen (memdisk_img, "wb");
|
||||||
|
|
||||||
add_tar_file (memdisk_dir, "");
|
add_tar_file (memdisk_dir, "");
|
||||||
for (i = 0; i < nfiles; i++)
|
for (i = 0; i < nfiles; i++)
|
||||||
{
|
{
|
||||||
@@ -373,12 +341,14 @@ main (int argc, char *argv[])
|
|||||||
to++;
|
to++;
|
||||||
add_tar_file (from, to);
|
add_tar_file (from, to);
|
||||||
}
|
}
|
||||||
|
write_zeros (512);
|
||||||
|
|
||||||
|
fclose (memdisk);
|
||||||
|
|
||||||
write_memdisk (memdisk_img);
|
|
||||||
grub_util_unlink_recursive (memdisk_dir);
|
grub_util_unlink_recursive (memdisk_dir);
|
||||||
|
|
||||||
grub_install_push_module ("memdisk");
|
grub_install_push_module ("memdisk");
|
||||||
grub_install_push_module ("greffs");
|
grub_install_push_module ("tar");
|
||||||
|
|
||||||
grub_install_make_image_wrap (grub_install_source_directory,
|
grub_install_make_image_wrap (grub_install_source_directory,
|
||||||
"(memdisk)/boot/grub", output_image,
|
"(memdisk)/boot/grub", output_image,
|
||||||
@@ -386,6 +356,5 @@ main (int argc, char *argv[])
|
|||||||
grub_util_get_target_name (format), 0);
|
grub_util_get_target_name (format), 0);
|
||||||
|
|
||||||
grub_util_unlink (memdisk_img);
|
grub_util_unlink (memdisk_img);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
+72
-42
@@ -77,9 +77,58 @@ enum {
|
|||||||
PRINT_DISK
|
PRINT_DISK
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static const char *targets[] =
|
||||||
|
{
|
||||||
|
[PRINT_FS] = "fs",
|
||||||
|
[PRINT_FS_UUID] = "fs_uuid",
|
||||||
|
[PRINT_FS_LABEL] = "fs_label",
|
||||||
|
[PRINT_DRIVE] = "drive",
|
||||||
|
[PRINT_DEVICE] = "device",
|
||||||
|
[PRINT_PARTMAP] = "partmap",
|
||||||
|
[PRINT_ABSTRACTION] = "abstraction",
|
||||||
|
[PRINT_CRYPTODISK_UUID] = "cryptodisk_uuid",
|
||||||
|
[PRINT_HINT_STR] = "hints_string",
|
||||||
|
[PRINT_BIOS_HINT] = "bios_hints",
|
||||||
|
[PRINT_IEEE1275_HINT] = "ieee1275_hints",
|
||||||
|
[PRINT_BAREMETAL_HINT] = "baremetal_hints",
|
||||||
|
[PRINT_EFI_HINT] = "efi_hints",
|
||||||
|
[PRINT_ARC_HINT] = "arc_hints",
|
||||||
|
[PRINT_COMPATIBILITY_HINT] = "compatibility_hint",
|
||||||
|
[PRINT_MSDOS_PARTTYPE] = "msdos_parttype",
|
||||||
|
[PRINT_GPT_PARTTYPE] = "gpt_parttype",
|
||||||
|
[PRINT_ZERO_CHECK] = "zero_check",
|
||||||
|
[PRINT_DISK] = "disk",
|
||||||
|
};
|
||||||
|
|
||||||
static int print = PRINT_FS;
|
static int print = PRINT_FS;
|
||||||
static unsigned int argument_is_device = 0;
|
static unsigned int argument_is_device = 0;
|
||||||
|
|
||||||
|
static char *
|
||||||
|
get_targets_string (void)
|
||||||
|
{
|
||||||
|
char **arr = xmalloc (sizeof (targets));
|
||||||
|
int len = 0;
|
||||||
|
char *str;
|
||||||
|
char *ptr;
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
memcpy (arr, targets, sizeof (targets));
|
||||||
|
qsort (arr, ARRAY_SIZE (targets), sizeof (char *), grub_qsort_strcmp);
|
||||||
|
for (i = 0; i < ARRAY_SIZE (targets); i++)
|
||||||
|
len += grub_strlen (targets[i]) + 2;
|
||||||
|
ptr = str = xmalloc (len);
|
||||||
|
for (i = 0; i < ARRAY_SIZE (targets); i++)
|
||||||
|
{
|
||||||
|
ptr = grub_stpcpy (ptr, arr[i]);
|
||||||
|
*ptr++ = ',';
|
||||||
|
*ptr++ = ' ';
|
||||||
|
}
|
||||||
|
ptr[-2] = '\0';
|
||||||
|
free (arr);
|
||||||
|
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
do_print (const char *x)
|
do_print (const char *x)
|
||||||
{
|
{
|
||||||
@@ -660,8 +709,7 @@ static struct argp_option options[] = {
|
|||||||
N_("given argument is a system device, not a path"), 0},
|
N_("given argument is a system device, not a path"), 0},
|
||||||
{"device-map", 'm', N_("FILE"), 0,
|
{"device-map", 'm', N_("FILE"), 0,
|
||||||
N_("use FILE as the device map [default=%s]"), 0},
|
N_("use FILE as the device map [default=%s]"), 0},
|
||||||
{"target", 't', "(fs|fs_uuid|fs_label|drive|device|partmap|abstraction|cryptodisk_uuid|msdos_parttype)", 0,
|
{"target", 't', N_("TARGET"), 0, 0, 0},
|
||||||
N_("print filesystem module, GRUB drive, system device, partition map module, abstraction module or cryptographic container UUID [default=fs]"), 0},
|
|
||||||
{"verbose", 'v', 0, 0, N_("print verbose messages."), 0},
|
{"verbose", 'v', 0, 0, N_("print verbose messages."), 0},
|
||||||
{ 0, 0, 0, 0, 0, 0 }
|
{ 0, 0, 0, 0, 0, 0 }
|
||||||
};
|
};
|
||||||
@@ -676,6 +724,16 @@ help_filter (int key, const char *text, void *input __attribute__ ((unused)))
|
|||||||
case 'm':
|
case 'm':
|
||||||
return xasprintf (text, DEFAULT_DEVICE_MAP);
|
return xasprintf (text, DEFAULT_DEVICE_MAP);
|
||||||
|
|
||||||
|
case 't':
|
||||||
|
{
|
||||||
|
char *ret, *t = get_targets_string ();
|
||||||
|
|
||||||
|
ret = xasprintf ("%s\n%s %s [default=%s]", _("print TARGET"),
|
||||||
|
_("available targets:"), t, targets[print]);
|
||||||
|
free (t);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return (char *) text;
|
return (char *) text;
|
||||||
}
|
}
|
||||||
@@ -713,46 +771,18 @@ argp_parser (int key, char *arg, struct argp_state *state)
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 't':
|
case 't':
|
||||||
if (!strcmp (arg, "fs"))
|
{
|
||||||
print = PRINT_FS;
|
int i;
|
||||||
else if (!strcmp (arg, "fs_uuid"))
|
|
||||||
print = PRINT_FS_UUID;
|
for (i = PRINT_FS; i < ARRAY_SIZE (targets); i++)
|
||||||
else if (!strcmp (arg, "fs_label"))
|
if (strcmp (arg, targets[i]) == 0)
|
||||||
print = PRINT_FS_LABEL;
|
{
|
||||||
else if (!strcmp (arg, "drive"))
|
print = i;
|
||||||
print = PRINT_DRIVE;
|
break;
|
||||||
else if (!strcmp (arg, "device"))
|
}
|
||||||
print = PRINT_DEVICE;
|
if (i == ARRAY_SIZE (targets))
|
||||||
else if (!strcmp (arg, "partmap"))
|
argp_usage (state);
|
||||||
print = PRINT_PARTMAP;
|
}
|
||||||
else if (!strcmp (arg, "abstraction"))
|
|
||||||
print = PRINT_ABSTRACTION;
|
|
||||||
else if (!strcmp (arg, "cryptodisk_uuid"))
|
|
||||||
print = PRINT_CRYPTODISK_UUID;
|
|
||||||
else if (!strcmp (arg, "msdos_parttype"))
|
|
||||||
print = PRINT_MSDOS_PARTTYPE;
|
|
||||||
else if (!strcmp (arg, "gpt_parttype"))
|
|
||||||
print = PRINT_GPT_PARTTYPE;
|
|
||||||
else if (!strcmp (arg, "hints_string"))
|
|
||||||
print = PRINT_HINT_STR;
|
|
||||||
else if (!strcmp (arg, "bios_hints"))
|
|
||||||
print = PRINT_BIOS_HINT;
|
|
||||||
else if (!strcmp (arg, "ieee1275_hints"))
|
|
||||||
print = PRINT_IEEE1275_HINT;
|
|
||||||
else if (!strcmp (arg, "baremetal_hints"))
|
|
||||||
print = PRINT_BAREMETAL_HINT;
|
|
||||||
else if (!strcmp (arg, "efi_hints"))
|
|
||||||
print = PRINT_EFI_HINT;
|
|
||||||
else if (!strcmp (arg, "arc_hints"))
|
|
||||||
print = PRINT_ARC_HINT;
|
|
||||||
else if (!strcmp (arg, "compatibility_hint"))
|
|
||||||
print = PRINT_COMPATIBILITY_HINT;
|
|
||||||
else if (strcmp (arg, "zero_check") == 0)
|
|
||||||
print = PRINT_ZERO_CHECK;
|
|
||||||
else if (!strcmp (arg, "disk"))
|
|
||||||
print = PRINT_DISK;
|
|
||||||
else
|
|
||||||
argp_usage (state);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case '0':
|
case '0':
|
||||||
|
|||||||
+31
-29
@@ -152,7 +152,7 @@ if [ "x$gfxterm" = x1 ]; then
|
|||||||
if loadfont `make_system_path_relative_to_its_root "${GRUB_FONT}"` ; then
|
if loadfont `make_system_path_relative_to_its_root "${GRUB_FONT}"` ; then
|
||||||
EOF
|
EOF
|
||||||
else
|
else
|
||||||
for dir in "${pkgdatadir}" "`echo "$GRUB_ROOT"'/@bootdirname@/@grubdirname@' | sed "s,//*,/,g"`" "`echo "$GRUB_ROOT"'/usr/share/grub' | sed "s,//*,/,g"`" ; do
|
for dir in "${pkgdatadir}" "`echo '/@bootdirname@/@grubdirname@' | sed "s,//*,/,g"`" /usr/share/grub ; do
|
||||||
for basename in unicode unifont ascii; do
|
for basename in unicode unifont ascii; do
|
||||||
path="${dir}/${basename}.pf2"
|
path="${dir}/${basename}.pf2"
|
||||||
if is_path_readable_by_grub "${path}" > /dev/null ; then
|
if is_path_readable_by_grub "${path}" > /dev/null ; then
|
||||||
@@ -282,48 +282,50 @@ fi
|
|||||||
|
|
||||||
make_timeout ()
|
make_timeout ()
|
||||||
{
|
{
|
||||||
if [ "x${1}${3}" != "x" ] ; then
|
if [ "x${3}" != "x" ] ; then
|
||||||
if [ "x${3}" != "x" ] ; then
|
timeout="${2}"
|
||||||
timeout="${2}"
|
style="${3}"
|
||||||
style="${3}"
|
elif [ "x${1}" != "x" -a "x${1}" != "x0" ] ; then
|
||||||
else
|
# Handle the deprecated GRUB_HIDDEN_TIMEOUT scheme.
|
||||||
# Handle the deprecated GRUB_HIDDEN_TIMEOUT scheme.
|
timeout="${1}"
|
||||||
timeout="${1}"
|
if [ "x${2}" != "x0" ] ; then
|
||||||
if [ "x${2}" != "x0" ] ; then
|
grub_warn "$(gettext "Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.")"
|
||||||
grub_warn "$(gettext "Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.")"
|
|
||||||
fi
|
|
||||||
if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
|
|
||||||
style="hidden"
|
|
||||||
else
|
|
||||||
style="countdown"
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
if [ "x${style}" = "xcountdown" ] ; then
|
if [ "x${GRUB_HIDDEN_TIMEOUT_QUIET}" = "xtrue" ] ; then
|
||||||
verbose=" --verbose"
|
style="hidden"
|
||||||
else
|
|
||||||
verbose=
|
verbose=
|
||||||
|
else
|
||||||
|
style="countdown"
|
||||||
|
verbose=" --verbose"
|
||||||
fi
|
fi
|
||||||
cat << EOF
|
else
|
||||||
|
# No hidden timeout, so treat as GRUB_TIMEOUT_STYLE=menu
|
||||||
|
timeout="${2}"
|
||||||
|
style="menu"
|
||||||
|
fi
|
||||||
|
cat << EOF
|
||||||
if [ x\$feature_timeout_style = xy ] ; then
|
if [ x\$feature_timeout_style = xy ] ; then
|
||||||
set timeout_style=${style}
|
set timeout_style=${style}
|
||||||
set timeout=${timeout}
|
set timeout=${timeout}
|
||||||
EOF
|
EOF
|
||||||
if [ "x${style}" != "xmenu" ] ; then
|
if [ "x${style}" = "xmenu" ] ; then
|
||||||
cat << EOF
|
cat << EOF
|
||||||
|
# Fallback normal timeout code in case the timeout_style feature is
|
||||||
|
# unavailable.
|
||||||
|
else
|
||||||
|
set timeout=${timeout}
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
cat << EOF
|
||||||
# Fallback hidden-timeout code in case the timeout_style feature is
|
# Fallback hidden-timeout code in case the timeout_style feature is
|
||||||
# unavailable.
|
# unavailable.
|
||||||
elif sleep${verbose} --interruptible ${timeout} ; then
|
elif sleep${verbose} --interruptible ${timeout} ; then
|
||||||
set timeout=0
|
set timeout=0
|
||||||
EOF
|
EOF
|
||||||
fi
|
fi
|
||||||
cat << EOF
|
cat << EOF
|
||||||
fi
|
fi
|
||||||
EOF
|
EOF
|
||||||
else
|
|
||||||
cat << EOF
|
|
||||||
set timeout=${2}
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
|
if [ "x$GRUB_BUTTON_CMOS_ADDRESS" != "x" ]; then
|
||||||
|
|||||||
+8
-18
@@ -21,16 +21,6 @@ prefix="@prefix@"
|
|||||||
exec_prefix="@exec_prefix@"
|
exec_prefix="@exec_prefix@"
|
||||||
datarootdir="@datarootdir@"
|
datarootdir="@datarootdir@"
|
||||||
|
|
||||||
if [ x$GRUB_PLATFORM = xx86 ]; then
|
|
||||||
check=--is-x86-multiboot
|
|
||||||
elif [ x$GRUB_PLATFORM = xi386-xen-pae ]; then
|
|
||||||
check=--is-i386-xen-pae-domu
|
|
||||||
elif [ x$GRUB_PLATFORM = xx86_64-xen ]; then
|
|
||||||
check=--is-x86_64-xen-domu
|
|
||||||
else
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
export TEXTDOMAIN=@PACKAGE@
|
export TEXTDOMAIN=@PACKAGE@
|
||||||
export TEXTDOMAINDIR="@localedir@"
|
export TEXTDOMAINDIR="@localedir@"
|
||||||
|
|
||||||
@@ -50,11 +40,11 @@ all_of_them=true
|
|||||||
|
|
||||||
# FIXME: add l4 here?
|
# FIXME: add l4 here?
|
||||||
kernel=
|
kernel=
|
||||||
for i in "$GRUB_ROOT"/boot/gnumach* ; do
|
for i in /boot/gnumach* ; do
|
||||||
if test -f "$i" && "${grub_file}" $check "$i" ; then
|
if test -e $i ; then
|
||||||
basename=`basename "$i"`
|
basename=`basename $i`
|
||||||
dirname=`dirname "$i"`
|
dirname=`dirname $i`
|
||||||
rel_dirname=`make_system_path_relative_to_its_root "$dirname"`
|
rel_dirname=`make_system_path_relative_to_its_root $dirname`
|
||||||
gettext_printf "Found GNU Mach: %s" "$i" >&2
|
gettext_printf "Found GNU Mach: %s" "$i" >&2
|
||||||
echo >&2
|
echo >&2
|
||||||
kernels="${kernels} ${rel_dirname}/${basename}"
|
kernels="${kernels} ${rel_dirname}/${basename}"
|
||||||
@@ -68,8 +58,8 @@ case "${GRUB_FS}" in
|
|||||||
*) hurd_fs="${GRUB_FS}fs" ;;
|
*) hurd_fs="${GRUB_FS}fs" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
for i in "$GRUB_ROOT"/hurd/${hurd_fs}.static "$GRUB_ROOT"/hurd/exec ; do
|
for i in /hurd/${hurd_fs}.static /hurd/exec ; do
|
||||||
if test -f "$i" ; then
|
if test -e "$i" ; then
|
||||||
gettext_printf "Found Hurd module: %s" "$i" >&2
|
gettext_printf "Found Hurd module: %s" "$i" >&2
|
||||||
echo >&2
|
echo >&2
|
||||||
at_least_one=true
|
at_least_one=true
|
||||||
@@ -83,7 +73,7 @@ if ${at_least_one} ; then : ; else
|
|||||||
exit 0
|
exit 0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if ${all_of_them} && test -f "$GRUB_ROOT"/lib/ld.so.1 ; then : ; else
|
if ${all_of_them} && test -e /lib/ld.so.1 ; then : ; else
|
||||||
gettext "Some Hurd stuff found, but not enough to boot." >&2
|
gettext "Some Hurd stuff found, but not enough to boot." >&2
|
||||||
echo >&2
|
echo >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
|||||||
@@ -27,21 +27,6 @@ export TEXTDOMAINDIR="@localedir@"
|
|||||||
|
|
||||||
CLASS="--class os"
|
CLASS="--class os"
|
||||||
|
|
||||||
if [ x$GRUB_PLATFORM = xx86 ]; then
|
|
||||||
check=--is-x86-multiboot
|
|
||||||
elif [ x$GRUB_PLATFORM = xi386-xen-pae ]; then
|
|
||||||
check=--is-i386-xen-pae-domu
|
|
||||||
elif [ x$GRUB_PLATFORM = xx86_64-xen ]; then
|
|
||||||
check=--is-x86_64-xen-domu
|
|
||||||
else
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ! test -f "$GRUB_ROOT"/platform/i86pc/kernel || ! "${grub_file}" $check "$GRUB_ROOT"/platform/i86pc/kernel; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
case "${GRUB_DISTRIBUTOR}" in
|
case "${GRUB_DISTRIBUTOR}" in
|
||||||
*)
|
*)
|
||||||
OS="Illumos"
|
OS="Illumos"
|
||||||
@@ -60,7 +45,7 @@ message="$(gettext_printf "Loading kernel of Illumos ...")"
|
|||||||
else
|
else
|
||||||
ISADIR=
|
ISADIR=
|
||||||
fi
|
fi
|
||||||
zfs-bootfs $($grub_mkrelpath "$GRUB_ROOT"/) ZFS_BOOTFS
|
zfs-bootfs $($grub_mkrelpath /) ZFS_BOOTFS
|
||||||
echo '$(echo "$message" | grub_quote)'
|
echo '$(echo "$message" | grub_quote)'
|
||||||
multiboot $($grub_mkrelpath /platform/i86pc/kernel)/\$ISADIR/unix /platform/i86pc/kernel/\$ISADIR/unix -B \$ZFS_BOOTFS,console=text
|
multiboot $($grub_mkrelpath /platform/i86pc/kernel)/\$ISADIR/unix /platform/i86pc/kernel/\$ISADIR/unix -B \$ZFS_BOOTFS,console=text
|
||||||
module $($grub_mkrelpath /platform/i86pc)/\$ISADIR/boot_archive /platform/i86pc/\$ISADIR/boot_archive
|
module $($grub_mkrelpath /platform/i86pc)/\$ISADIR/boot_archive /platform/i86pc/\$ISADIR/boot_archive
|
||||||
|
|||||||
+10
-20
@@ -27,16 +27,6 @@ export TEXTDOMAINDIR="@localedir@"
|
|||||||
|
|
||||||
CLASS="--class os"
|
CLASS="--class os"
|
||||||
|
|
||||||
if [ x$GRUB_PLATFORM = xx86 ]; then
|
|
||||||
check=--is-x86-kfreebsd
|
|
||||||
elif [ x$GRUB_PLATFORM = xi386-xen-pae ]; then
|
|
||||||
check=--is-i386-xen-pae-domu
|
|
||||||
elif [ x$GRUB_PLATFORM = xx86_64-xen ]; then
|
|
||||||
check=--is-x86_64-xen-domu
|
|
||||||
else
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "${GRUB_DISTRIBUTOR}" in
|
case "${GRUB_DISTRIBUTOR}" in
|
||||||
Debian)
|
Debian)
|
||||||
OS="${GRUB_DISTRIBUTOR} GNU/kFreeBSD"
|
OS="${GRUB_DISTRIBUTOR} GNU/kFreeBSD"
|
||||||
@@ -132,10 +122,10 @@ EOF
|
|||||||
zfs)
|
zfs)
|
||||||
load_kfreebsd_module opensolaris false
|
load_kfreebsd_module opensolaris false
|
||||||
|
|
||||||
ls "$GRUB_ROOT/boot/zfs/zpool.cache" > /dev/null
|
ls "/boot/zfs/zpool.cache" > /dev/null
|
||||||
printf '%s\n' "${prepare_boot_cache}"
|
printf '%s\n' "${prepare_boot_cache}"
|
||||||
sed "s/^/$submenu_indentation/" << EOF
|
sed "s/^/$submenu_indentation/" << EOF
|
||||||
kfreebsd_module $(make_system_path_relative_to_its_root $GRUB_ROOT/boot)/zfs/zpool.cache type=/boot/zfs/zpool.cache
|
kfreebsd_module $(make_system_path_relative_to_its_root /boot)/zfs/zpool.cache type=/boot/zfs/zpool.cache
|
||||||
EOF
|
EOF
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -153,8 +143,8 @@ EOF
|
|||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
list=`for i in $GRUB_ROOT/boot/kfreebsd-* $GRUB_ROOT/boot/kernel/kernel ; do
|
list=`for i in /boot/kfreebsd-* /boot/kernel/kernel ; do
|
||||||
if grub_file_is_not_garbage "$i" && ${grub_file} $check "$i"; then echo -n "$i " ; fi
|
if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
|
||||||
done`
|
done`
|
||||||
prepare_boot_cache=
|
prepare_boot_cache=
|
||||||
boot_device_id=
|
boot_device_id=
|
||||||
@@ -173,8 +163,8 @@ while [ "x$list" != "x" ] ; do
|
|||||||
dirname=`dirname $kfreebsd`
|
dirname=`dirname $kfreebsd`
|
||||||
rel_dirname=`make_system_path_relative_to_its_root $dirname`
|
rel_dirname=`make_system_path_relative_to_its_root $dirname`
|
||||||
|
|
||||||
if [ -f "$GRUB_ROOT"/boot/device.hints ] ; then
|
if [ -f /boot/device.hints ] ; then
|
||||||
devices="$GRUB_ROOT"/boot/device.hints
|
devices=/boot/device.hints
|
||||||
devices_basename=`basename $devices`
|
devices_basename=`basename $devices`
|
||||||
devices_dirname=`dirname $devices`
|
devices_dirname=`dirname $devices`
|
||||||
devices_rel_dirname=`make_system_path_relative_to_its_root $devices_dirname`
|
devices_rel_dirname=`make_system_path_relative_to_its_root $devices_dirname`
|
||||||
@@ -191,14 +181,14 @@ while [ "x$list" != "x" ] ; do
|
|||||||
# zpool name
|
# zpool name
|
||||||
kfreebsd_device=$(${grub_probe} -t fs_label --device ${GRUB_DEVICE})
|
kfreebsd_device=$(${grub_probe} -t fs_label --device ${GRUB_DEVICE})
|
||||||
# filesystem name (empty string for the main filesystem)
|
# filesystem name (empty string for the main filesystem)
|
||||||
kfreebsd_device="${kfreebsd_device}$(${grub_mkrelpath} "$GRUB_ROOT"/ | sed -e "s,/*@$,,")"
|
kfreebsd_device="${kfreebsd_device}$(${grub_mkrelpath} / | sed -e "s,/*@$,,")"
|
||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
kfreebsd_device=${kfreebsd_fs}id/${GRUB_DEVICE_UUID}
|
kfreebsd_device=${kfreebsd_fs}id/${GRUB_DEVICE_UUID}
|
||||||
# Debian GNU/kFreeBSD can't remount root if it's supplied as UUID but
|
# Debian GNU/kFreeBSD can't remount root if it's supplied as UUID but
|
||||||
# as an UUID
|
# as an UUID
|
||||||
if [ "x${GRUB_DISTRIBUTOR}" = "xDebian" ] \
|
if [ "x${GRUB_DISTRIBUTOR}" = "xDebian" ] \
|
||||||
&& ! (cat "$GRUB_ROOT"/etc/fstab | awk '!/^[[:space:]]*#/ && $2=="/" { print $1; }' \
|
&& ! (cat /etc/fstab | awk '!/^[[:space:]]*#/ && $2=="/" { print $1; }' \
|
||||||
| grep "${kfreebsd_fs}id/${GRUB_DEVICE_UUID}" > /dev/null); then
|
| grep "${kfreebsd_fs}id/${GRUB_DEVICE_UUID}" > /dev/null); then
|
||||||
kfreebsd_device=${GRUB_DEVICE}
|
kfreebsd_device=${GRUB_DEVICE}
|
||||||
fi
|
fi
|
||||||
@@ -209,8 +199,8 @@ while [ "x$list" != "x" ] ; do
|
|||||||
alt_version=`echo $version | sed -e "s,\.old$,,g"`
|
alt_version=`echo $version | sed -e "s,\.old$,,g"`
|
||||||
|
|
||||||
module_dir=
|
module_dir=
|
||||||
for i in "$GRUB_ROOT/lib/modules/${version}" "$GRUB_ROOT/lib/modules/${alt_version}" \
|
for i in "/lib/modules/${version}" "/lib/modules/${alt_version}" \
|
||||||
"$GRUB_ROOT/boot/kernel"; do
|
"/boot/kernel"; do
|
||||||
if test -e "$i" ; then
|
if test -e "$i" ; then
|
||||||
module_dir="$i"
|
module_dir="$i"
|
||||||
break
|
break
|
||||||
|
|||||||
+19
-32
@@ -26,31 +26,6 @@ datarootdir="@datarootdir@"
|
|||||||
export TEXTDOMAIN=@PACKAGE@
|
export TEXTDOMAIN=@PACKAGE@
|
||||||
export TEXTDOMAINDIR="@localedir@"
|
export TEXTDOMAINDIR="@localedir@"
|
||||||
|
|
||||||
if [ x$GRUB_PLATFORM = xx86 ]; then
|
|
||||||
check=--is-x86-linux32
|
|
||||||
elif [ x$GRUB_PLATFORM = xi386-xen-pae ]; then
|
|
||||||
check=--is-i386-xen-pae-domu
|
|
||||||
elif [ x$GRUB_PLATFORM = xx86_64-xen ]; then
|
|
||||||
check=--is-x86_64-xen-domu
|
|
||||||
else
|
|
||||||
check=--is-${GRUB_PLATFORM}-linux
|
|
||||||
fi
|
|
||||||
|
|
||||||
case "x$GRUB_PLATFORM" in
|
|
||||||
xx86)
|
|
||||||
list=`for i in "$GRUB_ROOT"/boot/vmlinuz-* "$GRUB_ROOT"/vmlinuz-* "$GRUB_ROOT"/boot/kernel-* ; do
|
|
||||||
if grub_file_is_not_garbage "$i" && "${grub_file}" $check "$i" ; then echo -n "$i " ; fi
|
|
||||||
done` ;;
|
|
||||||
*)
|
|
||||||
list=`for i in "$GRUB_ROOT"/boot/vmlinuz-* "$GRUB_ROOT"/boot/vmlinux-* "$GRUB_ROOT"/vmlinuz-* "$GRUB_ROOT"/vmlinux-* "$GRUB_ROOT"/boot/kernel-* ; do
|
|
||||||
if grub_file_is_not_garbage "$i" && "${grub_file}" $check "$i" ; then echo -n "$i " ; fi
|
|
||||||
done` ;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
if [ x"$list" = x ]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
CLASS="--class gnu-linux --class gnu --class os"
|
CLASS="--class gnu-linux --class gnu --class os"
|
||||||
|
|
||||||
if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
|
if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
|
||||||
@@ -78,14 +53,14 @@ fi
|
|||||||
|
|
||||||
case x"$GRUB_FS" in
|
case x"$GRUB_FS" in
|
||||||
xbtrfs)
|
xbtrfs)
|
||||||
rootsubvol="`make_system_path_relative_to_its_root "$GRUB_ROOT"/`"
|
rootsubvol="`make_system_path_relative_to_its_root /`"
|
||||||
rootsubvol="${rootsubvol#/}"
|
rootsubvol="${rootsubvol#/}"
|
||||||
if [ "x${rootsubvol}" != x ]; then
|
if [ "x${rootsubvol}" != x ]; then
|
||||||
GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
|
GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
|
||||||
fi;;
|
fi;;
|
||||||
xzfs)
|
xzfs)
|
||||||
rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
|
rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
|
||||||
bootfs="`make_system_path_relative_to_its_root "$GRUB_ROOT"/ | sed -e "s,@$,,"`"
|
bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
|
||||||
LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}"
|
LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -140,7 +115,7 @@ linux_entry ()
|
|||||||
|
|
||||||
echo " insmod gzio" | sed "s/^/$submenu_indentation/"
|
echo " insmod gzio" | sed "s/^/$submenu_indentation/"
|
||||||
|
|
||||||
if [ x$dirname = x"$GRUB_ROOT"/ ]; then
|
if [ x$dirname = x/ ]; then
|
||||||
if [ -z "${prepare_root_cache}" ]; then
|
if [ -z "${prepare_root_cache}" ]; then
|
||||||
prepare_root_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab)"
|
prepare_root_cache="$(prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab)"
|
||||||
fi
|
fi
|
||||||
@@ -169,12 +144,24 @@ EOF
|
|||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
case "$GRUB_PLATFORM" in
|
machine=`uname -m`
|
||||||
x86 | i386-xen-pae | x86_64-xen) GENKERNEL_ARCH="x86" ;;
|
case "x$machine" in
|
||||||
|
xi?86 | xx86_64)
|
||||||
|
list=`for i in /boot/vmlinuz-* /vmlinuz-* /boot/kernel-* ; do
|
||||||
|
if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
|
||||||
|
done` ;;
|
||||||
|
*)
|
||||||
|
list=`for i in /boot/vmlinuz-* /boot/vmlinux-* /vmlinuz-* /vmlinux-* /boot/kernel-* ; do
|
||||||
|
if grub_file_is_not_garbage "$i" ; then echo -n "$i " ; fi
|
||||||
|
done` ;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
case "$machine" in
|
||||||
|
i?86) GENKERNEL_ARCH="x86" ;;
|
||||||
mips|mips64) GENKERNEL_ARCH="mips" ;;
|
mips|mips64) GENKERNEL_ARCH="mips" ;;
|
||||||
mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;;
|
mipsel|mips64el) GENKERNEL_ARCH="mipsel" ;;
|
||||||
arm*) GENKERNEL_ARCH="arm" ;;
|
arm*) GENKERNEL_ARCH="arm" ;;
|
||||||
*) GENKERNEL_ARCH="$GRUB_PLATFORM" ;;
|
*) GENKERNEL_ARCH="$machine" ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
prepare_boot_cache=
|
prepare_boot_cache=
|
||||||
@@ -213,7 +200,7 @@ while [ "x$list" != "x" ] ; do
|
|||||||
done
|
done
|
||||||
|
|
||||||
config=
|
config=
|
||||||
for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "$GRUB_ROOT/etc/kernels/kernel-config-${version}" ; do
|
for i in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
|
||||||
if test -e "${i}" ; then
|
if test -e "${i}" ; then
|
||||||
config="${i}"
|
config="${i}"
|
||||||
break
|
break
|
||||||
|
|||||||
+13
-24
@@ -22,16 +22,6 @@ exec_prefix="@exec_prefix@"
|
|||||||
datarootdir="@datarootdir@"
|
datarootdir="@datarootdir@"
|
||||||
. "@datadir@/@PACKAGE@/grub-mkconfig_lib"
|
. "@datadir@/@PACKAGE@/grub-mkconfig_lib"
|
||||||
|
|
||||||
if [ x$GRUB_PLATFORM = xx86 ]; then
|
|
||||||
check=--is-x86-kfreebsd
|
|
||||||
elif [ x$GRUB_PLATFORM = xi386-xen-pae ]; then
|
|
||||||
check=--is-i386-xen-pae-domu
|
|
||||||
elif [ x$GRUB_PLATFORM = xx86_64-xen ]; then
|
|
||||||
check=--is-x86_64-xen-domu
|
|
||||||
else
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
export TEXTDOMAIN=@PACKAGE@
|
export TEXTDOMAIN=@PACKAGE@
|
||||||
export TEXTDOMAINDIR="@localedir@"
|
export TEXTDOMAINDIR="@localedir@"
|
||||||
|
|
||||||
@@ -46,13 +36,19 @@ netbsd_load_fs_module ()
|
|||||||
loader="$1" # "knetbsd" or "multiboot"
|
loader="$1" # "knetbsd" or "multiboot"
|
||||||
kernel="$2" # absolute path to the kernel file
|
kernel="$2" # absolute path to the kernel file
|
||||||
|
|
||||||
if "${grub_file}" --is-x86_64-kfreebsd "${kernel}"; then
|
case $(zcat -f "${kernel}" | file -bL - | cut -d , -f 2 | tr -d ' ') in
|
||||||
karch="amd64"
|
Intel80386)
|
||||||
else
|
|
||||||
karch="i386"
|
karch="i386"
|
||||||
fi
|
;;
|
||||||
|
x86-64)
|
||||||
|
karch="amd64"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
return
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
case $GRUB_FS in
|
case $(${grub_probe} --target=fs -d ${GRUB_DEVICE}) in
|
||||||
ext2)
|
ext2)
|
||||||
kmod="ext2fs"
|
kmod="ext2fs"
|
||||||
;;
|
;;
|
||||||
@@ -71,7 +67,7 @@ netbsd_load_fs_module ()
|
|||||||
esac
|
esac
|
||||||
|
|
||||||
kversion=$(zcat -f "${kernel}" | strings | sed -n -e '/^@(#)NetBSD/ { s/^@(#)NetBSD \([0-9\.]*\) .*$/\1/g ; p ; q ; }')
|
kversion=$(zcat -f "${kernel}" | strings | sed -n -e '/^@(#)NetBSD/ { s/^@(#)NetBSD \([0-9\.]*\) .*$/\1/g ; p ; q ; }')
|
||||||
kmodule="$GRUB_ROOT/stand/${karch}/${kversion}/modules/${kmod}/${kmod}.kmod"
|
kmodule="/stand/${karch}/${kversion}/modules/${kmod}/${kmod}.kmod"
|
||||||
|
|
||||||
if test -z "$karch" -o -z "$kversion" -o ! -f "${kmodule}"; then
|
if test -z "$karch" -o -z "$kversion" -o ! -f "${kmodule}"; then
|
||||||
return
|
return
|
||||||
@@ -98,10 +94,6 @@ netbsd_entry ()
|
|||||||
type="$3"
|
type="$3"
|
||||||
args="$4" # extra arguments appended to loader command
|
args="$4" # extra arguments appended to loader command
|
||||||
|
|
||||||
if [ "x${loader}" = xmultiboot ] && [ x$GRUB_PLATFORM = xx86 ] && ! "$grub_file" --is-x86-multiboot "$kernel"; then
|
|
||||||
return
|
|
||||||
fi
|
|
||||||
|
|
||||||
kroot_device="$(echo ${GRUB_DEVICE} | sed -e 's,^/dev/r,,')"
|
kroot_device="$(echo ${GRUB_DEVICE} | sed -e 's,^/dev/r,,')"
|
||||||
|
|
||||||
if [ -z "$boot_device_id" ]; then
|
if [ -z "$boot_device_id" ]; then
|
||||||
@@ -155,13 +147,10 @@ pattern="^ELF[^,]*executable.*statically linked"
|
|||||||
submenu_indentation=""
|
submenu_indentation=""
|
||||||
|
|
||||||
is_top_level=true
|
is_top_level=true
|
||||||
for k in "$GRUB_ROOT"/netbsd $(ls -t "$GRUB_ROOT"/netbsd?* 2>/dev/null) ; do
|
for k in /netbsd $(ls -t /netbsd?* 2>/dev/null) ; do
|
||||||
if ! grub_file_is_not_garbage "$k" ; then
|
if ! grub_file_is_not_garbage "$k" ; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
if ! "$grub_file" $check "$k"; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
if ! (zcat -f "$k" | file -bL - | grep -q "${pattern}") 2>/dev/null ; then
|
if ! (zcat -f "$k" | file -bL - | grep -q "${pattern}") 2>/dev/null ; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
|
|||||||
+3
-12
@@ -26,28 +26,18 @@ export TEXTDOMAINDIR="@localedir@"
|
|||||||
|
|
||||||
. "@datadir@/@PACKAGE@/grub-mkconfig_lib"
|
. "@datadir@/@PACKAGE@/grub-mkconfig_lib"
|
||||||
|
|
||||||
if [ x$GRUB_PLATFORM != xx86 ]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
osx_entry() {
|
osx_entry() {
|
||||||
if [ x$2 = x32 ]; then
|
if [ x$2 = x32 ]; then
|
||||||
# TRANSLATORS: it refers to kernel architecture (32-bit)
|
# TRANSLATORS: it refers to kernel architecture (32-bit)
|
||||||
bitstr="$(gettext "(32-bit)")"
|
bitstr="$(gettext "(32-bit)")"
|
||||||
if ! [ -f "$GRUB_ROOT"/mach_kernel ] || ! "${grub_file}" --is-i386-xnu "$GRUB_ROOT"/mach_kernel; then
|
|
||||||
return;
|
|
||||||
fi
|
|
||||||
else
|
else
|
||||||
# TRANSLATORS: it refers to kernel architecture (64-bit)
|
# TRANSLATORS: it refers to kernel architecture (64-bit)
|
||||||
bitstr="$(gettext "(64-bit)")"
|
bitstr="$(gettext "(64-bit)")"
|
||||||
if ! [ -f "$GRUB_ROOT"/mach_kernel ] || ! "${grub_file}" --is-x86_64-xnu "$GRUB_ROOT"/mach_kernel; then
|
|
||||||
return;
|
|
||||||
fi
|
|
||||||
fi
|
fi
|
||||||
# TRANSLATORS: it refers on the OS residing on device %s
|
# TRANSLATORS: it refers on the OS residing on device %s
|
||||||
onstr="$(gettext_printf "(on %s)" "${GRUB_DEVICE}")"
|
onstr="$(gettext_printf "(on %s)" "${GRUB_DEVICE}")"
|
||||||
cat << EOF
|
cat << EOF
|
||||||
menuentry '$(echo "Darwin/Mac OS X $bitstr $onstr" | grub_quote)' --class osx --class darwin --class os \$menuentry_id_option 'xnu-$2-$(grub_get_device_id "${GRUB_DEVICE}")' {
|
menuentry '$(echo "Darwin/Mac OS X $bitstr $onstr" | grub_quote)' --class osx --class darwin --class os \$menuentry_id_option 'osprober-xnu-$2-$(grub_get_device_id "${GRUB_DEVICE}")' {
|
||||||
EOF
|
EOF
|
||||||
save_default_entry | grub_add_tab
|
save_default_entry | grub_add_tab
|
||||||
prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab
|
prepare_grub_to_access_device ${GRUB_DEVICE} | grub_add_tab
|
||||||
@@ -60,7 +50,7 @@ EOF
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if [ \$do_resume = 0 ]; then
|
if [ \$do_resume = 0 ]; then
|
||||||
xnu_uuid ${GRUB_DEVICE_UUID} uuid
|
xnu_uuid ${OSXUUID} uuid
|
||||||
if [ -f /Extra/DSDT.aml ]; then
|
if [ -f /Extra/DSDT.aml ]; then
|
||||||
acpi -e /Extra/DSDT.aml
|
acpi -e /Extra/DSDT.aml
|
||||||
fi
|
fi
|
||||||
@@ -100,5 +90,6 @@ EOF
|
|||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OSXUUID="`${grub_probe} --target=fs_uuid --device ${GRUB_DEVICE} 2> /dev/null`"
|
||||||
osx_entry xnu_kernel 32
|
osx_entry xnu_kernel 32
|
||||||
osx_entry xnu_kernel64 64
|
osx_entry xnu_kernel64 64
|
||||||
+17
-11
@@ -26,10 +26,6 @@ datarootdir="@datarootdir@"
|
|||||||
export TEXTDOMAIN=@PACKAGE@
|
export TEXTDOMAIN=@PACKAGE@
|
||||||
export TEXTDOMAINDIR="@localedir@"
|
export TEXTDOMAINDIR="@localedir@"
|
||||||
|
|
||||||
if [ x$GRUB_PLATFORM != xx86 ]; then
|
|
||||||
exit 0
|
|
||||||
fi
|
|
||||||
|
|
||||||
CLASS="--class gnu-linux --class gnu --class os --class xen"
|
CLASS="--class gnu-linux --class gnu --class os --class xen"
|
||||||
|
|
||||||
if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
|
if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
|
||||||
@@ -65,14 +61,14 @@ fi
|
|||||||
|
|
||||||
case x"$GRUB_FS" in
|
case x"$GRUB_FS" in
|
||||||
xbtrfs)
|
xbtrfs)
|
||||||
rootsubvol="`make_system_path_relative_to_its_root "$GRUB_ROOT"/`"
|
rootsubvol="`make_system_path_relative_to_its_root /`"
|
||||||
rootsubvol="${rootsubvol#/}"
|
rootsubvol="${rootsubvol#/}"
|
||||||
if [ "x${rootsubvol}" != x ]; then
|
if [ "x${rootsubvol}" != x ]; then
|
||||||
GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
|
GRUB_CMDLINE_LINUX="rootflags=subvol=${rootsubvol} ${GRUB_CMDLINE_LINUX}"
|
||||||
fi;;
|
fi;;
|
||||||
xzfs)
|
xzfs)
|
||||||
rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
|
rpool=`${grub_probe} --device ${GRUB_DEVICE} --target=fs_label 2>/dev/null || true`
|
||||||
bootfs="`make_system_path_relative_to_its_root "$GRUB_ROOT"/ | sed -e "s,@$,,"`"
|
bootfs="`make_system_path_relative_to_its_root / | sed -e "s,@$,,"`"
|
||||||
LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}"
|
LINUX_ROOT_DEVICE="ZFS=${rpool}${bootfs}"
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
@@ -141,9 +137,19 @@ EOF
|
|||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
|
|
||||||
linux_list=`for i in "$GRUB_ROOT"/boot/vmlinu[xz]-* "$GRUB_ROOT"/vmlinu[xz]-* "$GRUB_ROOT"/boot/kernel-*; do
|
linux_list=`for i in /boot/vmlinu[xz]-* /vmlinu[xz]-* /boot/kernel-*; do
|
||||||
if grub_file_is_not_garbage "$i" && "${grub_file}" --is-x86-xen-dom0 "$i"; then
|
if grub_file_is_not_garbage "$i"; then
|
||||||
echo -n "$i " ;
|
basename=$(basename $i)
|
||||||
|
version=$(echo $basename | sed -e "s,^[^0-9]*-,,g")
|
||||||
|
dirname=$(dirname $i)
|
||||||
|
config=
|
||||||
|
for j in "${dirname}/config-${version}" "${dirname}/config-${alt_version}" "/etc/kernels/kernel-config-${version}" ; do
|
||||||
|
if test -e "${j}" ; then
|
||||||
|
config="${j}"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
if (grep -qx "CONFIG_XEN_DOM0=y" "${config}" 2> /dev/null || grep -qx "CONFIG_XEN_PRIVILEGED_GUEST=y" "${config}" 2> /dev/null); then echo -n "$i " ; fi
|
||||||
fi
|
fi
|
||||||
done`
|
done`
|
||||||
if [ "x${linux_list}" = "x" ] ; then
|
if [ "x${linux_list}" = "x" ] ; then
|
||||||
@@ -159,8 +165,8 @@ file_is_not_sym () {
|
|||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
xen_list=`for i in "$GRUB_ROOT"/boot/xen*; do
|
xen_list=`for i in /boot/xen*; do
|
||||||
if grub_file_is_not_garbage "$i" && file_is_not_sym "$i" && ${grub_file} --is-x86-multiboot "$i"; then echo -n "$i " ; fi
|
if grub_file_is_not_garbage "$i" && file_is_not_sym "$i" ; then echo -n "$i " ; fi
|
||||||
done`
|
done`
|
||||||
prepare_boot_cache=
|
prepare_boot_cache=
|
||||||
boot_device_id=
|
boot_device_id=
|
||||||
|
|||||||
Reference in new issue
Block a user