mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-28 18:19:23 +00:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dfabe9ce4a | ||
|
|
ccaf9c7bcc |
No files matched your search
@@ -1 +0,0 @@
|
|||||||
po/exclude.pot binary
|
|
||||||
+227
-259
@@ -1,281 +1,249 @@
|
|||||||
#
|
00_header
|
||||||
# Ignore patterns in this directory and all subdirectories.
|
10_*
|
||||||
#
|
20_linux_xen
|
||||||
|
30_os-prober
|
||||||
|
40_custom
|
||||||
|
41_custom
|
||||||
*.1
|
*.1
|
||||||
*.8
|
*.8
|
||||||
*.a
|
aclocal.m4
|
||||||
|
ahci_test
|
||||||
|
ascii.bitmaps
|
||||||
|
ascii.h
|
||||||
|
autom4te.cache
|
||||||
|
build-grub-gen-asciih
|
||||||
|
build-grub-gen-widthspec
|
||||||
|
build-grub-mkfont
|
||||||
|
cdboot_test
|
||||||
|
cmp_test
|
||||||
|
config.cache
|
||||||
|
config.guess
|
||||||
|
config.h
|
||||||
|
config-util.h
|
||||||
|
config-util.h.in
|
||||||
|
config.log
|
||||||
|
config.status
|
||||||
|
config.sub
|
||||||
|
configure
|
||||||
|
core_compress_test
|
||||||
|
DISTLIST
|
||||||
|
docs/*.info
|
||||||
|
docs/stamp-vti
|
||||||
|
docs/version.texi
|
||||||
|
ehci_test
|
||||||
|
example_grub_script_test
|
||||||
|
example_scripted_test
|
||||||
|
example_unit_test
|
||||||
*.exec
|
*.exec
|
||||||
*.exec.exe
|
*.exec.exe
|
||||||
*.image
|
fddboot_test
|
||||||
*.image.exe
|
|
||||||
*.img
|
|
||||||
*.log
|
|
||||||
*.lst
|
|
||||||
!/grub-core/extra_deps.lst
|
|
||||||
*.marker
|
|
||||||
*.mod
|
|
||||||
*.o
|
|
||||||
*.pf2
|
|
||||||
*.pp
|
|
||||||
*.pyc
|
|
||||||
*.trs
|
|
||||||
*~
|
|
||||||
.deps-core/
|
|
||||||
.deps-util/
|
|
||||||
.deps/
|
|
||||||
.dirstamp
|
|
||||||
DISTLIST
|
|
||||||
GPATH
|
|
||||||
GRTAGS
|
|
||||||
GSYMS
|
|
||||||
GTAGS
|
|
||||||
Makefile
|
|
||||||
Makefile.in
|
|
||||||
ascii.bitmaps
|
|
||||||
genkernsyms.sh
|
genkernsyms.sh
|
||||||
gensymlist.sh
|
gensymlist.sh
|
||||||
|
gentrigtables
|
||||||
|
gentrigtables.exe
|
||||||
|
gettext_strings_test
|
||||||
grub-bin2h
|
grub-bin2h
|
||||||
|
/grub-bios-setup
|
||||||
|
/grub-bios-setup.exe
|
||||||
|
grub_cmd_date
|
||||||
|
grub_cmd_echo
|
||||||
|
grub_cmd_regexp
|
||||||
|
grub_cmd_set_date
|
||||||
|
grub_cmd_sleep
|
||||||
|
/grub-editenv
|
||||||
|
/grub-editenv.exe
|
||||||
grub-emu
|
grub-emu
|
||||||
grub-emu-lite
|
grub-emu-lite
|
||||||
grub-emu-lite.exe
|
|
||||||
grub-emu.exe
|
grub-emu.exe
|
||||||
grub-macho2img
|
grub-emu-lite.exe
|
||||||
grub_emu_init.c
|
grub_emu_init.c
|
||||||
grub_emu_init.h
|
grub_emu_init.h
|
||||||
|
/grub-file
|
||||||
|
/grub-file.exe
|
||||||
|
grub-fstest
|
||||||
|
grub-fstest.exe
|
||||||
|
grub_fstest_init.c
|
||||||
|
grub_fstest_init.h
|
||||||
|
grub_func_test
|
||||||
|
grub-install
|
||||||
|
grub-install.exe
|
||||||
|
grub-kbdcomp
|
||||||
|
/grub-macbless
|
||||||
|
/grub-macbless.exe
|
||||||
|
grub-macho2img
|
||||||
|
/grub-menulst2cfg
|
||||||
|
/grub-menulst2cfg.exe
|
||||||
|
/grub-mk*
|
||||||
|
grub-mount
|
||||||
|
/grub-ofpathname
|
||||||
|
/grub-ofpathname.exe
|
||||||
|
grub-core/build-grub-pe2elf.exe
|
||||||
|
/grub-probe
|
||||||
|
/grub-probe.exe
|
||||||
grub_probe_init.c
|
grub_probe_init.c
|
||||||
grub_probe_init.h
|
grub_probe_init.h
|
||||||
|
/grub-reboot
|
||||||
|
grub_script_blanklines
|
||||||
|
grub_script_blockarg
|
||||||
|
grub_script_break
|
||||||
|
grub-script-check
|
||||||
|
grub-script-check.exe
|
||||||
|
grub_script_check_init.c
|
||||||
|
grub_script_check_init.h
|
||||||
|
grub_script_comments
|
||||||
|
grub_script_continue
|
||||||
|
grub_script_dollar
|
||||||
|
grub_script_echo1
|
||||||
|
grub_script_echo_keywords
|
||||||
|
grub_script_escape_comma
|
||||||
|
grub_script_eval
|
||||||
|
grub_script_expansion
|
||||||
|
grub_script_final_semicolon
|
||||||
|
grub_script_for1
|
||||||
|
grub_script_functions
|
||||||
|
grub_script_gettext
|
||||||
|
grub_script_if
|
||||||
|
grub_script_leading_whitespace
|
||||||
|
grub_script_no_commands
|
||||||
|
grub_script_not
|
||||||
|
grub_script_return
|
||||||
|
grub_script_setparams
|
||||||
|
grub_script_shift
|
||||||
|
grub_script_strcmp
|
||||||
|
grub_script_test
|
||||||
|
grub_script_vars1
|
||||||
|
grub_script_while1
|
||||||
grub_script.tab.c
|
grub_script.tab.c
|
||||||
grub_script.tab.h
|
grub_script.tab.h
|
||||||
grub_script.yy.c
|
grub_script.yy.c
|
||||||
grub_script.yy.h
|
grub_script.yy.h
|
||||||
grub_script_check_init.c
|
grub-set-default
|
||||||
grub_script_check_init.h
|
|
||||||
grub_setup_init.c
|
grub_setup_init.c
|
||||||
grub_setup_init.h
|
grub_setup_init.h
|
||||||
mdate-sh
|
grub-shell
|
||||||
mod-*.c
|
grub-shell-tester
|
||||||
update-grub_lib
|
grub-sparc64-setup
|
||||||
widthspec.bin
|
grub-sparc64-setup.exe
|
||||||
|
|
||||||
#
|
|
||||||
# Ignore patterns relative to this .gitignore file's directory.
|
|
||||||
#
|
|
||||||
/00_header
|
|
||||||
/10_*
|
|
||||||
/20_linux_xen
|
|
||||||
/30_os-prober
|
|
||||||
/30_uefi-firmware
|
|
||||||
/40_custom
|
|
||||||
/41_custom
|
|
||||||
/ABOUT-NLS
|
|
||||||
/ChangeLog
|
|
||||||
/INSTALL.grub
|
|
||||||
/Makefile.util.am
|
|
||||||
/Makefile.utilgcry.def
|
|
||||||
/aclocal.m4
|
|
||||||
/ahci_test
|
|
||||||
/ascii.h
|
|
||||||
/autom4te.cache/
|
|
||||||
/btrfs_test
|
|
||||||
/build-aux/
|
|
||||||
/build-grub-gen-asciih
|
|
||||||
/build-grub-gen-widthspec
|
|
||||||
/build-grub-mkfont
|
|
||||||
/cdboot_test
|
|
||||||
/cmp_test
|
|
||||||
/compile
|
|
||||||
/config-util.h
|
|
||||||
/config-util.h.in
|
|
||||||
/config.cache
|
|
||||||
/config.guess
|
|
||||||
/config.h
|
|
||||||
/config.log
|
|
||||||
/config.status
|
|
||||||
/config.sub
|
|
||||||
/configure
|
|
||||||
/contrib
|
|
||||||
/core_compress_test
|
|
||||||
/cpio_test
|
|
||||||
/date_test
|
|
||||||
/depcomp
|
|
||||||
/docs/*.info
|
|
||||||
/docs/*.info-[0-9]*
|
|
||||||
/docs/stamp-1
|
|
||||||
/docs/stamp-vti
|
|
||||||
/docs/version-dev.texi
|
|
||||||
/docs/version.texi
|
|
||||||
/ehci_test
|
|
||||||
/example_grub_script_test
|
|
||||||
/example_scripted_test
|
|
||||||
/example_unit_test
|
|
||||||
/exfat_test
|
|
||||||
/ext234_test
|
|
||||||
/f2fs_test
|
|
||||||
/fat_test
|
|
||||||
/fddboot_test
|
|
||||||
/file_filter_test
|
|
||||||
/garbage-gen
|
|
||||||
/garbage-gen.exe
|
|
||||||
/gettext_strings_test
|
|
||||||
/gnulib/
|
|
||||||
/grub-2.[0-9]*/
|
|
||||||
/grub-2.[0-9]*.tar.gz
|
|
||||||
/grub-bios-setup
|
|
||||||
/grub-bios-setup.exe
|
|
||||||
/grub-core/*.module
|
|
||||||
/grub-core/*.module.exe
|
|
||||||
/grub-core/*.pp
|
|
||||||
/grub-core/Makefile.core.am
|
|
||||||
/grub-core/Makefile.gcry.def
|
|
||||||
/grub-core/bootinfo.txt
|
|
||||||
/grub-core/build-grub-module-verifier
|
|
||||||
/grub-core/build-grub-pe2elf.exe
|
|
||||||
/grub-core/contrib
|
|
||||||
/grub-core/gdb_grub
|
|
||||||
/grub-core/genmod.sh
|
|
||||||
/grub-core/gensyminfo.sh
|
|
||||||
/grub-core/gentrigtables
|
|
||||||
/grub-core/gentrigtables.exe
|
|
||||||
/grub-core/gmodule.pl
|
|
||||||
/grub-core/grub.chrp
|
|
||||||
/grub-core/kernel.img.bin
|
|
||||||
/grub-core/lib/gnulib
|
|
||||||
/grub-core/lib/libgcrypt-grub
|
|
||||||
/grub-core/modinfo.sh
|
|
||||||
/grub-core/rs_decoder.h
|
|
||||||
/grub-core/symlist.c
|
|
||||||
/grub-core/symlist.h
|
|
||||||
/grub-core/trigtables.c
|
|
||||||
/grub-core/unidata.c
|
|
||||||
/grub-editenv
|
|
||||||
/grub-editenv.exe
|
|
||||||
/grub-file
|
|
||||||
/grub-file.exe
|
|
||||||
/grub-fs-tester
|
|
||||||
/grub-fstest
|
|
||||||
/grub-fstest.exe
|
|
||||||
/grub-glue-efi
|
|
||||||
/grub-glue-efi.exe
|
|
||||||
/grub-install
|
|
||||||
/grub-install.exe
|
|
||||||
/grub-kbdcomp
|
|
||||||
/grub-macbless
|
|
||||||
/grub-macbless.exe
|
|
||||||
/grub-menulst2cfg
|
|
||||||
/grub-menulst2cfg.exe
|
|
||||||
/grub-mk*
|
|
||||||
/grub-mount
|
|
||||||
/grub-ofpathname
|
|
||||||
/grub-ofpathname.exe
|
|
||||||
/grub-probe
|
|
||||||
/grub-probe.exe
|
|
||||||
/grub-reboot
|
|
||||||
/grub-render-label
|
|
||||||
/grub-render-label.exe
|
|
||||||
/grub-script-check
|
|
||||||
/grub-script-check.exe
|
|
||||||
/grub-set-default
|
|
||||||
/grub-shell
|
|
||||||
/grub-shell-tester
|
|
||||||
/grub-sparc64-setup
|
|
||||||
/grub-sparc64-setup.exe
|
|
||||||
/grub-syslinux2cfg
|
/grub-syslinux2cfg
|
||||||
/grub-syslinux2cfg.exe
|
/grub-syslinux2cfg.exe
|
||||||
/grub_cmd_date
|
gzcompress_test
|
||||||
/grub_cmd_echo
|
hddboot_test
|
||||||
/grub_cmd_regexp
|
help_test
|
||||||
/grub_cmd_set_date
|
*.img
|
||||||
/grub_cmd_sleep
|
*.image
|
||||||
/grub_cmd_test
|
*.image.exe
|
||||||
/grub_cmd_tr
|
include/grub/cpu
|
||||||
/grub_fstest_init.c
|
include/grub/machine
|
||||||
/grub_fstest_init.h
|
install-sh
|
||||||
/grub_func_test
|
lib/libgcrypt-grub
|
||||||
/grub_script_blanklines
|
libgrub_a_init.c
|
||||||
/grub_script_blockarg
|
*.log
|
||||||
/grub_script_break
|
*.lst
|
||||||
/grub_script_comments
|
lzocompress_test
|
||||||
/grub_script_continue
|
*.marker
|
||||||
/grub_script_dollar
|
Makefile
|
||||||
/grub_script_echo1
|
*.mod
|
||||||
/grub_script_echo_keywords
|
mod-*.c
|
||||||
/grub_script_escape_comma
|
missing
|
||||||
/grub_script_eval
|
netboot_test
|
||||||
/grub_script_expansion
|
*.o
|
||||||
/grub_script_final_semicolon
|
*.a
|
||||||
/grub_script_for1
|
ohci_test
|
||||||
/grub_script_functions
|
partmap_test
|
||||||
/grub_script_gettext
|
pata_test
|
||||||
/grub_script_if
|
*.pf2
|
||||||
/grub_script_leading_whitespace
|
*.pp
|
||||||
/grub_script_no_commands
|
po/*.mo
|
||||||
/grub_script_not
|
po/grub.pot
|
||||||
/grub_script_return
|
po/POTFILES
|
||||||
/grub_script_setparams
|
po/stamp-po
|
||||||
/grub_script_shift
|
printf_test
|
||||||
/grub_script_strcmp
|
priority_queue_unit_test
|
||||||
/grub_script_test
|
pseries_test
|
||||||
/grub_script_vars1
|
stamp-h
|
||||||
/grub_script_while1
|
stamp-h1
|
||||||
/gzcompress_test
|
stamp-h.in
|
||||||
/hddboot_test
|
symlist.c
|
||||||
/help_test
|
symlist.h
|
||||||
/hfs_test
|
trigtables.c
|
||||||
/hfsplus_test
|
*.trs
|
||||||
/include/grub/cpu
|
uhci_test
|
||||||
/include/grub/gcrypt/g10lib.h
|
update-grub_lib
|
||||||
/include/grub/gcrypt/gcrypt.h
|
unidata.c
|
||||||
/include/grub/machine
|
xzcompress_test
|
||||||
/install-sh
|
Makefile.in
|
||||||
/iso9660_test
|
GPATH
|
||||||
/jfs_test
|
GRTAGS
|
||||||
/lib/libgcrypt-grub
|
GSYMS
|
||||||
/libgrub_a_init.c
|
GTAGS
|
||||||
/lzocompress_test
|
compile
|
||||||
/luks1_test
|
depcomp
|
||||||
/luks2_test
|
mdate-sh
|
||||||
/m4/
|
texinfo.tex
|
||||||
/minixfs_test
|
grub-core/lib/libgcrypt-grub
|
||||||
/missing
|
.deps
|
||||||
/netboot_test
|
.deps-util
|
||||||
/nilfs2_test
|
.deps-core
|
||||||
/ntfs_test
|
.dirstamp
|
||||||
/ohci_test
|
Makefile.util.am
|
||||||
/partmap_test
|
contrib
|
||||||
/pata_test
|
grub-core/bootinfo.txt
|
||||||
/po/*.gmo
|
grub-core/Makefile.core.am
|
||||||
/po/*.mo
|
grub-core/Makefile.gcry.def
|
||||||
/po/*.po
|
grub-core/contrib
|
||||||
/po/LINGUAS
|
grub-core/gdb_grub
|
||||||
/po/Makefile.in.in
|
grub-core/genmod.sh
|
||||||
/po/Makevars
|
grub-core/gensyminfo.sh
|
||||||
/po/Makevars.template
|
grub-core/gmodule.pl
|
||||||
/po/POTFILES
|
grub-core/grub.chrp
|
||||||
/po/POTFILES-shell.in
|
grub-core/modinfo.sh
|
||||||
/po/POTFILES.in
|
grub-core/*.module
|
||||||
/po/Rules-quot
|
grub-core/*.module.exe
|
||||||
/po/grub.pot
|
grub-core/*.pp
|
||||||
/po/remove-potcdate.sed
|
grub-core/kernel.img.bin
|
||||||
/po/stamp-po
|
util/bash-completion.d/grub
|
||||||
/printf_test
|
grub-core/gnulib/alloca.h
|
||||||
/priority_queue_unit_test
|
grub-core/gnulib/arg-nonnull.h
|
||||||
/pseries_test
|
grub-core/gnulib/c++defs.h
|
||||||
/reiserfs_test
|
grub-core/gnulib/charset.alias
|
||||||
/romfs_test
|
grub-core/gnulib/configmake.h
|
||||||
/squashfs_test
|
grub-core/gnulib/float.h
|
||||||
/stamp-h
|
grub-core/gnulib/getopt.h
|
||||||
/stamp-h.in
|
grub-core/gnulib/langinfo.h
|
||||||
/stamp-h1
|
grub-core/gnulib/ref-add.sed
|
||||||
/syslinux_test
|
grub-core/gnulib/ref-del.sed
|
||||||
/tar_test
|
grub-core/gnulib/stdio.h
|
||||||
/test_sha512sum
|
grub-core/gnulib/stdlib.h
|
||||||
/test_unset
|
grub-core/gnulib/string.h
|
||||||
/tests/syslinux/ubuntu10.04_grub.cfg
|
grub-core/gnulib/strings.h
|
||||||
/texinfo.tex
|
grub-core/gnulib/sys
|
||||||
/udf_test
|
grub-core/gnulib/unistd.h
|
||||||
/uhci_test
|
grub-core/gnulib/warn-on-use.h
|
||||||
/util/bash-completion.d/grub
|
grub-core/gnulib/wchar.h
|
||||||
/widthspec.h
|
grub-core/gnulib/wctype.h
|
||||||
/xfs_test
|
grub-core/rs_decoder.h
|
||||||
/xzcompress_test
|
widthspec.bin
|
||||||
/zfs_test
|
widthspec.h
|
||||||
|
docs/stamp-1
|
||||||
|
docs/version-dev.texi
|
||||||
|
Makefile.utilgcry.def
|
||||||
|
po/*.po
|
||||||
|
po/*.gmo
|
||||||
|
po/LINGUAS
|
||||||
|
po/remove-potcdate.sed
|
||||||
|
include/grub/gcrypt/gcrypt.h
|
||||||
|
include/grub/gcrypt/g10lib.h
|
||||||
|
po/POTFILES.in
|
||||||
|
po/POTFILES-shell.in
|
||||||
|
/grub-glue-efi
|
||||||
|
/grub-render-label
|
||||||
|
/grub-glue-efi.exe
|
||||||
|
/grub-render-label.exe
|
||||||
|
grub-core/gnulib/locale.h
|
||||||
|
grub-core/gnulib/unitypes.h
|
||||||
|
grub-core/gnulib/uniwidth.h
|
||||||
|
build-aux/test-driver
|
||||||
|
/garbage-gen
|
||||||
|
/garbage-gen.exe
|
||||||
|
/grub-fs-tester
|
||||||
|
grub-core/build-grub-module-verifier
|
||||||
-109
@@ -1,109 +0,0 @@
|
|||||||
# SPDX-License-Identifier: GPL-3.0+
|
|
||||||
# Originally Copyright Roger Meier <r.meier@siemens.com>
|
|
||||||
# Adapted for GRUB by Alexander Graf <agraf@suse.de>
|
|
||||||
#
|
|
||||||
# Build GRUB on Travis CI - https://www.travis-ci.org/
|
|
||||||
#
|
|
||||||
|
|
||||||
dist: xenial
|
|
||||||
|
|
||||||
language: c
|
|
||||||
|
|
||||||
addons:
|
|
||||||
apt:
|
|
||||||
packages:
|
|
||||||
- autopoint
|
|
||||||
- libsdl1.2-dev
|
|
||||||
- lzop
|
|
||||||
- ovmf
|
|
||||||
- python
|
|
||||||
- qemu-system
|
|
||||||
- unifont
|
|
||||||
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
# Include all cross toolchain paths, so we can just call them later down.
|
|
||||||
- PATH=/tmp/qemu-install/bin:/tmp/grub/bin:/usr/bin:/bin:/tmp/cross/gcc-8.1.0-nolibc/aarch64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/arm-linux-gnueabi/bin:/tmp/cross/gcc-8.1.0-nolibc/ia64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/mips64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/powerpc64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/riscv32-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/riscv64-linux/bin:/tmp/cross/gcc-8.1.0-nolibc/sparc64-linux/bin
|
|
||||||
|
|
||||||
before_script:
|
|
||||||
# Install necessary toolchains based on $CROSS_TARGETS variable.
|
|
||||||
- mkdir /tmp/cross
|
|
||||||
# These give us binaries like /tmp/cross/gcc-8.1.0-nolibc/ia64-linux/bin/ia64-linux-gcc
|
|
||||||
- for i in $CROSS_TARGETS; do
|
|
||||||
( cd /tmp/cross; wget -t 3 -O - https://mirrors.kernel.org/pub/tools/crosstool/files/bin/x86_64/8.1.0/x86_64-gcc-8.1.0-nolibc-$i.tar.xz | tar xJ );
|
|
||||||
done
|
|
||||||
|
|
||||||
script:
|
|
||||||
# Comments must be outside the command strings below, or the Travis parser
|
|
||||||
# will get confused.
|
|
||||||
- ./bootstrap
|
|
||||||
|
|
||||||
# Build all selected GRUB targets.
|
|
||||||
- for target in $GRUB_TARGETS; do
|
|
||||||
plat=${target#*-};
|
|
||||||
arch=${target%-*};
|
|
||||||
[ "$arch" = "arm64" ] && arch=aarch64-linux;
|
|
||||||
[ "$arch" = "arm" ] && arch=arm-linux-gnueabi;
|
|
||||||
[ "$arch" = "ia64" ] && arch=ia64-linux;
|
|
||||||
[ "$arch" = "mipsel" ] && arch=mips64-linux;
|
|
||||||
[ "$arch" = "powerpc" ] && arch=powerpc64-linux;
|
|
||||||
[ "$arch" = "riscv32" ] && arch=riscv32-linux;
|
|
||||||
[ "$arch" = "riscv64" ] && arch=riscv64-linux;
|
|
||||||
[ "$arch" = "sparc64" ] && arch=sparc64-linux;
|
|
||||||
echo "Building $target";
|
|
||||||
mkdir obj-$target;
|
|
||||||
JOBS=`getconf _NPROCESSORS_ONLN 2> /dev/null || echo 1`;
|
|
||||||
[ "$JOBS" == 1 ] || JOBS=$(($JOBS + 1));
|
|
||||||
( cd obj-$target && ../configure --target=$arch --with-platform=$plat --prefix=/tmp/grub && make -j$JOBS && make -j$JOBS install ) &> log || ( cat log; false );
|
|
||||||
done
|
|
||||||
|
|
||||||
# Our test canary.
|
|
||||||
- echo -e "insmod echo\\ninsmod reboot\\necho hello world\\nreboot" > grub.cfg
|
|
||||||
|
|
||||||
# Assemble images and possibly run them.
|
|
||||||
- for target in $GRUB_TARGETS; do grub-mkimage -c grub.cfg -p / -O $target -o grub-$target echo reboot normal; done
|
|
||||||
|
|
||||||
# Run images we know how to run.
|
|
||||||
- if [[ "$GRUB_TARGETS" == *"x86_64-efi"* ]]; then qemu-system-x86_64 -bios /usr/share/ovmf/OVMF.fd -m 512 -no-reboot -nographic -net nic -net user,tftp=.,bootfile=grub-x86_64-efi | tee grub.log && grep "hello world" grub.log; fi
|
|
||||||
|
|
||||||
matrix:
|
|
||||||
include:
|
|
||||||
# Each env setting here is a dedicated build.
|
|
||||||
- name: "x86_64"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="x86_64-efi x86_64-xen"
|
|
||||||
- name: "i386"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="i386-coreboot i386-efi i386-ieee1275 i386-multiboot i386-pc i386-qemu i386-xen i386-xen_pvh"
|
|
||||||
- name: "powerpc"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="powerpc-ieee1275"
|
|
||||||
- CROSS_TARGETS="powerpc64-linux"
|
|
||||||
- name: "sparc64"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="sparc64-ieee1275"
|
|
||||||
- CROSS_TARGETS="sparc64-linux"
|
|
||||||
- name: "ia64"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="ia64-efi"
|
|
||||||
- CROSS_TARGETS="ia64-linux"
|
|
||||||
- name: "mips"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="mips-arc mipsel-arc mipsel-qemu_mips mips-qemu_mips"
|
|
||||||
- CROSS_TARGETS="mips64-linux"
|
|
||||||
- name: "arm"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="arm-coreboot arm-efi arm-uboot"
|
|
||||||
- CROSS_TARGETS="arm-linux-gnueabi"
|
|
||||||
- name: "arm64"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="arm64-efi"
|
|
||||||
- CROSS_TARGETS="aarch64-linux"
|
|
||||||
- name: "riscv32"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="riscv32-efi"
|
|
||||||
- CROSS_TARGETS="riscv32-linux"
|
|
||||||
- name: "riscv64"
|
|
||||||
env:
|
|
||||||
- GRUB_TARGETS="riscv64-efi"
|
|
||||||
- CROSS_TARGETS="riscv64-linux"
|
|
||||||
@@ -0,0 +1,223 @@
|
|||||||
|
1 Notes on the Free Translation Project
|
||||||
|
***************************************
|
||||||
|
|
||||||
|
Free software is going international! The Free Translation Project is
|
||||||
|
a way to get maintainers of free software, translators, and users all
|
||||||
|
together, so that free software will gradually become able to speak many
|
||||||
|
languages. A few packages already provide translations for their
|
||||||
|
messages.
|
||||||
|
|
||||||
|
If you found this `ABOUT-NLS' file inside a distribution, you may
|
||||||
|
assume that the distributed package does use GNU `gettext' internally,
|
||||||
|
itself available at your nearest GNU archive site. But you do _not_
|
||||||
|
need to install GNU `gettext' prior to configuring, installing or using
|
||||||
|
this package with messages translated.
|
||||||
|
|
||||||
|
Installers will find here some useful hints. These notes also
|
||||||
|
explain how users should proceed for getting the programs to use the
|
||||||
|
available translations. They tell how people wanting to contribute and
|
||||||
|
work on translations can contact the appropriate team.
|
||||||
|
|
||||||
|
When reporting bugs in the `intl/' directory or bugs which may be
|
||||||
|
related to internationalization, you should tell about the version of
|
||||||
|
`gettext' which is used. The information can be found in the
|
||||||
|
`intl/VERSION' file, in internationalized packages.
|
||||||
|
|
||||||
|
1.1 Quick configuration advice
|
||||||
|
==============================
|
||||||
|
|
||||||
|
If you want to exploit the full power of internationalization, you
|
||||||
|
should configure it using
|
||||||
|
|
||||||
|
./configure --with-included-gettext
|
||||||
|
|
||||||
|
to force usage of internationalizing routines provided within this
|
||||||
|
package, despite the existence of internationalizing capabilities in the
|
||||||
|
operating system where this package is being installed. So far, only
|
||||||
|
the `gettext' implementation in the GNU C library version 2 provides as
|
||||||
|
many features (such as locale alias, message inheritance, automatic
|
||||||
|
charset conversion or plural form handling) as the implementation here.
|
||||||
|
It is also not possible to offer this additional functionality on top
|
||||||
|
of a `catgets' implementation. Future versions of GNU `gettext' will
|
||||||
|
very likely convey even more functionality. So it might be a good idea
|
||||||
|
to change to GNU `gettext' as soon as possible.
|
||||||
|
|
||||||
|
So you need _not_ provide this option if you are using GNU libc 2 or
|
||||||
|
you have installed a recent copy of the GNU gettext package with the
|
||||||
|
included `libintl'.
|
||||||
|
|
||||||
|
1.2 INSTALL Matters
|
||||||
|
===================
|
||||||
|
|
||||||
|
Some packages are "localizable" when properly installed; the programs
|
||||||
|
they contain can be made to speak your own native language. Most such
|
||||||
|
packages use GNU `gettext'. Other packages have their own ways to
|
||||||
|
internationalization, predating GNU `gettext'.
|
||||||
|
|
||||||
|
By default, this package will be installed to allow translation of
|
||||||
|
messages. It will automatically detect whether the system already
|
||||||
|
provides the GNU `gettext' functions. If not, the included GNU
|
||||||
|
`gettext' library will be used. This library is wholly contained
|
||||||
|
within this package, usually in the `intl/' subdirectory, so prior
|
||||||
|
installation of the GNU `gettext' package is _not_ required.
|
||||||
|
Installers may use special options at configuration time for changing
|
||||||
|
the default behaviour. The commands:
|
||||||
|
|
||||||
|
./configure --with-included-gettext
|
||||||
|
./configure --disable-nls
|
||||||
|
|
||||||
|
will, respectively, bypass any pre-existing `gettext' to use the
|
||||||
|
internationalizing routines provided within this package, or else,
|
||||||
|
_totally_ disable translation of messages.
|
||||||
|
|
||||||
|
When you already have GNU `gettext' installed on your system and run
|
||||||
|
configure without an option for your new package, `configure' will
|
||||||
|
probably detect the previously built and installed `libintl.a' file and
|
||||||
|
will decide to use this. This might not be desirable. You should use
|
||||||
|
the more recent version of the GNU `gettext' library. I.e. if the file
|
||||||
|
`intl/VERSION' shows that the library which comes with this package is
|
||||||
|
more recent, you should use
|
||||||
|
|
||||||
|
./configure --with-included-gettext
|
||||||
|
|
||||||
|
to prevent auto-detection.
|
||||||
|
|
||||||
|
The configuration process will not test for the `catgets' function
|
||||||
|
and therefore it will not be used. The reason is that even an
|
||||||
|
emulation of `gettext' on top of `catgets' could not provide all the
|
||||||
|
extensions of the GNU `gettext' library.
|
||||||
|
|
||||||
|
Internationalized packages usually have many `po/LL.po' files, where
|
||||||
|
LL gives an ISO 639 two-letter code identifying the language. Unless
|
||||||
|
translations have been forbidden at `configure' time by using the
|
||||||
|
`--disable-nls' switch, all available translations are installed
|
||||||
|
together with the package. However, the environment variable `LINGUAS'
|
||||||
|
may be set, prior to configuration, to limit the installed set.
|
||||||
|
`LINGUAS' should then contain a space separated list of two-letter
|
||||||
|
codes, stating which languages are allowed.
|
||||||
|
|
||||||
|
1.3 Using This Package
|
||||||
|
======================
|
||||||
|
|
||||||
|
As a user, if your language has been installed for this package, you
|
||||||
|
only have to set the `LANG' environment variable to the appropriate
|
||||||
|
`LL_CC' combination. Here `LL' is an ISO 639 two-letter language code,
|
||||||
|
and `CC' is an ISO 3166 two-letter country code. For example, let's
|
||||||
|
suppose that you speak German and live in Germany. At the shell
|
||||||
|
prompt, merely execute `setenv LANG de_DE' (in `csh'),
|
||||||
|
`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
|
||||||
|
This can be done from your `.login' or `.profile' file, once and for
|
||||||
|
all.
|
||||||
|
|
||||||
|
You might think that the country code specification is redundant.
|
||||||
|
But in fact, some languages have dialects in different countries. For
|
||||||
|
example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The
|
||||||
|
country code serves to distinguish the dialects.
|
||||||
|
|
||||||
|
The locale naming convention of `LL_CC', with `LL' denoting the
|
||||||
|
language and `CC' denoting the country, is the one use on systems based
|
||||||
|
on GNU libc. On other systems, some variations of this scheme are
|
||||||
|
used, such as `LL' or `LL_CC.ENCODING'. You can get the list of
|
||||||
|
locales supported by your system for your language by running the
|
||||||
|
command `locale -a | grep '^LL''.
|
||||||
|
|
||||||
|
Not all programs have translations for all languages. By default, an
|
||||||
|
English message is shown in place of a nonexistent translation. If you
|
||||||
|
understand other languages, you can set up a priority list of languages.
|
||||||
|
This is done through a different environment variable, called
|
||||||
|
`LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG'
|
||||||
|
for the purpose of message handling, but you still need to have `LANG'
|
||||||
|
set to the primary language; this is required by other parts of the
|
||||||
|
system libraries. For example, some Swedish users who would rather
|
||||||
|
read translations in German than English for when Swedish is not
|
||||||
|
available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
|
||||||
|
|
||||||
|
Special advice for Norwegian users: The language code for Norwegian
|
||||||
|
bokma*l changed from `no' to `nb' recently (in 2003). During the
|
||||||
|
transition period, while some message catalogs for this language are
|
||||||
|
installed under `nb' and some older ones under `no', it's recommended
|
||||||
|
for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
|
||||||
|
older translations are used.
|
||||||
|
|
||||||
|
In the `LANGUAGE' environment variable, but not in the `LANG'
|
||||||
|
environment variable, `LL_CC' combinations can be abbreviated as `LL'
|
||||||
|
to denote the language's main dialect. For example, `de' is equivalent
|
||||||
|
to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
|
||||||
|
(Portuguese as spoken in Portugal) in this context.
|
||||||
|
|
||||||
|
1.4 Translating Teams
|
||||||
|
=====================
|
||||||
|
|
||||||
|
For the Free Translation Project to be a success, we need interested
|
||||||
|
people who like their own language and write it well, and who are also
|
||||||
|
able to synergize with other translators speaking the same language.
|
||||||
|
Each translation team has its own mailing list. The up-to-date list of
|
||||||
|
teams can be found at the Free Translation Project's homepage,
|
||||||
|
`http://www.iro.umontreal.ca/contrib/po/HTML/', in the "National teams"
|
||||||
|
area.
|
||||||
|
|
||||||
|
If you'd like to volunteer to _work_ at translating messages, you
|
||||||
|
should become a member of the translating team for your own language.
|
||||||
|
The subscribing address is _not_ the same as the list itself, it has
|
||||||
|
`-request' appended. For example, speakers of Swedish can send a
|
||||||
|
message to `sv-request@li.org', having this message body:
|
||||||
|
|
||||||
|
subscribe
|
||||||
|
|
||||||
|
Keep in mind that team members are expected to participate
|
||||||
|
_actively_ in translations, or at solving translational difficulties,
|
||||||
|
rather than merely lurking around. If your team does not exist yet and
|
||||||
|
you want to start one, or if you are unsure about what to do or how to
|
||||||
|
get started, please write to `translation@iro.umontreal.ca' to reach the
|
||||||
|
coordinator for all translator teams.
|
||||||
|
|
||||||
|
The English team is special. It works at improving and uniformizing
|
||||||
|
the terminology in use. Proven linguistic skills are praised more than
|
||||||
|
programming skills, here.
|
||||||
|
|
||||||
|
1.5 Available Packages
|
||||||
|
======================
|
||||||
|
|
||||||
|
Languages are not equally supported in all packages. The following
|
||||||
|
matrix shows the current state of internationalization, as of October
|
||||||
|
2006. The matrix shows, in regard of each package, for which languages
|
||||||
|
PO files have been submitted to translation coordination, with a
|
||||||
|
translation percentage of at least 50%.
|
||||||
|
|
||||||
|
# Matrix here is removed!
|
||||||
|
|
||||||
|
Some counters in the preceding matrix are higher than the number of
|
||||||
|
visible blocks let us expect. This is because a few extra PO files are
|
||||||
|
used for implementing regional variants of languages, or language
|
||||||
|
dialects.
|
||||||
|
|
||||||
|
For a PO file in the matrix above to be effective, the package to
|
||||||
|
which it applies should also have been internationalized and
|
||||||
|
distributed as such by its maintainer. There might be an observable
|
||||||
|
lag between the mere existence a PO file and its wide availability in a
|
||||||
|
distribution.
|
||||||
|
|
||||||
|
If October 2006 seems to be old, you may fetch a more recent copy of
|
||||||
|
this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date
|
||||||
|
matrix with full percentage details can be found at
|
||||||
|
`http://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
|
||||||
|
|
||||||
|
1.6 Using `gettext' in new packages
|
||||||
|
===================================
|
||||||
|
|
||||||
|
If you are writing a freely available program and want to
|
||||||
|
internationalize it you are welcome to use GNU `gettext' in your
|
||||||
|
package. Of course you have to respect the GNU Library General Public
|
||||||
|
License which covers the use of the GNU `gettext' library. This means
|
||||||
|
in particular that even non-free programs can use `libintl' as a shared
|
||||||
|
library, whereas only free software can use `libintl' as a static
|
||||||
|
library or use modified versions of `libintl'.
|
||||||
|
|
||||||
|
Once the sources are changed appropriately and the setup can handle
|
||||||
|
the use of `gettext' the only thing missing are the translations. The
|
||||||
|
Free Translation Project is also available for packages which are not
|
||||||
|
developed inside the GNU project. Therefore the information given above
|
||||||
|
applies also for every other Free Software Project. Contact
|
||||||
|
`translation@iro.umontreal.ca' to make the `.pot' files available to
|
||||||
|
the translation teams.
|
||||||
|
|
||||||
+55487
File diff suppressed because it is too large.
Load diff
@@ -4,10 +4,6 @@ This is the GRUB. Welcome.
|
|||||||
|
|
||||||
This file contains instructions for compiling and installing the GRUB.
|
This file contains instructions for compiling and installing the GRUB.
|
||||||
|
|
||||||
Where this document refers to packages names, they are named according to the
|
|
||||||
Debian 11 package repositories. These packages can be found by searching
|
|
||||||
https://packages.debian.org/.
|
|
||||||
|
|
||||||
The Requirements
|
The Requirements
|
||||||
================
|
================
|
||||||
|
|
||||||
@@ -15,16 +11,32 @@ GRUB depends on some software packages installed into your system. If
|
|||||||
you don't have any of them, please obtain and install them before
|
you don't have any of them, please obtain and install them before
|
||||||
configuring the GRUB.
|
configuring the GRUB.
|
||||||
|
|
||||||
* GCC 5.1.0 or later
|
* GCC 4.1.3 or later
|
||||||
Experimental support for clang 8.0.0 or later (results in much bigger binaries)
|
Note: older versions may work but support is limited
|
||||||
|
|
||||||
|
Experimental support for clang 3.3 or later (results in much bigger binaries)
|
||||||
for i386, x86_64, arm (including thumb), arm64, mips(el), powerpc, sparc64
|
for i386, x86_64, arm (including thumb), arm64, mips(el), powerpc, sparc64
|
||||||
|
Note: clang 3.2 or later works for i386 and x86_64 targets but results in
|
||||||
|
much bigger binaries.
|
||||||
|
earlier versions not tested
|
||||||
|
Note: clang 3.2 or later works for arm
|
||||||
|
earlier versions not tested
|
||||||
|
Note: clang on arm64 is not supported due to
|
||||||
|
https://llvm.org/bugs/show_bug.cgi?id=26030
|
||||||
|
Note: clang 3.3 or later works for mips(el)
|
||||||
|
earlier versions fail to generate .reginfo and hence gprel relocations
|
||||||
|
fail.
|
||||||
|
Note: clang 3.2 or later works for powerpc
|
||||||
|
earlier versions not tested
|
||||||
|
Note: clang 3.5 or later works for sparc64
|
||||||
|
earlier versions return "error: unable to interface with target machine"
|
||||||
|
Note: clang has no support for ia64 and hence you can't compile GRUB
|
||||||
|
for ia64 with clang
|
||||||
* GNU Make
|
* GNU Make
|
||||||
* GNU Bison 2.3 or later
|
* GNU Bison 2.3 or later
|
||||||
* GNU gettext
|
* GNU gettext 0.17 or later
|
||||||
* GNU binutils 2.9.1.0.23 or later
|
* GNU binutils 2.9.1.0.23 or later
|
||||||
* Flex 2.5.35 or later
|
* Flex 2.5.35 or later
|
||||||
* pkg-config
|
|
||||||
* GNU patch
|
|
||||||
* Other standard GNU/Unix tools
|
* Other standard GNU/Unix tools
|
||||||
* a libc with large file support (e.g. glibc 2.1 or later)
|
* a libc with large file support (e.g. glibc 2.1 or later)
|
||||||
|
|
||||||
@@ -36,73 +48,24 @@ For optional grub-emu features, you need:
|
|||||||
|
|
||||||
* SDL (recommended)
|
* SDL (recommended)
|
||||||
* libpciaccess (optional)
|
* libpciaccess (optional)
|
||||||
|
* libusb (optional)
|
||||||
|
|
||||||
To build GRUB's graphical terminal (gfxterm), you need:
|
To build GRUB's graphical terminal (gfxterm), you need:
|
||||||
|
|
||||||
* FreeType 2.1.5 or later
|
* FreeType 2 or later
|
||||||
* GNU Unifont
|
* GNU Unifont
|
||||||
|
|
||||||
To build grub-mkfont the unicode fonts are required (xfonts-unifont package
|
|
||||||
on Debian).
|
|
||||||
|
|
||||||
If you use a development snapshot or want to hack on GRUB you may
|
If you use a development snapshot or want to hack on GRUB you may
|
||||||
need the following.
|
need the following.
|
||||||
|
|
||||||
* Python 3 (NOTE: python 2.6 should still work, but it's not tested)
|
* Python 2.6 or later
|
||||||
* Autoconf 2.64 or later
|
* Autoconf 2.60 or later
|
||||||
* Automake 1.14 or later
|
* Automake 1.10.1 or later
|
||||||
|
|
||||||
Your distro may package cross-compiling toolchains such as the following
|
|
||||||
incomplete list on Debian: gcc-aarch64-linux-gnu, gcc-arm-linux-gnueabihf,
|
|
||||||
gcc-mips-linux-gnu, gcc-mipsel-linux-gnu, gcc-powerpc64-linux-gnu,
|
|
||||||
gcc-riscv64-linux-gnu, gcc-sparc64-linux-gnu, mingw-w64 and mingw-w64-tools.
|
|
||||||
|
|
||||||
More cross compiling toolchains can be found at the following trusted sites:
|
|
||||||
|
|
||||||
* https://mirrors.kernel.org/pub/tools/crosstool/
|
|
||||||
* https://toolchains.bootlin.com/
|
|
||||||
|
|
||||||
Prerequisites for make-check:
|
Prerequisites for make-check:
|
||||||
|
|
||||||
* qemu, specifically the binary "qemu-system-ARCH" where ARCH is the
|
* qemu, specifically the binary 'qemu-system-i386'
|
||||||
architecture GRUB has been built for; the "qemu-system" package on Debian
|
|
||||||
will install all needed qemu architectures
|
|
||||||
* OVMF, for EFI platforms (packages ovmf, ovmf-ia32, qemu-efi-arm, and
|
|
||||||
qemu-efi-aarch64)
|
|
||||||
* OpenBIOS, for ieee1275 platforms (packages openbios-ppc and openbios-sparc)
|
|
||||||
* xorriso 1.2.9 or later, for grub-mkrescue and grub-shell
|
* xorriso 1.2.9 or later, for grub-mkrescue and grub-shell
|
||||||
* wamerican, for grub-fs-tester
|
|
||||||
* mtools, FAT tools for EFI platforms
|
|
||||||
* xfonts-unifont, for the functional tests
|
|
||||||
|
|
||||||
* If running a Linux kernel the following modules must be loaded:
|
|
||||||
- fuse, loop
|
|
||||||
- btrfs, ext4, f2fs, fat, hfs, hfsplus, jfs, mac-roman, minix, nilfs2,
|
|
||||||
reiserfs, udf, xfs
|
|
||||||
- On newer kernels, the exfat kernel modules may be used instead of the
|
|
||||||
exfat FUSE filesystem
|
|
||||||
* The following are Debian named packages required mostly for the full
|
|
||||||
suite of filesystem testing (but some are needed by other tests as well):
|
|
||||||
- btrfs-progs, dosfstools, e2fsprogs, exfat-utils, f2fs-tools, genromfs,
|
|
||||||
hfsprogs, jfsutils, nilfs-tools, ntfs-3g, reiserfsprogs, squashfs-tools,
|
|
||||||
reiserfsprogs, udftools, xfsprogs, zfs-fuse
|
|
||||||
- exfat-fuse, if not using the exfat kernel module
|
|
||||||
- gzip, lzop, xz-utils
|
|
||||||
- attr, cpio, g++, gawk, parted, recode, tar, util-linux
|
|
||||||
|
|
||||||
Note that `make check' will run and many tests may complete successfully
|
|
||||||
with only a subset of these prerequisites. However, some tests may be
|
|
||||||
skipped or fail due to missing prerequisites.
|
|
||||||
|
|
||||||
To build the documentation you'll need:
|
|
||||||
* texinfo, for the info and html documentation
|
|
||||||
* texlive, for building the dvi and pdf documentation (optional)
|
|
||||||
|
|
||||||
To use the gdb_grub GDB script you'll need:
|
|
||||||
* readelf (binutils package)
|
|
||||||
* objdump (binutils package)
|
|
||||||
* GNU Debugger > 7, built with python support (gdb package)
|
|
||||||
* Python >= 3.5 (python3 package)
|
|
||||||
|
|
||||||
Configuring the GRUB
|
Configuring the GRUB
|
||||||
====================
|
====================
|
||||||
@@ -138,10 +101,10 @@ The simplest way to compile this package is:
|
|||||||
2. Skip this and following step if you use release tarball and proceed to
|
2. Skip this and following step if you use release tarball and proceed to
|
||||||
step 4. If you want translations type `./linguas.sh'.
|
step 4. If you want translations type `./linguas.sh'.
|
||||||
|
|
||||||
3. Type `./bootstrap'.
|
3. Type `./autogen.sh'.
|
||||||
|
|
||||||
The autogen.sh (called by bootstrap) uses python. By default autodetect
|
* autogen.sh uses python. By default invocation is "python" but can be
|
||||||
it, but it can be overridden by setting the PYTHON variable.
|
overriden by setting variable $PYTHON.
|
||||||
|
|
||||||
4. Type `./configure' to configure the package for your system.
|
4. Type `./configure' to configure the package for your system.
|
||||||
If you're using `csh' on an old version of System V, you might
|
If you're using `csh' on an old version of System V, you might
|
||||||
@@ -154,16 +117,12 @@ The simplest way to compile this package is:
|
|||||||
6. Type `make' to compile the package.
|
6. Type `make' to compile the package.
|
||||||
|
|
||||||
7. Optionally, type `make check' to run any self-tests that come with
|
7. Optionally, type `make check' to run any self-tests that come with
|
||||||
the package. Note that many of the tests require root privileges in
|
the package.
|
||||||
order to run.
|
|
||||||
|
|
||||||
8. Type `make install' to install the programs and any data files and
|
8. Type `make install' to install the programs and any data files and
|
||||||
documentation.
|
documentation.
|
||||||
|
|
||||||
9. Type `make html' or `make pdf' to generate the html or pdf
|
9. You can remove the program binaries and object files from the
|
||||||
documentation. Note, these are not built by default.
|
|
||||||
|
|
||||||
10. You can remove the program binaries and object files from the
|
|
||||||
source code directory by typing `make clean'. To also remove the
|
source code directory by typing `make clean'. To also remove the
|
||||||
files that `configure' created (so you can compile the package for
|
files that `configure' created (so you can compile the package for
|
||||||
a different kind of computer), type `make distclean'. There is
|
a different kind of computer), type `make distclean'. There is
|
||||||
@@ -199,59 +158,42 @@ For this example the configure line might look like (more details below)
|
|||||||
(some options are optional and included here for completeness but some rarely
|
(some options are optional and included here for completeness but some rarely
|
||||||
used options are omitted):
|
used options are omitted):
|
||||||
|
|
||||||
./configure --build=sparc64-freebsd --host=x86_64-linux-gnu \
|
./configure BUILD_CC=gcc BUILD_FREETYPE=freetype-config --host=amd64-linux-gnu
|
||||||
--target=arm-linux-gnueabihf --with-platform=efi \
|
CC=amd64-linux-gnu-gcc CFLAGS="-g -O2" FREETYPE=amd64-linux-gnu-freetype-config
|
||||||
BUILD_CC=gcc BUILD_PKG_CONFIG=pkg-config \
|
--target=arm --with-platform=uboot TARGET_CC=arm-elf-gcc
|
||||||
HOST_CC=x86_64-linux-gnu-gcc HOST_CFLAGS='-g -O2' \
|
TARGET_CFLAGS="-Os -march=armv6" TARGET_CCASFLAGS="-march=armv6"
|
||||||
PKG_CONFIG=x86_64-linux-gnu-pkg-config TARGET_CC=arm-linux-gnueabihf-gcc \
|
TARGET_OBJCOPY="arm-elf-objcopy" TARGET_STRIP="arm-elf-strip"
|
||||||
TARGET_CFLAGS='-Os -march=armv8.3-a' TARGET_CCASFLAGS='-march=armv8.3-a' \
|
TARGET_NM=arm-elf-nm TARGET_RANLIB=arm-elf-ranlib LEX=gflex
|
||||||
TARGET_OBJCOPY=arm-linux-gnueabihf-objcopy \
|
|
||||||
TARGET_STRIP=arm-linux-gnueabihf-strip TARGET_NM=arm-linux-gnueabihf-nm \
|
|
||||||
TARGET_RANLIB=arm-linux-gnueabihf-ranlib LEX=flex
|
|
||||||
|
|
||||||
Note, that the autoconf 2.65 manual states that when using the --host argument
|
|
||||||
to configure, the --build argument should be specified as well. Not sending
|
|
||||||
--build, enters a compatibility mode that will be removed in the future.
|
|
||||||
|
|
||||||
Normally, for building a GRUB on amd64 with tools to run on amd64 to
|
|
||||||
generate images to run on ARM, using your Linux distribution's
|
|
||||||
packaged cross compiler, the following would suffice:
|
|
||||||
|
|
||||||
./configure --target=arm-linux-gnueabihf --with-platform=efi
|
|
||||||
|
|
||||||
You need to use following options to specify tools and platforms. For minimum
|
You need to use following options to specify tools and platforms. For minimum
|
||||||
version look at prerequisites. All tools not mentioned in this section under
|
version look at prerequisites. All tools not mentioned in this section under
|
||||||
corresponding platform are not needed for the platform in question.
|
corresponding platform are not needed for the platform in question.
|
||||||
|
|
||||||
- For build
|
- For build
|
||||||
1. --build= to autoconf name of build.
|
1. BUILD_CC= to gcc able to compile for build. This is used, for
|
||||||
2. BUILD_CC= to gcc able to compile for build. This is used, for
|
|
||||||
example, to compile build-gentrigtables which is then run to
|
example, to compile build-gentrigtables which is then run to
|
||||||
generate sin and cos tables.
|
generate sin and cos tables.
|
||||||
3. BUILD_CFLAGS= for C options for build.
|
2. BUILD_CFLAGS= for C options for build.
|
||||||
4. BUILD_CPPFLAGS= for C preprocessor options for build.
|
3. BUILD_CPPFLAGS= for C preprocessor options for build.
|
||||||
5. BUILD_LDFLAGS= for linker options for build.
|
4. BUILD_LDFLAGS= for linker options for build.
|
||||||
6. BUILD_PKG_CONFIG= for pkg-config for build (optional).
|
5. BUILD_FREETYPE= for freetype-config for build (optional).
|
||||||
|
|
||||||
- For host
|
- For host
|
||||||
1. --host= to autoconf name of host.
|
1. --host= to autoconf name of host.
|
||||||
2. CC= for gcc able to compile for host.
|
2. CC= for gcc able to compile for host
|
||||||
3. CFLAGS= for C options for host.
|
3. HOST_CFLAGS= for C options for host.
|
||||||
4. HOST_CC= for gcc able to compile for host.
|
4. HOST_CPPFLAGS= for C preprocessor options for host.
|
||||||
5. HOST_CFLAGS= for C options for host.
|
5. HOST_LDFLAGS= for linker options for host.
|
||||||
6. HOST_CPPFLAGS= for C preprocessor options for host.
|
6. FREETYPE= for freetype-config for host (optional).
|
||||||
7. HOST_LDFLAGS= for linker options for host.
|
7. Libdevmapper if any must be in standard linker folders (-ldevmapper) (optional).
|
||||||
8. PKG_CONFIG= for pkg-config for host (optional).
|
8. Libfuse if any must be in standard linker folders (-lfuse) (optional).
|
||||||
9. Libdevmapper if any must be in standard linker folders (-ldevmapper) (optional).
|
9. Libzfs if any must be in standard linker folders (-lzfs) (optional).
|
||||||
10. Libfuse if any must be in standard linker folders (-lfuse) (optional).
|
10. Liblzma if any must be in standard linker folders (-llzma) (optional).
|
||||||
11. Libzfs if any must be in standard linker folders (-lzfs) (optional).
|
|
||||||
12. Liblzma if any must be in standard linker folders (-llzma) (optional).
|
|
||||||
Note: The HOST_* variables override not prefixed variables.
|
|
||||||
|
|
||||||
- For target
|
- For target
|
||||||
1. --target= to autoconf cpu name of target.
|
1. --target= to autoconf cpu name of target.
|
||||||
2. --with-platform to choose firmware.
|
2. --with-platform to choose firmware.
|
||||||
3. TARGET_CC= for gcc able to compile for target.
|
3. TARGET_CC= for gcc able to compile for target
|
||||||
4. TARGET_CFLAGS= for C options for target.
|
4. TARGET_CFLAGS= for C options for target.
|
||||||
5. TARGET_CPPFLAGS= for C preprocessor options for target.
|
5. TARGET_CPPFLAGS= for C preprocessor options for target.
|
||||||
6. TARGET_CCASFLAGS= for assembler options for target.
|
6. TARGET_CCASFLAGS= for assembler options for target.
|
||||||
@@ -260,14 +202,11 @@ corresponding platform are not needed for the platform in question.
|
|||||||
9. TARGET_STRIP= for strip for target.
|
9. TARGET_STRIP= for strip for target.
|
||||||
10. TARGET_NM= for nm for target.
|
10. TARGET_NM= for nm for target.
|
||||||
11. TARGET_RANLIB= for ranlib for target.
|
11. TARGET_RANLIB= for ranlib for target.
|
||||||
Note: If the TARGET_* variables are not specified then they will default
|
|
||||||
to be the same as the host variables. If host variables are not
|
|
||||||
specified then the TARGET_* variables will default to be the same
|
|
||||||
as not prefixed variables.
|
|
||||||
|
|
||||||
- Additionally for emu, for host and target.
|
- Additionally for emu, for host and target.
|
||||||
1. SDL is looked for in standard linker directories (-lSDL) (optional)
|
1. SDL is looked for in standard linker directories (-lSDL) (optional)
|
||||||
2. libpciaccess is looked for in standard linker directories (-lpciaccess) (optional)
|
2. libpciaccess is looked for in standard linker directories (-lpciaccess) (optional)
|
||||||
|
3. libusb is looked for in standard linker directories (-lusb) (optional)
|
||||||
|
|
||||||
- Platform-agnostic tools and data.
|
- Platform-agnostic tools and data.
|
||||||
1. make is the tool you execute after ./configure.
|
1. make is the tool you execute after ./configure.
|
||||||
|
|||||||
-35
@@ -1,35 +0,0 @@
|
|||||||
List of current GRUB maintainers and some basic information about the project
|
|
||||||
=============================================================================
|
|
||||||
|
|
||||||
Here is the list of current GRUB maintainers:
|
|
||||||
- Daniel Kiper <daniel.kiper@oracle.com> and <dkiper@net-space.pl>,
|
|
||||||
- Alex Burmashev <alexander.burmashev@oracle.com>,
|
|
||||||
- Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>.
|
|
||||||
|
|
||||||
The maintainers drive and overlook the GRUB development.
|
|
||||||
|
|
||||||
If you found a security vulnerability in the GRUB please check the SECURITY
|
|
||||||
file to get more information how to properly report this kind of bugs to
|
|
||||||
the maintainers.
|
|
||||||
|
|
||||||
The GRUB development happens on the grub-devel mailing list [1]. The latest
|
|
||||||
GRUB source code is available at Savannah git repository [2].
|
|
||||||
|
|
||||||
Users can ask for help on the help-grub mailing list [3].
|
|
||||||
|
|
||||||
|
|
||||||
List of past GRUB maintainers and people who strongly contributed to the project
|
|
||||||
================================================================================
|
|
||||||
|
|
||||||
Here is the list, sorted alphabetically, of past GRUB maintainers and people who
|
|
||||||
strongly contributed to the project:
|
|
||||||
- Andrei Borzenkov,
|
|
||||||
- Bryan Ford,
|
|
||||||
- Erich Stefan Boleyn,
|
|
||||||
- Gordon Matzigkeit,
|
|
||||||
- Yoshinori K. Okuji.
|
|
||||||
|
|
||||||
|
|
||||||
[1] https://lists.gnu.org/mailman/listinfo/grub-devel
|
|
||||||
[2] https://git.savannah.gnu.org/gitweb/?p=grub.git&view=view+git+repository
|
|
||||||
[3] https://lists.gnu.org/mailman/listinfo/help-grub
|
|
||||||
+12
-25
@@ -1,7 +1,7 @@
|
|||||||
AUTOMAKE_OPTIONS = subdir-objects -Wno-portability
|
AUTOMAKE_OPTIONS = subdir-objects -Wno-portability
|
||||||
|
|
||||||
DEPDIR = .deps-util
|
DEPDIR = .deps-util
|
||||||
SUBDIRS = grub-core/lib/gnulib .
|
SUBDIRS = grub-core/gnulib .
|
||||||
if COND_real_platform
|
if COND_real_platform
|
||||||
SUBDIRS += grub-core
|
SUBDIRS += grub-core
|
||||||
endif
|
endif
|
||||||
@@ -24,15 +24,6 @@ CCASFLAGS_PROGRAM += $(CCASFLAGS_GNULIB)
|
|||||||
|
|
||||||
include $(srcdir)/Makefile.util.am
|
include $(srcdir)/Makefile.util.am
|
||||||
|
|
||||||
check_SCRIPTS = $(check_SCRIPTS_native) $(check_SCRIPTS_nonnative)
|
|
||||||
check_PROGRAMS = $(check_PROGRAMS_native) $(check_PROGRAMS_nonnative)
|
|
||||||
TESTS = $(check_SCRIPTS) $(check_PROGRAMS)
|
|
||||||
|
|
||||||
check-native:
|
|
||||||
$(MAKE) TESTS="$(check_PROGRAMS_native) $(check_SCRIPTS_native)" check
|
|
||||||
check-nonnative:
|
|
||||||
$(MAKE) TESTS="$(check_PROGRAMS_nonnative) $(check_SCRIPTS_nonnative)" check
|
|
||||||
|
|
||||||
# XXX Use Automake's LEX & YACC support
|
# XXX Use Automake's LEX & YACC support
|
||||||
grub_script.tab.h: $(top_srcdir)/grub-core/script/parser.y
|
grub_script.tab.h: $(top_srcdir)/grub-core/script/parser.y
|
||||||
$(YACC) -d -p grub_script_yy -b grub_script $(top_srcdir)/grub-core/script/parser.y
|
$(YACC) -d -p grub_script_yy -b grub_script $(top_srcdir)/grub-core/script/parser.y
|
||||||
@@ -46,13 +37,13 @@ grub_script.yy.c: grub_script.yy.h
|
|||||||
CLEANFILES += grub_script.yy.c grub_script.yy.h
|
CLEANFILES += grub_script.yy.c grub_script.yy.h
|
||||||
|
|
||||||
# For libgrub.a
|
# For libgrub.a
|
||||||
libgrub.pp: config-util.h grub_script.tab.h grub_script.yy.h $(libgrubmods_a_SOURCES) $(libgrubkern_a_SOURCES)
|
libgrub.pp: grub_script.tab.h grub_script.yy.h $(libgrubmods_a_SOURCES) $(libgrubkern_a_SOURCES)
|
||||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) \
|
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgrubmods_a_CPPFLAGS) $(libgrubkern_a_CPPFLAGS) $(CPPFLAGS) \
|
||||||
-D'GRUB_MOD_INIT(x)=@MARKER@x@' $^ > $@ || (rm -f $@; exit 1)
|
-D'GRUB_MOD_INIT(x)=@MARKER@x@' $^ > $@ || (rm -f $@; exit 1)
|
||||||
CLEANFILES += libgrub.pp
|
CLEANFILES += libgrub.pp
|
||||||
|
|
||||||
libgrub_a_init.lst: libgrub.pp
|
libgrub_a_init.lst: libgrub.pp
|
||||||
cat $< | grep '^@MARKER@' | sed 's/@MARKER@\(.*\)@/\1/g' | sort -u > $@ || (rm -f $@; exit 1)
|
cat $< | grep '@MARKER@' | sed 's/@MARKER@\(.*\)@/\1/g' | sort -u > $@ || (rm -f $@; exit 1)
|
||||||
CLEANFILES += libgrub_a_init.lst
|
CLEANFILES += libgrub_a_init.lst
|
||||||
|
|
||||||
libgrub_a_init.c: libgrub_a_init.lst $(top_srcdir)/geninit.sh
|
libgrub_a_init.c: libgrub_a_init.lst $(top_srcdir)/geninit.sh
|
||||||
@@ -60,13 +51,13 @@ libgrub_a_init.c: libgrub_a_init.lst $(top_srcdir)/geninit.sh
|
|||||||
CLEANFILES += libgrub_a_init.c
|
CLEANFILES += libgrub_a_init.c
|
||||||
|
|
||||||
# For grub-fstest
|
# For grub-fstest
|
||||||
grub_fstest.pp: config-util.h $(grub_fstest_SOURCES)
|
grub_fstest.pp: $(grub_fstest_SOURCES)
|
||||||
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) \
|
$(CPP) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(grub_fstest_CPPFLAGS) $(CPPFLAGS) \
|
||||||
-D'GRUB_MOD_INIT(x)=@MARKER@x@' $^ > $@ || (rm -f $@; exit 1)
|
-D'GRUB_MOD_INIT(x)=@MARKER@x@' $^ > $@ || (rm -f $@; exit 1)
|
||||||
CLEANFILES += grub_fstest.pp
|
CLEANFILES += grub_fstest.pp
|
||||||
|
|
||||||
grub_fstest_init.lst: libgrub.pp grub_fstest.pp
|
grub_fstest_init.lst: libgrub.pp grub_fstest.pp
|
||||||
cat $^ | grep '^@MARKER@' | sed 's/@MARKER@\(.*\)@/\1/g' | sort -u > $@ || (rm -f $@; exit 1)
|
cat $^ | grep '@MARKER@' | sed 's/@MARKER@\(.*\)@/\1/g' | sort -u > $@ || (rm -f $@; exit 1)
|
||||||
CLEANFILES += grub_fstest_init.lst
|
CLEANFILES += grub_fstest_init.lst
|
||||||
|
|
||||||
grub_fstest_init.c: grub_fstest_init.lst $(top_srcdir)/geninit.sh
|
grub_fstest_init.c: grub_fstest_init.lst $(top_srcdir)/geninit.sh
|
||||||
@@ -80,7 +71,7 @@ endif
|
|||||||
starfield_theme_files = $(srcdir)/themes/starfield/blob_w.png $(srcdir)/themes/starfield/boot_menu_c.png $(srcdir)/themes/starfield/boot_menu_e.png $(srcdir)/themes/starfield/boot_menu_ne.png $(srcdir)/themes/starfield/boot_menu_n.png $(srcdir)/themes/starfield/boot_menu_nw.png $(srcdir)/themes/starfield/boot_menu_se.png $(srcdir)/themes/starfield/boot_menu_s.png $(srcdir)/themes/starfield/boot_menu_sw.png $(srcdir)/themes/starfield/boot_menu_w.png $(srcdir)/themes/starfield/slider_c.png $(srcdir)/themes/starfield/slider_n.png $(srcdir)/themes/starfield/slider_s.png $(srcdir)/themes/starfield/starfield.png $(srcdir)/themes/starfield/terminal_box_c.png $(srcdir)/themes/starfield/terminal_box_e.png $(srcdir)/themes/starfield/terminal_box_ne.png $(srcdir)/themes/starfield/terminal_box_n.png $(srcdir)/themes/starfield/terminal_box_nw.png $(srcdir)/themes/starfield/terminal_box_se.png $(srcdir)/themes/starfield/terminal_box_s.png $(srcdir)/themes/starfield/terminal_box_sw.png $(srcdir)/themes/starfield/terminal_box_w.png $(srcdir)/themes/starfield/theme.txt $(srcdir)/themes/starfield/README $(srcdir)/themes/starfield/COPYING.CC-BY-SA-3.0
|
starfield_theme_files = $(srcdir)/themes/starfield/blob_w.png $(srcdir)/themes/starfield/boot_menu_c.png $(srcdir)/themes/starfield/boot_menu_e.png $(srcdir)/themes/starfield/boot_menu_ne.png $(srcdir)/themes/starfield/boot_menu_n.png $(srcdir)/themes/starfield/boot_menu_nw.png $(srcdir)/themes/starfield/boot_menu_se.png $(srcdir)/themes/starfield/boot_menu_s.png $(srcdir)/themes/starfield/boot_menu_sw.png $(srcdir)/themes/starfield/boot_menu_w.png $(srcdir)/themes/starfield/slider_c.png $(srcdir)/themes/starfield/slider_n.png $(srcdir)/themes/starfield/slider_s.png $(srcdir)/themes/starfield/starfield.png $(srcdir)/themes/starfield/terminal_box_c.png $(srcdir)/themes/starfield/terminal_box_e.png $(srcdir)/themes/starfield/terminal_box_ne.png $(srcdir)/themes/starfield/terminal_box_n.png $(srcdir)/themes/starfield/terminal_box_nw.png $(srcdir)/themes/starfield/terminal_box_se.png $(srcdir)/themes/starfield/terminal_box_s.png $(srcdir)/themes/starfield/terminal_box_sw.png $(srcdir)/themes/starfield/terminal_box_w.png $(srcdir)/themes/starfield/theme.txt $(srcdir)/themes/starfield/README $(srcdir)/themes/starfield/COPYING.CC-BY-SA-3.0
|
||||||
|
|
||||||
build-grub-mkfont$(BUILD_EXEEXT): util/grub-mkfont.c grub-core/unidata.c grub-core/kern/emu/misc.c util/misc.c
|
build-grub-mkfont$(BUILD_EXEEXT): util/grub-mkfont.c grub-core/unidata.c grub-core/kern/emu/misc.c util/misc.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-mkfont\" $^ $(BUILD_FREETYPE_CFLAGS) $(BUILD_FREETYPE_LIBS)
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-mkfont\" $^ $(build_freetype_cflags) $(build_freetype_libs)
|
||||||
CLEANFILES += build-grub-mkfont$(BUILD_EXEEXT)
|
CLEANFILES += build-grub-mkfont$(BUILD_EXEEXT)
|
||||||
|
|
||||||
garbage-gen$(BUILD_EXEEXT): util/garbage-gen.c
|
garbage-gen$(BUILD_EXEEXT): util/garbage-gen.c
|
||||||
@@ -89,11 +80,11 @@ CLEANFILES += garbage-gen$(BUILD_EXEEXT)
|
|||||||
EXTRA_DIST += util/garbage-gen.c
|
EXTRA_DIST += util/garbage-gen.c
|
||||||
|
|
||||||
build-grub-gen-asciih$(BUILD_EXEEXT): util/grub-gen-asciih.c
|
build-grub-gen-asciih$(BUILD_EXEEXT): util/grub-gen-asciih.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(BUILD_FREETYPE_CFLAGS) $(BUILD_FREETYPE_LIBS) -Wall -Werror
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror
|
||||||
CLEANFILES += build-grub-gen-asciih$(BUILD_EXEEXT)
|
CLEANFILES += build-grub-gen-asciih$(BUILD_EXEEXT)
|
||||||
|
|
||||||
build-grub-gen-widthspec$(BUILD_EXEEXT): util/grub-gen-widthspec.c
|
build-grub-gen-widthspec$(BUILD_EXEEXT): util/grub-gen-widthspec.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(BUILD_FREETYPE_CFLAGS) $(BUILD_FREETYPE_LIBS) -Wall -Werror
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror
|
||||||
CLEANFILES += build-grub-gen-widthspec$(BUILD_EXEEXT)
|
CLEANFILES += build-grub-gen-widthspec$(BUILD_EXEEXT)
|
||||||
|
|
||||||
if COND_STARFIELD
|
if COND_STARFIELD
|
||||||
@@ -431,10 +422,9 @@ BOOTCHECK_TIMEOUT=180
|
|||||||
bootcheck: $(BOOTCHECKS)
|
bootcheck: $(BOOTCHECKS)
|
||||||
|
|
||||||
if COND_i386_coreboot
|
if COND_i386_coreboot
|
||||||
FS_PAYLOAD_MODULES ?= $(shell cat grub-core/fs.lst)
|
|
||||||
default_payload.elf: grub-mkstandalone grub-mkimage FORCE
|
default_payload.elf: grub-mkstandalone grub-mkimage FORCE
|
||||||
test -f $@ && rm $@ || true
|
test -f $@ && rm $@ || true
|
||||||
pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial multiboot cbmemc linux16 gzio echo help syslinuxcfg xnu $(FS_PAYLOAD_MODULES) password_pbkdf2 $(EXTRA_PAYLOAD_MODULES)' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
|
pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial multiboot cbmemc linux16 gzio echo help syslinuxcfg xnu $(shell cat grub-core/fs.lst) password_pbkdf2 $(EXTRA_PAYLOAD_MODULES)' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
|
||||||
endif
|
endif
|
||||||
|
|
||||||
endif
|
endif
|
||||||
@@ -482,13 +472,10 @@ ChangeLog: FORCE
|
|||||||
touch $@; \
|
touch $@; \
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
EXTRA_DIST += ChangeLog ChangeLog-2015
|
||||||
|
|
||||||
syslinux_test: $(top_builddir)/config.status tests/syslinux/ubuntu10.04_grub.cfg
|
syslinux_test: $(top_builddir)/config.status tests/syslinux/ubuntu10.04_grub.cfg
|
||||||
|
|
||||||
# Mimic simplify_filename from grub-core/lib/syslinux_parse.c, so that we
|
|
||||||
# can predict its behaviour in tests. We have to pre-substitute this before
|
|
||||||
# calling config.status, as config.status offers no reliable way to hook in
|
|
||||||
# a command between setting ac_abs_top_srcdir and emitting output files.
|
|
||||||
tests/syslinux/ubuntu10.04_grub.cfg: $(top_builddir)/config.status tests/syslinux/ubuntu10.04_grub.cfg.in
|
tests/syslinux/ubuntu10.04_grub.cfg: $(top_builddir)/config.status tests/syslinux/ubuntu10.04_grub.cfg.in
|
||||||
simplified_abs_top_srcdir=`echo "$(abs_top_srcdir)" | sed 's,//,/,g; s,/\./,/,g; :loop; s,/[^/][^/]*/\.\.\(/\|$$\),\1,; t loop'`; \
|
(for x in tests/syslinux/ubuntu10.04_grub.cfg.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:-
|
||||||
sed "s,@simplified_abs_top_srcdir@,$$simplified_abs_top_srcdir,g" $(srcdir)/tests/syslinux/ubuntu10.04_grub.cfg.in | $(top_builddir)/config.status --file=$@:-
|
|
||||||
CLEANFILES += tests/syslinux/ubuntu10.04_grub.cfg
|
CLEANFILES += tests/syslinux/ubuntu10.04_grub.cfg
|
||||||
+117
-190
@@ -3,7 +3,7 @@ AutoGen definitions Makefile.tpl;
|
|||||||
library = {
|
library = {
|
||||||
name = libgrubkern.a;
|
name = libgrubkern.a;
|
||||||
cflags = '$(CFLAGS_GNULIB)';
|
cflags = '$(CFLAGS_GNULIB)';
|
||||||
cppflags = '$(CPPFLAGS_GNULIB) -I$(srcdir)/grub-core/lib/json';
|
cppflags = '$(CPPFLAGS_GNULIB)';
|
||||||
|
|
||||||
common = util/misc.c;
|
common = util/misc.c;
|
||||||
common = grub-core/kern/command.c;
|
common = grub-core/kern/command.c;
|
||||||
@@ -36,9 +36,7 @@ library = {
|
|||||||
common = grub-core/kern/misc.c;
|
common = grub-core/kern/misc.c;
|
||||||
common = grub-core/kern/partition.c;
|
common = grub-core/kern/partition.c;
|
||||||
common = grub-core/lib/crypto.c;
|
common = grub-core/lib/crypto.c;
|
||||||
common = grub-core/lib/json/json.c;
|
|
||||||
common = grub-core/disk/luks.c;
|
common = grub-core/disk/luks.c;
|
||||||
common = grub-core/disk/luks2.c;
|
|
||||||
common = grub-core/disk/geli.c;
|
common = grub-core/disk/geli.c;
|
||||||
common = grub-core/disk/cryptodisk.c;
|
common = grub-core/disk/cryptodisk.c;
|
||||||
common = grub-core/disk/AFSplitter.c;
|
common = grub-core/disk/AFSplitter.c;
|
||||||
@@ -55,8 +53,8 @@ library = {
|
|||||||
|
|
||||||
library = {
|
library = {
|
||||||
name = libgrubmods.a;
|
name = libgrubmods.a;
|
||||||
cflags = '-fno-builtin -Wno-undef -Wno-unused-but-set-variable';
|
cflags = '-fno-builtin -Wno-undef';
|
||||||
cppflags = '-I$(srcdir)/grub-core/lib/minilzo -I$(srcdir)/grub-core/lib/xzembed -I$(srcdir)/grub-core/lib/zstd -DMINILZO_HAVE_CONFIG_H';
|
cppflags = '-I$(top_srcdir)/grub-core/lib/minilzo -I$(srcdir)/grub-core/lib/xzembed -DMINILZO_HAVE_CONFIG_H';
|
||||||
|
|
||||||
common_nodist = grub_script.tab.c;
|
common_nodist = grub_script.tab.c;
|
||||||
common_nodist = grub_script.yy.c;
|
common_nodist = grub_script.yy.c;
|
||||||
@@ -101,7 +99,6 @@ library = {
|
|||||||
common = grub-core/fs/ext2.c;
|
common = grub-core/fs/ext2.c;
|
||||||
common = grub-core/fs/fat.c;
|
common = grub-core/fs/fat.c;
|
||||||
common = grub-core/fs/exfat.c;
|
common = grub-core/fs/exfat.c;
|
||||||
common = grub-core/fs/f2fs.c;
|
|
||||||
common = grub-core/fs/fshelp.c;
|
common = grub-core/fs/fshelp.c;
|
||||||
common = grub-core/fs/hfs.c;
|
common = grub-core/fs/hfs.c;
|
||||||
common = grub-core/fs/hfsplus.c;
|
common = grub-core/fs/hfsplus.c;
|
||||||
@@ -141,7 +138,7 @@ library = {
|
|||||||
common = grub-core/lib/crc.c;
|
common = grub-core/lib/crc.c;
|
||||||
common = grub-core/lib/adler32.c;
|
common = grub-core/lib/adler32.c;
|
||||||
common = grub-core/lib/crc64.c;
|
common = grub-core/lib/crc64.c;
|
||||||
common = grub-core/lib/datetime.c;
|
common = grub-core/normal/datetime.c;
|
||||||
common = grub-core/normal/misc.c;
|
common = grub-core/normal/misc.c;
|
||||||
common = grub-core/partmap/acorn.c;
|
common = grub-core/partmap/acorn.c;
|
||||||
common = grub-core/partmap/amiga.c;
|
common = grub-core/partmap/amiga.c;
|
||||||
@@ -163,20 +160,10 @@ library = {
|
|||||||
common = grub-core/kern/ia64/dl_helper.c;
|
common = grub-core/kern/ia64/dl_helper.c;
|
||||||
common = grub-core/kern/arm/dl_helper.c;
|
common = grub-core/kern/arm/dl_helper.c;
|
||||||
common = grub-core/kern/arm64/dl_helper.c;
|
common = grub-core/kern/arm64/dl_helper.c;
|
||||||
common = grub-core/kern/loongarch64/dl_helper.c;
|
|
||||||
common = grub-core/lib/minilzo/minilzo.c;
|
common = grub-core/lib/minilzo/minilzo.c;
|
||||||
common = grub-core/lib/xzembed/xz_dec_bcj.c;
|
common = grub-core/lib/xzembed/xz_dec_bcj.c;
|
||||||
common = grub-core/lib/xzembed/xz_dec_lzma2.c;
|
common = grub-core/lib/xzembed/xz_dec_lzma2.c;
|
||||||
common = grub-core/lib/xzembed/xz_dec_stream.c;
|
common = grub-core/lib/xzembed/xz_dec_stream.c;
|
||||||
common = grub-core/lib/zstd/debug.c;
|
|
||||||
common = grub-core/lib/zstd/entropy_common.c;
|
|
||||||
common = grub-core/lib/zstd/error_private.c;
|
|
||||||
common = grub-core/lib/zstd/fse_decompress.c;
|
|
||||||
common = grub-core/lib/zstd/huf_decompress.c;
|
|
||||||
common = grub-core/lib/zstd/module.c;
|
|
||||||
common = grub-core/lib/zstd/xxhash.c;
|
|
||||||
common = grub-core/lib/zstd/zstd_common.c;
|
|
||||||
common = grub-core/lib/zstd/zstd_decompress.c;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
program = {
|
program = {
|
||||||
@@ -201,9 +188,10 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBLZMA)';
|
ldadd = '$(LIBLZMA)';
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
|
cppflags = '-DGRUB_PKGLIBDIR=\"$(pkglibdir)\"';
|
||||||
};
|
};
|
||||||
|
|
||||||
program = {
|
program = {
|
||||||
@@ -217,7 +205,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -232,7 +220,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -242,23 +230,12 @@ program = {
|
|||||||
|
|
||||||
common = util/grub-editenv.c;
|
common = util/grub-editenv.c;
|
||||||
common = util/editenv.c;
|
common = util/editenv.c;
|
||||||
common = util/grub-install-common.c;
|
|
||||||
common = grub-core/osdep/init.c;
|
common = grub-core/osdep/init.c;
|
||||||
common = grub-core/osdep/compress.c;
|
|
||||||
extra_dist = grub-core/osdep/unix/compress.c;
|
|
||||||
extra_dist = grub-core/osdep/basic/compress.c;
|
|
||||||
common = util/mkimage.c;
|
|
||||||
common = util/grub-mkimage32.c;
|
|
||||||
common = util/grub-mkimage64.c;
|
|
||||||
common = grub-core/osdep/config.c;
|
|
||||||
common = util/config.c;
|
|
||||||
common = util/resolve.c;
|
|
||||||
|
|
||||||
ldadd = '$(LIBLZMA)';
|
|
||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -274,7 +251,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -297,7 +274,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -310,13 +287,11 @@ program = {
|
|||||||
common = grub-core/disk/host.c;
|
common = grub-core/disk/host.c;
|
||||||
common = grub-core/osdep/init.c;
|
common = grub-core/osdep/init.c;
|
||||||
|
|
||||||
cflags = '$(FUSE_CFLAGS)';
|
|
||||||
|
|
||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) $(FUSE_LIBS)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM) -lfuse';
|
||||||
condition = COND_GRUB_MOUNT;
|
condition = COND_GRUB_MOUNT;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -327,14 +302,14 @@ program = {
|
|||||||
common = grub-core/kern/emu/argp_common.c;
|
common = grub-core/kern/emu/argp_common.c;
|
||||||
common = grub-core/osdep/init.c;
|
common = grub-core/osdep/init.c;
|
||||||
|
|
||||||
cflags = '$(FREETYPE_CFLAGS)';
|
cflags = '$(freetype_cflags)';
|
||||||
cppflags = '-DGRUB_MKFONT=1';
|
cppflags = '-DGRUB_MKFONT=1';
|
||||||
|
|
||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(FREETYPE_LIBS)';
|
ldadd = '$(freetype_libs)';
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
condition = COND_GRUB_MKFONT;
|
condition = COND_GRUB_MKFONT;
|
||||||
};
|
};
|
||||||
@@ -352,7 +327,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -374,7 +349,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
cppflags = '-DGRUB_SETUP_FUNC=grub_util_bios_setup';
|
cppflags = '-DGRUB_SETUP_FUNC=grub_util_bios_setup';
|
||||||
};
|
};
|
||||||
@@ -394,7 +369,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
cppflags = '-DGRUB_SETUP_FUNC=grub_util_sparc_setup';
|
cppflags = '-DGRUB_SETUP_FUNC=grub_util_sparc_setup';
|
||||||
};
|
};
|
||||||
@@ -410,7 +385,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -425,7 +400,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -440,7 +415,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -511,24 +486,12 @@ script = {
|
|||||||
condition = COND_HOST_LINUX;
|
condition = COND_HOST_LINUX;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
|
||||||
name = '25_bli';
|
|
||||||
common = util/grub.d/25_bli.in;
|
|
||||||
installdir = grubconf;
|
|
||||||
};
|
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
name = '30_os-prober';
|
name = '30_os-prober';
|
||||||
common = util/grub.d/30_os-prober.in;
|
common = util/grub.d/30_os-prober.in;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
|
||||||
name = '30_uefi-firmware';
|
|
||||||
common = util/grub.d/30_uefi-firmware.in;
|
|
||||||
installdir = grubconf;
|
|
||||||
};
|
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
name = '40_custom';
|
name = '40_custom';
|
||||||
common = util/grub.d/40_custom.in;
|
common = util/grub.d/40_custom.in;
|
||||||
@@ -579,7 +542,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
|
|
||||||
condition = COND_HAVE_EXEC;
|
condition = COND_HAVE_EXEC;
|
||||||
@@ -626,7 +589,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -665,7 +628,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -701,7 +664,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -750,12 +713,6 @@ script = {
|
|||||||
installdir = noinst;
|
installdir = noinst;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
|
||||||
name = grub-shell-luks-tester;
|
|
||||||
common = tests/util/grub-shell-luks-tester.in;
|
|
||||||
installdir = noinst;
|
|
||||||
};
|
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
name = grub-fs-tester;
|
name = grub-fs-tester;
|
||||||
common = tests/util/grub-fs-tester.in;
|
common = tests/util/grub-fs-tester.in;
|
||||||
@@ -764,494 +721,464 @@ script = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = ext234_test;
|
name = ext234_test;
|
||||||
common = tests/ext234_test.in;
|
common = tests/ext234_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = squashfs_test;
|
name = squashfs_test;
|
||||||
common = tests/squashfs_test.in;
|
common = tests/squashfs_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = iso9660_test;
|
name = iso9660_test;
|
||||||
common = tests/iso9660_test.in;
|
common = tests/iso9660_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = hfsplus_test;
|
name = hfsplus_test;
|
||||||
common = tests/hfsplus_test.in;
|
common = tests/hfsplus_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = ntfs_test;
|
name = ntfs_test;
|
||||||
common = tests/ntfs_test.in;
|
common = tests/ntfs_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = reiserfs_test;
|
name = reiserfs_test;
|
||||||
common = tests/reiserfs_test.in;
|
common = tests/reiserfs_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = fat_test;
|
name = fat_test;
|
||||||
common = tests/fat_test.in;
|
common = tests/fat_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = minixfs_test;
|
name = minixfs_test;
|
||||||
common = tests/minixfs_test.in;
|
common = tests/minixfs_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = xfs_test;
|
name = xfs_test;
|
||||||
common = tests/xfs_test.in;
|
common = tests/xfs_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = f2fs_test;
|
|
||||||
common = tests/f2fs_test.in;
|
|
||||||
};
|
|
||||||
|
|
||||||
script = {
|
|
||||||
testcase = native;
|
|
||||||
name = nilfs2_test;
|
name = nilfs2_test;
|
||||||
common = tests/nilfs2_test.in;
|
common = tests/nilfs2_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = romfs_test;
|
name = romfs_test;
|
||||||
common = tests/romfs_test.in;
|
common = tests/romfs_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = exfat_test;
|
name = exfat_test;
|
||||||
common = tests/exfat_test.in;
|
common = tests/exfat_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = tar_test;
|
name = tar_test;
|
||||||
common = tests/tar_test.in;
|
common = tests/tar_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = udf_test;
|
name = udf_test;
|
||||||
common = tests/udf_test.in;
|
common = tests/udf_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = hfs_test;
|
name = hfs_test;
|
||||||
common = tests/hfs_test.in;
|
common = tests/hfs_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = jfs_test;
|
name = jfs_test;
|
||||||
common = tests/jfs_test.in;
|
common = tests/jfs_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = btrfs_test;
|
name = btrfs_test;
|
||||||
common = tests/btrfs_test.in;
|
common = tests/btrfs_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = zfs_test;
|
name = zfs_test;
|
||||||
common = tests/zfs_test.in;
|
common = tests/zfs_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = cpio_test;
|
name = cpio_test;
|
||||||
common = tests/cpio_test.in;
|
common = tests/cpio_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = example_scripted_test;
|
name = example_scripted_test;
|
||||||
common = tests/example_scripted_test.in;
|
common = tests/example_scripted_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = gettext_strings_test;
|
name = gettext_strings_test;
|
||||||
common = tests/gettext_strings_test.in;
|
common = tests/gettext_strings_test.in;
|
||||||
extra_dist = po/exclude.pot;
|
extra_dist = po/exclude.pot;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = pata_test;
|
name = pata_test;
|
||||||
common = tests/pata_test.in;
|
common = tests/pata_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = ahci_test;
|
name = ahci_test;
|
||||||
common = tests/ahci_test.in;
|
common = tests/ahci_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = uhci_test;
|
name = uhci_test;
|
||||||
common = tests/uhci_test.in;
|
common = tests/uhci_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = ohci_test;
|
name = ohci_test;
|
||||||
common = tests/ohci_test.in;
|
common = tests/ohci_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = ehci_test;
|
name = ehci_test;
|
||||||
common = tests/ehci_test.in;
|
common = tests/ehci_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = example_grub_script_test;
|
name = example_grub_script_test;
|
||||||
common = tests/example_grub_script_test.in;
|
common = tests/example_grub_script_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_eval;
|
name = grub_script_eval;
|
||||||
common = tests/grub_script_eval.in;
|
common = tests/grub_script_eval.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_test;
|
name = grub_script_test;
|
||||||
common = tests/grub_script_test.in;
|
common = tests/grub_script_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_echo1;
|
name = grub_script_echo1;
|
||||||
common = tests/grub_script_echo1.in;
|
common = tests/grub_script_echo1.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_leading_whitespace;
|
name = grub_script_leading_whitespace;
|
||||||
common = tests/grub_script_leading_whitespace.in;
|
common = tests/grub_script_leading_whitespace.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_echo_keywords;
|
name = grub_script_echo_keywords;
|
||||||
common = tests/grub_script_echo_keywords.in;
|
common = tests/grub_script_echo_keywords.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_vars1;
|
name = grub_script_vars1;
|
||||||
common = tests/grub_script_vars1.in;
|
common = tests/grub_script_vars1.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_for1;
|
name = grub_script_for1;
|
||||||
common = tests/grub_script_for1.in;
|
common = tests/grub_script_for1.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_while1;
|
name = grub_script_while1;
|
||||||
common = tests/grub_script_while1.in;
|
common = tests/grub_script_while1.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_if;
|
name = grub_script_if;
|
||||||
common = tests/grub_script_if.in;
|
common = tests/grub_script_if.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = grub_script_blanklines;
|
name = grub_script_blanklines;
|
||||||
common = tests/grub_script_blanklines.in;
|
common = tests/grub_script_blanklines.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = grub_script_final_semicolon;
|
name = grub_script_final_semicolon;
|
||||||
common = tests/grub_script_final_semicolon.in;
|
common = tests/grub_script_final_semicolon.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = grub_script_dollar;
|
name = grub_script_dollar;
|
||||||
common = tests/grub_script_dollar.in;
|
common = tests/grub_script_dollar.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_comments;
|
name = grub_script_comments;
|
||||||
common = tests/grub_script_comments.in;
|
common = tests/grub_script_comments.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_functions;
|
name = grub_script_functions;
|
||||||
common = tests/grub_script_functions.in;
|
common = tests/grub_script_functions.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_break;
|
name = grub_script_break;
|
||||||
common = tests/grub_script_break.in;
|
common = tests/grub_script_break.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_continue;
|
name = grub_script_continue;
|
||||||
common = tests/grub_script_continue.in;
|
common = tests/grub_script_continue.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_shift;
|
name = grub_script_shift;
|
||||||
common = tests/grub_script_shift.in;
|
common = tests/grub_script_shift.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_blockarg;
|
name = grub_script_blockarg;
|
||||||
common = tests/grub_script_blockarg.in;
|
common = tests/grub_script_blockarg.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_setparams;
|
name = grub_script_setparams;
|
||||||
common = tests/grub_script_setparams.in;
|
common = tests/grub_script_setparams.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_return;
|
name = grub_script_return;
|
||||||
common = tests/grub_script_return.in;
|
common = tests/grub_script_return.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_cmd_cryptomount;
|
|
||||||
common = tests/grub_cmd_cryptomount.in;
|
|
||||||
};
|
|
||||||
|
|
||||||
script = {
|
|
||||||
testcase = nonnative;
|
|
||||||
name = grub_cmd_regexp;
|
name = grub_cmd_regexp;
|
||||||
common = tests/grub_cmd_regexp.in;
|
common = tests/grub_cmd_regexp.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_cmd_date;
|
name = grub_cmd_date;
|
||||||
common = tests/grub_cmd_date.in;
|
common = tests/grub_cmd_date.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_cmd_set_date;
|
name = grub_cmd_set_date;
|
||||||
common = tests/grub_cmd_set_date.in;
|
common = tests/grub_cmd_set_date.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_cmd_sleep;
|
name = grub_cmd_sleep;
|
||||||
common = tests/grub_cmd_sleep.in;
|
common = tests/grub_cmd_sleep.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_expansion;
|
name = grub_script_expansion;
|
||||||
common = tests/grub_script_expansion.in;
|
common = tests/grub_script_expansion.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_not;
|
name = grub_script_not;
|
||||||
common = tests/grub_script_not.in;
|
common = tests/grub_script_not.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = grub_script_no_commands;
|
name = grub_script_no_commands;
|
||||||
common = tests/grub_script_no_commands.in;
|
common = tests/grub_script_no_commands.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = partmap_test;
|
name = partmap_test;
|
||||||
common = tests/partmap_test.in;
|
common = tests/partmap_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = hddboot_test;
|
name = hddboot_test;
|
||||||
common = tests/hddboot_test.in;
|
common = tests/hddboot_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = fddboot_test;
|
name = fddboot_test;
|
||||||
common = tests/fddboot_test.in;
|
common = tests/fddboot_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = cdboot_test;
|
name = cdboot_test;
|
||||||
common = tests/cdboot_test.in;
|
common = tests/cdboot_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = netboot_test;
|
name = netboot_test;
|
||||||
common = tests/netboot_test.in;
|
common = tests/netboot_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = serial_test;
|
|
||||||
common = tests/serial_test.in;
|
|
||||||
};
|
|
||||||
|
|
||||||
script = {
|
|
||||||
testcase = nonnative;
|
|
||||||
name = pseries_test;
|
name = pseries_test;
|
||||||
common = tests/pseries_test.in;
|
common = tests/pseries_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = core_compress_test;
|
name = core_compress_test;
|
||||||
common = tests/core_compress_test.in;
|
common = tests/core_compress_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = xzcompress_test;
|
name = xzcompress_test;
|
||||||
common = tests/xzcompress_test.in;
|
common = tests/xzcompress_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = gzcompress_test;
|
name = gzcompress_test;
|
||||||
common = tests/gzcompress_test.in;
|
common = tests/gzcompress_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = lzocompress_test;
|
name = lzocompress_test;
|
||||||
common = tests/lzocompress_test.in;
|
common = tests/lzocompress_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_cmd_echo;
|
name = grub_cmd_echo;
|
||||||
common = tests/grub_cmd_echo.in;
|
common = tests/grub_cmd_echo.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = help_test;
|
name = help_test;
|
||||||
common = tests/help_test.in;
|
common = tests/help_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_gettext;
|
name = grub_script_gettext;
|
||||||
common = tests/grub_script_gettext.in;
|
common = tests/grub_script_gettext.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_escape_comma;
|
name = grub_script_escape_comma;
|
||||||
common = tests/grub_script_escape_comma.in;
|
common = tests/grub_script_escape_comma.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_script_strcmp;
|
name = grub_script_strcmp;
|
||||||
common = tests/grub_script_strcmp.in;
|
common = tests/grub_script_strcmp.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = test_sha512sum;
|
name = test_sha512sum;
|
||||||
common = tests/test_sha512sum.in;
|
common = tests/test_sha512sum.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = test_unset;
|
name = test_unset;
|
||||||
common = tests/test_unset.in;
|
common = tests/test_unset.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_func_test;
|
name = grub_func_test;
|
||||||
common = tests/grub_func_test.in;
|
common = tests/grub_func_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_cmd_tr;
|
name = grub_cmd_tr;
|
||||||
common = tests/grub_cmd_tr.in;
|
common = tests/grub_cmd_tr.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = file_filter_test;
|
name = file_filter_test;
|
||||||
common = tests/file_filter_test.in;
|
common = tests/file_filter_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = nonnative;
|
testcase;
|
||||||
name = grub_cmd_test;
|
name = grub_cmd_test;
|
||||||
common = tests/grub_cmd_test.in;
|
common = tests/grub_cmd_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = syslinux_test;
|
name = syslinux_test;
|
||||||
common = tests/syslinux_test.in;
|
common = tests/syslinux_test.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
|
||||||
testcase = native;
|
|
||||||
name = luks1_test;
|
|
||||||
common = tests/luks1_test.in;
|
|
||||||
};
|
|
||||||
|
|
||||||
script = {
|
|
||||||
testcase = native;
|
|
||||||
name = luks2_test;
|
|
||||||
common = tests/luks2_test.in;
|
|
||||||
};
|
|
||||||
|
|
||||||
program = {
|
program = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = example_unit_test;
|
name = example_unit_test;
|
||||||
common = tests/example_unit_test.c;
|
common = tests/example_unit_test.c;
|
||||||
common = tests/lib/unit_test.c;
|
common = tests/lib/unit_test.c;
|
||||||
@@ -1261,12 +1188,12 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
program = {
|
program = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = printf_test;
|
name = printf_test;
|
||||||
common = tests/printf_unit_test.c;
|
common = tests/printf_unit_test.c;
|
||||||
common = tests/lib/unit_test.c;
|
common = tests/lib/unit_test.c;
|
||||||
@@ -1276,12 +1203,12 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
program = {
|
program = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = date_test;
|
name = date_test;
|
||||||
common = tests/date_unit_test.c;
|
common = tests/date_unit_test.c;
|
||||||
common = tests/lib/unit_test.c;
|
common = tests/lib/unit_test.c;
|
||||||
@@ -1291,12 +1218,12 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
program = {
|
program = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = priority_queue_unit_test;
|
name = priority_queue_unit_test;
|
||||||
common = tests/priority_queue_unit_test.cc;
|
common = tests/priority_queue_unit_test.cc;
|
||||||
common = tests/lib/unit_test.c;
|
common = tests/lib/unit_test.c;
|
||||||
@@ -1307,13 +1234,13 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
condition = COND_HAVE_CXX;
|
condition = COND_HAVE_CXX;
|
||||||
};
|
};
|
||||||
|
|
||||||
program = {
|
program = {
|
||||||
testcase = native;
|
testcase;
|
||||||
name = cmp_test;
|
name = cmp_test;
|
||||||
common = tests/cmp_unit_test.c;
|
common = tests/cmp_unit_test.c;
|
||||||
common = tests/lib/unit_test.c;
|
common = tests/lib/unit_test.c;
|
||||||
@@ -1323,7 +1250,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1338,7 +1265,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1356,7 +1283,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1372,7 +1299,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1390,7 +1317,7 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1419,6 +1346,6 @@ program = {
|
|||||||
ldadd = libgrubmods.a;
|
ldadd = libgrubmods.a;
|
||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/lib/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
@@ -1,55 +1,3 @@
|
|||||||
New in 2.12:
|
|
||||||
|
|
||||||
* GCC 13 support.
|
|
||||||
* clang 14 support.
|
|
||||||
* binutils 2.38 support.
|
|
||||||
* Unification of EFI Linux kernel loader across architectures.
|
|
||||||
* Transition to EFI Linux kernel stub loader for x86 architecture.
|
|
||||||
* Initial support for Boot Loader Interface.
|
|
||||||
* Support for dynamic GRUB runtime memory addition using firmware calls.
|
|
||||||
* PCI and MMIO UARTs support.
|
|
||||||
* SDL2 support.
|
|
||||||
* LoongArch support.
|
|
||||||
* TPM driver fixes.
|
|
||||||
* Many filesystems fixes.
|
|
||||||
* Many CVE and Coverity fixes.
|
|
||||||
* Debugging support improvements.
|
|
||||||
* Tests improvements.
|
|
||||||
* Documentation improvements.
|
|
||||||
* ...and tons of other fixes and cleanups...
|
|
||||||
|
|
||||||
New in 2.06:
|
|
||||||
|
|
||||||
* GCC 10 support.
|
|
||||||
* clang 10 support.
|
|
||||||
* SBAT support.
|
|
||||||
* LUKS2 support.
|
|
||||||
* Drop small MBR gap support.
|
|
||||||
* Xen Security Modules (XSM/FLASK) support.
|
|
||||||
* The lockdown mechanism similar to the Linux kernel one.
|
|
||||||
* Disable the os-prober by default.
|
|
||||||
* Many backports of GRUB distros specific patches.
|
|
||||||
* BootHole and BootHole2 fixes.
|
|
||||||
* ...and tons of other fixes and cleanups...
|
|
||||||
|
|
||||||
New in 2.04:
|
|
||||||
|
|
||||||
* GCC 8 and 9 support.
|
|
||||||
* Gnulib integration overhaul.
|
|
||||||
* RISC-V support.
|
|
||||||
* Xen PVH support.
|
|
||||||
* Native UEFI secure boot support.
|
|
||||||
* UEFI TPM driver.
|
|
||||||
* New IEEE 1275 obdisk driver.
|
|
||||||
* Btrfs RAID 5 and RIAD 6 support.
|
|
||||||
* PARTUUID support.
|
|
||||||
* VLAN support.
|
|
||||||
* Native DHCP support.
|
|
||||||
* Many ARM and ARM64 fixes.
|
|
||||||
* Many SPARC fixes.
|
|
||||||
* Many IEEE 1275 fixes.
|
|
||||||
* ...and tons of other fixes and cleanups...
|
|
||||||
|
|
||||||
New in 2.02:
|
New in 2.02:
|
||||||
|
|
||||||
* New/improved filesystem and disk support:
|
* New/improved filesystem and disk support:
|
||||||
|
|||||||
@@ -7,12 +7,6 @@ See the file NEWS for a description of recent changes to GRUB 2.
|
|||||||
See the file INSTALL for instructions on how to build and install the
|
See the file INSTALL for instructions on how to build and install the
|
||||||
GRUB 2 data and program files.
|
GRUB 2 data and program files.
|
||||||
|
|
||||||
See the file MAINTAINERS for information about the GRUB maintainers, etc.
|
|
||||||
|
|
||||||
If you found a security vulnerability in the GRUB please check the SECURITY
|
|
||||||
file to get more information how to properly report this kind of bugs to
|
|
||||||
the maintainers.
|
|
||||||
|
|
||||||
Please visit the official web page of GRUB 2, for more information.
|
Please visit the official web page of GRUB 2, for more information.
|
||||||
The URL is <http://www.gnu.org/software/grub/grub.html>.
|
The URL is <http://www.gnu.org/software/grub/grub.html>.
|
||||||
|
|
||||||
|
|||||||
@@ -1,60 +0,0 @@
|
|||||||
Security Policy
|
|
||||||
===============
|
|
||||||
|
|
||||||
To report a vulnerability see "Reporting a Vulnerability" below.
|
|
||||||
|
|
||||||
|
|
||||||
Security Incident Policy
|
|
||||||
========================
|
|
||||||
|
|
||||||
Security bug reports are treated with special attention and are handled
|
|
||||||
differently from normal bugs. In particular, security sensitive bugs are not
|
|
||||||
handled in public but in private. Information about the bug and access to it
|
|
||||||
is restricted to people in the security group, the individual engineers that
|
|
||||||
work on fixing it, and any other person who needs to be involved for organisational
|
|
||||||
reasons. The process is handled by the security team, which decides on the people
|
|
||||||
involved in order to fix the issue. It is also guaranteed that the person reporting
|
|
||||||
the issue has visibility into the process of fixing it. Any security issue gets
|
|
||||||
prioritized according to its security rating. The issue is opened up to the public
|
|
||||||
in coordination with the release schedule and the reporter.
|
|
||||||
|
|
||||||
|
|
||||||
Disclosure Policy
|
|
||||||
=================
|
|
||||||
|
|
||||||
Everyone involved in the handling of a security issue - including the reporter -
|
|
||||||
is required to adhere to the following policy. Any information related to
|
|
||||||
a security issue must be treated as confidential and only shared with trusted
|
|
||||||
partners if necessary, for example to coordinate a release or manage exposure
|
|
||||||
of clients to the issue. No information must be disclosed to the public before
|
|
||||||
the embargo ends. The embargo time is agreed upon by all involved parties. It
|
|
||||||
should be as short as possible without putting any users at risk.
|
|
||||||
|
|
||||||
|
|
||||||
Supported Versions
|
|
||||||
==================
|
|
||||||
|
|
||||||
Only the most recent version of the GRUB is supported.
|
|
||||||
|
|
||||||
|
|
||||||
Reporting a Vulnerability
|
|
||||||
=========================
|
|
||||||
|
|
||||||
The security report should be encrypted with the PGP keys and sent to ALL email
|
|
||||||
addresses listed below. Every vulnerability report will be assessed within
|
|
||||||
72 hours of receiving it. If the outcome of the assessment is that the report
|
|
||||||
describes a security issue, the report will be transferred into an issue on the
|
|
||||||
internal vulnerability project for further processing. The reporter is updated
|
|
||||||
on each step of the process.
|
|
||||||
|
|
||||||
While there's currently no bug bounty program we appreciate every report.
|
|
||||||
|
|
||||||
* Contact: Daniel Kiper <daniel.kiper@oracle.com> and
|
|
||||||
Daniel Kiper <dkiper@net-space.pl>
|
|
||||||
* PGP Key Fingerprint: BE5C 2320 9ACD DACE B20D B0A2 8C81 89F1 988C 2166
|
|
||||||
|
|
||||||
* Contact: Alex Burmashev <alexander.burmashev@oracle.com>
|
|
||||||
* PGP Key Fingerprint: 50A4 EC06 EF7E B84D 67E0 3BB6 2AE2 C87E 28EF 2E6E
|
|
||||||
|
|
||||||
* Contact: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
|
|
||||||
* PGP Key Fingerprint: E53D 497F 3FA4 2AD8 C9B4 D1E8 35A9 3B74 E82E 4209
|
|
||||||
+3
-37
@@ -305,9 +305,9 @@ fi
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
dnl Check if the C compiler supports the stack protector
|
dnl Check if the C compiler supports `-fstack-protector'.
|
||||||
AC_DEFUN([grub_CHECK_STACK_PROTECTOR],[
|
AC_DEFUN([grub_CHECK_STACK_PROTECTOR],[
|
||||||
[# Stack smashing protector.
|
[# Smashing stack protector.
|
||||||
ssp_possible=yes]
|
ssp_possible=yes]
|
||||||
AC_MSG_CHECKING([whether `$CC' accepts `-fstack-protector'])
|
AC_MSG_CHECKING([whether `$CC' accepts `-fstack-protector'])
|
||||||
# Is this a reliable test case?
|
# Is this a reliable test case?
|
||||||
@@ -324,40 +324,6 @@ else
|
|||||||
ssp_possible=no]
|
ssp_possible=no]
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no])
|
||||||
[fi]
|
[fi]
|
||||||
[# Strong stack smashing protector.
|
|
||||||
ssp_strong_possible=yes]
|
|
||||||
AC_MSG_CHECKING([whether `$CC' accepts `-fstack-protector-strong'])
|
|
||||||
# Is this a reliable test case?
|
|
||||||
AC_LANG_CONFTEST([AC_LANG_SOURCE([[
|
|
||||||
void foo (void) { volatile char a[8]; a[3]; }
|
|
||||||
]])])
|
|
||||||
[# `$CC -c -o ...' might not be portable. But, oh, well... Is calling
|
|
||||||
# `ac_compile' like this correct, after all?
|
|
||||||
if eval "$ac_compile -S -fstack-protector-strong -o conftest.s" 2> /dev/null; then]
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
|
|
||||||
rm -f conftest.s
|
|
||||||
else
|
|
||||||
ssp_strong_possible=no]
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
[fi]
|
|
||||||
[# Global stack smashing protector.
|
|
||||||
ssp_global_possible=yes]
|
|
||||||
AC_MSG_CHECKING([whether `$CC' accepts `-mstack-protector-guard=global'])
|
|
||||||
# Is this a reliable test case?
|
|
||||||
AC_LANG_CONFTEST([AC_LANG_SOURCE([[
|
|
||||||
void foo (void) { volatile char a[8]; a[3]; }
|
|
||||||
]])])
|
|
||||||
[# `$CC -c -o ...' might not be portable. But, oh, well... Is calling
|
|
||||||
# `ac_compile' like this correct, after all?
|
|
||||||
if eval "$ac_compile -S -fstack-protector -mstack-protector-guard=global -o conftest.s" 2> /dev/null; then]
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
|
|
||||||
rm -f conftest.s
|
|
||||||
else
|
|
||||||
ssp_global_possible=no]
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
[fi]
|
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl Check if the C compiler supports `-mstack-arg-probe' (Cygwin).
|
dnl Check if the C compiler supports `-mstack-arg-probe' (Cygwin).
|
||||||
@@ -430,7 +396,7 @@ link_nopie_needed=no]
|
|||||||
AC_MSG_CHECKING([whether linker needs disabling of PIE to work])
|
AC_MSG_CHECKING([whether linker needs disabling of PIE to work])
|
||||||
AC_LANG_CONFTEST([AC_LANG_SOURCE([[]])])
|
AC_LANG_CONFTEST([AC_LANG_SOURCE([[]])])
|
||||||
|
|
||||||
[if eval "$ac_compile -Wl,-r -nostdlib -Werror -o conftest.o" 2> /dev/null; then]
|
[if eval "$ac_compile -Wl,-r,-d -nostdlib -Werror -o conftest.o" 2> /dev/null; then]
|
||||||
AC_MSG_RESULT([no])
|
AC_MSG_RESULT([no])
|
||||||
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
|
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
|
||||||
rm -f conftest.o
|
rm -f conftest.o
|
||||||
|
|||||||
+5
-34
@@ -2,31 +2,13 @@
|
|||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
if [ ! -e grub-core/lib/gnulib/stdlib.in.h ]; then
|
# Set ${PYTHON} to plain 'python' if not set already
|
||||||
echo "Gnulib not yet bootstrapped; run ./bootstrap instead." >&2
|
: ${PYTHON:=python}
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Detect python
|
|
||||||
if [ -z "$PYTHON" ]; then
|
|
||||||
for i in python3 python3.10 python; do
|
|
||||||
if command -v "$i" > /dev/null 2>&1; then
|
|
||||||
PYTHON="$i"
|
|
||||||
echo "Using $PYTHON..."
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
if [ -z "$PYTHON" ]; then
|
|
||||||
echo "python not found." >&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
export LC_COLLATE=C
|
export LC_COLLATE=C
|
||||||
unset LC_ALL
|
unset LC_ALL
|
||||||
|
|
||||||
find . -iname '*.[ch]' ! -ipath './grub-core/lib/libgcrypt-grub/*' ! -ipath './build-aux/*' ! -ipath './grub-core/lib/libgcrypt/src/misc.c' ! -ipath './grub-core/lib/libgcrypt/src/global.c' ! -ipath './grub-core/lib/libgcrypt/src/secmem.c' ! -ipath './util/grub-gen-widthspec.c' ! -ipath './util/grub-gen-asciih.c' ! -ipath './gnulib/*' ! -ipath './grub-core/lib/gnulib/*' |sort > po/POTFILES.in
|
find . -iname '*.[ch]' ! -ipath './grub-core/lib/libgcrypt-grub/*' ! -ipath './build-aux/*' ! -ipath './grub-core/lib/libgcrypt/src/misc.c' ! -ipath './grub-core/lib/libgcrypt/src/global.c' ! -ipath './grub-core/lib/libgcrypt/src/secmem.c' ! -ipath './util/grub-gen-widthspec.c' ! -ipath './util/grub-gen-asciih.c' |sort > po/POTFILES.in
|
||||||
find util -iname '*.in' ! -name Makefile.in |sort > po/POTFILES-shell.in
|
find util -iname '*.in' ! -name Makefile.in |sort > po/POTFILES-shell.in
|
||||||
|
|
||||||
echo "Importing unicode..."
|
echo "Importing unicode..."
|
||||||
@@ -100,17 +82,6 @@ done
|
|||||||
echo "Saving timestamps..."
|
echo "Saving timestamps..."
|
||||||
echo timestamp > stamp-h.in
|
echo timestamp > stamp-h.in
|
||||||
|
|
||||||
if [ -z "$FROM_BOOTSTRAP" ]; then
|
echo "Running autoreconf..."
|
||||||
# Unaided autoreconf is likely to install older versions of many files
|
autoreconf -vi
|
||||||
# than the ones provided by Gnulib, but in most cases this won't matter
|
|
||||||
# very much. This mode is provided so that you can run ./autogen.sh to
|
|
||||||
# regenerate the GRUB build system in an unpacked release tarball (perhaps
|
|
||||||
# after patching it), even on systems that don't have access to
|
|
||||||
# gnulib.git.
|
|
||||||
echo "Running autoreconf..."
|
|
||||||
cp -a INSTALL INSTALL.grub
|
|
||||||
autoreconf -vif
|
|
||||||
mv INSTALL.grub INSTALL
|
|
||||||
fi
|
|
||||||
|
|
||||||
exit 0
|
exit 0
|
||||||
-103
@@ -1,103 +0,0 @@
|
|||||||
# Bootstrap configuration.
|
|
||||||
|
|
||||||
# Copyright (C) 2006-2022 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 <https://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
|
|
||||||
GNULIB_REVISION=9f48fb992a3d7e96610c4ce8be969cff2d61a01b
|
|
||||||
|
|
||||||
# gnulib modules used by this package.
|
|
||||||
# mbswidth is used by fix-width.diff's changes to argp rather than directly.
|
|
||||||
gnulib_modules="
|
|
||||||
argp
|
|
||||||
base64
|
|
||||||
error
|
|
||||||
fnmatch
|
|
||||||
getdelim
|
|
||||||
getline
|
|
||||||
gettext-h
|
|
||||||
gitlog-to-changelog
|
|
||||||
mbswidth
|
|
||||||
progname
|
|
||||||
realloc-gnu
|
|
||||||
regex
|
|
||||||
save-cwd
|
|
||||||
stdbool
|
|
||||||
"
|
|
||||||
|
|
||||||
gnulib_tool_option_extras="\
|
|
||||||
--no-conditional-dependencies \
|
|
||||||
--no-vc-files \
|
|
||||||
"
|
|
||||||
|
|
||||||
gnulib_name=libgnu
|
|
||||||
source_base=grub-core/lib/gnulib
|
|
||||||
gnulib_extra_files="
|
|
||||||
build-aux/install-sh
|
|
||||||
build-aux/mdate-sh
|
|
||||||
build-aux/texinfo.tex
|
|
||||||
build-aux/depcomp
|
|
||||||
build-aux/config.guess
|
|
||||||
build-aux/config.sub
|
|
||||||
"
|
|
||||||
|
|
||||||
# Additional xgettext options to use. Use "\\\newline" to break lines.
|
|
||||||
XGETTEXT_OPTIONS=$XGETTEXT_OPTIONS'\\\
|
|
||||||
--from-code=UTF-8\\\
|
|
||||||
'
|
|
||||||
|
|
||||||
checkout_only_file=
|
|
||||||
copy=true
|
|
||||||
vc_ignore=
|
|
||||||
|
|
||||||
SKIP_PO=t
|
|
||||||
|
|
||||||
# Build prerequisites
|
|
||||||
buildreq="\
|
|
||||||
autoconf 2.64
|
|
||||||
automake 1.14
|
|
||||||
gettext -
|
|
||||||
git 1.5.5
|
|
||||||
patch -
|
|
||||||
tar -
|
|
||||||
"
|
|
||||||
|
|
||||||
# bootstrap doesn't give us a reasonable way to stop Automake from
|
|
||||||
# overwriting this, so we just copy our version aside and put it back later.
|
|
||||||
cp -a INSTALL INSTALL.grub
|
|
||||||
|
|
||||||
bootstrap_post_import_hook () {
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# Instead of patching our gnulib and therefore maintaining a fork, submit
|
|
||||||
# changes to gnulib and update the hash above when they've merged. Do not
|
|
||||||
# add new patches here.
|
|
||||||
patch -d grub-core/lib/gnulib -p2 < grub-core/lib/gnulib-patches/fix-width.patch
|
|
||||||
|
|
||||||
for patchname in \
|
|
||||||
0001-Support-POTFILES-shell \
|
|
||||||
0002-Handle-gettext_printf-shell-function \
|
|
||||||
0003-Make-msgfmt-output-in-little-endian \
|
|
||||||
0004-Use-SHELL-rather-than-bin-sh; do
|
|
||||||
patch -d po -p3 \
|
|
||||||
< "po/gettext-patches/$patchname.patch"
|
|
||||||
done
|
|
||||||
FROM_BOOTSTRAP=1 ./autogen.sh
|
|
||||||
set +e # bootstrap expects this
|
|
||||||
}
|
|
||||||
|
|
||||||
bootstrap_epilogue () {
|
|
||||||
mv INSTALL.grub INSTALL
|
|
||||||
}
|
|
||||||
Executable
+690
@@ -0,0 +1,690 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
# Output a system dependent set of variables, describing how to set the
|
||||||
|
# run time search path of shared libraries in an executable.
|
||||||
|
#
|
||||||
|
# Copyright 1996-2013 Free Software Foundation, Inc.
|
||||||
|
# Taken from GNU libtool, 2001
|
||||||
|
# Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
|
||||||
|
#
|
||||||
|
# This file is free software; the Free Software Foundation gives
|
||||||
|
# unlimited permission to copy and/or distribute it, with or without
|
||||||
|
# modifications, as long as this notice is preserved.
|
||||||
|
#
|
||||||
|
# The first argument passed to this file is the canonical host specification,
|
||||||
|
# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
|
||||||
|
# or
|
||||||
|
# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
|
||||||
|
# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
|
||||||
|
# should be set by the caller.
|
||||||
|
#
|
||||||
|
# The set of defined variables is at the end of this script.
|
||||||
|
|
||||||
|
# Known limitations:
|
||||||
|
# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
|
||||||
|
# than 256 bytes, otherwise the compiler driver will dump core. The only
|
||||||
|
# known workaround is to choose shorter directory names for the build
|
||||||
|
# directory and/or the installation directory.
|
||||||
|
|
||||||
|
# All known linkers require a '.a' archive for static linking (except MSVC,
|
||||||
|
# which needs '.lib').
|
||||||
|
libext=a
|
||||||
|
shrext=.so
|
||||||
|
|
||||||
|
host="$1"
|
||||||
|
host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
|
||||||
|
host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
|
||||||
|
host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
|
||||||
|
|
||||||
|
# Code taken from libtool.m4's _LT_CC_BASENAME.
|
||||||
|
|
||||||
|
for cc_temp in $CC""; do
|
||||||
|
case $cc_temp in
|
||||||
|
compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
|
||||||
|
distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
|
||||||
|
\-*) ;;
|
||||||
|
*) break;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
|
||||||
|
|
||||||
|
# Code taken from libtool.m4's _LT_COMPILER_PIC.
|
||||||
|
|
||||||
|
wl=
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
wl='-Wl,'
|
||||||
|
else
|
||||||
|
case "$host_os" in
|
||||||
|
aix*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
mingw* | cygwin* | pw32* | os2* | cegcc*)
|
||||||
|
;;
|
||||||
|
hpux9* | hpux10* | hpux11*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
irix5* | irix6* | nonstopux*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
linux* | k*bsd*-gnu | kopensolaris*-gnu)
|
||||||
|
case $cc_basename in
|
||||||
|
ecc*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
icc* | ifort*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
lf95*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
nagfor*)
|
||||||
|
wl='-Wl,-Wl,,'
|
||||||
|
;;
|
||||||
|
pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
ccc*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
xl* | bgxl* | bgf* | mpixl*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
como)
|
||||||
|
wl='-lopt='
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
case `$CC -V 2>&1 | sed 5q` in
|
||||||
|
*Sun\ F* | *Sun*Fortran*)
|
||||||
|
wl=
|
||||||
|
;;
|
||||||
|
*Sun\ C*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
newsos6)
|
||||||
|
;;
|
||||||
|
*nto* | *qnx*)
|
||||||
|
;;
|
||||||
|
osf3* | osf4* | osf5*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
rdos*)
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
case $cc_basename in
|
||||||
|
f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
|
||||||
|
wl='-Qoption ld '
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
wl='-Qoption ld '
|
||||||
|
;;
|
||||||
|
sysv4 | sysv4.2uw2* | sysv4.3*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
sysv4*MP*)
|
||||||
|
;;
|
||||||
|
sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
unicos*)
|
||||||
|
wl='-Wl,'
|
||||||
|
;;
|
||||||
|
uts4*)
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
|
||||||
|
|
||||||
|
hardcode_libdir_flag_spec=
|
||||||
|
hardcode_libdir_separator=
|
||||||
|
hardcode_direct=no
|
||||||
|
hardcode_minus_L=no
|
||||||
|
|
||||||
|
case "$host_os" in
|
||||||
|
cygwin* | mingw* | pw32* | cegcc*)
|
||||||
|
# FIXME: the MSVC++ port hasn't been tested in a loooong time
|
||||||
|
# When not using gcc, we currently assume that we are using
|
||||||
|
# Microsoft Visual C++.
|
||||||
|
if test "$GCC" != yes; then
|
||||||
|
with_gnu_ld=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
interix*)
|
||||||
|
# we just hope/assume this is gcc and not c89 (= MSVC++)
|
||||||
|
with_gnu_ld=yes
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
with_gnu_ld=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
ld_shlibs=yes
|
||||||
|
if test "$with_gnu_ld" = yes; then
|
||||||
|
# Set some defaults for GNU ld with shared library support. These
|
||||||
|
# are reset later if shared libraries are not supported. Putting them
|
||||||
|
# here allows them to be overridden if necessary.
|
||||||
|
# Unlike libtool, we use -rpath here, not --rpath, since the documented
|
||||||
|
# option of GNU ld is called -rpath, not --rpath.
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
case "$host_os" in
|
||||||
|
aix[3-9]*)
|
||||||
|
# On AIX/PPC, the GNU linker is very broken
|
||||||
|
if test "$host_cpu" != ia64; then
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
amigaos*)
|
||||||
|
case "$host_cpu" in
|
||||||
|
powerpc)
|
||||||
|
;;
|
||||||
|
m68k)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
beos*)
|
||||||
|
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
cygwin* | mingw* | pw32* | cegcc*)
|
||||||
|
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||||
|
# no search path for DLLs.
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
haiku*)
|
||||||
|
;;
|
||||||
|
interix[3-9]*)
|
||||||
|
hardcode_direct=no
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||||
|
;;
|
||||||
|
gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
|
||||||
|
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
netbsd*)
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
|
||||||
|
ld_shlibs=no
|
||||||
|
elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
|
||||||
|
case `$LD -v 2>&1` in
|
||||||
|
*\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if test "$ld_shlibs" = no; then
|
||||||
|
hardcode_libdir_flag_spec=
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
case "$host_os" in
|
||||||
|
aix3*)
|
||||||
|
# Note: this linker hardcodes the directories in LIBPATH if there
|
||||||
|
# are no directories specified by -L.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
# Neither direct hardcoding nor static linking is supported with a
|
||||||
|
# broken collect2.
|
||||||
|
hardcode_direct=unsupported
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
aix[4-9]*)
|
||||||
|
if test "$host_cpu" = ia64; then
|
||||||
|
# On IA64, the linker does run time linking by default, so we don't
|
||||||
|
# have to do anything special.
|
||||||
|
aix_use_runtimelinking=no
|
||||||
|
else
|
||||||
|
aix_use_runtimelinking=no
|
||||||
|
# Test if we are trying to use run time linking or normal
|
||||||
|
# AIX style linking. If -brtl is somewhere in LDFLAGS, we
|
||||||
|
# need to do runtime linking.
|
||||||
|
case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
|
||||||
|
for ld_flag in $LDFLAGS; do
|
||||||
|
if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
|
||||||
|
aix_use_runtimelinking=yes
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_libdir_separator=':'
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
case $host_os in aix4.[012]|aix4.[012].*)
|
||||||
|
collect2name=`${CC} -print-prog-name=collect2`
|
||||||
|
if test -f "$collect2name" && \
|
||||||
|
strings "$collect2name" | grep resolve_lib_name >/dev/null
|
||||||
|
then
|
||||||
|
# We have reworked collect2
|
||||||
|
:
|
||||||
|
else
|
||||||
|
# We have old collect2
|
||||||
|
hardcode_direct=unsupported
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_libdir_separator=
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
# Begin _LT_AC_SYS_LIBPATH_AIX.
|
||||||
|
echo 'int main () { return 0; }' > conftest.c
|
||||||
|
${CC} ${LDFLAGS} conftest.c -o conftest
|
||||||
|
aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
||||||
|
}'`
|
||||||
|
if test -z "$aix_libpath"; then
|
||||||
|
aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; }
|
||||||
|
}'`
|
||||||
|
fi
|
||||||
|
if test -z "$aix_libpath"; then
|
||||||
|
aix_libpath="/usr/lib:/lib"
|
||||||
|
fi
|
||||||
|
rm -f conftest.c conftest
|
||||||
|
# End _LT_AC_SYS_LIBPATH_AIX.
|
||||||
|
if test "$aix_use_runtimelinking" = yes; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
|
||||||
|
else
|
||||||
|
if test "$host_cpu" = ia64; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
|
||||||
|
else
|
||||||
|
hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
amigaos*)
|
||||||
|
case "$host_cpu" in
|
||||||
|
powerpc)
|
||||||
|
;;
|
||||||
|
m68k)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
bsdi[45]*)
|
||||||
|
;;
|
||||||
|
cygwin* | mingw* | pw32* | cegcc*)
|
||||||
|
# When not using gcc, we currently assume that we are using
|
||||||
|
# Microsoft Visual C++.
|
||||||
|
# hardcode_libdir_flag_spec is actually meaningless, as there is
|
||||||
|
# no search path for DLLs.
|
||||||
|
hardcode_libdir_flag_spec=' '
|
||||||
|
libext=lib
|
||||||
|
;;
|
||||||
|
darwin* | rhapsody*)
|
||||||
|
hardcode_direct=no
|
||||||
|
if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
dgux*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
;;
|
||||||
|
freebsd2.2*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
freebsd2*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
freebsd* | dragonfly*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
hpux9*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
hardcode_direct=yes
|
||||||
|
# hardcode_minus_L: Not really in the search PATH,
|
||||||
|
# but as the default location of the library.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
hpux10*)
|
||||||
|
if test "$with_gnu_ld" = no; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
hardcode_direct=yes
|
||||||
|
# hardcode_minus_L: Not really in the search PATH,
|
||||||
|
# but as the default location of the library.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
hpux11*)
|
||||||
|
if test "$with_gnu_ld" = no; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
case $host_cpu in
|
||||||
|
hppa*64*|ia64*)
|
||||||
|
hardcode_direct=no
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
hardcode_direct=yes
|
||||||
|
# hardcode_minus_L: Not really in the search PATH,
|
||||||
|
# but as the default location of the library.
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
irix5* | irix6* | nonstopux*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
netbsd*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
;;
|
||||||
|
newsos6)
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
*nto* | *qnx*)
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
if test -f /usr/libexec/ld.so; then
|
||||||
|
hardcode_direct=yes
|
||||||
|
if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||||
|
else
|
||||||
|
case "$host_os" in
|
||||||
|
openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
ld_shlibs=no
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
os2*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
osf3*)
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
osf4* | osf5*)
|
||||||
|
if test "$GCC" = yes; then
|
||||||
|
hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
|
||||||
|
else
|
||||||
|
# Both cc and cxx compiler support -rpath directly
|
||||||
|
hardcode_libdir_flag_spec='-rpath $libdir'
|
||||||
|
fi
|
||||||
|
hardcode_libdir_separator=:
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
hardcode_libdir_flag_spec='-R$libdir'
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
hardcode_direct=yes
|
||||||
|
hardcode_minus_L=yes
|
||||||
|
;;
|
||||||
|
sysv4)
|
||||||
|
case $host_vendor in
|
||||||
|
sni)
|
||||||
|
hardcode_direct=yes # is this really true???
|
||||||
|
;;
|
||||||
|
siemens)
|
||||||
|
hardcode_direct=no
|
||||||
|
;;
|
||||||
|
motorola)
|
||||||
|
hardcode_direct=no #Motorola manual says yes, but my tests say they lie
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
sysv4.3*)
|
||||||
|
;;
|
||||||
|
sysv4*MP*)
|
||||||
|
if test -d /usr/nec; then
|
||||||
|
ld_shlibs=yes
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
|
||||||
|
;;
|
||||||
|
sysv5* | sco3.2v5* | sco5v6*)
|
||||||
|
hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
|
||||||
|
hardcode_libdir_separator=':'
|
||||||
|
;;
|
||||||
|
uts4*)
|
||||||
|
hardcode_libdir_flag_spec='-L$libdir'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
ld_shlibs=no
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check dynamic linker characteristics
|
||||||
|
# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
|
||||||
|
# Unlike libtool.m4, here we don't care about _all_ names of the library, but
|
||||||
|
# only about the one the linker finds when passed -lNAME. This is the last
|
||||||
|
# element of library_names_spec in libtool.m4, or possibly two of them if the
|
||||||
|
# linker has special search rules.
|
||||||
|
library_names_spec= # the last element of library_names_spec in libtool.m4
|
||||||
|
libname_spec='lib$name'
|
||||||
|
case "$host_os" in
|
||||||
|
aix3*)
|
||||||
|
library_names_spec='$libname.a'
|
||||||
|
;;
|
||||||
|
aix[4-9]*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
amigaos*)
|
||||||
|
case "$host_cpu" in
|
||||||
|
powerpc*)
|
||||||
|
library_names_spec='$libname$shrext' ;;
|
||||||
|
m68k)
|
||||||
|
library_names_spec='$libname.a' ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
beos*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
bsdi[45]*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
cygwin* | mingw* | pw32* | cegcc*)
|
||||||
|
shrext=.dll
|
||||||
|
library_names_spec='$libname.dll.a $libname.lib'
|
||||||
|
;;
|
||||||
|
darwin* | rhapsody*)
|
||||||
|
shrext=.dylib
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
dgux*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
freebsd* | dragonfly*)
|
||||||
|
case "$host_os" in
|
||||||
|
freebsd[123]*)
|
||||||
|
library_names_spec='$libname$shrext$versuffix' ;;
|
||||||
|
*)
|
||||||
|
library_names_spec='$libname$shrext' ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
gnu*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
haiku*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
hpux9* | hpux10* | hpux11*)
|
||||||
|
case $host_cpu in
|
||||||
|
ia64*)
|
||||||
|
shrext=.so
|
||||||
|
;;
|
||||||
|
hppa*64*)
|
||||||
|
shrext=.sl
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
shrext=.sl
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
interix[3-9]*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
irix5* | irix6* | nonstopux*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
case "$host_os" in
|
||||||
|
irix5* | nonstopux*)
|
||||||
|
libsuff= shlibsuff=
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
case $LD in
|
||||||
|
*-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
|
||||||
|
*-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
|
||||||
|
*-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
|
||||||
|
*) libsuff= shlibsuff= ;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
linux*oldld* | linux*aout* | linux*coff*)
|
||||||
|
;;
|
||||||
|
linux* | k*bsd*-gnu | kopensolaris*-gnu)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
knetbsd*-gnu)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
netbsd*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
newsos6)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
*nto* | *qnx*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
openbsd*)
|
||||||
|
library_names_spec='$libname$shrext$versuffix'
|
||||||
|
;;
|
||||||
|
os2*)
|
||||||
|
libname_spec='$name'
|
||||||
|
shrext=.dll
|
||||||
|
library_names_spec='$libname.a'
|
||||||
|
;;
|
||||||
|
osf3* | osf4* | osf5*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
rdos*)
|
||||||
|
;;
|
||||||
|
solaris*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
sunos4*)
|
||||||
|
library_names_spec='$libname$shrext$versuffix'
|
||||||
|
;;
|
||||||
|
sysv4 | sysv4.3*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
sysv4*MP*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
tpf*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
uts4*)
|
||||||
|
library_names_spec='$libname$shrext'
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
|
||||||
|
escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
|
||||||
|
escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
|
||||||
|
|
||||||
|
LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
|
||||||
|
|
||||||
|
# How to pass a linker flag through the compiler.
|
||||||
|
wl="$escaped_wl"
|
||||||
|
|
||||||
|
# Static library suffix (normally "a").
|
||||||
|
libext="$libext"
|
||||||
|
|
||||||
|
# Shared library suffix (normally "so").
|
||||||
|
shlibext="$shlibext"
|
||||||
|
|
||||||
|
# Format of library name prefix.
|
||||||
|
libname_spec="$escaped_libname_spec"
|
||||||
|
|
||||||
|
# Library names that the linker finds when passed -lNAME.
|
||||||
|
library_names_spec="$escaped_library_names_spec"
|
||||||
|
|
||||||
|
# Flag to hardcode \$libdir into a binary during linking.
|
||||||
|
# This must work even if \$libdir does not exist.
|
||||||
|
hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
|
||||||
|
|
||||||
|
# Whether we need a single -rpath flag with a separated argument.
|
||||||
|
hardcode_libdir_separator="$hardcode_libdir_separator"
|
||||||
|
|
||||||
|
# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
|
||||||
|
# resulting binary.
|
||||||
|
hardcode_direct="$hardcode_direct"
|
||||||
|
|
||||||
|
# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
|
||||||
|
# resulting binary.
|
||||||
|
hardcode_minus_L="$hardcode_minus_L"
|
||||||
|
|
||||||
|
EOF
|
||||||
Executable
+432
@@ -0,0 +1,432 @@
|
|||||||
|
eval '(exit $?0)' && eval 'exec perl -wS "$0" ${1+"$@"}'
|
||||||
|
& eval 'exec perl -wS "$0" $argv:q'
|
||||||
|
if 0;
|
||||||
|
# Convert git log output to ChangeLog format.
|
||||||
|
|
||||||
|
my $VERSION = '2012-07-29 06:11'; # UTC
|
||||||
|
# The definition above must lie within the first 8 lines in order
|
||||||
|
# for the Emacs time-stamp write hook (at end) to update it.
|
||||||
|
# If you change this file with Emacs, please let the write hook
|
||||||
|
# do its job. Otherwise, update this string manually.
|
||||||
|
|
||||||
|
# Copyright (C) 2008-2014 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/>.
|
||||||
|
|
||||||
|
# Written by Jim Meyering
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
use Getopt::Long;
|
||||||
|
use POSIX qw(strftime);
|
||||||
|
|
||||||
|
(my $ME = $0) =~ s|.*/||;
|
||||||
|
|
||||||
|
# use File::Coda; # http://meyering.net/code/Coda/
|
||||||
|
END {
|
||||||
|
defined fileno STDOUT or return;
|
||||||
|
close STDOUT and return;
|
||||||
|
warn "$ME: failed to close standard output: $!\n";
|
||||||
|
$? ||= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub usage ($)
|
||||||
|
{
|
||||||
|
my ($exit_code) = @_;
|
||||||
|
my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
|
||||||
|
if ($exit_code != 0)
|
||||||
|
{
|
||||||
|
print $STREAM "Try '$ME --help' for more information.\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
print $STREAM <<EOF;
|
||||||
|
Usage: $ME [OPTIONS] [ARGS]
|
||||||
|
|
||||||
|
Convert git log output to ChangeLog format. If present, any ARGS
|
||||||
|
are passed to "git log". To avoid ARGS being parsed as options to
|
||||||
|
$ME, they may be preceded by '--'.
|
||||||
|
|
||||||
|
OPTIONS:
|
||||||
|
|
||||||
|
--amend=FILE FILE maps from an SHA1 to perl code (i.e., s/old/new/) that
|
||||||
|
makes a change to SHA1's commit log text or metadata.
|
||||||
|
--append-dot append a dot to the first line of each commit message if
|
||||||
|
there is no other punctuation or blank at the end.
|
||||||
|
--no-cluster never cluster commit messages under the same date/author
|
||||||
|
header; the default is to cluster adjacent commit messages
|
||||||
|
if their headers are the same and neither commit message
|
||||||
|
contains multiple paragraphs.
|
||||||
|
--srcdir=DIR the root of the source tree, from which the .git/
|
||||||
|
directory can be derived.
|
||||||
|
--since=DATE convert only the logs since DATE;
|
||||||
|
the default is to convert all log entries.
|
||||||
|
--format=FMT set format string for commit subject and body;
|
||||||
|
see 'man git-log' for the list of format metacharacters;
|
||||||
|
the default is '%s%n%b%n'
|
||||||
|
--strip-tab remove one additional leading TAB from commit message lines.
|
||||||
|
--strip-cherry-pick remove data inserted by "git cherry-pick";
|
||||||
|
this includes the "cherry picked from commit ..." line,
|
||||||
|
and the possible final "Conflicts:" paragraph.
|
||||||
|
--help display this help and exit
|
||||||
|
--version output version information and exit
|
||||||
|
|
||||||
|
EXAMPLE:
|
||||||
|
|
||||||
|
$ME --since=2008-01-01 > ChangeLog
|
||||||
|
$ME -- -n 5 foo > last-5-commits-to-branch-foo
|
||||||
|
|
||||||
|
SPECIAL SYNTAX:
|
||||||
|
|
||||||
|
The following types of strings are interpreted specially when they appear
|
||||||
|
at the beginning of a log message line. They are not copied to the output.
|
||||||
|
|
||||||
|
Copyright-paperwork-exempt: Yes
|
||||||
|
Append the "(tiny change)" notation to the usual "date name email"
|
||||||
|
ChangeLog header to mark a change that does not require a copyright
|
||||||
|
assignment.
|
||||||
|
Co-authored-by: Joe User <user\@example.com>
|
||||||
|
List the specified name and email address on a second
|
||||||
|
ChangeLog header, denoting a co-author.
|
||||||
|
Signed-off-by: Joe User <user\@example.com>
|
||||||
|
These lines are simply elided.
|
||||||
|
|
||||||
|
In a FILE specified via --amend, comment lines (starting with "#") are ignored.
|
||||||
|
FILE must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1 (alone on
|
||||||
|
a line) referring to a commit in the current project, and CODE refers to one
|
||||||
|
or more consecutive lines of Perl code. Pairs must be separated by one or
|
||||||
|
more blank line.
|
||||||
|
|
||||||
|
Here is sample input for use with --amend=FILE, from coreutils:
|
||||||
|
|
||||||
|
3a169f4c5d9159283548178668d2fae6fced3030
|
||||||
|
# fix typo in title:
|
||||||
|
s/all tile types/all file types/
|
||||||
|
|
||||||
|
1379ed974f1fa39b12e2ffab18b3f7a607082202
|
||||||
|
# Due to a bug in vc-dwim, I mis-attributed a patch by Paul to myself.
|
||||||
|
# Change the author to be Paul. Note the escaped "@":
|
||||||
|
s,Jim .*>,Paul Eggert <eggert\\\@cs.ucla.edu>,
|
||||||
|
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
exit $exit_code;
|
||||||
|
}
|
||||||
|
|
||||||
|
# If the string $S is a well-behaved file name, simply return it.
|
||||||
|
# If it contains white space, quotes, etc., quote it, and return the new string.
|
||||||
|
sub shell_quote($)
|
||||||
|
{
|
||||||
|
my ($s) = @_;
|
||||||
|
if ($s =~ m![^\w+/.,-]!)
|
||||||
|
{
|
||||||
|
# Convert each single quote to '\''
|
||||||
|
$s =~ s/\'/\'\\\'\'/g;
|
||||||
|
# Then single quote the string.
|
||||||
|
$s = "'$s'";
|
||||||
|
}
|
||||||
|
return $s;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub quoted_cmd(@)
|
||||||
|
{
|
||||||
|
return join (' ', map {shell_quote $_} @_);
|
||||||
|
}
|
||||||
|
|
||||||
|
# Parse file F.
|
||||||
|
# Comment lines (starting with "#") are ignored.
|
||||||
|
# F must consist of <SHA,CODE+> pairs where SHA is a 40-byte SHA1
|
||||||
|
# (alone on a line) referring to a commit in the current project, and
|
||||||
|
# CODE refers to one or more consecutive lines of Perl code.
|
||||||
|
# Pairs must be separated by one or more blank line.
|
||||||
|
sub parse_amend_file($)
|
||||||
|
{
|
||||||
|
my ($f) = @_;
|
||||||
|
|
||||||
|
open F, '<', $f
|
||||||
|
or die "$ME: $f: failed to open for reading: $!\n";
|
||||||
|
|
||||||
|
my $fail;
|
||||||
|
my $h = {};
|
||||||
|
my $in_code = 0;
|
||||||
|
my $sha;
|
||||||
|
while (defined (my $line = <F>))
|
||||||
|
{
|
||||||
|
$line =~ /^\#/
|
||||||
|
and next;
|
||||||
|
chomp $line;
|
||||||
|
$line eq ''
|
||||||
|
and $in_code = 0, next;
|
||||||
|
|
||||||
|
if (!$in_code)
|
||||||
|
{
|
||||||
|
$line =~ /^([0-9a-fA-F]{40})$/
|
||||||
|
or (warn "$ME: $f:$.: invalid line; expected an SHA1\n"),
|
||||||
|
$fail = 1, next;
|
||||||
|
$sha = lc $1;
|
||||||
|
$in_code = 1;
|
||||||
|
exists $h->{$sha}
|
||||||
|
and (warn "$ME: $f:$.: duplicate SHA1\n"),
|
||||||
|
$fail = 1, next;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$h->{$sha} ||= '';
|
||||||
|
$h->{$sha} .= "$line\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close F;
|
||||||
|
|
||||||
|
$fail
|
||||||
|
and exit 1;
|
||||||
|
|
||||||
|
return $h;
|
||||||
|
}
|
||||||
|
|
||||||
|
# git_dir_option $SRCDIR
|
||||||
|
#
|
||||||
|
# From $SRCDIR, the --git-dir option to pass to git (none if $SRCDIR
|
||||||
|
# is undef). Return as a list (0 or 1 element).
|
||||||
|
sub git_dir_option($)
|
||||||
|
{
|
||||||
|
my ($srcdir) = @_;
|
||||||
|
my @res = ();
|
||||||
|
if (defined $srcdir)
|
||||||
|
{
|
||||||
|
my $qdir = shell_quote $srcdir;
|
||||||
|
my $cmd = "cd $qdir && git rev-parse --show-toplevel";
|
||||||
|
my $qcmd = shell_quote $cmd;
|
||||||
|
my $git_dir = qx($cmd);
|
||||||
|
defined $git_dir
|
||||||
|
or die "$ME: cannot run $qcmd: $!\n";
|
||||||
|
$? == 0
|
||||||
|
or die "$ME: $qcmd had unexpected exit code or signal ($?)\n";
|
||||||
|
chomp $git_dir;
|
||||||
|
push @res, "--git-dir=$git_dir/.git";
|
||||||
|
}
|
||||||
|
@res;
|
||||||
|
}
|
||||||
|
|
||||||
|
{
|
||||||
|
my $since_date;
|
||||||
|
my $format_string = '%s%n%b%n';
|
||||||
|
my $amend_file;
|
||||||
|
my $append_dot = 0;
|
||||||
|
my $cluster = 1;
|
||||||
|
my $strip_tab = 0;
|
||||||
|
my $strip_cherry_pick = 0;
|
||||||
|
my $srcdir;
|
||||||
|
GetOptions
|
||||||
|
(
|
||||||
|
help => sub { usage 0 },
|
||||||
|
version => sub { print "$ME version $VERSION\n"; exit },
|
||||||
|
'since=s' => \$since_date,
|
||||||
|
'format=s' => \$format_string,
|
||||||
|
'amend=s' => \$amend_file,
|
||||||
|
'append-dot' => \$append_dot,
|
||||||
|
'cluster!' => \$cluster,
|
||||||
|
'strip-tab' => \$strip_tab,
|
||||||
|
'strip-cherry-pick' => \$strip_cherry_pick,
|
||||||
|
'srcdir=s' => \$srcdir,
|
||||||
|
) or usage 1;
|
||||||
|
|
||||||
|
defined $since_date
|
||||||
|
and unshift @ARGV, "--since=$since_date";
|
||||||
|
|
||||||
|
# This is a hash that maps an SHA1 to perl code (i.e., s/old/new/)
|
||||||
|
# that makes a correction in the log or attribution of that commit.
|
||||||
|
my $amend_code = defined $amend_file ? parse_amend_file $amend_file : {};
|
||||||
|
|
||||||
|
my @cmd = ('git',
|
||||||
|
git_dir_option $srcdir,
|
||||||
|
qw(log --log-size),
|
||||||
|
'--pretty=format:%H:%ct %an <%ae>%n%n'.$format_string, @ARGV);
|
||||||
|
open PIPE, '-|', @cmd
|
||||||
|
or die ("$ME: failed to run '". quoted_cmd (@cmd) ."': $!\n"
|
||||||
|
. "(Is your Git too old? Version 1.5.1 or later is required.)\n");
|
||||||
|
|
||||||
|
my $prev_multi_paragraph;
|
||||||
|
my $prev_date_line = '';
|
||||||
|
my @prev_coauthors = ();
|
||||||
|
while (1)
|
||||||
|
{
|
||||||
|
defined (my $in = <PIPE>)
|
||||||
|
or last;
|
||||||
|
$in =~ /^log size (\d+)$/
|
||||||
|
or die "$ME:$.: Invalid line (expected log size):\n$in";
|
||||||
|
my $log_nbytes = $1;
|
||||||
|
|
||||||
|
my $log;
|
||||||
|
my $n_read = read PIPE, $log, $log_nbytes;
|
||||||
|
$n_read == $log_nbytes
|
||||||
|
or die "$ME:$.: unexpected EOF\n";
|
||||||
|
|
||||||
|
# Extract leading hash.
|
||||||
|
my ($sha, $rest) = split ':', $log, 2;
|
||||||
|
defined $sha
|
||||||
|
or die "$ME:$.: malformed log entry\n";
|
||||||
|
$sha =~ /^[0-9a-fA-F]{40}$/
|
||||||
|
or die "$ME:$.: invalid SHA1: $sha\n";
|
||||||
|
|
||||||
|
# If this commit's log requires any transformation, do it now.
|
||||||
|
my $code = $amend_code->{$sha};
|
||||||
|
if (defined $code)
|
||||||
|
{
|
||||||
|
eval 'use Safe';
|
||||||
|
my $s = new Safe;
|
||||||
|
# Put the unpreprocessed entry into "$_".
|
||||||
|
$_ = $rest;
|
||||||
|
|
||||||
|
# Let $code operate on it, safely.
|
||||||
|
my $r = $s->reval("$code")
|
||||||
|
or die "$ME:$.:$sha: failed to eval \"$code\":\n$@\n";
|
||||||
|
|
||||||
|
# Note that we've used this entry.
|
||||||
|
delete $amend_code->{$sha};
|
||||||
|
|
||||||
|
# Update $rest upon success.
|
||||||
|
$rest = $_;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove lines inserted by "git cherry-pick".
|
||||||
|
if ($strip_cherry_pick)
|
||||||
|
{
|
||||||
|
$rest =~ s/^\s*Conflicts:\n.*//sm;
|
||||||
|
$rest =~ s/^\s*\(cherry picked from commit [\da-f]+\)\n//m;
|
||||||
|
}
|
||||||
|
|
||||||
|
my @line = split "\n", $rest;
|
||||||
|
my $author_line = shift @line;
|
||||||
|
defined $author_line
|
||||||
|
or die "$ME:$.: unexpected EOF\n";
|
||||||
|
$author_line =~ /^(\d+) (.*>)$/
|
||||||
|
or die "$ME:$.: Invalid line "
|
||||||
|
. "(expected date/author/email):\n$author_line\n";
|
||||||
|
|
||||||
|
# Format 'Copyright-paperwork-exempt: Yes' as a standard ChangeLog
|
||||||
|
# `(tiny change)' annotation.
|
||||||
|
my $tiny = (grep (/^Copyright-paperwork-exempt:\s+[Yy]es$/, @line)
|
||||||
|
? ' (tiny change)' : '');
|
||||||
|
|
||||||
|
my $date_line = sprintf "%s %s$tiny\n",
|
||||||
|
strftime ("%F", localtime ($1)), $2;
|
||||||
|
|
||||||
|
my @coauthors = grep /^Co-authored-by:.*$/, @line;
|
||||||
|
# Omit meta-data lines we've already interpreted.
|
||||||
|
@line = grep !/^(?:Signed-off-by:[ ].*>$
|
||||||
|
|Co-authored-by:[ ]
|
||||||
|
|Copyright-paperwork-exempt:[ ]
|
||||||
|
)/x, @line;
|
||||||
|
|
||||||
|
# Remove leading and trailing blank lines.
|
||||||
|
if (@line)
|
||||||
|
{
|
||||||
|
while ($line[0] =~ /^\s*$/) { shift @line; }
|
||||||
|
while ($line[$#line] =~ /^\s*$/) { pop @line; }
|
||||||
|
}
|
||||||
|
|
||||||
|
# Record whether there are two or more paragraphs.
|
||||||
|
my $multi_paragraph = grep /^\s*$/, @line;
|
||||||
|
|
||||||
|
# Format 'Co-authored-by: A U Thor <email@example.com>' lines in
|
||||||
|
# standard multi-author ChangeLog format.
|
||||||
|
for (@coauthors)
|
||||||
|
{
|
||||||
|
s/^Co-authored-by:\s*/\t /;
|
||||||
|
s/\s*</ </;
|
||||||
|
|
||||||
|
/<.*?@.*\..*>/
|
||||||
|
or warn "$ME: warning: missing email address for "
|
||||||
|
. substr ($_, 5) . "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
# If clustering of commit messages has been disabled, if this header
|
||||||
|
# would be different from the previous date/name/email/coauthors header,
|
||||||
|
# or if this or the previous entry consists of two or more paragraphs,
|
||||||
|
# then print the header.
|
||||||
|
if ( ! $cluster
|
||||||
|
|| $date_line ne $prev_date_line
|
||||||
|
|| "@coauthors" ne "@prev_coauthors"
|
||||||
|
|| $multi_paragraph
|
||||||
|
|| $prev_multi_paragraph)
|
||||||
|
{
|
||||||
|
$prev_date_line eq ''
|
||||||
|
or print "\n";
|
||||||
|
print $date_line;
|
||||||
|
@coauthors
|
||||||
|
and print join ("\n", @coauthors), "\n";
|
||||||
|
}
|
||||||
|
$prev_date_line = $date_line;
|
||||||
|
@prev_coauthors = @coauthors;
|
||||||
|
$prev_multi_paragraph = $multi_paragraph;
|
||||||
|
|
||||||
|
# If there were any lines
|
||||||
|
if (@line == 0)
|
||||||
|
{
|
||||||
|
warn "$ME: warning: empty commit message:\n $date_line\n";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if ($append_dot)
|
||||||
|
{
|
||||||
|
# If the first line of the message has enough room, then
|
||||||
|
if (length $line[0] < 72)
|
||||||
|
{
|
||||||
|
# append a dot if there is no other punctuation or blank
|
||||||
|
# at the end.
|
||||||
|
$line[0] =~ /[[:punct:]\s]$/
|
||||||
|
or $line[0] .= '.';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove one additional leading TAB from each line.
|
||||||
|
$strip_tab
|
||||||
|
and map { s/^\t// } @line;
|
||||||
|
|
||||||
|
# Prefix each non-empty line with a TAB.
|
||||||
|
@line = map { length $_ ? "\t$_" : '' } @line;
|
||||||
|
|
||||||
|
print "\n", join ("\n", @line), "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
defined ($in = <PIPE>)
|
||||||
|
or last;
|
||||||
|
$in ne "\n"
|
||||||
|
and die "$ME:$.: unexpected line:\n$in";
|
||||||
|
}
|
||||||
|
|
||||||
|
close PIPE
|
||||||
|
or die "$ME: error closing pipe from " . quoted_cmd (@cmd) . "\n";
|
||||||
|
# FIXME-someday: include $PROCESS_STATUS in the diagnostic
|
||||||
|
|
||||||
|
# Complain about any unused entry in the --amend=F specified file.
|
||||||
|
my $fail = 0;
|
||||||
|
foreach my $sha (keys %$amend_code)
|
||||||
|
{
|
||||||
|
warn "$ME:$amend_file: unused entry: $sha\n";
|
||||||
|
$fail = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
exit $fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Local Variables:
|
||||||
|
# mode: perl
|
||||||
|
# indent-tabs-mode: nil
|
||||||
|
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||||
|
# time-stamp-start: "my $VERSION = '"
|
||||||
|
# time-stamp-format: "%:y-%02m-%02d %02H:%02M"
|
||||||
|
# time-stamp-time-zone: "UTC"
|
||||||
|
# time-stamp-end: "'; # UTC"
|
||||||
|
# End:
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
#if !defined _Noreturn && __STDC_VERSION__ < 201112
|
||||||
|
# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
|
||||||
|
|| 0x5110 <= __SUNPRO_C)
|
||||||
|
# define _Noreturn __attribute__ ((__noreturn__))
|
||||||
|
# elif 1200 <= _MSC_VER
|
||||||
|
# define _Noreturn __declspec (noreturn)
|
||||||
|
# else
|
||||||
|
# define _Noreturn
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,26 @@
|
|||||||
|
/* A C macro for declaring that specific arguments must not be NULL.
|
||||||
|
Copyright (C) 2009-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/>. */
|
||||||
|
|
||||||
|
/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
|
||||||
|
that the values passed as arguments n, ..., m must be non-NULL pointers.
|
||||||
|
n = 1 stands for the first argument, n = 2 for the second argument etc. */
|
||||||
|
#ifndef _GL_ARG_NONNULL
|
||||||
|
# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
|
||||||
|
# define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
|
||||||
|
# else
|
||||||
|
# define _GL_ARG_NONNULL(params)
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
@@ -0,0 +1,271 @@
|
|||||||
|
/* C++ compatible function declaration macros.
|
||||||
|
Copyright (C) 2010-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/>. */
|
||||||
|
|
||||||
|
#ifndef _GL_CXXDEFS_H
|
||||||
|
#define _GL_CXXDEFS_H
|
||||||
|
|
||||||
|
/* The three most frequent use cases of these macros are:
|
||||||
|
|
||||||
|
* For providing a substitute for a function that is missing on some
|
||||||
|
platforms, but is declared and works fine on the platforms on which
|
||||||
|
it exists:
|
||||||
|
|
||||||
|
#if @GNULIB_FOO@
|
||||||
|
# if !@HAVE_FOO@
|
||||||
|
_GL_FUNCDECL_SYS (foo, ...);
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIAS_SYS (foo, ...);
|
||||||
|
_GL_CXXALIASWARN (foo);
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
...
|
||||||
|
#endif
|
||||||
|
|
||||||
|
* For providing a replacement for a function that exists on all platforms,
|
||||||
|
but is broken/insufficient and needs to be replaced on some platforms:
|
||||||
|
|
||||||
|
#if @GNULIB_FOO@
|
||||||
|
# if @REPLACE_FOO@
|
||||||
|
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||||
|
# undef foo
|
||||||
|
# define foo rpl_foo
|
||||||
|
# endif
|
||||||
|
_GL_FUNCDECL_RPL (foo, ...);
|
||||||
|
_GL_CXXALIAS_RPL (foo, ...);
|
||||||
|
# else
|
||||||
|
_GL_CXXALIAS_SYS (foo, ...);
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIASWARN (foo);
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
...
|
||||||
|
#endif
|
||||||
|
|
||||||
|
* For providing a replacement for a function that exists on some platforms
|
||||||
|
but is broken/insufficient and needs to be replaced on some of them and
|
||||||
|
is additionally either missing or undeclared on some other platforms:
|
||||||
|
|
||||||
|
#if @GNULIB_FOO@
|
||||||
|
# if @REPLACE_FOO@
|
||||||
|
# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
|
||||||
|
# undef foo
|
||||||
|
# define foo rpl_foo
|
||||||
|
# endif
|
||||||
|
_GL_FUNCDECL_RPL (foo, ...);
|
||||||
|
_GL_CXXALIAS_RPL (foo, ...);
|
||||||
|
# else
|
||||||
|
# if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@
|
||||||
|
_GL_FUNCDECL_SYS (foo, ...);
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIAS_SYS (foo, ...);
|
||||||
|
# endif
|
||||||
|
_GL_CXXALIASWARN (foo);
|
||||||
|
#elif defined GNULIB_POSIXCHECK
|
||||||
|
...
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* _GL_EXTERN_C declaration;
|
||||||
|
performs the declaration with C linkage. */
|
||||||
|
#if defined __cplusplus
|
||||||
|
# define _GL_EXTERN_C extern "C"
|
||||||
|
#else
|
||||||
|
# define _GL_EXTERN_C extern
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
|
||||||
|
declares a replacement function, named rpl_func, with the given prototype,
|
||||||
|
consisting of return type, parameters, and attributes.
|
||||||
|
Example:
|
||||||
|
_GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
|
||||||
|
_GL_ARG_NONNULL ((1)));
|
||||||
|
*/
|
||||||
|
#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
|
||||||
|
_GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
|
||||||
|
#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
|
||||||
|
_GL_EXTERN_C rettype rpl_func parameters_and_attributes
|
||||||
|
|
||||||
|
/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
|
||||||
|
declares the system function, named func, with the given prototype,
|
||||||
|
consisting of return type, parameters, and attributes.
|
||||||
|
Example:
|
||||||
|
_GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
|
||||||
|
_GL_ARG_NONNULL ((1)));
|
||||||
|
*/
|
||||||
|
#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
|
||||||
|
_GL_EXTERN_C rettype func parameters_and_attributes
|
||||||
|
|
||||||
|
/* _GL_CXXALIAS_RPL (func, rettype, parameters);
|
||||||
|
declares a C++ alias called GNULIB_NAMESPACE::func
|
||||||
|
that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
|
||||||
|
Example:
|
||||||
|
_GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
|
||||||
|
*/
|
||||||
|
#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
|
||||||
|
_GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
|
||||||
|
#if defined __cplusplus && defined GNULIB_NAMESPACE
|
||||||
|
# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
|
||||||
|
namespace GNULIB_NAMESPACE \
|
||||||
|
{ \
|
||||||
|
rettype (*const func) parameters = ::rpl_func; \
|
||||||
|
} \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#else
|
||||||
|
# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
|
||||||
|
is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
|
||||||
|
except that the C function rpl_func may have a slightly different
|
||||||
|
declaration. A cast is used to silence the "invalid conversion" error
|
||||||
|
that would otherwise occur. */
|
||||||
|
#if defined __cplusplus && defined GNULIB_NAMESPACE
|
||||||
|
# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
|
||||||
|
namespace GNULIB_NAMESPACE \
|
||||||
|
{ \
|
||||||
|
rettype (*const func) parameters = \
|
||||||
|
reinterpret_cast<rettype(*)parameters>(::rpl_func); \
|
||||||
|
} \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#else
|
||||||
|
# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_CXXALIAS_SYS (func, rettype, parameters);
|
||||||
|
declares a C++ alias called GNULIB_NAMESPACE::func
|
||||||
|
that redirects to the system provided function func, if GNULIB_NAMESPACE
|
||||||
|
is defined.
|
||||||
|
Example:
|
||||||
|
_GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
|
||||||
|
*/
|
||||||
|
#if defined __cplusplus && defined GNULIB_NAMESPACE
|
||||||
|
/* If we were to write
|
||||||
|
rettype (*const func) parameters = ::func;
|
||||||
|
like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
|
||||||
|
better (remove an indirection through a 'static' pointer variable),
|
||||||
|
but then the _GL_CXXALIASWARN macro below would cause a warning not only
|
||||||
|
for uses of ::func but also for uses of GNULIB_NAMESPACE::func. */
|
||||||
|
# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
|
||||||
|
namespace GNULIB_NAMESPACE \
|
||||||
|
{ \
|
||||||
|
static rettype (*func) parameters = ::func; \
|
||||||
|
} \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#else
|
||||||
|
# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
|
||||||
|
is like _GL_CXXALIAS_SYS (func, rettype, parameters);
|
||||||
|
except that the C function func may have a slightly different declaration.
|
||||||
|
A cast is used to silence the "invalid conversion" error that would
|
||||||
|
otherwise occur. */
|
||||||
|
#if defined __cplusplus && defined GNULIB_NAMESPACE
|
||||||
|
# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
|
||||||
|
namespace GNULIB_NAMESPACE \
|
||||||
|
{ \
|
||||||
|
static rettype (*func) parameters = \
|
||||||
|
reinterpret_cast<rettype(*)parameters>(::func); \
|
||||||
|
} \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#else
|
||||||
|
# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
|
||||||
|
is like _GL_CXXALIAS_SYS (func, rettype, parameters);
|
||||||
|
except that the C function is picked among a set of overloaded functions,
|
||||||
|
namely the one with rettype2 and parameters2. Two consecutive casts
|
||||||
|
are used to silence the "cannot find a match" and "invalid conversion"
|
||||||
|
errors that would otherwise occur. */
|
||||||
|
#if defined __cplusplus && defined GNULIB_NAMESPACE
|
||||||
|
/* The outer cast must be a reinterpret_cast.
|
||||||
|
The inner cast: When the function is defined as a set of overloaded
|
||||||
|
functions, it works as a static_cast<>, choosing the designated variant.
|
||||||
|
When the function is defined as a single variant, it works as a
|
||||||
|
reinterpret_cast<>. The parenthesized cast syntax works both ways. */
|
||||||
|
# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
|
||||||
|
namespace GNULIB_NAMESPACE \
|
||||||
|
{ \
|
||||||
|
static rettype (*func) parameters = \
|
||||||
|
reinterpret_cast<rettype(*)parameters>( \
|
||||||
|
(rettype2(*)parameters2)(::func)); \
|
||||||
|
} \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#else
|
||||||
|
# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_CXXALIASWARN (func);
|
||||||
|
causes a warning to be emitted when ::func is used but not when
|
||||||
|
GNULIB_NAMESPACE::func is used. func must be defined without overloaded
|
||||||
|
variants. */
|
||||||
|
#if defined __cplusplus && defined GNULIB_NAMESPACE
|
||||||
|
# define _GL_CXXALIASWARN(func) \
|
||||||
|
_GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
|
||||||
|
# define _GL_CXXALIASWARN_1(func,namespace) \
|
||||||
|
_GL_CXXALIASWARN_2 (func, namespace)
|
||||||
|
/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
|
||||||
|
we enable the warning only when not optimizing. */
|
||||||
|
# if !__OPTIMIZE__
|
||||||
|
# define _GL_CXXALIASWARN_2(func,namespace) \
|
||||||
|
_GL_WARN_ON_USE (func, \
|
||||||
|
"The symbol ::" #func " refers to the system function. " \
|
||||||
|
"Use " #namespace "::" #func " instead.")
|
||||||
|
# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
|
||||||
|
# define _GL_CXXALIASWARN_2(func,namespace) \
|
||||||
|
extern __typeof__ (func) func
|
||||||
|
# else
|
||||||
|
# define _GL_CXXALIASWARN_2(func,namespace) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define _GL_CXXALIASWARN(func) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
|
||||||
|
causes a warning to be emitted when the given overloaded variant of ::func
|
||||||
|
is used but not when GNULIB_NAMESPACE::func is used. */
|
||||||
|
#if defined __cplusplus && defined GNULIB_NAMESPACE
|
||||||
|
# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
|
||||||
|
_GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
|
||||||
|
GNULIB_NAMESPACE)
|
||||||
|
# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
|
||||||
|
_GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
|
||||||
|
/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
|
||||||
|
we enable the warning only when not optimizing. */
|
||||||
|
# if !__OPTIMIZE__
|
||||||
|
# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
|
||||||
|
_GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
|
||||||
|
"The symbol ::" #func " refers to the system function. " \
|
||||||
|
"Use " #namespace "::" #func " instead.")
|
||||||
|
# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
|
||||||
|
# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
|
||||||
|
extern __typeof__ (func) func
|
||||||
|
# else
|
||||||
|
# define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
# endif
|
||||||
|
#else
|
||||||
|
# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
|
||||||
|
_GL_EXTERN_C int _gl_cxxalias_dummy
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif /* _GL_CXXDEFS_H */
|
||||||
@@ -0,0 +1,109 @@
|
|||||||
|
/* A C macro for emitting warnings if a function is used.
|
||||||
|
Copyright (C) 2010-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/>. */
|
||||||
|
|
||||||
|
/* _GL_WARN_ON_USE (function, "literal string") issues a declaration
|
||||||
|
for FUNCTION which will then trigger a compiler warning containing
|
||||||
|
the text of "literal string" anywhere that function is called, if
|
||||||
|
supported by the compiler. If the compiler does not support this
|
||||||
|
feature, the macro expands to an unused extern declaration.
|
||||||
|
|
||||||
|
This macro is useful for marking a function as a potential
|
||||||
|
portability trap, with the intent that "literal string" include
|
||||||
|
instructions on the replacement function that should be used
|
||||||
|
instead. However, one of the reasons that a function is a
|
||||||
|
portability trap is if it has the wrong signature. Declaring
|
||||||
|
FUNCTION with a different signature in C is a compilation error, so
|
||||||
|
this macro must use the same type as any existing declaration so
|
||||||
|
that programs that avoid the problematic FUNCTION do not fail to
|
||||||
|
compile merely because they included a header that poisoned the
|
||||||
|
function. But this implies that _GL_WARN_ON_USE is only safe to
|
||||||
|
use if FUNCTION is known to already have a declaration. Use of
|
||||||
|
this macro implies that there must not be any other macro hiding
|
||||||
|
the declaration of FUNCTION; but undefining FUNCTION first is part
|
||||||
|
of the poisoning process anyway (although for symbols that are
|
||||||
|
provided only via a macro, the result is a compilation error rather
|
||||||
|
than a warning containing "literal string"). Also note that in
|
||||||
|
C++, it is only safe to use if FUNCTION has no overloads.
|
||||||
|
|
||||||
|
For an example, it is possible to poison 'getline' by:
|
||||||
|
- adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
|
||||||
|
[getline]) in configure.ac, which potentially defines
|
||||||
|
HAVE_RAW_DECL_GETLINE
|
||||||
|
- adding this code to a header that wraps the system <stdio.h>:
|
||||||
|
#undef getline
|
||||||
|
#if HAVE_RAW_DECL_GETLINE
|
||||||
|
_GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
|
||||||
|
"not universally present; use the gnulib module getline");
|
||||||
|
#endif
|
||||||
|
|
||||||
|
It is not possible to directly poison global variables. But it is
|
||||||
|
possible to write a wrapper accessor function, and poison that
|
||||||
|
(less common usage, like &environ, will cause a compilation error
|
||||||
|
rather than issue the nice warning, but the end result of informing
|
||||||
|
the developer about their portability problem is still achieved):
|
||||||
|
#if HAVE_RAW_DECL_ENVIRON
|
||||||
|
static char ***rpl_environ (void) { return &environ; }
|
||||||
|
_GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
|
||||||
|
# undef environ
|
||||||
|
# define environ (*rpl_environ ())
|
||||||
|
#endif
|
||||||
|
*/
|
||||||
|
#ifndef _GL_WARN_ON_USE
|
||||||
|
|
||||||
|
# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
|
||||||
|
/* A compiler attribute is available in gcc versions 4.3.0 and later. */
|
||||||
|
# define _GL_WARN_ON_USE(function, message) \
|
||||||
|
extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
|
||||||
|
# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
|
||||||
|
/* Verify the existence of the function. */
|
||||||
|
# define _GL_WARN_ON_USE(function, message) \
|
||||||
|
extern __typeof__ (function) function
|
||||||
|
# else /* Unsupported. */
|
||||||
|
# define _GL_WARN_ON_USE(function, message) \
|
||||||
|
_GL_WARN_EXTERN_C int _gl_warn_on_use
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
|
||||||
|
is like _GL_WARN_ON_USE (function, "string"), except that the function is
|
||||||
|
declared with the given prototype, consisting of return type, parameters,
|
||||||
|
and attributes.
|
||||||
|
This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
|
||||||
|
not work in this case. */
|
||||||
|
#ifndef _GL_WARN_ON_USE_CXX
|
||||||
|
# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
|
||||||
|
# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
|
||||||
|
extern rettype function parameters_and_attributes \
|
||||||
|
__attribute__ ((__warning__ (msg)))
|
||||||
|
# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
|
||||||
|
/* Verify the existence of the function. */
|
||||||
|
# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
|
||||||
|
extern rettype function parameters_and_attributes
|
||||||
|
# else /* Unsupported. */
|
||||||
|
# define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
|
||||||
|
_GL_WARN_EXTERN_C int _gl_warn_on_use
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* _GL_WARN_EXTERN_C declaration;
|
||||||
|
performs the declaration with C linkage. */
|
||||||
|
#ifndef _GL_WARN_EXTERN_C
|
||||||
|
# if defined __cplusplus
|
||||||
|
# define _GL_WARN_EXTERN_C extern "C"
|
||||||
|
# else
|
||||||
|
# define _GL_WARN_EXTERN_C extern
|
||||||
|
# endif
|
||||||
|
#endif
|
||||||
+19
-34
@@ -20,9 +20,6 @@ endif
|
|||||||
if COND_powerpc_ieee1275
|
if COND_powerpc_ieee1275
|
||||||
CFLAGS_PLATFORM += -mcpu=powerpc
|
CFLAGS_PLATFORM += -mcpu=powerpc
|
||||||
endif
|
endif
|
||||||
if COND_HAVE_PCI
|
|
||||||
CFLAGS_PLATFORM += -DGRUB_HAS_PCI
|
|
||||||
endif
|
|
||||||
|
|
||||||
# Other options
|
# Other options
|
||||||
|
|
||||||
@@ -42,16 +39,9 @@ LDFLAGS_KERNEL = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC)
|
|||||||
CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1
|
CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1
|
||||||
CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
||||||
STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version -R .MIPS.abiflags -R .ARM.exidx
|
STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version -R .MIPS.abiflags -R .ARM.exidx
|
||||||
if !COND_emu
|
|
||||||
if COND_HAVE_ASM_USCORE
|
|
||||||
LDFLAGS_KERNEL += -Wl,--defsym=_malloc=_grub_malloc -Wl,--defsym=_free=_grub_free
|
|
||||||
else
|
|
||||||
LDFLAGS_KERNEL += -Wl,--defsym=malloc=grub_malloc -Wl,--defsym=free=grub_free
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
CFLAGS_MODULE = $(CFLAGS_PLATFORM) -ffreestanding
|
CFLAGS_MODULE = $(CFLAGS_PLATFORM) -ffreestanding
|
||||||
LDFLAGS_MODULE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r
|
LDFLAGS_MODULE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r,-d
|
||||||
CPPFLAGS_MODULE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM)
|
CPPFLAGS_MODULE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM)
|
||||||
CCASFLAGS_MODULE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
CCASFLAGS_MODULE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
||||||
|
|
||||||
@@ -75,8 +65,8 @@ grubconfdir = $(sysconfdir)/grub.d
|
|||||||
platformdir = $(pkglibdir)/$(target_cpu)-$(platform)
|
platformdir = $(pkglibdir)/$(target_cpu)-$(platform)
|
||||||
starfielddir = $(pkgdatadir)/themes/starfield
|
starfielddir = $(pkgdatadir)/themes/starfield
|
||||||
|
|
||||||
CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -Wno-unused-parameter -Wno-redundant-decls -Wno-unreachable-code -Wno-conversion -Wno-error=attributes
|
CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -Wno-unused-parameter -Wno-redundant-decls -Wno-unreachable-code -Wno-conversion
|
||||||
CPPFLAGS_GNULIB = -I$(top_builddir)/grub-core/lib/gnulib -I$(top_srcdir)/grub-core/lib/gnulib
|
CPPFLAGS_GNULIB = -I$(top_builddir)/grub-core/gnulib -I$(top_srcdir)/grub-core/gnulib
|
||||||
|
|
||||||
CFLAGS_POSIX = -fno-builtin
|
CFLAGS_POSIX = -fno-builtin
|
||||||
CPPFLAGS_POSIX = -I$(top_srcdir)/grub-core/lib/posix_wrap
|
CPPFLAGS_POSIX = -I$(top_srcdir)/grub-core/lib/posix_wrap
|
||||||
@@ -94,15 +84,11 @@ CPPFLAGS_PARTTOOL_LIST = -Dgrub_parttool_register=PARTTOOL_LIST_MARKER
|
|||||||
CPPFLAGS_TERMINAL_LIST = '-Dgrub_term_register_input(...)=INPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)'
|
CPPFLAGS_TERMINAL_LIST = '-Dgrub_term_register_input(...)=INPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)'
|
||||||
CPPFLAGS_TERMINAL_LIST += '-Dgrub_term_register_output(...)=OUTPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)'
|
CPPFLAGS_TERMINAL_LIST += '-Dgrub_term_register_output(...)=OUTPUT_TERMINAL_LIST_MARKER(__VA_ARGS__)'
|
||||||
CPPFLAGS_COMMAND_LIST = '-Dgrub_register_command(...)=COMMAND_LIST_MARKER(__VA_ARGS__)'
|
CPPFLAGS_COMMAND_LIST = '-Dgrub_register_command(...)=COMMAND_LIST_MARKER(__VA_ARGS__)'
|
||||||
CPPFLAGS_COMMAND_LIST += '-Dgrub_register_command_lockdown(...)=COMMAND_LOCKDOWN_LIST_MARKER(__VA_ARGS__)'
|
|
||||||
CPPFLAGS_COMMAND_LIST += '-Dgrub_register_extcmd(...)=EXTCOMMAND_LIST_MARKER(__VA_ARGS__)'
|
CPPFLAGS_COMMAND_LIST += '-Dgrub_register_extcmd(...)=EXTCOMMAND_LIST_MARKER(__VA_ARGS__)'
|
||||||
CPPFLAGS_COMMAND_LIST += '-Dgrub_register_extcmd_lockdown(...)=EXTCOMMAND_LOCKDOWN_LIST_MARKER(__VA_ARGS__)'
|
|
||||||
CPPFLAGS_COMMAND_LIST += '-Dgrub_register_command_p1(...)=P1COMMAND_LIST_MARKER(__VA_ARGS__)'
|
CPPFLAGS_COMMAND_LIST += '-Dgrub_register_command_p1(...)=P1COMMAND_LIST_MARKER(__VA_ARGS__)'
|
||||||
CPPFLAGS_FDT_LIST := '-Dgrub_fdtbus_register(...)=FDT_DRIVER_LIST_MARKER(__VA_ARGS__)'
|
|
||||||
CPPFLAGS_MARKER = $(CPPFLAGS_FS_LIST) $(CPPFLAGS_VIDEO_LIST) \
|
CPPFLAGS_MARKER = $(CPPFLAGS_FS_LIST) $(CPPFLAGS_VIDEO_LIST) \
|
||||||
$(CPPFLAGS_PARTTOOL_LIST) $(CPPFLAGS_PARTMAP_LIST) \
|
$(CPPFLAGS_PARTTOOL_LIST) $(CPPFLAGS_PARTMAP_LIST) \
|
||||||
$(CPPFLAGS_TERMINAL_LIST) $(CPPFLAGS_COMMAND_LIST) \
|
$(CPPFLAGS_TERMINAL_LIST) $(CPPFLAGS_COMMAND_LIST)
|
||||||
$(CPPFLAGS_FDT_LIST)
|
|
||||||
|
|
||||||
# Define these variables to calm down automake
|
# Define these variables to calm down automake
|
||||||
|
|
||||||
@@ -112,27 +98,26 @@ MODULE_FILES =
|
|||||||
MARKER_FILES =
|
MARKER_FILES =
|
||||||
KERNEL_HEADER_FILES =
|
KERNEL_HEADER_FILES =
|
||||||
|
|
||||||
bin_SCRIPTS =
|
|
||||||
bin_PROGRAMS =
|
|
||||||
check_SCRIPTS_native =
|
|
||||||
check_SCRIPTS_nonnative =
|
|
||||||
check_PROGRAMS_native =
|
|
||||||
check_PROGRAMS_nonnative =
|
|
||||||
dist_grubconf_DATA =
|
|
||||||
dist_noinst_DATA =
|
|
||||||
grubconf_SCRIPTS =
|
|
||||||
man_MANS =
|
man_MANS =
|
||||||
noinst_DATA =
|
noinst_DATA =
|
||||||
|
pkgdata_DATA =
|
||||||
|
bin_SCRIPTS =
|
||||||
|
sbin_SCRIPTS =
|
||||||
|
bin_PROGRAMS =
|
||||||
|
platform_DATA =
|
||||||
|
sbin_PROGRAMS =
|
||||||
|
check_SCRIPTS =
|
||||||
|
dist_grubconf_DATA =
|
||||||
|
check_PROGRAMS =
|
||||||
noinst_SCRIPTS =
|
noinst_SCRIPTS =
|
||||||
noinst_PROGRAMS =
|
noinst_PROGRAMS =
|
||||||
|
grubconf_SCRIPTS =
|
||||||
noinst_LIBRARIES =
|
noinst_LIBRARIES =
|
||||||
pkgdata_DATA =
|
dist_noinst_DATA =
|
||||||
platform_DATA =
|
|
||||||
platform_SCRIPTS =
|
platform_SCRIPTS =
|
||||||
platform_PROGRAMS =
|
platform_PROGRAMS =
|
||||||
sbin_SCRIPTS =
|
|
||||||
sbin_PROGRAMS =
|
|
||||||
|
|
||||||
|
TESTS =
|
||||||
EXTRA_DIST =
|
EXTRA_DIST =
|
||||||
CLEANFILES =
|
CLEANFILES =
|
||||||
BUILT_SOURCES =
|
BUILT_SOURCES =
|
||||||
@@ -141,11 +126,11 @@ BUILT_SOURCES =
|
|||||||
|
|
||||||
.PRECIOUS: $(top_srcdir)/Makefile.util.am
|
.PRECIOUS: $(top_srcdir)/Makefile.util.am
|
||||||
$(top_srcdir)/Makefile.util.am: $(top_srcdir)/gentpl.py $(top_srcdir)/Makefile.util.def $(top_srcdir)/Makefile.utilgcry.def
|
$(top_srcdir)/Makefile.util.am: $(top_srcdir)/gentpl.py $(top_srcdir)/Makefile.util.def $(top_srcdir)/Makefile.utilgcry.def
|
||||||
$(PYTHON) $^ > $@.new || (rm -f $@.new; exit 1)
|
python $^ > $@.new || (rm -f $@.new; exit 1)
|
||||||
mv $@.new $@
|
mv $@.new $@
|
||||||
|
|
||||||
.PRECIOUS: $(top_srcdir)/grub-core/Makefile.core.am
|
.PRECIOUS: $(top_srcdir)/grub-core/Makefile.core.am
|
||||||
$(top_srcdir)/grub-core/Makefile.core.am: $(top_srcdir)/gentpl.py $(top_srcdir)/grub-core/Makefile.core.def $(top_srcdir)/grub-core/Makefile.gcry.def
|
$(top_srcdir)/grub-core/Makefile.core.am: $(top_srcdir)/gentpl.py $(top_srcdir)/grub-core/Makefile.core.def $(top_srcdir)/grub-core/Makefile.gcry.def
|
||||||
if [ "x$$GRUB_CONTRIB" != x ]; then echo "You need to run ./bootstrap manually." >&2; exit 1; fi
|
if [ "x$$GRUB_CONTRIB" != x ]; then echo "You need to run ./autogen.sh manually." >&2; exit 1; fi
|
||||||
$(PYTHON) $^ > $@.new || (rm -f $@.new; exit 1)
|
python $^ > $@.new || (rm -f $@.new; exit 1)
|
||||||
mv $@.new $@
|
mv $@.new $@
|
||||||
@@ -28,7 +28,10 @@ EXTRA_DIST += grub-core/gensymlist.sh
|
|||||||
EXTRA_DIST += grub-core/genemuinit.sh
|
EXTRA_DIST += grub-core/genemuinit.sh
|
||||||
EXTRA_DIST += grub-core/genemuinitheader.sh
|
EXTRA_DIST += grub-core/genemuinitheader.sh
|
||||||
|
|
||||||
EXTRA_DIST += grub-core/lib/gnulib-patches/fix-width.patch
|
EXTRA_DIST += grub-core/gnulib-fix-null-deref.diff
|
||||||
|
EXTRA_DIST += grub-core/gnulib-fix-width.diff
|
||||||
|
EXTRA_DIST += grub-core/gnulib-no-abort.diff
|
||||||
|
EXTRA_DIST += grub-core/gnulib-no-gets.diff
|
||||||
|
|
||||||
EXTRA_DIST += grub-core/lib/libgcrypt
|
EXTRA_DIST += grub-core/lib/libgcrypt
|
||||||
EXTRA_DIST += grub-core/lib/libgcrypt-grub/mpi/generic
|
EXTRA_DIST += grub-core/lib/libgcrypt-grub/mpi/generic
|
||||||
@@ -108,21 +111,6 @@ EXTRA_DIST += grub-core/osdep/windows/password.c
|
|||||||
EXTRA_DIST += grub-core/osdep/windows/random.c
|
EXTRA_DIST += grub-core/osdep/windows/random.c
|
||||||
EXTRA_DIST += grub-core/osdep/windows/sleep.c
|
EXTRA_DIST += grub-core/osdep/windows/sleep.c
|
||||||
|
|
||||||
EXTRA_DIST += po/gettext-patches/0001-Support-POTFILES-shell.patch
|
|
||||||
EXTRA_DIST += po/gettext-patches/0002-Handle-gettext_printf-shell-function.patch
|
|
||||||
EXTRA_DIST += po/gettext-patches/0003-Make-msgfmt-output-in-little-endian.patch
|
|
||||||
EXTRA_DIST += po/gettext-patches/0004-Use-SHELL-rather-than-bin-sh.patch
|
|
||||||
|
|
||||||
EXTRA_DIST += po/POTFILES-shell.in
|
|
||||||
EXTRA_DIST += po/README
|
|
||||||
EXTRA_DIST += po/Rules-translit
|
|
||||||
EXTRA_DIST += po/Rules-windowsdir
|
|
||||||
EXTRA_DIST += po/arabic.sed
|
|
||||||
EXTRA_DIST += po/cyrillic.sed
|
|
||||||
EXTRA_DIST += po/greek.sed
|
|
||||||
EXTRA_DIST += po/grub.d.sed
|
|
||||||
EXTRA_DIST += po/hebrew.sed
|
|
||||||
|
|
||||||
EXTRA_DIST += tests/dfly-mbr-mbexample.mbr.img.gz
|
EXTRA_DIST += tests/dfly-mbr-mbexample.mbr.img.gz
|
||||||
EXTRA_DIST += tests/dfly-mbr-mbexample.dfly.img.gz
|
EXTRA_DIST += tests/dfly-mbr-mbexample.dfly.img.gz
|
||||||
|
|
||||||
|
|||||||
@@ -14,8 +14,6 @@ SECTIONS
|
|||||||
{
|
{
|
||||||
__data_start__ = . ;
|
__data_start__ = . ;
|
||||||
*(.data)
|
*(.data)
|
||||||
/* Do not discard this section. */
|
|
||||||
. = . ;
|
|
||||||
__data_end__ = . ;
|
__data_end__ = . ;
|
||||||
__rdata_start__ = . ;
|
__rdata_start__ = . ;
|
||||||
*(.rdata)
|
*(.rdata)
|
||||||
@@ -36,8 +34,6 @@ SECTIONS
|
|||||||
.edata :
|
.edata :
|
||||||
{
|
{
|
||||||
*(.edata)
|
*(.edata)
|
||||||
/* Do not discard this section. */
|
|
||||||
. = . ;
|
|
||||||
end = . ;
|
end = . ;
|
||||||
_end = . ;
|
_end = . ;
|
||||||
__end = . ;
|
__end = . ;
|
||||||
|
|||||||
+28
-110
@@ -9,10 +9,6 @@
|
|||||||
#define GCRYPT_NO_DEPRECATED 1
|
#define GCRYPT_NO_DEPRECATED 1
|
||||||
#define HAVE_MEMMOVE 1
|
#define HAVE_MEMMOVE 1
|
||||||
|
|
||||||
#if @MM_DEBUG@
|
|
||||||
#define MM_DEBUG @MM_DEBUG@
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define to 1 to enable disk cache statistics. */
|
/* Define to 1 to enable disk cache statistics. */
|
||||||
#define DISK_CACHE_STATS @DISK_CACHE_STATS@
|
#define DISK_CACHE_STATS @DISK_CACHE_STATS@
|
||||||
#define BOOT_TIME_STATS @BOOT_TIME_STATS@
|
#define BOOT_TIME_STATS @BOOT_TIME_STATS@
|
||||||
@@ -26,124 +22,46 @@
|
|||||||
#define MINILZO_CFG_SKIP_LZO1X_DECOMPRESS 1
|
#define MINILZO_CFG_SKIP_LZO1X_DECOMPRESS 1
|
||||||
|
|
||||||
#if defined (GRUB_BUILD)
|
#if defined (GRUB_BUILD)
|
||||||
# undef ENABLE_NLS
|
#undef ENABLE_NLS
|
||||||
# define BUILD_SIZEOF_LONG @BUILD_SIZEOF_LONG@
|
#define BUILD_SIZEOF_LONG @BUILD_SIZEOF_LONG@
|
||||||
# define BUILD_SIZEOF_VOID_P @BUILD_SIZEOF_VOID_P@
|
#define BUILD_SIZEOF_VOID_P @BUILD_SIZEOF_VOID_P@
|
||||||
# if defined __APPLE__
|
#if defined __APPLE__
|
||||||
# if defined __BIG_ENDIAN__
|
# if defined __BIG_ENDIAN__
|
||||||
# define BUILD_WORDS_BIGENDIAN 1
|
# define BUILD_WORDS_BIGENDIAN 1
|
||||||
# else
|
# else
|
||||||
# define BUILD_WORDS_BIGENDIAN 0
|
# define BUILD_WORDS_BIGENDIAN 0
|
||||||
# endif
|
# endif
|
||||||
# else /* !defined __APPLE__ */
|
#else
|
||||||
# define BUILD_WORDS_BIGENDIAN @BUILD_WORDS_BIGENDIAN@
|
#define BUILD_WORDS_BIGENDIAN @BUILD_WORDS_BIGENDIAN@
|
||||||
# endif /* !defined __APPLE__ */
|
#endif
|
||||||
#elif defined (GRUB_UTIL) || !defined (GRUB_MACHINE)
|
#elif defined (GRUB_UTIL) || !defined (GRUB_MACHINE)
|
||||||
# include <config-util.h>
|
#include <config-util.h>
|
||||||
#else /* !defined GRUB_UTIL && defined GRUB_MACHINE */
|
#else
|
||||||
# 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 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. */
|
||||||
# define END_SYMBOL @END_SYMBOL@
|
#define END_SYMBOL @END_SYMBOL@
|
||||||
/* Name of package. */
|
/* Name of package. */
|
||||||
# define PACKAGE "@PACKAGE@"
|
#define PACKAGE "@PACKAGE@"
|
||||||
/* Version number of package. */
|
/* Version number of package. */
|
||||||
# define VERSION "@VERSION@"
|
#define VERSION "@VERSION@"
|
||||||
/* Define to the full name and version of this package. */
|
/* Define to the full name and version of this package. */
|
||||||
# define PACKAGE_STRING "@PACKAGE_STRING@"
|
#define PACKAGE_STRING "@PACKAGE_STRING@"
|
||||||
/* Define to the version of this package. */
|
/* Define to the version of this package. */
|
||||||
# define PACKAGE_VERSION "@PACKAGE_VERSION@"
|
#define PACKAGE_VERSION "@PACKAGE_VERSION@"
|
||||||
/* Define to the full name of this package. */
|
/* Define to the full name of this package. */
|
||||||
# define PACKAGE_NAME "@PACKAGE_NAME@"
|
#define PACKAGE_NAME "@PACKAGE_NAME@"
|
||||||
/* Define to the address where bug reports for this package should be sent. */
|
/* Define to the address where bug reports for this package should be sent. */
|
||||||
# define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@"
|
#define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@"
|
||||||
|
|
||||||
# define GRUB_TARGET_CPU "@GRUB_TARGET_CPU@"
|
#define GRUB_TARGET_CPU "@GRUB_TARGET_CPU@"
|
||||||
# define GRUB_PLATFORM "@GRUB_PLATFORM@"
|
#define GRUB_PLATFORM "@GRUB_PLATFORM@"
|
||||||
|
|
||||||
# define GRUB_STACK_PROTECTOR_INIT @GRUB_STACK_PROTECTOR_INIT@
|
#define RE_ENABLE_I18N 1
|
||||||
|
|
||||||
# define RE_ENABLE_I18N 1
|
#define _GNU_SOURCE 1
|
||||||
|
|
||||||
# define _GNU_SOURCE 1
|
|
||||||
|
|
||||||
# ifndef _GL_INLINE_HEADER_BEGIN
|
|
||||||
/*
|
|
||||||
* gnulib gets configured against the host, not the target, and the rest of
|
|
||||||
* our buildsystem works around that. This is difficult to avoid as gnulib's
|
|
||||||
* detection requires a more capable system than our target. Instead, we
|
|
||||||
* reach in and set values appropriately - intentionally setting more than the
|
|
||||||
* bare minimum. If, when updating gnulib, something breaks, there's probably
|
|
||||||
* a change needed here or in grub-core/Makefile.core.def.
|
|
||||||
*/
|
|
||||||
# define SIZE_MAX ((size_t) -1)
|
|
||||||
# define _GL_ATTRIBUTE_ALLOC_SIZE(args) \
|
|
||||||
__attribute__ ((__alloc_size__ args))
|
|
||||||
# define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__))
|
|
||||||
# define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__))
|
|
||||||
# define _GL_ATTRIBUTE_COLD __attribute__ ((cold))
|
|
||||||
# define _GL_ATTRIBUTE_CONST __attribute__ ((const))
|
|
||||||
# define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute ((__malloc__ (f, i)))
|
|
||||||
# define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1)
|
|
||||||
# define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__))
|
|
||||||
# define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg)))
|
|
||||||
# define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE \
|
|
||||||
__attribute__ ((externally_visible))
|
|
||||||
# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
|
|
||||||
# define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__))
|
|
||||||
# define _GL_ATTRIBUTE_MALLOC __attribute__ ((malloc))
|
|
||||||
# define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED
|
|
||||||
# define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__))
|
|
||||||
# define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__))
|
|
||||||
# define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__))
|
|
||||||
# define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args))
|
|
||||||
# define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__))
|
|
||||||
# define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__))
|
|
||||||
# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
|
|
||||||
# define _GL_ATTRIBUTE_RETURNS_NONNULL \
|
|
||||||
__attribute__ ((__returns_nonnull__))
|
|
||||||
# define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos))
|
|
||||||
# define _GL_ATTRIBUTE_UNUSED __attribute__ ((__unused__))
|
|
||||||
# define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg)))
|
|
||||||
# define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2)))
|
|
||||||
# define _GL_GNUC_PREREQ GNUC_PREREQ
|
|
||||||
# define _GL_INLINE inline
|
|
||||||
# define _GL_UNUSED_LABEL _GL_ATTRIBUTE_UNUSED
|
|
||||||
|
|
||||||
/* We can't use __has_attribute for these because gcc-5.1 is too old for
|
|
||||||
* that. Everything above is present in that version, though. */
|
|
||||||
# if __GNUC__ >= 7
|
|
||||||
# define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((fallthrough))
|
|
||||||
# else
|
|
||||||
# define _GL_ATTRIBUTE_FALLTHROUGH /* empty */
|
|
||||||
# endif
|
|
||||||
|
|
||||||
# ifndef ASM_FILE
|
|
||||||
typedef __INT_FAST32_TYPE__ int_fast32_t;
|
|
||||||
typedef __UINT_FAST32_TYPE__ uint_fast32_t;
|
|
||||||
# endif
|
|
||||||
|
|
||||||
/* Ensure ialloc nests static/non-static inline properly. */
|
|
||||||
# define IALLOC_INLINE static inline
|
|
||||||
|
|
||||||
/*
|
|
||||||
* gnulib uses these for blocking out warnings they can't/won't fix. gnulib
|
|
||||||
* also makes the decision about whether to provide a declaration for
|
|
||||||
* reallocarray() at compile-time, so this is a convenient place to override -
|
|
||||||
* it's used by the ialloc module, which is used by base64.
|
|
||||||
*/
|
|
||||||
# define _GL_INLINE_HEADER_BEGIN _Pragma ("GCC diagnostic push") \
|
|
||||||
void * \
|
|
||||||
reallocarray (void *ptr, unsigned int nmemb, unsigned int size);
|
|
||||||
# define _GL_INLINE_HEADER_END _Pragma ("GCC diagnostic pop")
|
|
||||||
# endif /* !_GL_INLINE_HEADER_BEGIN */
|
|
||||||
|
|
||||||
/* gnulib doesn't build cleanly with older compilers. */
|
|
||||||
# if __GNUC__ < 11
|
|
||||||
_Pragma ("GCC diagnostic ignored \"-Wtype-limits\"")
|
|
||||||
# endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
+223
-472
File diff suppressed because it is too large.
Load diff
+37
-482
@@ -77,9 +77,6 @@ This edition documents version @value{VERSION}.
|
|||||||
* Coding style::
|
* Coding style::
|
||||||
* Finding your way around::
|
* Finding your way around::
|
||||||
* Contributing Changes::
|
* Contributing Changes::
|
||||||
* Setting up and running test suite::
|
|
||||||
* Updating External Code::
|
|
||||||
* Debugging::
|
|
||||||
* Porting::
|
* Porting::
|
||||||
* Error Handling::
|
* Error Handling::
|
||||||
* Stack and heap size::
|
* Stack and heap size::
|
||||||
@@ -87,8 +84,6 @@ This edition documents version @value{VERSION}.
|
|||||||
* Video Subsystem::
|
* Video Subsystem::
|
||||||
* PFF2 Font File Format::
|
* PFF2 Font File Format::
|
||||||
* Graphical Menu Software Design::
|
* Graphical Menu Software Design::
|
||||||
* Verifiers framework::
|
|
||||||
* Lockdown framework::
|
|
||||||
* Copying This Manual:: Copying This Manual
|
* Copying This Manual:: Copying This Manual
|
||||||
* Index::
|
* Index::
|
||||||
@end menu
|
@end menu
|
||||||
@@ -97,8 +92,8 @@ This edition documents version @value{VERSION}.
|
|||||||
@node Getting the source code
|
@node Getting the source code
|
||||||
@chapter Getting the source code
|
@chapter Getting the source code
|
||||||
|
|
||||||
GRUB is maintained using the @uref{https://git-scm.com/book/en/v2,
|
GRUB is maintained using the @uref{GIT revision
|
||||||
GIT revision control system}. To fetch:
|
control system}. To fetch:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
git clone git://git.sv.gnu.org/grub.git
|
git clone git://git.sv.gnu.org/grub.git
|
||||||
@@ -186,44 +181,38 @@ If a macro is global, its name must be prefixed with GRUB_ and must consist of o
|
|||||||
@section Comments
|
@section Comments
|
||||||
|
|
||||||
All comments shall be C-style comments, of the form @samp{/* @dots{} */}.
|
All comments shall be C-style comments, of the form @samp{/* @dots{} */}.
|
||||||
A comment can be placed immediately preceding the entity it describes or it
|
|
||||||
can be placed together with code, variable declarations, or other non-comment
|
Comments shall be placed only on a line by themselves. They shall not be placed together with code, variable declarations, or other non-comment entities. A comment should be placed immediately preceding the entity it describes.
|
||||||
entities. However, it is recommended to not mix various forms especially in
|
|
||||||
types/structs descriptions.
|
|
||||||
|
|
||||||
Acceptable:
|
Acceptable:
|
||||||
@example
|
@example
|
||||||
/* The page # that is the front buffer. */
|
/* The page # that is the front buffer. */
|
||||||
int displayed_page;
|
int displayed_page;
|
||||||
|
/* The page # that is the back buffer. */
|
||||||
|
int render_page;
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
Unacceptable:
|
||||||
@example
|
@example
|
||||||
int render_page; /* The page # that is the back buffer. */
|
int displayed_page; /* The page # that is the front buffer. */
|
||||||
|
int render_page; /* The page # that is the back buffer. */
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@node Multi-Line Comments
|
@node Multi-Line Comments
|
||||||
@section Multi-Line Comments
|
@section Multi-Line Comments
|
||||||
|
|
||||||
Comments spanning multiple lines shall be formatted with all lines after the
|
Comments spanning multiple lines shall be formatted with all lines after the first aligned with the first line.
|
||||||
first aligned with the first line. Asterisk characters should be repeated at
|
|
||||||
the start of each subsequent line.
|
Asterisk characters should not be repeated a the start of each subsequent line.
|
||||||
|
|
||||||
Acceptable:
|
Acceptable:
|
||||||
@example
|
@example
|
||||||
/*
|
/* This is a comment
|
||||||
* This is a comment
|
which spans multiple lines.
|
||||||
* which spans multiple lines.
|
It is long. */
|
||||||
* It is long.
|
|
||||||
*/
|
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
Unacceptable:
|
Unacceptable:
|
||||||
@example
|
|
||||||
/* This is a comment
|
|
||||||
which spans multiple lines.
|
|
||||||
It is long. */
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@example
|
@example
|
||||||
/*
|
/*
|
||||||
* This is a comment
|
* This is a comment
|
||||||
@@ -231,16 +220,7 @@ Unacceptable:
|
|||||||
* It is long. */
|
* It is long. */
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
@example
|
The opening @samp{/*} and closing @samp{*/} should be placed together on a line with text.
|
||||||
/* This is a comment
|
|
||||||
* which spans multiple lines.
|
|
||||||
* It is long.
|
|
||||||
*/
|
|
||||||
@end example
|
|
||||||
|
|
||||||
In particular first unacceptable form makes comment difficult to distinguish
|
|
||||||
from the code itself. Especially if it contains the code snippets and/or is
|
|
||||||
long. So, its usage is disallowed.
|
|
||||||
|
|
||||||
@node Finding your way around
|
@node Finding your way around
|
||||||
@chapter Finding your way around
|
@chapter Finding your way around
|
||||||
@@ -347,8 +327,8 @@ manual and try GRUB 2 out to see what you think is missing from there.
|
|||||||
|
|
||||||
Here are additional pointers:
|
Here are additional pointers:
|
||||||
@itemize
|
@itemize
|
||||||
@item @uref{https://savannah.gnu.org/task/?group=grub, GRUB's Task Tracker}
|
@item @url{https://savannah.gnu.org/task/?group=grub GRUB's Task Tracker}
|
||||||
@item @uref{https://savannah.gnu.org/bugs/?group=grub, GRUB's Bug Tracker}
|
@item @url{https://savannah.gnu.org/bugs/?group=grub GRUB's Bug Tracker}
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
If you intended to make changes to GRUB Legacy (<=0.97) those are not accepted
|
If you intended to make changes to GRUB Legacy (<=0.97) those are not accepted
|
||||||
@@ -462,7 +442,7 @@ and the FSF clerks have dealt with your copyright assignment.
|
|||||||
@section When you are approved for write access to project's files
|
@section When you are approved for write access to project's files
|
||||||
|
|
||||||
As you might know, GRUB is hosted on
|
As you might know, GRUB is hosted on
|
||||||
@uref{https://savannah.gnu.org/projects/grub, Savannah}, thus the membership
|
@url{https://savannah.gnu.org/projects/grub Savannah}, thus the membership
|
||||||
is managed by Savannah. This means that, if you want to be a member of this
|
is managed by Savannah. This means that, if you want to be a member of this
|
||||||
project:
|
project:
|
||||||
|
|
||||||
@@ -485,345 +465,6 @@ If your intention is to just get started, please do not submit a inclusion
|
|||||||
request. Instead, please subscribe to the mailing list, and communicate first
|
request. Instead, please subscribe to the mailing list, and communicate first
|
||||||
(e.g. sending a patch, asking a question, commenting on another message...).
|
(e.g. sending a patch, asking a question, commenting on another message...).
|
||||||
|
|
||||||
@node Setting up and running test suite
|
|
||||||
@chapter Setting up and running test suite
|
|
||||||
|
|
||||||
GRUB is basically a tiny operating system with read support for many file
|
|
||||||
systems and which has been ported to a variety of architectures. As such, its
|
|
||||||
test suite has quite a few dependencies required to fully run the suite.
|
|
||||||
These dependencies are currently documented in the
|
|
||||||
@uref{https://git.savannah.gnu.org/cgit/grub.git/tree/INSTALL, INSTALL}
|
|
||||||
file in the source repository. Once installed, the test suite can be started
|
|
||||||
by running the @command{make check} command from the GRUB build directory.
|
|
||||||
|
|
||||||
@node Updating External Code
|
|
||||||
@chapter Updating external code
|
|
||||||
|
|
||||||
GRUB includes some code from other projects, and it is sometimes necessary
|
|
||||||
to update it.
|
|
||||||
|
|
||||||
@menu
|
|
||||||
* Gnulib::
|
|
||||||
* jsmn::
|
|
||||||
* minilzo::
|
|
||||||
@end menu
|
|
||||||
|
|
||||||
@node Gnulib
|
|
||||||
@section Gnulib
|
|
||||||
|
|
||||||
Gnulib is a source code library that provides basic functionality to
|
|
||||||
programs and libraries. Many software packages make use of Gnulib
|
|
||||||
to avoid reinventing the portability wheel.
|
|
||||||
|
|
||||||
GRUB imports Gnulib using its @command{bootstrap} utility, identifying a
|
|
||||||
particular Git commit in @file{bootstrap.conf}. To upgrade to a new Gnulib
|
|
||||||
commit, set @code{GNULIB_REVISION} in @file{bootstrap.conf} to the new commit
|
|
||||||
ID, then run @kbd{./bootstrap} and whatever else you need to make sure it
|
|
||||||
works. Check for changes to Gnulib's @file{NEWS} file between the old and new
|
|
||||||
commits; in some cases it will be necessary to adjust GRUB to match. You may
|
|
||||||
also need to update the patches in @file{grub-core/lib/gnulib-patches/}.
|
|
||||||
|
|
||||||
To add a new Gnulib module or remove one that is no longer needed, change
|
|
||||||
@code{gnulib_modules} in @file{bootstrap.conf}. Again, run @kbd{./bootstrap}
|
|
||||||
and whatever else you need to make sure it works.
|
|
||||||
|
|
||||||
Bootstrapping from an older distribution containing gettext version < 0.18.3,
|
|
||||||
will require a patch similar to this to be applied first before running the
|
|
||||||
@command{./bootstrap} utility:
|
|
||||||
|
|
||||||
@example
|
|
||||||
diff --git a/bootstrap.conf b/bootstrap.conf
|
|
||||||
index 988dda0..a3193a9 100644
|
|
||||||
--- a/bootstrap.conf
|
|
||||||
+++ b/bootstrap.conf
|
|
||||||
@@ -67,7 +67,7 @@ SKIP_PO=t
|
|
||||||
buildreq="\
|
|
||||||
autoconf 2.63
|
|
||||||
automake 1.11
|
|
||||||
-gettext 0.18.3
|
|
||||||
+gettext 0.17
|
|
||||||
git 1.5.5
|
|
||||||
tar -
|
|
||||||
"
|
|
||||||
diff --git a/configure.ac b/configure.ac
|
|
||||||
index 08b518f..99f5b36 100644
|
|
||||||
--- a/configure.ac
|
|
||||||
+++ b/configure.ac
|
|
||||||
@@ -362,7 +362,7 @@ AC_CHECK_PROG(HAVE_CXX, $CXX, yes, no)
|
|
||||||
|
|
||||||
AC_GNU_SOURCE
|
|
||||||
AM_GNU_GETTEXT([external])
|
|
||||||
-AM_GNU_GETTEXT_VERSION([0.18.3])
|
|
||||||
+AM_GNU_GETTEXT_VERSION([0.17])
|
|
||||||
AC_SYS_LARGEFILE
|
|
||||||
|
|
||||||
# Identify characteristics of the host architecture.
|
|
||||||
|
|
||||||
@end example
|
|
||||||
|
|
||||||
It will also be necessary to adjust the patches in
|
|
||||||
@file{po/gettext-patches/} to apply to an older version of gettext.
|
|
||||||
|
|
||||||
@node jsmn
|
|
||||||
@section jsmn
|
|
||||||
|
|
||||||
jsmn is a minimalistic JSON parser which is implemented in a single header file
|
|
||||||
@file{jsmn.h}. To import a different version of the jsmn parser, you may simply
|
|
||||||
download the @file{jsmn.h} header from the desired tag or commit to the target
|
|
||||||
directory:
|
|
||||||
|
|
||||||
@example
|
|
||||||
curl -L https://raw.githubusercontent.com/zserge/jsmn/v1.1.0/jsmn.h \
|
|
||||||
-o grub-core/lib/json/jsmn.h
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@node minilzo
|
|
||||||
@section minilzo
|
|
||||||
|
|
||||||
miniLZO is a very lightweight subset of the LZO library intended for easy
|
|
||||||
inclusion in other projects. It is generated automatically from the LZO
|
|
||||||
source code and contains the most important LZO functions.
|
|
||||||
|
|
||||||
To upgrade to a new version of the miniLZO library, download the release
|
|
||||||
tarball and copy the files into the target directory:
|
|
||||||
|
|
||||||
@example
|
|
||||||
curl -L -O https://www.oberhumer.com/opensource/lzo/download/minilzo-2.10.tar.gz
|
|
||||||
tar -zxf minilzo-2.10.tar.gz
|
|
||||||
rm minilzo-2.10/testmini.c
|
|
||||||
rm -r grub-core/lib/minilzo/*
|
|
||||||
cp minilzo-2.10/*.[hc] grub-core/lib/minilzo
|
|
||||||
rm -r minilzo-2.10*
|
|
||||||
@end example
|
|
||||||
|
|
||||||
@node Debugging
|
|
||||||
@chapter Debugging
|
|
||||||
|
|
||||||
GRUB2 can be difficult to debug because it runs on the bare-metal and thus
|
|
||||||
does not have the debugging facilities normally provided by an operating
|
|
||||||
system. This chapter aims to provide useful information on some ways to
|
|
||||||
debug GRUB2 for some architectures. It by no means intends to be exhaustive.
|
|
||||||
The focus will be one x86_64 and i386 architectures. Luckily for some issues
|
|
||||||
virtual machines have made the ability to debug GRUB2 much easier, and this
|
|
||||||
chapter will focus debugging via the QEMU virtual machine. We will not be
|
|
||||||
going over debugging of the userland tools (eg. grub-install), there are
|
|
||||||
many tutorials on debugging programs in userland.
|
|
||||||
|
|
||||||
You will need GDB and the QEMU binaries for your system, on Debian these
|
|
||||||
can be installed with the @samp{gdb} and @samp{qemu-system-x86} packages.
|
|
||||||
Also it is assumed that you have already successfully compiled GRUB2 from
|
|
||||||
source for the target specified in the section below and have some
|
|
||||||
familiarity with GDB. When GRUB2 is built it will create many different
|
|
||||||
binaries. The ones of concern will be in the @file{grub-core}
|
|
||||||
directory of the GRUB2 build dir. To aide in debugging we will want the
|
|
||||||
debugging symbols generated during the build because these symbols are not
|
|
||||||
kept in the binaries which get installed to the boot location. The build
|
|
||||||
process outputs two sets of binaries, one without symbols which gets executed
|
|
||||||
at boot, and another set of ELF images with debugging symbols. The built
|
|
||||||
images with debugging symbols will have a @file{.image} suffix, and the ones
|
|
||||||
without a @file{.img} suffix. Similarly, loadable modules with debugging
|
|
||||||
symbols will have a @file{.module} suffix, and ones without a @file{.mod}
|
|
||||||
suffix. In the case of the kernel the binary with symbols is named
|
|
||||||
@file{kernel.exec}.
|
|
||||||
|
|
||||||
In the following sections, information will be provided on debugging on
|
|
||||||
various targets using @command{gdb} and the @samp{gdb_grub} GDB script.
|
|
||||||
|
|
||||||
@menu
|
|
||||||
* i386-pc::
|
|
||||||
* x86_64-efi::
|
|
||||||
@end menu
|
|
||||||
|
|
||||||
@node i386-pc
|
|
||||||
@section i386-pc
|
|
||||||
|
|
||||||
The i386-pc target is a good place to start when first debugging GRUB2
|
|
||||||
because in some respects it's easier than EFI platforms. The reason being
|
|
||||||
that the initial load address is always known in advance. To start
|
|
||||||
debugging GRUB2 first QEMU must be started in GDB stub mode. The following
|
|
||||||
command is a simple illustration:
|
|
||||||
|
|
||||||
@example
|
|
||||||
qemu-system-i386 -drive file=disk.img,format=raw \
|
|
||||||
-device virtio-scsi-pci,id=scsi0 -S -s
|
|
||||||
@end example
|
|
||||||
|
|
||||||
This will start a QEMU instance booting from @file{disk.img}. It will pause
|
|
||||||
at start waiting for a GDB instance to attach to it. You should change
|
|
||||||
@file{disk.img} to something more appropriate. A block device can be used,
|
|
||||||
but you may need to run QEMU as a privileged user.
|
|
||||||
|
|
||||||
To connect to this QEMU instance with GDB, the @code{target remote} GDB
|
|
||||||
command must be used. We also need to load a binary image, preferably with
|
|
||||||
symbols. This can be done using the GDB command @code{file kernel.exec}, if
|
|
||||||
GDB is started from the @file{grub-core} directory in the GRUB2 build
|
|
||||||
directory. GRUB2 developers have made this more simple by including a GDB
|
|
||||||
script which does much of the setup. This file is at @file{grub-core/gdb_grub}
|
|
||||||
in the build directory and is also installed via @command{make install}.
|
|
||||||
When using a pre-built GRUB, the distribution may have a package which installs
|
|
||||||
this GDB script along with debug symbol binaries, such as Debian's
|
|
||||||
@samp{grub-pc-dbg} package. The GDB script is intended to be used
|
|
||||||
like so, assuming that @samp{/path/to/script} is the path to the directory
|
|
||||||
containing the gdb_grub script and debug symbol files:
|
|
||||||
|
|
||||||
@example
|
|
||||||
cd $(dirname /path/to/script/gdb_grub)
|
|
||||||
gdb -x gdb_grub
|
|
||||||
@end example
|
|
||||||
|
|
||||||
Once GDB has been started with the @file{gdb_grub} script it will
|
|
||||||
automatically connect to the QEMU instance. You can then do things you
|
|
||||||
normally would in GDB like set a break point on @var{grub_main}.
|
|
||||||
|
|
||||||
Setting breakpoints in modules is trickier since they haven't been loaded
|
|
||||||
yet and are loaded at addresses determined at runtime. The module could be
|
|
||||||
loaded to different addresses in different QEMU instances. The debug symbols
|
|
||||||
in the modules @file{.module} binary, thus are always wrong, and GDB needs
|
|
||||||
to be told where to load the symbols to. But this must happen at runtime
|
|
||||||
after GRUB2 has determined where the module will get loaded. Luckily the
|
|
||||||
@file{gdb_grub} script takes care of this with the @command{runtime_load_module}
|
|
||||||
command, which configures GDB to watch for GRUB2 module loading and when
|
|
||||||
it does add the module symbols with the appropriate offset.
|
|
||||||
|
|
||||||
@node x86_64-efi
|
|
||||||
@section x86_64-efi
|
|
||||||
|
|
||||||
Using GDB to debug GRUB2 for the x86_64-efi target has some similarities with
|
|
||||||
the i386-pc target. Please read and familiarize yourself with the @ref{i386-pc}
|
|
||||||
section when reading this one. Extra care must be used to run QEMU such that it
|
|
||||||
boots a UEFI firmware. This usually involves either using the @samp{-bios}
|
|
||||||
option with a UEFI firmware blob (eg. @file{OVMF.fd}) or loading the firmware
|
|
||||||
via pflash. This document will not go further into how to do this as there are
|
|
||||||
ample resource on the web.
|
|
||||||
|
|
||||||
Like all EFI implementations, on x86_64-efi the (U)EFI firmware that loads
|
|
||||||
the GRUB2 EFI application determines at runtime where the application will
|
|
||||||
be loaded. This means that we do not know where to tell GDB to load the
|
|
||||||
symbols for the GRUB2 core until the (U)EFI firmware determines it. There are
|
|
||||||
two good ways of figuring this out when running in QEMU: use a @ref{OVMF debug log,
|
|
||||||
debug build of OVMF} and check the debug log, or have GRUB2 say where it is
|
|
||||||
loaded. Neither of these are ideal because they both generally give the
|
|
||||||
information after GRUB2 is already running, which makes debugging early boot
|
|
||||||
infeasible. Technically, the first method does give the load address before
|
|
||||||
GRUB2 is run, but without debugging the EFI firmware with symbols, the author
|
|
||||||
currently does not know how to cause the OVMF firmware to pause at that point
|
|
||||||
to use the load address before GRUB2 is run.
|
|
||||||
|
|
||||||
Even after getting the application load address, the loading of core symbols
|
|
||||||
is complicated by the fact that the debugging symbols for the kernel are in
|
|
||||||
an ELF binary named @file{kernel.exec} while what is in memory are sections
|
|
||||||
for the PE32+ EFI binary. When @command{grub-mkimage} creates the PE32+
|
|
||||||
binary it condenses several segments from the ELF kernel binary into one
|
|
||||||
.data section in the PE32+ binary. This must be taken into account to
|
|
||||||
properly load the other non-text sections. Otherwise, GDB will work as
|
|
||||||
expected when breaking on functions, but, for instance, global variables
|
|
||||||
will point to the wrong address in memory and thus give incorrect values
|
|
||||||
(which can be difficult to debug).
|
|
||||||
|
|
||||||
Calculating the correct offsets for sections is taken care of automatically
|
|
||||||
when loading the kernel symbols via the user-defined GDB command
|
|
||||||
@command{dynamic_load_kernel_exec_symbols}, which takes one argument, the
|
|
||||||
address where the text section is loaded as determined by one of the methods
|
|
||||||
above. Alternatively, the command @command{dynamic_load_symbols} with the text
|
|
||||||
section address as an agrument can be called to load the kernel symbols and set
|
|
||||||
up loading the module symbols as they are loaded at runtime.
|
|
||||||
|
|
||||||
In the author's experience, when debugging with QEMU and OVMF, to have
|
|
||||||
debugging symbols loaded at the start of GRUB2 execution the GRUB2 EFI
|
|
||||||
application must be run via QEMU at least once prior in order to get the
|
|
||||||
load address. Two methods for obtaining the load address are described in
|
|
||||||
two subsections below. Generally speaking, the load address does not change
|
|
||||||
between QEMU runs. There are exceptions to this, namely that different
|
|
||||||
GRUB2 EFI applications can be run at different addresses. Also, it has been
|
|
||||||
observed that after running the EFI application for the first time, the
|
|
||||||
second run will sometimes have a different load address, but subsequent
|
|
||||||
runs of the same EFI application will have the same load address as the
|
|
||||||
second run. And it's a near certainty that if the GRUB EFI binary has changed,
|
|
||||||
eg. been recompiled, the load address will also be different.
|
|
||||||
|
|
||||||
This ability to predict what the load address will be allows one to assume
|
|
||||||
the load address on subsequent runs and thus load the symbols before GRUB2
|
|
||||||
starts. The following command illustrates this, assuming that QEMU is
|
|
||||||
running and waiting for a debugger connection and the current working
|
|
||||||
directory is where @file{gdb_grub} resides:
|
|
||||||
|
|
||||||
@example
|
|
||||||
gdb -x gdb_grub -ex 'dynamic_load_symbols @var{address of .text section}'
|
|
||||||
@end example
|
|
||||||
|
|
||||||
If you load the symbols in this manner and, after continuing execution, do
|
|
||||||
not see output showing the module symbols loading, then it is very likely
|
|
||||||
that the load address was incorrect.
|
|
||||||
|
|
||||||
Another thing to be aware of is how the loading of the GRUB image by the
|
|
||||||
firmware affects previously set software breakpoints. On x86 platforms,
|
|
||||||
software breakpoints are implemented by GDB by writing a special processor
|
|
||||||
instruction at the location of the desired breakpoint. This special instruction
|
|
||||||
when executed will stop the program execution and hand control to the
|
|
||||||
debugger, GDB. GDB will first save the instruction bytes that are
|
|
||||||
overwritten at the breakpoint and will put them back when the breakpoint
|
|
||||||
is hit. If GRUB is being run for the first time in QEMU, the firmware will
|
|
||||||
be loading the GRUB image into memory where every byte is already set to 0.
|
|
||||||
This means that if a breakpoint is set before GRUB is loaded, GDB will save
|
|
||||||
the 0-byte(s) where the the special instruction will go. Then when the firmware
|
|
||||||
loads the GRUB image and because it is unaware of the debugger, it will
|
|
||||||
write the GRUB image to memory, overwriting anything that was there previously ---
|
|
||||||
notably in this case the instruction that implements the software breakpoint.
|
|
||||||
This will be confusing for the person using GDB because GDB will show the
|
|
||||||
breakpoint as set, but the brekapoint will never be hit. Furthermore, GDB
|
|
||||||
then becomes confused, such that even deleting an recreating the breakpoint
|
|
||||||
will not create usable breakpoints. The @file{gdb_grub} script takes care of
|
|
||||||
this by saving the breakpoints just before they are overwritten, and then
|
|
||||||
restores them at the start of GRUB execution. So breakpoints for GRUB can be
|
|
||||||
set before GRUB is loaded, but be mindful of this effect if you are confused
|
|
||||||
as to why breakpoints are not getting hit.
|
|
||||||
|
|
||||||
Also note, that hardware breakpoints do not suffer this problem. They are
|
|
||||||
implemented by having the breakpoint address in special debug registers on
|
|
||||||
the CPU. So they can always be set freely without regard to whether GRUB has
|
|
||||||
been loaded or not. The reason that hardware breakpoints aren't always used
|
|
||||||
is because there are a limited number of them, usually around 4 on various
|
|
||||||
CPUs, and specifically exactly 4 for x86 CPUs. The @file{gdb_grub} script goes
|
|
||||||
out of its way to avoid using hardware breakpoints internally and uses them as
|
|
||||||
briefly as possible when needed, thus allowing the user to have a maximal
|
|
||||||
number at their disposal.
|
|
||||||
|
|
||||||
@menu
|
|
||||||
* OVMF debug log::
|
|
||||||
* Using the gdbinfo command::
|
|
||||||
@end menu
|
|
||||||
|
|
||||||
@node OVMF debug log
|
|
||||||
@subsection OVMF debug log
|
|
||||||
|
|
||||||
In order to get the GRUB2 load address from OVMF, first, a debug build
|
|
||||||
of OVMF must be obtained (@uref{https://github.com/retrage/edk2-nightly/raw/master/bin/DEBUGX64_OVMF.fd,
|
|
||||||
here is one} which is not officially recommended). OVMF will output debug
|
|
||||||
messages to a special serial device, which we must add to QEMU. The following
|
|
||||||
QEMU command will run the debug OVMF and write the debug messages to a
|
|
||||||
file named @file{debug.log}. It is assumed that @file{disk.img} is a disk
|
|
||||||
image or block device that is set up to boot GRUB2 EFI.
|
|
||||||
|
|
||||||
@example
|
|
||||||
qemu-system-x86_64 -bios /path/to/debug/OVMF.fd \
|
|
||||||
-drive file=disk.img,format=raw \
|
|
||||||
-device virtio-scsi-pci,id=scsi0 \
|
|
||||||
-debugcon file:debug.log -global isa-debugcon.iobase=0x402
|
|
||||||
@end example
|
|
||||||
|
|
||||||
If GRUB2 was started by the (U)EFI firmware, then in the @file{debug.log}
|
|
||||||
file one of the last lines should be a log message like:
|
|
||||||
@samp{Loading driver at 0x00006AEE000 EntryPoint=0x00006AEE756}. This
|
|
||||||
means that the GRUB2 EFI application was loaded at @samp{0x00006AEE000} and
|
|
||||||
its .text section is at @samp{0x00006AEE756}.
|
|
||||||
|
|
||||||
@node Using the gdbinfo command
|
|
||||||
@subsection Using the gdbinfo command
|
|
||||||
|
|
||||||
On EFI platforms the command @command{gdbinfo} will output a string that
|
|
||||||
is to be run in a GDB session running with the @file{gdb_grub} GDB script.
|
|
||||||
|
|
||||||
|
|
||||||
@node Porting
|
@node Porting
|
||||||
@chapter Porting
|
@chapter Porting
|
||||||
|
|
||||||
@@ -1001,7 +642,7 @@ void grub_arch_sync_caches (void *address, grub_size_t len) (cache.S). They
|
|||||||
won't be used for now.
|
won't be used for now.
|
||||||
|
|
||||||
You will need to create directory include/$cpu/$platform and a file
|
You will need to create directory include/$cpu/$platform and a file
|
||||||
include/$cpu/types.h. The latter following this template:
|
include/$cpu/types.h. The later folowing this template:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
#ifndef GRUB_TYPES_CPU_HEADER
|
#ifndef GRUB_TYPES_CPU_HEADER
|
||||||
@@ -1030,7 +671,7 @@ is already present and you'll need to make it follow the existant code paths
|
|||||||
for your platform adding adjustments if necessary. When done compile:
|
for your platform adding adjustments if necessary. When done compile:
|
||||||
|
|
||||||
@example
|
@example
|
||||||
./bootstrap
|
./autogen.sh
|
||||||
./configure --target=$cpu --with-platform=$platform TARGET_CC=.. OBJCOPY=... STRIP=...
|
./configure --target=$cpu --with-platform=$platform TARGET_CC=.. OBJCOPY=... STRIP=...
|
||||||
make > /dev/null
|
make > /dev/null
|
||||||
@end example
|
@end example
|
||||||
@@ -1047,13 +688,13 @@ If it works next stage is to have heap, console and timer.
|
|||||||
|
|
||||||
To have the heap working you need to determine which regions are suitable for
|
To have the heap working you need to determine which regions are suitable for
|
||||||
heap usage, allocate them from firmware and map (if applicable). Then call
|
heap usage, allocate them from firmware and map (if applicable). Then call
|
||||||
grub_mm_init_region (void *start, grub_size_t s) for every of this region.
|
grub_mm_init_region (vois *start, grub_size_t s) for every of this region.
|
||||||
As a shortcut for early port you can allocate right after _end or have
|
As a shortcut for early port you can allocate right after _end or have
|
||||||
a big static array for heap. If you do you'll probably need to come back to
|
a big static array for heap. If you do you'll probably need to come back to
|
||||||
this later. As for output console you should distinguish between an array of
|
this later. As for output console you should distinguish between an array of
|
||||||
text, terminfo or graphics-based console. Many of real-world examples don't
|
text, terminfo or graphics-based console. Many of real-world examples don't
|
||||||
fit perfectly into any of these categories but one of the models is easier
|
fit perfectly into any of these categories but one of the models is easier
|
||||||
to be used as base. In second and third case you should add your platform to
|
to be used as base. In second and third case you should add your platform to
|
||||||
terminfokernel respectively videoinkernel group. A good example of array of
|
terminfokernel respectively videoinkernel group. A good example of array of
|
||||||
text is i386-pc (kern/i386/pc/init.c and term/i386/pc/console.c).
|
text is i386-pc (kern/i386/pc/init.c and term/i386/pc/console.c).
|
||||||
Of terminfo is ieee1275 (kern/ieee1275/init.c and term/ieee1275/console.c).
|
Of terminfo is ieee1275 (kern/ieee1275/init.c and term/ieee1275/console.c).
|
||||||
@@ -1061,7 +702,7 @@ Of video is loongson (kern/mips/loongson/init.c). Note that terminfo has
|
|||||||
to be inited in 2 stages: one before (to get at least rudimentary console
|
to be inited in 2 stages: one before (to get at least rudimentary console
|
||||||
as early as possible) and another after the heap (to get full-featured console).
|
as early as possible) and another after the heap (to get full-featured console).
|
||||||
For the input there are string of keys, terminfo and direct hardware. For string
|
For the input there are string of keys, terminfo and direct hardware. For string
|
||||||
of keys look at i386-pc (same files), for terminfo ieee1275 (same files) and for
|
of keys look at i386-pc (same files), for termino ieee1275 (same files) and for
|
||||||
hardware loongson (kern/mips/loongson/init.c and term/at_keyboard.c).
|
hardware loongson (kern/mips/loongson/init.c and term/at_keyboard.c).
|
||||||
|
|
||||||
For the timer you'll need to call grub_install_get_time_ms (...) with as sole
|
For the timer you'll need to call grub_install_get_time_ms (...) with as sole
|
||||||
@@ -1275,23 +916,20 @@ On emu stack and heap are just normal host OS stack and heap. Stack is typically
|
|||||||
On i386-pc, i386-coreboot, i386-qemu and i386-multiboot the stack is 60KiB.
|
On i386-pc, i386-coreboot, i386-qemu and i386-multiboot the stack is 60KiB.
|
||||||
All available space between 1MiB and 4GiB marks is part of heap.
|
All available space between 1MiB and 4GiB marks is part of heap.
|
||||||
|
|
||||||
On *-xen stack is 4MiB. If compiled for x86-64 with GCC 4.4 or later addressable
|
On *-xen stack is 4MiB. If compiled for x86-64 with GCC 4.4 or later adressable
|
||||||
space is unlimited. When compiled for x86-64 with older GCC version addressable
|
space is unlimited. When compiled for x86-64 with older GCC version adressable
|
||||||
space is limited to 2GiB. When compiling for i386 addressable space is limited
|
space is limited to 2GiB. When compiling for i386 adressable space is limited
|
||||||
to 4GiB. All addressable pages except the ones for stack, GRUB binary, special
|
to 4GiB. All adressable pages except the ones for stack, GRUB binary, special
|
||||||
pages and page table are in the heap.
|
pages and page table are in the heap.
|
||||||
|
|
||||||
On *-efi GRUB uses same stack as EFI. If compiled for x86-64 with GCC 4.4 or
|
On *-efi GRUB uses same stack as EFI. If compiled for x86-64 with GCC 4.4 or
|
||||||
later addressable space is unlimited. When compiled for x86-64 with older GCC
|
later adressable space is unlimited. When compiled for x86-64 with older GCC
|
||||||
version addressable space is limited to 2GiB. For all other platforms addressable
|
version adressable space is limited to 2GiB. For all other platforms adressable
|
||||||
space is limited to 4GiB. GRUB allocates pages from EFI for its heap, at most
|
space is limited to 4GiB. GRUB allocates pages from EFI for its heap, at most
|
||||||
1.6 GiB.
|
1.6 GiB.
|
||||||
|
|
||||||
On i386-ieee1275 and powerpc-ieee1275 GRUB uses same stack as IEEE1275.
|
On i386-ieee1275 and powerpc-ieee1275 GRUB uses same stack as IEEE1275.
|
||||||
|
It allocates at most 32MiB for its heap.
|
||||||
On i386-ieee1275 and powerpc-ieee1275, GRUB will allocate 32MiB for its heap on
|
|
||||||
startup. It may allocate more at runtime, as long as at least 128MiB remain free
|
|
||||||
in OpenFirmware.
|
|
||||||
|
|
||||||
On sparc64-ieee1275 stack is 256KiB and heap is 2MiB.
|
On sparc64-ieee1275 stack is 256KiB and heap is 2MiB.
|
||||||
|
|
||||||
@@ -1319,7 +957,7 @@ In short:
|
|||||||
@item i386-qemu @tab 60 KiB @tab < 4 GiB
|
@item i386-qemu @tab 60 KiB @tab < 4 GiB
|
||||||
@item *-efi @tab ? @tab < 1.6 GiB
|
@item *-efi @tab ? @tab < 1.6 GiB
|
||||||
@item i386-ieee1275 @tab ? @tab < 32 MiB
|
@item i386-ieee1275 @tab ? @tab < 32 MiB
|
||||||
@item powerpc-ieee1275 @tab ? @tab available memory - 128MiB
|
@item powerpc-ieee1275 @tab ? @tab < 32 MiB
|
||||||
@item sparc64-ieee1275 @tab 256KiB @tab 2 MiB
|
@item sparc64-ieee1275 @tab 256KiB @tab 2 MiB
|
||||||
@item arm-uboot @tab 256KiB @tab 2 MiB
|
@item arm-uboot @tab 256KiB @tab 2 MiB
|
||||||
@item mips(el)-qemu_mips @tab 2MiB @tab 253 MiB
|
@item mips(el)-qemu_mips @tab 2MiB @tab 253 MiB
|
||||||
@@ -2013,7 +1651,7 @@ use in GRUB at this time:
|
|||||||
@item BDF
|
@item BDF
|
||||||
Inefficient storage; uses ASCII to describe properties and
|
Inefficient storage; uses ASCII to describe properties and
|
||||||
hexadecimal numbers in ASCII for the bitmap rows.
|
hexadecimal numbers in ASCII for the bitmap rows.
|
||||||
@item PCF
|
@item PCF
|
||||||
Many format variations such as byte order and bitmap padding (rows
|
Many format variations such as byte order and bitmap padding (rows
|
||||||
padded to byte, word, etc.) would result in more complex code to
|
padded to byte, word, etc.) would result in more complex code to
|
||||||
handle the font format.
|
handle the font format.
|
||||||
@@ -2134,8 +1772,8 @@ bit in the byte. For the sake of compact storage, rows are not padded
|
|||||||
to byte boundaries (i.e., a single byte may contain bits belonging to
|
to byte boundaries (i.e., a single byte may contain bits belonging to
|
||||||
multiple rows). The last byte of the bitmap @strong{is} padded with zero
|
multiple rows). The last byte of the bitmap @strong{is} padded with zero
|
||||||
bits in the bits positions to the right of the last used bit if the
|
bits in the bits positions to the right of the last used bit if the
|
||||||
bitmap data does not fill the last byte.
|
bitmap data does not fill the last byte.
|
||||||
|
|
||||||
The length of the @strong{bitmap data} field is (@var{width} * @var{height} + 7) / 8
|
The length of the @strong{bitmap data} field is (@var{width} * @var{height} + 7) / 8
|
||||||
using integer arithmetic, which is equivalent to ceil(@var{width} *
|
using integer arithmetic, which is equivalent to ceil(@var{width} *
|
||||||
@var{height} / 8) using real number arithmetic.
|
@var{height} / 8) using real number arithmetic.
|
||||||
@@ -2280,7 +1918,7 @@ functions (defined in @file{gfxmenu/gui_util.c}) that are particularly useful:
|
|||||||
|
|
||||||
@item @code{grub_gui_find_by_id (root, id, callback, userdata)}:
|
@item @code{grub_gui_find_by_id (root, id, callback, userdata)}:
|
||||||
|
|
||||||
This function recursively traverses the component tree rooted at @var{root}, and
|
This function ecursively traverses the component tree rooted at @var{root}, and
|
||||||
for every component that has an ID equal to @var{id}, calls the function pointed
|
for every component that has an ID equal to @var{id}, calls the function pointed
|
||||||
to by @var{callback} with the matching component and the void pointer @var{userdata}
|
to by @var{callback} with the matching component and the void pointer @var{userdata}
|
||||||
as arguments. The callback function can do whatever is desired to use the
|
as arguments. The callback function can do whatever is desired to use the
|
||||||
@@ -2311,89 +1949,6 @@ the graphics mode that was in use before @code{grub_video_setup()} was called
|
|||||||
might fix some of the problems.
|
might fix some of the problems.
|
||||||
|
|
||||||
|
|
||||||
@node Verifiers framework
|
|
||||||
@chapter Verifiers framework
|
|
||||||
|
|
||||||
To register your own verifier call @samp{grub_verifier_register} with a structure
|
|
||||||
pointing to your functions.
|
|
||||||
|
|
||||||
The interface is inspired by the hash interface with @samp{init}/@samp{write}/@samp{fini}.
|
|
||||||
|
|
||||||
There are essentially 2 ways of using it, hashing and whole-file verification.
|
|
||||||
|
|
||||||
With the hashing approach:
|
|
||||||
During @samp{init} you decide whether you want to check the given file and init context.
|
|
||||||
In @samp{write} you update your hashing state.
|
|
||||||
In @samp{fini} you check that the hash matches the expected value/passes some check/...
|
|
||||||
|
|
||||||
With whole-file verification:
|
|
||||||
During @samp{init} you decide whether you want to check the given file and init context.
|
|
||||||
In @samp{write} you verify the file and return an error if it fails.
|
|
||||||
You don't have @samp{fini}.
|
|
||||||
|
|
||||||
Additional @samp{verify_string} receives various strings like kernel parameters
|
|
||||||
to verify. Returning no error means successful verification and an error stops
|
|
||||||
the current action.
|
|
||||||
|
|
||||||
Detailed description of the API:
|
|
||||||
|
|
||||||
Every time a file is opened your @samp{init} function is called with file descriptor
|
|
||||||
and file type. Your function can have the following outcomes:
|
|
||||||
|
|
||||||
@itemize
|
|
||||||
|
|
||||||
@item returning no error and setting @samp{*flags} to @samp{GRUB_VERIFY_FLAGS_DEFER_AUTH}.
|
|
||||||
In this case verification is deferred to other active verifiers. Verification
|
|
||||||
fails if nobody cares or selected verifier fails.
|
|
||||||
|
|
||||||
@item returning no error and setting @samp{*flags} to @samp{GRUB_VERIFY_FLAGS_SKIP_VERIFICATION}.
|
|
||||||
In this case your verifier will not be called anymore and it is assumed to have
|
|
||||||
skipped verification.
|
|
||||||
|
|
||||||
@item returning no error and not setting @samp{*flags} to @samp{GRUB_VERIFY_FLAGS_SKIP_VERIFICATION}
|
|
||||||
In this case verification is done as described in the following section.
|
|
||||||
|
|
||||||
@item returning an error. Then opening of the file will fail due to failed verification.
|
|
||||||
|
|
||||||
@end itemize
|
|
||||||
|
|
||||||
In the third case your @samp{write} will be called with chunks of the file. If
|
|
||||||
you need the whole file in a single chunk then during @samp{init} set the bit
|
|
||||||
@samp{GRUB_VERIFY_FLAGS_SINGLE_CHUNK} in @samp{*flags}. During @samp{init} you
|
|
||||||
may set @samp{*context} if you need additional context. At every iteration you
|
|
||||||
may return an error and the file will be considered as having failed the
|
|
||||||
verification. If you return no error then verification continues.
|
|
||||||
|
|
||||||
Optionally at the end of the file @samp{fini}, if it exists, is called with just
|
|
||||||
the context. If you return no error during any of @samp{init}, @samp{write} and
|
|
||||||
@samp{fini} then the file is considered as having succeded verification.
|
|
||||||
|
|
||||||
@node Lockdown framework
|
|
||||||
@chapter Lockdown framework
|
|
||||||
|
|
||||||
The GRUB can be locked down, which is a restricted mode where some operations
|
|
||||||
are not allowed. For instance, some commands cannot be used when the GRUB is
|
|
||||||
locked down.
|
|
||||||
|
|
||||||
The function
|
|
||||||
@code{grub_lockdown()} is used to lockdown GRUB and the function
|
|
||||||
@code{grub_is_lockdown()} function can be used to check whether lockdown is
|
|
||||||
enabled or not. When enabled, the function returns @samp{GRUB_LOCKDOWN_ENABLED}
|
|
||||||
and @samp{GRUB_LOCKDOWN_DISABLED} when is not enabled.
|
|
||||||
|
|
||||||
The following functions can be used to register the commands that can only be
|
|
||||||
used when lockdown is disabled:
|
|
||||||
|
|
||||||
@itemize
|
|
||||||
|
|
||||||
@item @code{grub_cmd_lockdown()} registers command which should not run when the
|
|
||||||
GRUB is in lockdown mode.
|
|
||||||
|
|
||||||
@item @code{grub_cmd_lockdown()} registers extended command which should not run
|
|
||||||
when the GRUB is in lockdown mode.
|
|
||||||
|
|
||||||
@end itemize
|
|
||||||
|
|
||||||
@node Copying This Manual
|
@node Copying This Manual
|
||||||
@appendix Copying This Manual
|
@appendix Copying This Manual
|
||||||
|
|
||||||
|
|||||||
+309
-1337
File diff suppressed because it is too large.
Load diff
@@ -28,36 +28,30 @@ import re
|
|||||||
|
|
||||||
GRUB_PLATFORMS = [ "emu", "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot",
|
GRUB_PLATFORMS = [ "emu", "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot",
|
||||||
"i386_multiboot", "i386_ieee1275", "x86_64_efi",
|
"i386_multiboot", "i386_ieee1275", "x86_64_efi",
|
||||||
"i386_xen", "x86_64_xen", "i386_xen_pvh",
|
"i386_xen", "x86_64_xen",
|
||||||
"mips_loongson", "sparc64_ieee1275",
|
"mips_loongson", "sparc64_ieee1275",
|
||||||
"powerpc_ieee1275", "mips_arc", "ia64_efi",
|
"powerpc_ieee1275", "mips_arc", "ia64_efi",
|
||||||
"mips_qemu_mips", "arm_uboot", "arm_efi", "arm64_efi",
|
"mips_qemu_mips", "arm_uboot", "arm_efi", "arm64_efi" ]
|
||||||
"arm_coreboot", "loongarch64_efi", "riscv32_efi", "riscv64_efi" ]
|
|
||||||
|
|
||||||
GROUPS = {}
|
GROUPS = {}
|
||||||
|
|
||||||
GROUPS["common"] = GRUB_PLATFORMS[:]
|
GROUPS["common"] = GRUB_PLATFORMS[:]
|
||||||
|
|
||||||
# Groups based on CPU
|
# Groups based on CPU
|
||||||
GROUPS["i386"] = [ "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", "i386_multiboot", "i386_ieee1275" ]
|
GROUPS["i386"] = [ "i386_pc", "i386_efi", "i386_qemu", "i386_coreboot", "i386_multiboot", "i386_ieee1275" ]
|
||||||
GROUPS["x86_64"] = [ "x86_64_efi" ]
|
GROUPS["x86_64"] = [ "x86_64_efi" ]
|
||||||
GROUPS["x86"] = GROUPS["i386"] + GROUPS["x86_64"]
|
GROUPS["x86"] = GROUPS["i386"] + GROUPS["x86_64"]
|
||||||
GROUPS["mips"] = [ "mips_loongson", "mips_qemu_mips", "mips_arc" ]
|
GROUPS["mips"] = [ "mips_loongson", "mips_qemu_mips", "mips_arc" ]
|
||||||
GROUPS["sparc64"] = [ "sparc64_ieee1275" ]
|
GROUPS["sparc64"] = [ "sparc64_ieee1275" ]
|
||||||
GROUPS["powerpc"] = [ "powerpc_ieee1275" ]
|
GROUPS["powerpc"] = [ "powerpc_ieee1275" ]
|
||||||
GROUPS["arm"] = [ "arm_uboot", "arm_efi", "arm_coreboot" ]
|
GROUPS["arm"] = [ "arm_uboot", "arm_efi" ]
|
||||||
GROUPS["arm64"] = [ "arm64_efi" ]
|
GROUPS["arm64"] = [ "arm64_efi" ]
|
||||||
GROUPS["loongarch64"] = [ "loongarch64_efi" ]
|
|
||||||
GROUPS["riscv32"] = [ "riscv32_efi" ]
|
|
||||||
GROUPS["riscv64"] = [ "riscv64_efi" ]
|
|
||||||
|
|
||||||
# Groups based on firmware
|
# Groups based on firmware
|
||||||
GROUPS["efi"] = [ "i386_efi", "x86_64_efi", "ia64_efi", "arm_efi", "arm64_efi",
|
GROUPS["efi"] = [ "i386_efi", "x86_64_efi", "ia64_efi", "arm_efi", "arm64_efi" ]
|
||||||
"loongarch64_efi", "riscv32_efi", "riscv64_efi" ]
|
|
||||||
GROUPS["ieee1275"] = [ "i386_ieee1275", "sparc64_ieee1275", "powerpc_ieee1275" ]
|
GROUPS["ieee1275"] = [ "i386_ieee1275", "sparc64_ieee1275", "powerpc_ieee1275" ]
|
||||||
GROUPS["uboot"] = [ "arm_uboot" ]
|
GROUPS["uboot"] = [ "arm_uboot" ]
|
||||||
GROUPS["xen"] = [ "i386_xen", "x86_64_xen" ]
|
GROUPS["xen"] = [ "i386_xen", "x86_64_xen" ]
|
||||||
GROUPS["coreboot"] = [ "i386_coreboot", "arm_coreboot" ]
|
|
||||||
|
|
||||||
# emu is a special case so many core functionality isn't needed on this platform
|
# emu is a special case so many core functionality isn't needed on this platform
|
||||||
GROUPS["noemu"] = GRUB_PLATFORMS[:]; GROUPS["noemu"].remove("emu")
|
GROUPS["noemu"] = GRUB_PLATFORMS[:]; GROUPS["noemu"].remove("emu")
|
||||||
@@ -67,24 +61,24 @@ GROUPS["cmos"] = GROUPS["x86"][:] + ["mips_loongson", "mips_qemu_mips",
|
|||||||
"sparc64_ieee1275", "powerpc_ieee1275"]
|
"sparc64_ieee1275", "powerpc_ieee1275"]
|
||||||
GROUPS["cmos"].remove("i386_efi"); GROUPS["cmos"].remove("x86_64_efi");
|
GROUPS["cmos"].remove("i386_efi"); GROUPS["cmos"].remove("x86_64_efi");
|
||||||
GROUPS["pci"] = GROUPS["x86"] + ["mips_loongson"]
|
GROUPS["pci"] = GROUPS["x86"] + ["mips_loongson"]
|
||||||
GROUPS["usb"] = GROUPS["pci"] + ["arm_coreboot"]
|
GROUPS["usb"] = GROUPS["pci"]
|
||||||
|
|
||||||
# If gfxterm is main output console integrate it into kernel
|
# If gfxterm is main output console integrate it into kernel
|
||||||
GROUPS["videoinkernel"] = ["mips_loongson", "i386_coreboot", "arm_coreboot" ]
|
GROUPS["videoinkernel"] = ["mips_loongson", "i386_coreboot" ]
|
||||||
GROUPS["videomodules"] = GRUB_PLATFORMS[:];
|
GROUPS["videomodules"] = GRUB_PLATFORMS[:];
|
||||||
for i in GROUPS["videoinkernel"]: GROUPS["videomodules"].remove(i)
|
for i in GROUPS["videoinkernel"]: GROUPS["videomodules"].remove(i)
|
||||||
|
|
||||||
# Similar for terminfo
|
# Similar for terminfo
|
||||||
GROUPS["terminfoinkernel"] = [ "emu", "mips_loongson", "mips_arc", "mips_qemu_mips", "i386_xen_pvh" ] + GROUPS["xen"] + GROUPS["ieee1275"] + GROUPS["uboot"];
|
GROUPS["terminfoinkernel"] = [ "emu", "mips_loongson", "mips_arc", "mips_qemu_mips" ] + GROUPS["xen"] + GROUPS["ieee1275"] + GROUPS["uboot"];
|
||||||
GROUPS["terminfomodule"] = GRUB_PLATFORMS[:];
|
GROUPS["terminfomodule"] = GRUB_PLATFORMS[:];
|
||||||
for i in GROUPS["terminfoinkernel"]: GROUPS["terminfomodule"].remove(i)
|
for i in GROUPS["terminfoinkernel"]: GROUPS["terminfomodule"].remove(i)
|
||||||
|
|
||||||
# Flattened Device Trees (FDT)
|
# Flattened Device Trees (FDT)
|
||||||
GROUPS["fdt"] = [ "arm64_efi", "arm_uboot", "arm_efi", "loongarch64_efi", "riscv32_efi", "riscv64_efi" ]
|
GROUPS["fdt"] = [ "arm64_efi", "arm_uboot", "arm_efi" ]
|
||||||
|
|
||||||
# Needs software helpers for division
|
# Needs software helpers for division
|
||||||
# Must match GRUB_DIVISION_IN_SOFTWARE in misc.h
|
# Must match GRUB_DIVISION_IN_SOFTWARE in misc.h
|
||||||
GROUPS["softdiv"] = GROUPS["arm"] + ["ia64_efi"] + GROUPS["riscv32"]
|
GROUPS["softdiv"] = GROUPS["arm"] + ["ia64_efi"]
|
||||||
GROUPS["no_softdiv"] = GRUB_PLATFORMS[:]
|
GROUPS["no_softdiv"] = GRUB_PLATFORMS[:]
|
||||||
for i in GROUPS["softdiv"]: GROUPS["no_softdiv"].remove(i)
|
for i in GROUPS["softdiv"]: GROUPS["no_softdiv"].remove(i)
|
||||||
|
|
||||||
@@ -569,7 +563,6 @@ def foreach_platform_value(defn, platform, suffix, closure):
|
|||||||
for group in RMAP[platform]:
|
for group in RMAP[platform]:
|
||||||
for value in defn.find_all(group + suffix):
|
for value in defn.find_all(group + suffix):
|
||||||
r.append(closure(value))
|
r.append(closure(value))
|
||||||
r.sort()
|
|
||||||
return ''.join(r)
|
return ''.join(r)
|
||||||
|
|
||||||
def platform_conditional(platform, closure):
|
def platform_conditional(platform, closure):
|
||||||
@@ -702,7 +695,7 @@ def module(defn, platform):
|
|||||||
output("""
|
output("""
|
||||||
""" + name + """.marker: $(""" + cname(defn) + """_SOURCES) $(nodist_""" + cname(defn) + """_SOURCES)
|
""" + name + """.marker: $(""" + cname(defn) + """_SOURCES) $(nodist_""" + cname(defn) + """_SOURCES)
|
||||||
$(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(""" + cname(defn) + """_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1)
|
$(TARGET_CPP) -DGRUB_LST_GENERATOR $(CPPFLAGS_MARKER) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(""" + cname(defn) + """_CPPFLAGS) $(CPPFLAGS) $^ > $@.new || (rm -f $@; exit 1)
|
||||||
grep 'MARKER' $@.new | grep -v '^#' > $@; rm -f $@.new
|
grep 'MARKER' $@.new > $@; rm -f $@.new
|
||||||
""")
|
""")
|
||||||
|
|
||||||
def kernel(defn, platform):
|
def kernel(defn, platform):
|
||||||
@@ -768,7 +761,7 @@ def image(defn, platform):
|
|||||||
if test x$(TARGET_APPLE_LINKER) = x1; then \
|
if test x$(TARGET_APPLE_LINKER) = x1; then \
|
||||||
$(MACHO2IMG) $< $@; \
|
$(MACHO2IMG) $< $@; \
|
||||||
else \
|
else \
|
||||||
$(TARGET_OBJCOPY) $(""" + cname(defn) + """_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .note.gnu.property -R .ARM.exidx -R .interp $< $@; \
|
$(TARGET_OBJCOPY) $(""" + cname(defn) + """_OBJCOPYFLAGS) --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; \
|
||||||
fi
|
fi
|
||||||
""")
|
""")
|
||||||
|
|
||||||
@@ -819,7 +812,8 @@ def program(defn, platform, test=False):
|
|||||||
set_canonical_name_suffix("")
|
set_canonical_name_suffix("")
|
||||||
|
|
||||||
if 'testcase' in defn:
|
if 'testcase' in defn:
|
||||||
gvar_add("check_PROGRAMS_" + defn['testcase'], name)
|
gvar_add("check_PROGRAMS", name)
|
||||||
|
gvar_add("TESTS", name)
|
||||||
else:
|
else:
|
||||||
var_add(installdir(defn) + "_PROGRAMS", name)
|
var_add(installdir(defn) + "_PROGRAMS", name)
|
||||||
if 'mansection' in defn:
|
if 'mansection' in defn:
|
||||||
@@ -860,7 +854,8 @@ def script(defn, platform):
|
|||||||
name = defn['name']
|
name = defn['name']
|
||||||
|
|
||||||
if 'testcase' in defn:
|
if 'testcase' in defn:
|
||||||
gvar_add("check_SCRIPTS_" + defn['testcase'], name)
|
gvar_add("check_SCRIPTS", name)
|
||||||
|
gvar_add ("TESTS", name)
|
||||||
else:
|
else:
|
||||||
var_add(installdir(defn) + "_SCRIPTS", name)
|
var_add(installdir(defn) + "_SCRIPTS", name)
|
||||||
if 'mansection' in defn:
|
if 'mansection' in defn:
|
||||||
|
|||||||
+5
-76
@@ -71,7 +71,6 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/command.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/device.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/device.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/dl.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/dl.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/sb.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/env.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/env.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/env_private.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/env_private.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/err.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/err.h
|
||||||
@@ -80,7 +79,6 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/fs.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i18n.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i18n.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/kernel.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/kernel.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/list.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/list.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lockdown.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/misc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/misc.h
|
||||||
if COND_emu
|
if COND_emu
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/compiler-rt-emu.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/compiler-rt-emu.h
|
||||||
@@ -90,10 +88,8 @@ endif
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/parser.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/parser.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/partition.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/partition.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/stack_protector.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/term.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/term.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/time.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/time.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/verify.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm_private.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm_private.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/net.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/net.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/memory.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/memory.h
|
||||||
@@ -105,20 +101,7 @@ KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/int.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_xen_pvh
|
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/int.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/xen.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/xen/hypercall.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
if COND_i386_efi
|
if COND_i386_efi
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
@@ -128,9 +111,8 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pmtimer.h
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_coreboot
|
if COND_i386_coreboot
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/coreboot/lbio.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/coreboot/lbio.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
|
||||||
@@ -140,7 +122,6 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_multiboot
|
if COND_i386_multiboot
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
||||||
endif
|
endif
|
||||||
@@ -151,9 +132,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_ieee1275
|
if COND_i386_ieee1275
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/alloc.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h
|
||||||
@@ -161,7 +140,6 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_xen
|
if COND_i386_xen
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/xen.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/xen.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/xen/hypercall.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/xen/hypercall.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
|
||||||
@@ -180,7 +158,6 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_x86_64_efi
|
if COND_x86_64_efi
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
@@ -241,7 +218,6 @@ endif
|
|||||||
|
|
||||||
if COND_powerpc_ieee1275
|
if COND_powerpc_ieee1275
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/ieee1275.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/ieee1275/alloc.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h
|
||||||
@@ -263,21 +239,8 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_arm_coreboot
|
|
||||||
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/fdt.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/dma.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/coreboot/kernel.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/fdtbus.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
if COND_arm_efi
|
if COND_arm_efi
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/efi/loader.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h
|
||||||
@@ -290,24 +253,6 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_loongarch64_efi
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
if COND_riscv32_efi
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
if COND_riscv64_efi
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
endif
|
|
||||||
|
|
||||||
if COND_emu
|
if COND_emu
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/datetime.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/datetime.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/misc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/misc.h
|
||||||
@@ -315,13 +260,9 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/net.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/hostdisk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/hostdisk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/hostfile.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/hostfile.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/emu/exec.h
|
|
||||||
if COND_GRUB_EMU_SDL
|
if COND_GRUB_EMU_SDL
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sdl.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sdl.h
|
||||||
endif
|
endif
|
||||||
if COND_GRUB_EMU_SDL2
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/sdl.h
|
|
||||||
endif
|
|
||||||
if COND_GRUB_EMU_PCI
|
if COND_GRUB_EMU_PCI
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libpciaccess.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/libpciaccess.h
|
||||||
endif
|
endif
|
||||||
@@ -391,10 +332,8 @@ command.lst: $(MARKER_FILES)
|
|||||||
b=`basename $$pp .marker`; \
|
b=`basename $$pp .marker`; \
|
||||||
sed -n \
|
sed -n \
|
||||||
-e "/EXTCOMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \
|
-e "/EXTCOMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \
|
||||||
-e "/EXTCOMMAND_LOCKDOWN_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \
|
|
||||||
-e "/P1COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \
|
-e "/P1COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/*\1: $$b/;p;}" \
|
||||||
-e "/COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" \
|
-e "/COMMAND_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" $$pp; \
|
||||||
-e "/COMMAND_LOCKDOWN_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/\1: $$b/;p;}" $$pp; \
|
|
||||||
done) | sort -u > $@
|
done) | sort -u > $@
|
||||||
platform_DATA += command.lst
|
platform_DATA += command.lst
|
||||||
CLEANFILES += command.lst
|
CLEANFILES += command.lst
|
||||||
@@ -419,16 +358,6 @@ terminal.lst: $(MARKER_FILES)
|
|||||||
platform_DATA += terminal.lst
|
platform_DATA += terminal.lst
|
||||||
CLEANFILES += terminal.lst
|
CLEANFILES += terminal.lst
|
||||||
|
|
||||||
fdt.lst: $(MARKER_FILES)
|
|
||||||
(for pp in $^; do \
|
|
||||||
b=`basename $$pp .marker`; \
|
|
||||||
sed -n \
|
|
||||||
-e "/FDT_DRIVER_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/i\1: $$b/;p;}" \
|
|
||||||
-e "/FDT_DRIVER_LIST_MARKER *( *\"/{s/.*( *\"\([^\"]*\)\".*/o\1: $$b/;p;}" $$pp; \
|
|
||||||
done) | sort -u > $@
|
|
||||||
platform_DATA += fdt.lst
|
|
||||||
CLEANFILES += fdt.lst
|
|
||||||
|
|
||||||
parttool.lst: $(MARKER_FILES)
|
parttool.lst: $(MARKER_FILES)
|
||||||
(for pp in $^; do \
|
(for pp in $^; do \
|
||||||
b=`basename $$pp .marker`; \
|
b=`basename $$pp .marker`; \
|
||||||
@@ -454,8 +383,8 @@ crypto.lst: $(srcdir)/lib/libgcrypt-grub/cipher/crypto.lst
|
|||||||
platform_DATA += crypto.lst
|
platform_DATA += crypto.lst
|
||||||
CLEANFILES += crypto.lst
|
CLEANFILES += crypto.lst
|
||||||
|
|
||||||
syminfo.lst: gensyminfo.sh kernel_syms.lst $(top_srcdir)/grub-core/extra_deps.lst $(MODULE_FILES)
|
syminfo.lst: gensyminfo.sh kernel_syms.lst $(MODULE_FILES)
|
||||||
cat kernel_syms.lst $(top_srcdir)/grub-core/extra_deps.lst > $@.new
|
cat kernel_syms.lst > $@.new
|
||||||
for m in $(MODULE_FILES); do \
|
for m in $(MODULE_FILES); do \
|
||||||
sh $< $$m >> $@.new || exit 1; \
|
sh $< $$m >> $@.new || exit 1; \
|
||||||
done
|
done
|
||||||
|
|||||||
+48
-288
@@ -20,8 +20,8 @@ transform_data = {
|
|||||||
|
|
||||||
transform_data = {
|
transform_data = {
|
||||||
installdir = platform;
|
installdir = platform;
|
||||||
name = gdb_helper.py;
|
name = gmodule.pl;
|
||||||
common = gdb_helper.py.in;
|
common = gmodule.pl.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
transform_data = {
|
transform_data = {
|
||||||
@@ -49,54 +49,36 @@ kernel = {
|
|||||||
|
|
||||||
nostrip = emu;
|
nostrip = emu;
|
||||||
|
|
||||||
emu_ldflags = '-Wl,-r';
|
emu_ldflags = '-Wl,-r,-d';
|
||||||
i386_efi_cflags = '-fshort-wchar';
|
i386_efi_ldflags = '-Wl,-r,-d';
|
||||||
i386_efi_ldflags = '-Wl,-r';
|
|
||||||
i386_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
i386_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
x86_64_efi_cflags = '-fshort-wchar';
|
x86_64_efi_ldflags = '-Wl,-r,-d';
|
||||||
x86_64_efi_ldflags = '-Wl,-r';
|
|
||||||
x86_64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
x86_64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
|
|
||||||
ia64_efi_cflags = '-fshort-wchar -fno-builtin -fpic -minline-int-divide-max-throughput';
|
ia64_efi_cflags = '-fno-builtin -fpic -minline-int-divide-max-throughput';
|
||||||
ia64_efi_ldflags = '-Wl,-r';
|
ia64_efi_ldflags = '-Wl,-r,-d';
|
||||||
ia64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
ia64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
|
|
||||||
arm_efi_cflags = '-fshort-wchar';
|
arm_efi_ldflags = '-Wl,-r,-d';
|
||||||
arm_efi_ldflags = '-Wl,-r';
|
|
||||||
arm_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
arm_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
|
|
||||||
arm64_efi_cflags = '-fshort-wchar';
|
arm64_efi_ldflags = '-Wl,-r,-d';
|
||||||
arm64_efi_ldflags = '-Wl,-r';
|
|
||||||
arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame';
|
arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame';
|
||||||
|
|
||||||
loongarch64_efi_cflags = '-fshort-wchar';
|
|
||||||
loongarch64_efi_ldflags = '-Wl,-r';
|
|
||||||
loongarch64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame';
|
|
||||||
|
|
||||||
riscv32_efi_cflags = '-fshort-wchar';
|
|
||||||
riscv32_efi_ldflags = '-Wl,-r';
|
|
||||||
riscv32_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame';
|
|
||||||
|
|
||||||
riscv64_efi_cflags = '-fshort-wchar';
|
|
||||||
riscv64_efi_ldflags = '-Wl,-r';
|
|
||||||
riscv64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame';
|
|
||||||
|
|
||||||
i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
||||||
i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
|
i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
|
||||||
i386_qemu_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
i386_qemu_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
||||||
i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
|
i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200';
|
||||||
i386_coreboot_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
i386_coreboot_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
||||||
i386_coreboot_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
|
i386_coreboot_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200';
|
||||||
i386_multiboot_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
i386_multiboot_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
||||||
i386_multiboot_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
|
i386_multiboot_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200';
|
||||||
i386_ieee1275_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
i386_ieee1275_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
||||||
i386_ieee1275_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x10000';
|
i386_ieee1275_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x10000';
|
||||||
i386_xen_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
i386_xen_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
||||||
i386_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0';
|
i386_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0';
|
||||||
x86_64_xen_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
x86_64_xen_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
||||||
x86_64_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0';
|
x86_64_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0';
|
||||||
i386_xen_pvh_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
|
||||||
i386_xen_pvh_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x100000';
|
|
||||||
|
|
||||||
mips_loongson_ldflags = '-Wl,-Ttext,0x80200000';
|
mips_loongson_ldflags = '-Wl,-Ttext,0x80200000';
|
||||||
powerpc_ieee1275_ldflags = '-Wl,-Ttext,0x200000';
|
powerpc_ieee1275_ldflags = '-Wl,-Ttext,0x200000';
|
||||||
@@ -108,17 +90,14 @@ kernel = {
|
|||||||
i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
||||||
emu_cflags = '$(CFLAGS_GNULIB)';
|
emu_cflags = '$(CFLAGS_GNULIB)';
|
||||||
emu_cppflags = '$(CPPFLAGS_GNULIB)';
|
emu_cppflags = '$(CPPFLAGS_GNULIB)';
|
||||||
arm_uboot_ldflags = '-Wl,-r';
|
arm_uboot_ldflags = '-Wl,-r,-d';
|
||||||
arm_uboot_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
arm_uboot_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
arm_coreboot_ldflags = '-Wl,-r';
|
|
||||||
arm_coreboot_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
|
||||||
|
|
||||||
i386_pc_startup = kern/i386/pc/startup.S;
|
i386_pc_startup = kern/i386/pc/startup.S;
|
||||||
i386_efi_startup = kern/i386/efi/startup.S;
|
i386_efi_startup = kern/i386/efi/startup.S;
|
||||||
x86_64_efi_startup = kern/x86_64/efi/startup.S;
|
x86_64_efi_startup = kern/x86_64/efi/startup.S;
|
||||||
i386_xen_startup = kern/i386/xen/startup.S;
|
i386_xen_startup = kern/i386/xen/startup.S;
|
||||||
x86_64_xen_startup = kern/x86_64/xen/startup.S;
|
x86_64_xen_startup = kern/x86_64/xen/startup.S;
|
||||||
i386_xen_pvh_startup = kern/i386/xen/startup_pvh.S;
|
|
||||||
i386_qemu_startup = kern/i386/qemu/startup.S;
|
i386_qemu_startup = kern/i386/qemu/startup.S;
|
||||||
i386_ieee1275_startup = kern/i386/ieee1275/startup.S;
|
i386_ieee1275_startup = kern/i386/ieee1275/startup.S;
|
||||||
i386_coreboot_startup = kern/i386/coreboot/startup.S;
|
i386_coreboot_startup = kern/i386/coreboot/startup.S;
|
||||||
@@ -126,15 +105,10 @@ kernel = {
|
|||||||
mips_startup = kern/mips/startup.S;
|
mips_startup = kern/mips/startup.S;
|
||||||
sparc64_ieee1275_startup = kern/sparc64/ieee1275/crt0.S;
|
sparc64_ieee1275_startup = kern/sparc64/ieee1275/crt0.S;
|
||||||
powerpc_ieee1275_startup = kern/powerpc/ieee1275/startup.S;
|
powerpc_ieee1275_startup = kern/powerpc/ieee1275/startup.S;
|
||||||
arm_uboot_startup = kern/arm/startup.S;
|
arm_uboot_startup = kern/arm/uboot/startup.S;
|
||||||
arm_coreboot_startup = kern/arm/startup.S;
|
|
||||||
arm_efi_startup = kern/arm/efi/startup.S;
|
arm_efi_startup = kern/arm/efi/startup.S;
|
||||||
arm64_efi_startup = kern/arm64/efi/startup.S;
|
arm64_efi_startup = kern/arm64/efi/startup.S;
|
||||||
loongarch64_efi_startup = kern/loongarch64/efi/startup.S;
|
|
||||||
riscv32_efi_startup = kern/riscv/efi/startup.S;
|
|
||||||
riscv64_efi_startup = kern/riscv/efi/startup.S;
|
|
||||||
|
|
||||||
common = kern/buffer.c;
|
|
||||||
common = kern/command.c;
|
common = kern/command.c;
|
||||||
common = kern/corecmd.c;
|
common = kern/corecmd.c;
|
||||||
common = kern/device.c;
|
common = kern/device.c;
|
||||||
@@ -152,7 +126,6 @@ kernel = {
|
|||||||
common = kern/rescue_parser.c;
|
common = kern/rescue_parser.c;
|
||||||
common = kern/rescue_reader.c;
|
common = kern/rescue_reader.c;
|
||||||
common = kern/term.c;
|
common = kern/term.c;
|
||||||
common = kern/verifiers.c;
|
|
||||||
|
|
||||||
noemu = kern/compiler-rt.c;
|
noemu = kern/compiler-rt.c;
|
||||||
noemu = kern/mm.c;
|
noemu = kern/mm.c;
|
||||||
@@ -176,21 +149,6 @@ kernel = {
|
|||||||
uboot = kern/uboot/init.c;
|
uboot = kern/uboot/init.c;
|
||||||
uboot = kern/uboot/hw.c;
|
uboot = kern/uboot/hw.c;
|
||||||
uboot = term/uboot/console.c;
|
uboot = term/uboot/console.c;
|
||||||
arm_uboot = kern/arm/uboot/init.c;
|
|
||||||
arm_uboot = kern/arm/uboot/uboot.S;
|
|
||||||
|
|
||||||
arm_coreboot = kern/arm/coreboot/init.c;
|
|
||||||
arm_coreboot = kern/arm/coreboot/timer.c;
|
|
||||||
arm_coreboot = kern/arm/coreboot/coreboot.S;
|
|
||||||
arm_coreboot = lib/fdt.c;
|
|
||||||
arm_coreboot = bus/fdt.c;
|
|
||||||
arm_coreboot = term/ps2.c;
|
|
||||||
arm_coreboot = term/arm/pl050.c;
|
|
||||||
arm_coreboot = term/arm/cros.c;
|
|
||||||
arm_coreboot = term/arm/cros_ec.c;
|
|
||||||
arm_coreboot = bus/spi/rk3288_spi.c;
|
|
||||||
arm_coreboot = commands/keylayouts.c;
|
|
||||||
arm_coreboot = kern/arm/coreboot/dma.c;
|
|
||||||
|
|
||||||
terminfoinkernel = term/terminfo.c;
|
terminfoinkernel = term/terminfo.c;
|
||||||
terminfoinkernel = term/tparm.c;
|
terminfoinkernel = term/tparm.c;
|
||||||
@@ -201,24 +159,20 @@ kernel = {
|
|||||||
|
|
||||||
i386 = kern/i386/dl.c;
|
i386 = kern/i386/dl.c;
|
||||||
i386_xen = kern/i386/dl.c;
|
i386_xen = kern/i386/dl.c;
|
||||||
i386_xen_pvh = kern/i386/dl.c;
|
|
||||||
|
|
||||||
i386_coreboot = kern/i386/coreboot/init.c;
|
i386_coreboot = kern/i386/coreboot/init.c;
|
||||||
i386_multiboot = kern/i386/coreboot/init.c;
|
i386_multiboot = kern/i386/coreboot/init.c;
|
||||||
i386_qemu = kern/i386/qemu/init.c;
|
i386_qemu = kern/i386/qemu/init.c;
|
||||||
i386_coreboot_multiboot_qemu = term/i386/pc/vga_text.c;
|
i386_coreboot_multiboot_qemu = term/i386/pc/vga_text.c;
|
||||||
coreboot = video/coreboot/cbfb.c;
|
i386_coreboot = video/i386/coreboot/cbfb.c;
|
||||||
|
|
||||||
efi = disk/efi/efidisk.c;
|
efi = disk/efi/efidisk.c;
|
||||||
efi = kern/efi/efi.c;
|
efi = kern/efi/efi.c;
|
||||||
efi = kern/efi/debug.c;
|
|
||||||
efi = kern/efi/init.c;
|
efi = kern/efi/init.c;
|
||||||
efi = kern/efi/mm.c;
|
efi = kern/efi/mm.c;
|
||||||
efi = term/efi/console.c;
|
efi = term/efi/console.c;
|
||||||
efi = kern/acpi.c;
|
efi = kern/acpi.c;
|
||||||
efi = kern/efi/acpi.c;
|
efi = kern/efi/acpi.c;
|
||||||
efi = kern/efi/sb.c;
|
|
||||||
efi = kern/lockdown.c;
|
|
||||||
i386_coreboot = kern/i386/pc/acpi.c;
|
i386_coreboot = kern/i386/pc/acpi.c;
|
||||||
i386_multiboot = kern/i386/pc/acpi.c;
|
i386_multiboot = kern/i386/pc/acpi.c;
|
||||||
i386_coreboot = kern/acpi.c;
|
i386_coreboot = kern/acpi.c;
|
||||||
@@ -237,6 +191,7 @@ kernel = {
|
|||||||
|
|
||||||
x86_64 = kern/x86_64/dl.c;
|
x86_64 = kern/x86_64/dl.c;
|
||||||
x86_64_xen = kern/x86_64/dl.c;
|
x86_64_xen = kern/x86_64/dl.c;
|
||||||
|
x86_64_efi = kern/x86_64/efi/callwrap.S;
|
||||||
x86_64_efi = kern/i386/efi/init.c;
|
x86_64_efi = kern/i386/efi/init.c;
|
||||||
x86_64_efi = bus/pci.c;
|
x86_64_efi = bus/pci.c;
|
||||||
|
|
||||||
@@ -249,14 +204,6 @@ kernel = {
|
|||||||
xen = disk/xen/xendisk.c;
|
xen = disk/xen/xendisk.c;
|
||||||
xen = commands/boot.c;
|
xen = commands/boot.c;
|
||||||
|
|
||||||
i386_xen_pvh = commands/boot.c;
|
|
||||||
i386_xen_pvh = disk/xen/xendisk.c;
|
|
||||||
i386_xen_pvh = kern/i386/tsc.c;
|
|
||||||
i386_xen_pvh = kern/i386/xen/tsc.c;
|
|
||||||
i386_xen_pvh = kern/i386/xen/pvh.c;
|
|
||||||
i386_xen_pvh = kern/xen/init.c;
|
|
||||||
i386_xen_pvh = term/xen/console.c;
|
|
||||||
|
|
||||||
ia64_efi = kern/ia64/efi/startup.S;
|
ia64_efi = kern/ia64/efi/startup.S;
|
||||||
ia64_efi = kern/ia64/efi/init.c;
|
ia64_efi = kern/ia64/efi/init.c;
|
||||||
ia64_efi = kern/ia64/dl.c;
|
ia64_efi = kern/ia64/dl.c;
|
||||||
@@ -264,20 +211,12 @@ kernel = {
|
|||||||
ia64_efi = kern/ia64/cache.c;
|
ia64_efi = kern/ia64/cache.c;
|
||||||
|
|
||||||
arm_efi = kern/arm/efi/init.c;
|
arm_efi = kern/arm/efi/init.c;
|
||||||
|
arm_efi = kern/arm/efi/misc.c;
|
||||||
arm_efi = kern/efi/fdt.c;
|
arm_efi = kern/efi/fdt.c;
|
||||||
|
|
||||||
arm64_efi = kern/arm64/efi/init.c;
|
arm64_efi = kern/arm64/efi/init.c;
|
||||||
arm64_efi = kern/efi/fdt.c;
|
arm64_efi = kern/efi/fdt.c;
|
||||||
|
|
||||||
loongarch64_efi = kern/loongarch64/efi/init.c;
|
|
||||||
loongarch64_efi = kern/efi/fdt.c;
|
|
||||||
|
|
||||||
riscv32_efi = kern/riscv/efi/init.c;
|
|
||||||
riscv32_efi = kern/efi/fdt.c;
|
|
||||||
|
|
||||||
riscv64_efi = kern/riscv/efi/init.c;
|
|
||||||
riscv64_efi = kern/efi/fdt.c;
|
|
||||||
|
|
||||||
i386_pc = kern/i386/pc/init.c;
|
i386_pc = kern/i386/pc/init.c;
|
||||||
i386_pc = kern/i386/pc/mmap.c;
|
i386_pc = kern/i386/pc/mmap.c;
|
||||||
i386_pc = term/i386/pc/console.c;
|
i386_pc = term/i386/pc/console.c;
|
||||||
@@ -286,10 +225,8 @@ kernel = {
|
|||||||
i386_qemu = kern/vga_init.c;
|
i386_qemu = kern/vga_init.c;
|
||||||
i386_qemu = kern/i386/qemu/mmap.c;
|
i386_qemu = kern/i386/qemu/mmap.c;
|
||||||
|
|
||||||
coreboot = kern/coreboot/mmap.c;
|
i386_coreboot = kern/i386/coreboot/mmap.c;
|
||||||
i386_coreboot = kern/i386/coreboot/cbtable.c;
|
i386_coreboot = kern/i386/coreboot/cbtable.c;
|
||||||
coreboot = kern/coreboot/cbtable.c;
|
|
||||||
arm_coreboot = kern/arm/coreboot/cbtable.c;
|
|
||||||
|
|
||||||
i386_multiboot = kern/i386/multiboot_mmap.c;
|
i386_multiboot = kern/i386/multiboot_mmap.c;
|
||||||
|
|
||||||
@@ -301,7 +238,6 @@ kernel = {
|
|||||||
mips_qemu_mips = term/ns8250.c;
|
mips_qemu_mips = term/ns8250.c;
|
||||||
mips_qemu_mips = term/serial.c;
|
mips_qemu_mips = term/serial.c;
|
||||||
mips_qemu_mips = term/at_keyboard.c;
|
mips_qemu_mips = term/at_keyboard.c;
|
||||||
mips_qemu_mips = term/ps2.c;
|
|
||||||
mips_qemu_mips = commands/boot.c;
|
mips_qemu_mips = commands/boot.c;
|
||||||
mips_qemu_mips = commands/keylayouts.c;
|
mips_qemu_mips = commands/keylayouts.c;
|
||||||
mips_qemu_mips = term/i386/pc/vga_text.c;
|
mips_qemu_mips = term/i386/pc/vga_text.c;
|
||||||
@@ -317,7 +253,6 @@ kernel = {
|
|||||||
mips_loongson = bus/pci.c;
|
mips_loongson = bus/pci.c;
|
||||||
mips_loongson = kern/mips/loongson/init.c;
|
mips_loongson = kern/mips/loongson/init.c;
|
||||||
mips_loongson = term/at_keyboard.c;
|
mips_loongson = term/at_keyboard.c;
|
||||||
mips_loongson = term/ps2.c;
|
|
||||||
mips_loongson = commands/boot.c;
|
mips_loongson = commands/boot.c;
|
||||||
mips_loongson = term/serial.c;
|
mips_loongson = term/serial.c;
|
||||||
mips_loongson = video/sm712.c;
|
mips_loongson = video/sm712.c;
|
||||||
@@ -335,7 +270,6 @@ kernel = {
|
|||||||
sparc64_ieee1275 = kern/sparc64/cache.S;
|
sparc64_ieee1275 = kern/sparc64/cache.S;
|
||||||
sparc64_ieee1275 = kern/sparc64/dl.c;
|
sparc64_ieee1275 = kern/sparc64/dl.c;
|
||||||
sparc64_ieee1275 = kern/sparc64/ieee1275/ieee1275.c;
|
sparc64_ieee1275 = kern/sparc64/ieee1275/ieee1275.c;
|
||||||
sparc64_ieee1275 = disk/ieee1275/obdisk.c;
|
|
||||||
|
|
||||||
arm = kern/arm/dl.c;
|
arm = kern/arm/dl.c;
|
||||||
arm = kern/arm/dl_helper.c;
|
arm = kern/arm/dl_helper.c;
|
||||||
@@ -350,19 +284,6 @@ kernel = {
|
|||||||
arm64 = kern/arm64/dl.c;
|
arm64 = kern/arm64/dl.c;
|
||||||
arm64 = kern/arm64/dl_helper.c;
|
arm64 = kern/arm64/dl_helper.c;
|
||||||
|
|
||||||
loongarch64 = kern/loongarch64/cache.c;
|
|
||||||
loongarch64 = kern/loongarch64/cache_flush.S;
|
|
||||||
loongarch64 = kern/loongarch64/dl.c;
|
|
||||||
loongarch64 = kern/loongarch64/dl_helper.c;
|
|
||||||
|
|
||||||
riscv32 = kern/riscv/cache.c;
|
|
||||||
riscv32 = kern/riscv/cache_flush.S;
|
|
||||||
riscv32 = kern/riscv/dl.c;
|
|
||||||
|
|
||||||
riscv64 = kern/riscv/cache.c;
|
|
||||||
riscv64 = kern/riscv/cache_flush.S;
|
|
||||||
riscv64 = kern/riscv/dl.c;
|
|
||||||
|
|
||||||
emu = disk/host.c;
|
emu = disk/host.c;
|
||||||
emu = kern/emu/cache_s.S;
|
emu = kern/emu/cache_s.S;
|
||||||
emu = kern/emu/hostdisk.c;
|
emu = kern/emu/hostdisk.c;
|
||||||
@@ -418,7 +339,7 @@ program = {
|
|||||||
|
|
||||||
ldadd = 'kernel.exec$(EXEEXT)';
|
ldadd = 'kernel.exec$(EXEEXT)';
|
||||||
ldadd = '$(MODULE_FILES)';
|
ldadd = '$(MODULE_FILES)';
|
||||||
ldadd = 'lib/gnulib/libgnu.a $(LIBINTL) $(LIBUTIL) $(LIBSDL) $(SDL2_LIBS) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = 'gnulib/libgnu.a $(LIBINTL) $(LIBUTIL) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
|
|
||||||
enable = emu;
|
enable = emu;
|
||||||
};
|
};
|
||||||
@@ -430,7 +351,7 @@ program = {
|
|||||||
emu_nodist = symlist.c;
|
emu_nodist = symlist.c;
|
||||||
|
|
||||||
ldadd = 'kernel.exec$(EXEEXT)';
|
ldadd = 'kernel.exec$(EXEEXT)';
|
||||||
ldadd = 'lib/gnulib/libgnu.a $(LIBINTL) $(LIBUTIL) $(LIBSDL) $(SDL2_LIBS) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = 'gnulib/libgnu.a $(LIBINTL) $(LIBUTIL) $(LIBSDL) $(LIBUSB) $(LIBPCIACCESS) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
|
|
||||||
enable = emu;
|
enable = emu;
|
||||||
};
|
};
|
||||||
@@ -448,14 +369,8 @@ image = {
|
|||||||
i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
||||||
i386_qemu_ccasflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
i386_qemu_ccasflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
||||||
|
|
||||||
/* The entry point for a.out binaries on sparc64 starts
|
sparc64_ieee1275_objcopyflags = '-O a.out-sunos-big';
|
||||||
at 0x4000. Since we are writing the 32 bytes long a.out
|
sparc64_ieee1275_ldflags = ' -Wl,-Ttext=0x4000';
|
||||||
header in the assembly code ourselves, we need to tell
|
|
||||||
the linker to adjust the start of the text segment to
|
|
||||||
0x4000 - 0x20 = 0x3fe0.
|
|
||||||
*/
|
|
||||||
sparc64_ieee1275_ldflags = ' -Wl,-Ttext=0x3fe0';
|
|
||||||
sparc64_ieee1275_objcopyflags = '-O binary';
|
|
||||||
|
|
||||||
objcopyflags = '-O binary';
|
objcopyflags = '-O binary';
|
||||||
enable = i386_pc;
|
enable = i386_pc;
|
||||||
@@ -484,10 +399,8 @@ image = {
|
|||||||
i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00';
|
i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x7C00';
|
||||||
|
|
||||||
sparc64_ieee1275 = boot/sparc64/ieee1275/boot.S;
|
sparc64_ieee1275 = boot/sparc64/ieee1275/boot.S;
|
||||||
|
sparc64_ieee1275_objcopyflags = '-O a.out-sunos-big';
|
||||||
/* See comment for sparc64_ieee1275_ldflags above. */
|
sparc64_ieee1275_ldflags = ' -Wl,-Ttext=0x4000';
|
||||||
sparc64_ieee1275_ldflags = ' -Wl,-Ttext=0x3fe0';
|
|
||||||
sparc64_ieee1275_objcopyflags = '-O binary';
|
|
||||||
sparc64_ieee1275_cppflags = '-DCDBOOT=1';
|
sparc64_ieee1275_cppflags = '-DCDBOOT=1';
|
||||||
|
|
||||||
objcopyflags = '-O binary';
|
objcopyflags = '-O binary';
|
||||||
@@ -661,10 +574,7 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = ehci;
|
name = ehci;
|
||||||
common = bus/usb/ehci.c;
|
common = bus/usb/ehci.c;
|
||||||
arm_coreboot = bus/usb/ehci-fdt.c;
|
|
||||||
pci = bus/usb/ehci-pci.c;
|
|
||||||
enable = pci;
|
enable = pci;
|
||||||
enable = arm_coreboot;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
@@ -731,7 +641,6 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = cbtable;
|
name = cbtable;
|
||||||
common = kern/i386/coreboot/cbtable.c;
|
common = kern/i386/coreboot/cbtable.c;
|
||||||
common = kern/coreboot/cbtable.c;
|
|
||||||
enable = i386_pc;
|
enable = i386_pc;
|
||||||
enable = i386_efi;
|
enable = i386_efi;
|
||||||
enable = i386_qemu;
|
enable = i386_qemu;
|
||||||
@@ -762,10 +671,7 @@ module = {
|
|||||||
name = regexp;
|
name = regexp;
|
||||||
common = commands/regexp.c;
|
common = commands/regexp.c;
|
||||||
common = commands/wildcard.c;
|
common = commands/wildcard.c;
|
||||||
common = lib/gnulib/malloc/dynarray_finalize.c;
|
common = gnulib/regex.c;
|
||||||
common = lib/gnulib/malloc/dynarray_emplace_enlarge.c;
|
|
||||||
common = lib/gnulib/malloc/dynarray_resize.c;
|
|
||||||
common = lib/gnulib/regex.c;
|
|
||||||
cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)';
|
cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)';
|
||||||
cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)';
|
cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)';
|
||||||
};
|
};
|
||||||
@@ -830,12 +736,6 @@ module = {
|
|||||||
enable = efi;
|
enable = efi;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = efitextmode;
|
|
||||||
efi = commands/efi/efitextmode.c;
|
|
||||||
enable = efi;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = blocklist;
|
name = blocklist;
|
||||||
common = commands/blocklist.c;
|
common = commands/blocklist.c;
|
||||||
@@ -854,10 +754,6 @@ module = {
|
|||||||
enable = arm_efi;
|
enable = arm_efi;
|
||||||
enable = arm64_efi;
|
enable = arm64_efi;
|
||||||
enable = arm_uboot;
|
enable = arm_uboot;
|
||||||
enable = arm_coreboot;
|
|
||||||
enable = loongarch64_efi;
|
|
||||||
enable = riscv32_efi;
|
|
||||||
enable = riscv64_efi;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
@@ -879,7 +775,6 @@ module = {
|
|||||||
name = cpuid;
|
name = cpuid;
|
||||||
common = commands/i386/cpuid.c;
|
common = commands/i386/cpuid.c;
|
||||||
enable = x86;
|
enable = x86;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
enable = i386_xen;
|
enable = i386_xen;
|
||||||
enable = x86_64_xen;
|
enable = x86_64_xen;
|
||||||
};
|
};
|
||||||
@@ -939,27 +834,27 @@ module = {
|
|||||||
i386_coreboot = lib/i386/halt.c;
|
i386_coreboot = lib/i386/halt.c;
|
||||||
i386_qemu = lib/i386/halt.c;
|
i386_qemu = lib/i386/halt.c;
|
||||||
xen = lib/xen/halt.c;
|
xen = lib/xen/halt.c;
|
||||||
i386_xen_pvh = lib/xen/halt.c;
|
|
||||||
efi = lib/efi/halt.c;
|
efi = lib/efi/halt.c;
|
||||||
ieee1275 = lib/ieee1275/halt.c;
|
ieee1275 = lib/ieee1275/halt.c;
|
||||||
emu = lib/emu/halt.c;
|
emu = lib/emu/halt.c;
|
||||||
uboot = lib/dummy/halt.c;
|
uboot = lib/uboot/halt.c;
|
||||||
arm_coreboot = lib/dummy/halt.c;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = reboot;
|
name = reboot;
|
||||||
i386 = lib/i386/reboot.c;
|
i386 = lib/i386/reboot.c;
|
||||||
i386 = lib/i386/reboot_trampoline.S;
|
i386 = lib/i386/reboot_trampoline.S;
|
||||||
|
ia64_efi = lib/efi/reboot.c;
|
||||||
|
x86_64_efi = lib/efi/reboot.c;
|
||||||
|
arm_efi = lib/efi/reboot.c;
|
||||||
|
arm64_efi = lib/efi/reboot.c;
|
||||||
powerpc_ieee1275 = lib/ieee1275/reboot.c;
|
powerpc_ieee1275 = lib/ieee1275/reboot.c;
|
||||||
sparc64_ieee1275 = lib/ieee1275/reboot.c;
|
sparc64_ieee1275 = lib/ieee1275/reboot.c;
|
||||||
mips_arc = lib/mips/arc/reboot.c;
|
mips_arc = lib/mips/arc/reboot.c;
|
||||||
mips_loongson = lib/mips/loongson/reboot.c;
|
mips_loongson = lib/mips/loongson/reboot.c;
|
||||||
mips_qemu_mips = lib/mips/qemu_mips/reboot.c;
|
mips_qemu_mips = lib/mips/qemu_mips/reboot.c;
|
||||||
xen = lib/xen/reboot.c;
|
xen = lib/xen/reboot.c;
|
||||||
i386_xen_pvh = lib/xen/reboot.c;
|
|
||||||
uboot = lib/uboot/reboot.c;
|
uboot = lib/uboot/reboot.c;
|
||||||
arm_coreboot = lib/dummy/reboot.c;
|
|
||||||
common = commands/reboot.c;
|
common = commands/reboot.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -969,8 +864,8 @@ module = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = pgp;
|
name = verify;
|
||||||
common = commands/pgp.c;
|
common = commands/verify.c;
|
||||||
cflags = '$(CFLAGS_POSIX)';
|
cflags = '$(CFLAGS_POSIX)';
|
||||||
cppflags = '-I$(srcdir)/lib/posix_wrap';
|
cppflags = '-I$(srcdir)/lib/posix_wrap';
|
||||||
};
|
};
|
||||||
@@ -978,6 +873,7 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = hdparm;
|
name = hdparm;
|
||||||
common = commands/hdparm.c;
|
common = commands/hdparm.c;
|
||||||
|
common = lib/hexdump.c;
|
||||||
enable = pci;
|
enable = pci;
|
||||||
enable = mips_qemu_mips;
|
enable = mips_qemu_mips;
|
||||||
};
|
};
|
||||||
@@ -1119,21 +1015,6 @@ module = {
|
|||||||
common = commands/sleep.c;
|
common = commands/sleep.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = smbios;
|
|
||||||
|
|
||||||
common = commands/smbios.c;
|
|
||||||
efi = commands/efi/smbios.c;
|
|
||||||
i386_pc = commands/i386/pc/smbios.c;
|
|
||||||
i386_coreboot = commands/i386/pc/smbios.c;
|
|
||||||
i386_multiboot = commands/i386/pc/smbios.c;
|
|
||||||
|
|
||||||
enable = efi;
|
|
||||||
enable = i386_pc;
|
|
||||||
enable = i386_coreboot;
|
|
||||||
enable = i386_multiboot;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = suspend;
|
name = suspend;
|
||||||
ieee1275 = commands/ieee1275/suspend.c;
|
ieee1275 = commands/ieee1275/suspend.c;
|
||||||
@@ -1147,13 +1028,6 @@ module = {
|
|||||||
enable = powerpc_ieee1275;
|
enable = powerpc_ieee1275;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = tpm;
|
|
||||||
common = commands/tpm.c;
|
|
||||||
ieee1275 = commands/ieee1275/ibmvtpm.c;
|
|
||||||
enable = powerpc_ieee1275;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = terminal;
|
name = terminal;
|
||||||
common = commands/terminal.c;
|
common = commands/terminal.c;
|
||||||
@@ -1205,32 +1079,10 @@ module = {
|
|||||||
common = disk/cryptodisk.c;
|
common = disk/cryptodisk.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = plainmount;
|
|
||||||
common = disk/plainmount.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
|
||||||
name = json;
|
|
||||||
common = lib/json/json.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
|
||||||
name = afsplitter;
|
|
||||||
common = disk/AFSplitter.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = luks;
|
name = luks;
|
||||||
common = disk/luks.c;
|
common = disk/luks.c;
|
||||||
};
|
common = disk/AFSplitter.c;
|
||||||
|
|
||||||
module = {
|
|
||||||
name = luks2;
|
|
||||||
common = disk/luks2.c;
|
|
||||||
common = lib/gnulib/base64.c;
|
|
||||||
cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)';
|
|
||||||
cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB) -I$(srcdir)/lib/json';
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
@@ -1385,27 +1237,12 @@ module = {
|
|||||||
common = fs/bfs.c;
|
common = fs/bfs.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = zstd;
|
|
||||||
common = lib/zstd/debug.c;
|
|
||||||
common = lib/zstd/entropy_common.c;
|
|
||||||
common = lib/zstd/error_private.c;
|
|
||||||
common = lib/zstd/fse_decompress.c;
|
|
||||||
common = lib/zstd/huf_decompress.c;
|
|
||||||
common = lib/zstd/module.c;
|
|
||||||
common = lib/zstd/xxhash.c;
|
|
||||||
common = lib/zstd/zstd_common.c;
|
|
||||||
common = lib/zstd/zstd_decompress.c;
|
|
||||||
cflags = '$(CFLAGS_POSIX) -Wno-undef';
|
|
||||||
cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/zstd';
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = btrfs;
|
name = btrfs;
|
||||||
common = fs/btrfs.c;
|
common = fs/btrfs.c;
|
||||||
common = lib/crc.c;
|
common = lib/crc.c;
|
||||||
cflags = '$(CFLAGS_POSIX) -Wno-undef';
|
cflags = '$(CFLAGS_POSIX) -Wno-undef';
|
||||||
cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/minilzo -I$(srcdir)/lib/zstd -DMINILZO_HAVE_CONFIG_H';
|
cppflags = '-I$(srcdir)/lib/posix_wrap -I$(srcdir)/lib/minilzo -DMINILZO_HAVE_CONFIG_H';
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
@@ -1453,11 +1290,6 @@ module = {
|
|||||||
common = fs/exfat.c;
|
common = fs/exfat.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = f2fs;
|
|
||||||
common = fs/f2fs.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = fshelp;
|
name = fshelp;
|
||||||
common = fs/fshelp.c;
|
common = fs/fshelp.c;
|
||||||
@@ -1685,18 +1517,12 @@ module = {
|
|||||||
x86 = lib/i386/relocator16.S;
|
x86 = lib/i386/relocator16.S;
|
||||||
x86 = lib/i386/relocator32.S;
|
x86 = lib/i386/relocator32.S;
|
||||||
x86 = lib/i386/relocator64.S;
|
x86 = lib/i386/relocator64.S;
|
||||||
i386_xen_pvh = lib/i386/relocator16.S;
|
|
||||||
i386_xen_pvh = lib/i386/relocator32.S;
|
|
||||||
i386_xen_pvh = lib/i386/relocator64.S;
|
|
||||||
i386 = lib/i386/relocator_asm.S;
|
i386 = lib/i386/relocator_asm.S;
|
||||||
i386_xen_pvh = lib/i386/relocator_asm.S;
|
|
||||||
x86_64 = lib/x86_64/relocator_asm.S;
|
x86_64 = lib/x86_64/relocator_asm.S;
|
||||||
i386_xen = lib/i386/relocator_asm.S;
|
i386_xen = lib/i386/relocator_asm.S;
|
||||||
x86_64_xen = lib/x86_64/relocator_asm.S;
|
x86_64_xen = lib/x86_64/relocator_asm.S;
|
||||||
x86 = lib/i386/relocator.c;
|
x86 = lib/i386/relocator.c;
|
||||||
x86 = lib/i386/relocator_common_c.c;
|
x86 = lib/i386/relocator_common_c.c;
|
||||||
i386_xen_pvh = lib/i386/relocator.c;
|
|
||||||
i386_xen_pvh = lib/i386/relocator_common_c.c;
|
|
||||||
ieee1275 = lib/ieee1275/relocator.c;
|
ieee1275 = lib/ieee1275/relocator.c;
|
||||||
efi = lib/efi/relocator.c;
|
efi = lib/efi/relocator.c;
|
||||||
mips = lib/mips/relocator_asm.S;
|
mips = lib/mips/relocator_asm.S;
|
||||||
@@ -1715,25 +1541,22 @@ module = {
|
|||||||
enable = mips;
|
enable = mips;
|
||||||
enable = powerpc;
|
enable = powerpc;
|
||||||
enable = x86;
|
enable = x86;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
enable = xen;
|
enable = xen;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = datetime;
|
name = datetime;
|
||||||
common = lib/datetime.c;
|
|
||||||
cmos = lib/cmos_datetime.c;
|
cmos = lib/cmos_datetime.c;
|
||||||
efi = lib/efi/datetime.c;
|
efi = lib/efi/datetime.c;
|
||||||
uboot = lib/dummy/datetime.c;
|
uboot = lib/uboot/datetime.c;
|
||||||
arm_coreboot = lib/dummy/datetime.c;
|
|
||||||
sparc64_ieee1275 = lib/ieee1275/datetime.c;
|
sparc64_ieee1275 = lib/ieee1275/datetime.c;
|
||||||
powerpc_ieee1275 = lib/ieee1275/datetime.c;
|
powerpc_ieee1275 = lib/ieee1275/datetime.c;
|
||||||
sparc64_ieee1275 = lib/ieee1275/cmos.c;
|
sparc64_ieee1275 = lib/ieee1275/cmos.c;
|
||||||
powerpc_ieee1275 = lib/ieee1275/cmos.c;
|
powerpc_ieee1275 = lib/ieee1275/cmos.c;
|
||||||
xen = lib/xen/datetime.c;
|
xen = lib/xen/datetime.c;
|
||||||
i386_xen_pvh = lib/xen/datetime.c;
|
|
||||||
|
|
||||||
mips_arc = lib/arc/datetime.c;
|
mips_arc = lib/arc/datetime.c;
|
||||||
|
enable = noemu;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
@@ -1748,8 +1571,6 @@ module = {
|
|||||||
extra_dist = lib/ia64/longjmp.S;
|
extra_dist = lib/ia64/longjmp.S;
|
||||||
extra_dist = lib/arm/setjmp.S;
|
extra_dist = lib/arm/setjmp.S;
|
||||||
extra_dist = lib/arm64/setjmp.S;
|
extra_dist = lib/arm64/setjmp.S;
|
||||||
extra_dist = lib/riscv/setjmp.S;
|
|
||||||
extra_dist = lib/loongarch64/setjmp.S;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
@@ -1780,6 +1601,8 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = linux16;
|
name = linux16;
|
||||||
common = loader/i386/pc/linux.c;
|
common = loader/i386/pc/linux.c;
|
||||||
|
common = loader/linux.c;
|
||||||
|
common = lib/cmdline.c;
|
||||||
enable = x86;
|
enable = x86;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1814,24 +1637,24 @@ module = {
|
|||||||
cppflags = "-DGRUB_USE_MULTIBOOT2";
|
cppflags = "-DGRUB_USE_MULTIBOOT2";
|
||||||
|
|
||||||
common = loader/multiboot.c;
|
common = loader/multiboot.c;
|
||||||
|
common = lib/cmdline.c;
|
||||||
common = loader/multiboot_mbi2.c;
|
common = loader/multiboot_mbi2.c;
|
||||||
enable = x86;
|
enable = x86;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
enable = mips;
|
enable = mips;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = multiboot;
|
name = multiboot;
|
||||||
common = loader/multiboot.c;
|
common = loader/multiboot.c;
|
||||||
|
common = lib/cmdline.c;
|
||||||
x86 = loader/i386/multiboot_mbi.c;
|
x86 = loader/i386/multiboot_mbi.c;
|
||||||
i386_xen_pvh = loader/i386/multiboot_mbi.c;
|
|
||||||
extra_dist = loader/multiboot_elfxx.c;
|
extra_dist = loader/multiboot_elfxx.c;
|
||||||
enable = x86;
|
enable = x86;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = xen_boot;
|
name = xen_boot;
|
||||||
|
common = lib/cmdline.c;
|
||||||
arm64 = loader/arm64/xen_boot.c;
|
arm64 = loader/arm64/xen_boot.c;
|
||||||
enable = arm64;
|
enable = arm64;
|
||||||
};
|
};
|
||||||
@@ -1839,31 +1662,22 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = linux;
|
name = linux;
|
||||||
x86 = loader/i386/linux.c;
|
x86 = loader/i386/linux.c;
|
||||||
i386_xen_pvh = loader/i386/linux.c;
|
|
||||||
xen = loader/i386/xen.c;
|
xen = loader/i386/xen.c;
|
||||||
i386_pc = lib/i386/pc/vesa_modes_table.c;
|
i386_pc = lib/i386/pc/vesa_modes_table.c;
|
||||||
i386_xen_pvh = lib/i386/pc/vesa_modes_table.c;
|
|
||||||
mips = loader/mips/linux.c;
|
mips = loader/mips/linux.c;
|
||||||
powerpc_ieee1275 = loader/powerpc/ieee1275/linux.c;
|
powerpc_ieee1275 = loader/powerpc/ieee1275/linux.c;
|
||||||
sparc64_ieee1275 = loader/sparc64/ieee1275/linux.c;
|
sparc64_ieee1275 = loader/sparc64/ieee1275/linux.c;
|
||||||
ia64_efi = loader/ia64/efi/linux.c;
|
ia64_efi = loader/ia64/efi/linux.c;
|
||||||
arm_coreboot = loader/arm/linux.c;
|
arm = loader/arm/linux.c;
|
||||||
arm_efi = loader/efi/linux.c;
|
arm64 = loader/arm64/linux.c;
|
||||||
arm_uboot = loader/arm/linux.c;
|
|
||||||
arm64 = loader/efi/linux.c;
|
|
||||||
loongarch64 = loader/efi/linux.c;
|
|
||||||
riscv32 = loader/efi/linux.c;
|
|
||||||
riscv64 = loader/efi/linux.c;
|
|
||||||
i386_efi = loader/efi/linux.c;
|
|
||||||
x86_64_efi = loader/efi/linux.c;
|
|
||||||
emu = loader/emu/linux.c;
|
|
||||||
common = loader/linux.c;
|
common = loader/linux.c;
|
||||||
common = lib/cmdline.c;
|
common = lib/cmdline.c;
|
||||||
|
enable = noemu;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = fdt;
|
name = fdt;
|
||||||
efi = loader/efi/fdt.c;
|
arm64 = loader/arm64/fdt.c;
|
||||||
common = lib/fdt.c;
|
common = lib/fdt.c;
|
||||||
enable = fdt;
|
enable = fdt;
|
||||||
};
|
};
|
||||||
@@ -1935,8 +1749,6 @@ module = {
|
|||||||
common = mmap/mmap.c;
|
common = mmap/mmap.c;
|
||||||
x86 = mmap/i386/uppermem.c;
|
x86 = mmap/i386/uppermem.c;
|
||||||
x86 = mmap/i386/mmap.c;
|
x86 = mmap/i386/mmap.c;
|
||||||
i386_xen_pvh = mmap/i386/uppermem.c;
|
|
||||||
i386_xen_pvh = mmap/i386/mmap.c;
|
|
||||||
|
|
||||||
i386_pc = mmap/i386/pc/mmap.c;
|
i386_pc = mmap/i386/pc/mmap.c;
|
||||||
i386_pc = mmap/i386/pc/mmap_helper.S;
|
i386_pc = mmap/i386/pc/mmap_helper.S;
|
||||||
@@ -1946,13 +1758,9 @@ module = {
|
|||||||
mips = mmap/mips/uppermem.c;
|
mips = mmap/mips/uppermem.c;
|
||||||
|
|
||||||
enable = x86;
|
enable = x86;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
enable = ia64_efi;
|
enable = ia64_efi;
|
||||||
enable = arm_efi;
|
enable = arm_efi;
|
||||||
enable = arm64_efi;
|
enable = arm64_efi;
|
||||||
enable = loongarch64_efi;
|
|
||||||
enable = riscv32_efi;
|
|
||||||
enable = riscv64_efi;
|
|
||||||
enable = mips;
|
enable = mips;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -1965,6 +1773,7 @@ module = {
|
|||||||
common = normal/autofs.c;
|
common = normal/autofs.c;
|
||||||
common = normal/color.c;
|
common = normal/color.c;
|
||||||
common = normal/completion.c;
|
common = normal/completion.c;
|
||||||
|
common = normal/datetime.c;
|
||||||
common = normal/menu.c;
|
common = normal/menu.c;
|
||||||
common = normal/menu_entry.c;
|
common = normal/menu_entry.c;
|
||||||
common = normal/menu_text.c;
|
common = normal/menu_text.c;
|
||||||
@@ -1993,7 +1802,7 @@ module = {
|
|||||||
extra_dist = script/yylex.l;
|
extra_dist = script/yylex.l;
|
||||||
extra_dist = script/parser.y;
|
extra_dist = script/parser.y;
|
||||||
|
|
||||||
cflags = '$(CFLAGS_POSIX) -Wno-redundant-decls -Wno-unused-but-set-variable';
|
cflags = '$(CFLAGS_POSIX) -Wno-redundant-decls';
|
||||||
cppflags = '$(CPPFLAGS_POSIX)';
|
cppflags = '$(CPPFLAGS_POSIX)';
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2060,7 +1869,6 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = at_keyboard;
|
name = at_keyboard;
|
||||||
common = term/at_keyboard.c;
|
common = term/at_keyboard.c;
|
||||||
common = term/ps2.c;
|
|
||||||
enable = x86;
|
enable = x86;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -2079,11 +1887,9 @@ module = {
|
|||||||
name = serial;
|
name = serial;
|
||||||
common = term/serial.c;
|
common = term/serial.c;
|
||||||
x86 = term/ns8250.c;
|
x86 = term/ns8250.c;
|
||||||
x86 = term/ns8250-spcr.c;
|
|
||||||
ieee1275 = term/ieee1275/serial.c;
|
ieee1275 = term/ieee1275/serial.c;
|
||||||
mips_arc = term/arc/serial.c;
|
mips_arc = term/arc/serial.c;
|
||||||
efi = term/efi/serial.c;
|
efi = term/efi/serial.c;
|
||||||
x86 = term/pci/serial.c;
|
|
||||||
|
|
||||||
enable = terminfomodule;
|
enable = terminfomodule;
|
||||||
enable = ieee1275;
|
enable = ieee1275;
|
||||||
@@ -2155,11 +1961,6 @@ module = {
|
|||||||
common = tests/example_functional_test.c;
|
common = tests/example_functional_test.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = strtoull_test;
|
|
||||||
common = tests/strtoull_test.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = setjmp_test;
|
name = setjmp_test;
|
||||||
common = tests/setjmp_test.c;
|
common = tests/setjmp_test.c;
|
||||||
@@ -2190,7 +1991,6 @@ module = {
|
|||||||
name = legacy_password_test;
|
name = legacy_password_test;
|
||||||
common = tests/legacy_password_test.c;
|
common = tests/legacy_password_test.c;
|
||||||
enable = i386_pc;
|
enable = i386_pc;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
enable = i386_efi;
|
enable = i386_efi;
|
||||||
enable = x86_64_efi;
|
enable = x86_64_efi;
|
||||||
enable = emu;
|
enable = emu;
|
||||||
@@ -2325,14 +2125,6 @@ module = {
|
|||||||
condition = COND_GRUB_EMU_SDL;
|
condition = COND_GRUB_EMU_SDL;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = sdl;
|
|
||||||
emu = video/emu/sdl.c;
|
|
||||||
enable = emu;
|
|
||||||
condition = COND_GRUB_EMU_SDL2;
|
|
||||||
cflags = '$(SDL2_CFLAGS)';
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = datehook;
|
name = datehook;
|
||||||
common = hook/datehook.c;
|
common = hook/datehook.c;
|
||||||
@@ -2397,7 +2189,6 @@ module = {
|
|||||||
xen = lib/i386/pc/vesa_modes_table.c;
|
xen = lib/i386/pc/vesa_modes_table.c;
|
||||||
|
|
||||||
enable = i386_pc;
|
enable = i386_pc;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
enable = i386_efi;
|
enable = i386_efi;
|
||||||
enable = x86_64_efi;
|
enable = x86_64_efi;
|
||||||
enable = emu;
|
enable = emu;
|
||||||
@@ -2441,12 +2232,10 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = backtrace;
|
name = backtrace;
|
||||||
x86 = lib/i386/backtrace.c;
|
x86 = lib/i386/backtrace.c;
|
||||||
i386_xen_pvh = lib/i386/backtrace.c;
|
|
||||||
i386_xen = lib/i386/backtrace.c;
|
i386_xen = lib/i386/backtrace.c;
|
||||||
x86_64_xen = lib/i386/backtrace.c;
|
x86_64_xen = lib/i386/backtrace.c;
|
||||||
common = lib/backtrace.c;
|
common = lib/backtrace.c;
|
||||||
enable = x86;
|
enable = x86;
|
||||||
enable = i386_xen_pvh;
|
|
||||||
enable = i386_xen;
|
enable = i386_xen;
|
||||||
enable = x86_64_xen;
|
enable = x86_64_xen;
|
||||||
};
|
};
|
||||||
@@ -2545,13 +2334,6 @@ module = {
|
|||||||
common = commands/testspeed.c;
|
common = commands/testspeed.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = tpm;
|
|
||||||
common = commands/tpm.c;
|
|
||||||
efi = commands/efi/tpm.c;
|
|
||||||
enable = efi;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = tr;
|
name = tr;
|
||||||
common = commands/tr.c;
|
common = commands/tr.c;
|
||||||
@@ -2573,25 +2355,3 @@ module = {
|
|||||||
common = loader/i386/xen_file64.c;
|
common = loader/i386/xen_file64.c;
|
||||||
extra_dist = loader/i386/xen_fileXX.c;
|
extra_dist = loader/i386/xen_fileXX.c;
|
||||||
};
|
};
|
||||||
module = {
|
|
||||||
name = rdmsr;
|
|
||||||
common = commands/i386/rdmsr.c;
|
|
||||||
enable = x86;
|
|
||||||
};
|
|
||||||
module = {
|
|
||||||
name = wrmsr;
|
|
||||||
common = commands/i386/wrmsr.c;
|
|
||||||
enable = x86;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
|
||||||
name = memtools;
|
|
||||||
common = commands/memtools.c;
|
|
||||||
condition = COND_MM_DEBUG;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
|
||||||
name = bli;
|
|
||||||
efi = commands/bli.c;
|
|
||||||
enable = efi;
|
|
||||||
};
|
|
||||||
@@ -37,8 +37,8 @@
|
|||||||
start:
|
start:
|
||||||
_start:
|
_start:
|
||||||
/*
|
/*
|
||||||
* _start is loaded at 0x8000 and is jumped to with
|
* _start is loaded at 0x2000 and is jumped to with
|
||||||
* CS:IP 0:0x8000 in kernel.
|
* CS:IP 0:0x2000 in kernel.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -118,16 +118,7 @@ LOCAL (codestart):
|
|||||||
|
|
||||||
#include "../../../kern/i386/realmode.S"
|
#include "../../../kern/i386/realmode.S"
|
||||||
|
|
||||||
/*
|
|
||||||
*
|
|
||||||
* This is a workaround for clang adding a section containing only .addrsig
|
|
||||||
* Since clang itself is unable to assemble this pseudo-opcode, just replace
|
|
||||||
* it with .text
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
#define addrsig text
|
|
||||||
#include <rs_decoder.h>
|
#include <rs_decoder.h>
|
||||||
#undef addrsig
|
|
||||||
|
|
||||||
.text
|
.text
|
||||||
|
|
||||||
|
|||||||
@@ -21,24 +21,6 @@
|
|||||||
|
|
||||||
.text
|
.text
|
||||||
.align 4
|
.align 4
|
||||||
/*
|
|
||||||
* We're writing the a.out header ourselves as newer
|
|
||||||
* upstream versions of binutils no longer support
|
|
||||||
* the a.out format on sparc64.
|
|
||||||
*
|
|
||||||
* The boot loader fits into 512 bytes with 32 bytes
|
|
||||||
* used for the a.out header, hence the text segment
|
|
||||||
* size is 512 - 32. There is no data segment and no
|
|
||||||
* code relocation, thus those fields remain zero.
|
|
||||||
*/
|
|
||||||
.word 0x1030107 /* Magic number. */
|
|
||||||
.word 512 - GRUB_BOOT_AOUT_HEADER_SIZE /* Size of text segment. */
|
|
||||||
.word 0 /* Size of initialized data. */
|
|
||||||
.word 0 /* Size of uninitialized data. */
|
|
||||||
.word 0 /* Size of symbol table || checksum. */
|
|
||||||
.word _start /* Entry point. */
|
|
||||||
.word 0 /* Size of text relocation. */
|
|
||||||
.word 0 /* Size of data relocation. */
|
|
||||||
.globl _start
|
.globl _start
|
||||||
_start:
|
_start:
|
||||||
/* OF CIF entry point arrives in %o4 */
|
/* OF CIF entry point arrives in %o4 */
|
||||||
@@ -48,7 +30,7 @@ pic_base:
|
|||||||
|
|
||||||
#ifndef CDBOOT
|
#ifndef CDBOOT
|
||||||
/* The offsets to these locations are defined by the
|
/* The offsets to these locations are defined by the
|
||||||
* GRUB_BOOT_MACHINE_foo macros in include/grub/sparc64/ieee1275/boot.h,
|
* GRUB_BOOT_MACHINE_foo macros in include/grub/sparc/ieee1275/boot.h,
|
||||||
* and grub-setup uses this to patch these next three values as needed.
|
* and grub-setup uses this to patch these next three values as needed.
|
||||||
*
|
*
|
||||||
* The boot_path will be the OF device path of the partition where the
|
* The boot_path will be the OF device path of the partition where the
|
||||||
@@ -58,14 +40,10 @@ 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).
|
||||||
*
|
|
||||||
* Since this assembly code includes the 32 bytes long a.out header,
|
|
||||||
* we need to move the actual code entry point forward by the size
|
|
||||||
* of the a.out header, i.e. += GRUB_BOOT_AOUT_HEADER_SIZE.
|
|
||||||
*/
|
*/
|
||||||
.org GRUB_BOOT_MACHINE_BOOT_DEVPATH + GRUB_BOOT_AOUT_HEADER_SIZE
|
.org GRUB_BOOT_MACHINE_BOOT_DEVPATH
|
||||||
boot_path:
|
boot_path:
|
||||||
.org GRUB_BOOT_MACHINE_KERNEL_BYTE + GRUB_BOOT_AOUT_HEADER_SIZE
|
.org 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
|
||||||
@@ -74,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 + GRUB_BOOT_AOUT_HEADER_SIZE
|
.org 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
|
||||||
@@ -91,10 +69,6 @@ prom_seek_name: .asciz "seek"
|
|||||||
prom_read_name: .asciz "read"
|
prom_read_name: .asciz "read"
|
||||||
prom_exit_name: .asciz "exit"
|
prom_exit_name: .asciz "exit"
|
||||||
grub_name: .asciz "GRUB "
|
grub_name: .asciz "GRUB "
|
||||||
#ifdef CDBOOT
|
|
||||||
prom_close_name: .asciz "close"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define GRUB_NAME_LEN 5
|
#define GRUB_NAME_LEN 5
|
||||||
|
|
||||||
.align 4
|
.align 4
|
||||||
@@ -239,12 +213,6 @@ bootpath_known:
|
|||||||
call prom_call_3_1_o1
|
call prom_call_3_1_o1
|
||||||
#ifdef CDBOOT
|
#ifdef CDBOOT
|
||||||
LDUW_ABS(kernel_size, 0x00, %o3)
|
LDUW_ABS(kernel_size, 0x00, %o3)
|
||||||
|
|
||||||
GET_ABS(prom_close_name, %o0)
|
|
||||||
mov 1, %g1
|
|
||||||
mov 0, %o5
|
|
||||||
call prom_call
|
|
||||||
mov BOOTDEV_REG, %o1
|
|
||||||
#else
|
#else
|
||||||
mov 512, %o3
|
mov 512, %o3
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
+11
-11
@@ -21,12 +21,12 @@
|
|||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
|
|
||||||
static grub_uint32_t base_win[GRUB_MACHINE_PCI_NUM_WIN];
|
static grub_uint32_t base_win[GRUB_MACHINE_PCI_NUM_WIN];
|
||||||
static const grub_size_t sizes_win[GRUB_MACHINE_PCI_NUM_WIN] =
|
static const grub_size_t sizes_win[GRUB_MACHINE_PCI_NUM_WIN] =
|
||||||
{GRUB_MACHINE_PCI_WIN1_SIZE, GRUB_MACHINE_PCI_WIN_SIZE,
|
{GRUB_MACHINE_PCI_WIN1_SIZE, GRUB_MACHINE_PCI_WIN_SIZE,
|
||||||
GRUB_MACHINE_PCI_WIN_SIZE};
|
GRUB_MACHINE_PCI_WIN_SIZE};
|
||||||
/* Usage counters. */
|
/* Usage counters. */
|
||||||
static int usage_win[GRUB_MACHINE_PCI_NUM_WIN];
|
static int usage_win[GRUB_MACHINE_PCI_NUM_WIN];
|
||||||
static grub_addr_t addr_win[GRUB_MACHINE_PCI_NUM_WIN] =
|
static grub_addr_t addr_win[GRUB_MACHINE_PCI_NUM_WIN] =
|
||||||
{GRUB_MACHINE_PCI_WIN1_ADDR, GRUB_MACHINE_PCI_WIN2_ADDR,
|
{GRUB_MACHINE_PCI_WIN1_ADDR, GRUB_MACHINE_PCI_WIN2_ADDR,
|
||||||
GRUB_MACHINE_PCI_WIN3_ADDR};
|
GRUB_MACHINE_PCI_WIN3_ADDR};
|
||||||
|
|
||||||
@@ -93,9 +93,9 @@ write_bases_2f (void)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
grub_uint32_t reg = 0;
|
grub_uint32_t reg = 0;
|
||||||
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
|
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
|
||||||
reg |= (((base_win[i] >> GRUB_MACHINE_PCI_WIN_SHIFT)
|
reg |= (((base_win[i] >> GRUB_MACHINE_PCI_WIN_SHIFT)
|
||||||
& GRUB_MACHINE_PCI_WIN_MASK)
|
& GRUB_MACHINE_PCI_WIN_MASK)
|
||||||
<< (i * GRUB_MACHINE_PCI_WIN_MASK_SIZE));
|
<< (i * GRUB_MACHINE_PCI_WIN_MASK_SIZE));
|
||||||
GRUB_MACHINE_PCI_IO_CTRL_REG_2F = reg;
|
GRUB_MACHINE_PCI_IO_CTRL_REG_2F = reg;
|
||||||
}
|
}
|
||||||
@@ -111,23 +111,23 @@ grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)),
|
|||||||
|
|
||||||
/* First try already used registers. */
|
/* First try already used registers. */
|
||||||
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
|
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
|
||||||
if (usage_win[i] && base_win[i] <= base
|
if (usage_win[i] && base_win[i] <= base
|
||||||
&& base_win[i] + sizes_win[i] > base + size)
|
&& base_win[i] + sizes_win[i] > base + size)
|
||||||
{
|
{
|
||||||
usage_win[i]++;
|
usage_win[i]++;
|
||||||
return (void *)
|
return (void *)
|
||||||
(addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK));
|
(addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK));
|
||||||
}
|
}
|
||||||
/* Map new register. */
|
/* Map new register. */
|
||||||
newbase = base & ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK;
|
newbase = base & ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK;
|
||||||
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
|
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
|
||||||
if (!usage_win[i] && newbase <= base
|
if (!usage_win[i] && newbase <= base
|
||||||
&& newbase + sizes_win[i] > base + size)
|
&& newbase + sizes_win[i] > base + size)
|
||||||
{
|
{
|
||||||
usage_win[i]++;
|
usage_win[i]++;
|
||||||
base_win[i] = newbase;
|
base_win[i] = newbase;
|
||||||
write_bases_2f ();
|
write_bases_2f ();
|
||||||
return (void *)
|
return (void *)
|
||||||
(addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK));
|
(addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK));
|
||||||
}
|
}
|
||||||
grub_fatal ("Out of PCI windows.");
|
grub_fatal ("Out of PCI windows.");
|
||||||
@@ -164,7 +164,7 @@ grub_pci_device_unmap_range (grub_pci_device_t dev __attribute__ ((unused)),
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
|
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
|
||||||
if (usage_win[i] && addr_win[i]
|
if (usage_win[i] && addr_win[i]
|
||||||
== (((grub_addr_t) mem | 0x20000000)
|
== (((grub_addr_t) mem | 0x20000000)
|
||||||
& ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK))
|
& ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK))
|
||||||
{
|
{
|
||||||
|
|||||||
+13
-14
@@ -72,7 +72,7 @@ grub_cs5536_read_msr (grub_pci_device_t dev, grub_uint32_t addr)
|
|||||||
addr);
|
addr);
|
||||||
ret = (grub_uint64_t)
|
ret = (grub_uint64_t)
|
||||||
grub_pci_read (grub_pci_make_address (dev, GRUB_CS5536_MSR_MAILBOX_DATA0));
|
grub_pci_read (grub_pci_make_address (dev, GRUB_CS5536_MSR_MAILBOX_DATA0));
|
||||||
ret |= (((grub_uint64_t)
|
ret |= (((grub_uint64_t)
|
||||||
grub_pci_read (grub_pci_make_address (dev,
|
grub_pci_read (grub_pci_make_address (dev,
|
||||||
GRUB_CS5536_MSR_MAILBOX_DATA1)))
|
GRUB_CS5536_MSR_MAILBOX_DATA1)))
|
||||||
<< 32);
|
<< 32);
|
||||||
@@ -100,7 +100,7 @@ grub_cs5536_smbus_wait (grub_port_t smbbase)
|
|||||||
grub_uint8_t status;
|
grub_uint8_t status;
|
||||||
status = grub_inb (smbbase + GRUB_CS5536_SMB_REG_STATUS);
|
status = grub_inb (smbbase + GRUB_CS5536_SMB_REG_STATUS);
|
||||||
if (status & GRUB_CS5536_SMB_REG_STATUS_SDAST)
|
if (status & GRUB_CS5536_SMB_REG_STATUS_SDAST)
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
if (status & GRUB_CS5536_SMB_REG_STATUS_BER)
|
if (status & GRUB_CS5536_SMB_REG_STATUS_BER)
|
||||||
return grub_error (GRUB_ERR_IO, "SM bus error");
|
return grub_error (GRUB_ERR_IO, "SM bus error");
|
||||||
if (status & GRUB_CS5536_SMB_REG_STATUS_NACK)
|
if (status & GRUB_CS5536_SMB_REG_STATUS_NACK)
|
||||||
@@ -122,8 +122,8 @@ grub_cs5536_read_spd_byte (grub_port_t smbbase, grub_uint8_t dev,
|
|||||||
smbbase + GRUB_CS5536_SMB_REG_CTRL1);
|
smbbase + GRUB_CS5536_SMB_REG_CTRL1);
|
||||||
|
|
||||||
/* Send device address. */
|
/* Send device address. */
|
||||||
err = grub_cs5536_smbus_wait (smbbase);
|
err = grub_cs5536_smbus_wait (smbbase);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
grub_outb (dev << 1, smbbase + GRUB_CS5536_SMB_REG_DATA);
|
grub_outb (dev << 1, smbbase + GRUB_CS5536_SMB_REG_DATA);
|
||||||
|
|
||||||
@@ -139,8 +139,8 @@ grub_cs5536_read_spd_byte (grub_port_t smbbase, grub_uint8_t dev,
|
|||||||
grub_outb (addr, smbbase + GRUB_CS5536_SMB_REG_DATA);
|
grub_outb (addr, smbbase + GRUB_CS5536_SMB_REG_DATA);
|
||||||
|
|
||||||
/* Send START. */
|
/* Send START. */
|
||||||
err = grub_cs5536_smbus_wait (smbbase);
|
err = grub_cs5536_smbus_wait (smbbase);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
grub_outb (grub_inb (smbbase + GRUB_CS5536_SMB_REG_CTRL1)
|
grub_outb (grub_inb (smbbase + GRUB_CS5536_SMB_REG_CTRL1)
|
||||||
| GRUB_CS5536_SMB_REG_CTRL1_START,
|
| GRUB_CS5536_SMB_REG_CTRL1_START,
|
||||||
@@ -161,7 +161,7 @@ grub_cs5536_read_spd_byte (grub_port_t smbbase, grub_uint8_t dev,
|
|||||||
smbbase + GRUB_CS5536_SMB_REG_CTRL1);
|
smbbase + GRUB_CS5536_SMB_REG_CTRL1);
|
||||||
|
|
||||||
err = grub_cs5536_smbus_wait (smbbase);
|
err = grub_cs5536_smbus_wait (smbbase);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
*res = grub_inb (smbbase + GRUB_CS5536_SMB_REG_DATA);
|
*res = grub_inb (smbbase + GRUB_CS5536_SMB_REG_DATA);
|
||||||
|
|
||||||
@@ -198,8 +198,8 @@ grub_cs5536_init_smbus (grub_pci_device_t dev, grub_uint16_t divisor,
|
|||||||
grub_outb (((divisor >> 7) & 0xff), *smbbase + GRUB_CS5536_SMB_REG_CTRL3);
|
grub_outb (((divisor >> 7) & 0xff), *smbbase + GRUB_CS5536_SMB_REG_CTRL3);
|
||||||
grub_outb (((divisor << 1) & 0xfe) | GRUB_CS5536_SMB_REG_CTRL2_ENABLE,
|
grub_outb (((divisor << 1) & 0xfe) | GRUB_CS5536_SMB_REG_CTRL2_ENABLE,
|
||||||
*smbbase + GRUB_CS5536_SMB_REG_CTRL2);
|
*smbbase + GRUB_CS5536_SMB_REG_CTRL2);
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_err_t
|
grub_err_t
|
||||||
@@ -217,7 +217,7 @@ grub_cs5536_read_spd (grub_port_t smbbase, grub_uint8_t dev,
|
|||||||
if (b == 0)
|
if (b == 0)
|
||||||
return grub_error (GRUB_ERR_IO, "no SPD found");
|
return grub_error (GRUB_ERR_IO, "no SPD found");
|
||||||
size = b;
|
size = b;
|
||||||
|
|
||||||
((grub_uint8_t *) res)[0] = b;
|
((grub_uint8_t *) res)[0] = b;
|
||||||
for (ptr = 1; ptr < size; ptr++)
|
for (ptr = 1; ptr < size; ptr++)
|
||||||
{
|
{
|
||||||
@@ -310,7 +310,7 @@ grub_cs5536_init_geode (grub_pci_device_t dev)
|
|||||||
|
|
||||||
/* Initialise USB controller. */
|
/* Initialise USB controller. */
|
||||||
/* FIXME: assign adresses dynamically. */
|
/* FIXME: assign adresses dynamically. */
|
||||||
grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_USB_OHCI_BASE,
|
grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_USB_OHCI_BASE,
|
||||||
GRUB_CS5536_MSR_USB_BASE_BUS_MASTER
|
GRUB_CS5536_MSR_USB_BASE_BUS_MASTER
|
||||||
| GRUB_CS5536_MSR_USB_BASE_MEMORY_ENABLE
|
| GRUB_CS5536_MSR_USB_BASE_MEMORY_ENABLE
|
||||||
| 0x05024000);
|
| 0x05024000);
|
||||||
@@ -331,9 +331,8 @@ grub_cs5536_init_geode (grub_pci_device_t dev)
|
|||||||
|
|
||||||
{
|
{
|
||||||
volatile grub_uint32_t *oc;
|
volatile grub_uint32_t *oc;
|
||||||
|
oc = grub_pci_device_map_range (dev, 0x05022000,
|
||||||
oc = grub_absolute_pointer (grub_pci_device_map_range (dev, 0x05022000,
|
GRUB_CS5536_USB_OPTION_REGS_SIZE);
|
||||||
GRUB_CS5536_USB_OPTION_REGS_SIZE));
|
|
||||||
|
|
||||||
oc[GRUB_CS5536_USB_OPTION_REG_UOCMUX] =
|
oc[GRUB_CS5536_USB_OPTION_REG_UOCMUX] =
|
||||||
(oc[GRUB_CS5536_USB_OPTION_REG_UOCMUX]
|
(oc[GRUB_CS5536_USB_OPTION_REG_UOCMUX]
|
||||||
|
|||||||
@@ -1,256 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2016 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/fdtbus.h>
|
|
||||||
#include <grub/fdt.h>
|
|
||||||
#include <grub/term.h>
|
|
||||||
|
|
||||||
static const void *dtb;
|
|
||||||
static grub_size_t root_address_cells, root_size_cells;
|
|
||||||
/* Pointer to this symbol signals invalid mapping. */
|
|
||||||
char grub_fdtbus_invalid_mapping[1];
|
|
||||||
|
|
||||||
struct grub_fdtbus_dev *devs;
|
|
||||||
struct grub_fdtbus_driver *drivers;
|
|
||||||
|
|
||||||
int
|
|
||||||
grub_fdtbus_is_compatible (const char *compat_string,
|
|
||||||
const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
grub_size_t compatible_size;
|
|
||||||
const char *compatible = grub_fdt_get_prop (dtb, dev->node, "compatible",
|
|
||||||
&compatible_size);
|
|
||||||
if (!compatible)
|
|
||||||
return 0;
|
|
||||||
const char *compatible_end = compatible + compatible_size;
|
|
||||||
while (compatible < compatible_end)
|
|
||||||
{
|
|
||||||
if (grub_strcmp (compat_string, compatible) == 0)
|
|
||||||
return 1;
|
|
||||||
compatible += grub_strlen (compatible) + 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
fdtbus_scan (struct grub_fdtbus_dev *parent)
|
|
||||||
{
|
|
||||||
int node;
|
|
||||||
for (node = grub_fdt_first_node (dtb, parent ? parent->node : 0); node >= 0;
|
|
||||||
node = grub_fdt_next_node (dtb, node))
|
|
||||||
{
|
|
||||||
struct grub_fdtbus_dev *dev;
|
|
||||||
struct grub_fdtbus_driver *driver;
|
|
||||||
dev = grub_zalloc (sizeof (*dev));
|
|
||||||
if (!dev)
|
|
||||||
{
|
|
||||||
grub_print_error ();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
dev->node = node;
|
|
||||||
dev->next = devs;
|
|
||||||
dev->parent = parent;
|
|
||||||
devs = dev;
|
|
||||||
FOR_LIST_ELEMENTS(driver, drivers)
|
|
||||||
if (!dev->driver && grub_fdtbus_is_compatible (driver->compatible, dev))
|
|
||||||
{
|
|
||||||
grub_dprintf ("fdtbus", "Attaching %s\n", driver->compatible);
|
|
||||||
if (driver->attach (dev) == GRUB_ERR_NONE)
|
|
||||||
{
|
|
||||||
grub_dprintf ("fdtbus", "Attached %s\n", driver->compatible);
|
|
||||||
dev->driver = driver;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
grub_print_error ();
|
|
||||||
}
|
|
||||||
fdtbus_scan (dev);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_fdtbus_register (struct grub_fdtbus_driver *driver)
|
|
||||||
{
|
|
||||||
struct grub_fdtbus_dev *dev;
|
|
||||||
grub_dprintf ("fdtbus", "Registering %s\n", driver->compatible);
|
|
||||||
grub_list_push (GRUB_AS_LIST_P (&drivers),
|
|
||||||
GRUB_AS_LIST (driver));
|
|
||||||
for (dev = devs; dev; dev = dev->next)
|
|
||||||
if (!dev->driver && grub_fdtbus_is_compatible (driver->compatible, dev))
|
|
||||||
{
|
|
||||||
grub_dprintf ("fdtbus", "Attaching %s (%p)\n", driver->compatible, dev);
|
|
||||||
if (driver->attach (dev) == GRUB_ERR_NONE)
|
|
||||||
{
|
|
||||||
grub_dprintf ("fdtbus", "Attached %s\n", driver->compatible);
|
|
||||||
dev->driver = driver;
|
|
||||||
}
|
|
||||||
grub_print_error ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_fdtbus_unregister (struct grub_fdtbus_driver *driver)
|
|
||||||
{
|
|
||||||
grub_list_remove (GRUB_AS_LIST (driver));
|
|
||||||
struct grub_fdtbus_dev *dev;
|
|
||||||
for (dev = devs; dev; dev = dev->next)
|
|
||||||
if (dev->driver == driver)
|
|
||||||
{
|
|
||||||
if (driver->detach)
|
|
||||||
driver->detach(dev);
|
|
||||||
dev->driver = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_fdtbus_init (const void *dtb_in, grub_size_t size)
|
|
||||||
{
|
|
||||||
if (!dtb_in || grub_fdt_check_header (dtb_in, size) < 0)
|
|
||||||
grub_fatal ("invalid FDT");
|
|
||||||
dtb = dtb_in;
|
|
||||||
const grub_uint32_t *prop = grub_fdt_get_prop (dtb, 0, "#address-cells", 0);
|
|
||||||
if (prop)
|
|
||||||
root_address_cells = grub_be_to_cpu32 (*prop);
|
|
||||||
else
|
|
||||||
root_address_cells = 1;
|
|
||||||
|
|
||||||
prop = grub_fdt_get_prop (dtb, 0, "#size-cells", 0);
|
|
||||||
if (prop)
|
|
||||||
root_size_cells = grub_be_to_cpu32 (*prop);
|
|
||||||
else
|
|
||||||
root_size_cells = 1;
|
|
||||||
|
|
||||||
fdtbus_scan (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
get_address_cells (const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
const grub_uint32_t *prop;
|
|
||||||
if (!dev)
|
|
||||||
return root_address_cells;
|
|
||||||
prop = grub_fdt_get_prop (dtb, dev->node, "#address-cells", 0);
|
|
||||||
if (prop)
|
|
||||||
return grub_be_to_cpu32 (*prop);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
get_size_cells (const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
const grub_uint32_t *prop;
|
|
||||||
if (!dev)
|
|
||||||
return root_size_cells;
|
|
||||||
prop = grub_fdt_get_prop (dtb, dev->node, "#size-cells", 0);
|
|
||||||
if (prop)
|
|
||||||
return grub_be_to_cpu32 (*prop);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_uint64_t
|
|
||||||
get64 (const grub_uint32_t *reg, grub_size_t cells)
|
|
||||||
{
|
|
||||||
grub_uint64_t val = 0;
|
|
||||||
if (cells >= 1)
|
|
||||||
val = grub_be_to_cpu32 (reg[cells - 1]);
|
|
||||||
if (cells >= 2)
|
|
||||||
val |= ((grub_uint64_t) grub_be_to_cpu32 (reg[cells - 2])) << 32;
|
|
||||||
return val;
|
|
||||||
}
|
|
||||||
|
|
||||||
static volatile void *
|
|
||||||
translate (const struct grub_fdtbus_dev *dev, const grub_uint32_t *reg)
|
|
||||||
{
|
|
||||||
volatile void *ret;
|
|
||||||
const grub_uint32_t *ranges;
|
|
||||||
grub_size_t ranges_size, cells_per_mapping;
|
|
||||||
grub_size_t parent_address_cells, child_address_cells, child_size_cells;
|
|
||||||
grub_size_t nmappings, i;
|
|
||||||
if (dev == 0)
|
|
||||||
{
|
|
||||||
grub_uint64_t val;
|
|
||||||
val = get64 (reg, root_address_cells);
|
|
||||||
if (sizeof (void *) == 4 && (val >> 32))
|
|
||||||
return grub_fdtbus_invalid_mapping;
|
|
||||||
return (void *) (grub_addr_t) val;
|
|
||||||
}
|
|
||||||
ranges = grub_fdt_get_prop (dtb, dev->node, "ranges", &ranges_size);
|
|
||||||
if (!ranges)
|
|
||||||
return grub_fdtbus_invalid_mapping;
|
|
||||||
if (ranges_size == 0)
|
|
||||||
return translate (dev->parent, reg);
|
|
||||||
parent_address_cells = get_address_cells (dev->parent);
|
|
||||||
child_address_cells = get_address_cells (dev);
|
|
||||||
child_size_cells = get_size_cells (dev);
|
|
||||||
cells_per_mapping = parent_address_cells + child_address_cells + child_size_cells;
|
|
||||||
nmappings = ranges_size / 4 / cells_per_mapping;
|
|
||||||
for (i = 0; i < nmappings; i++)
|
|
||||||
{
|
|
||||||
const grub_uint32_t *child_addr = &ranges[i * cells_per_mapping];
|
|
||||||
const grub_uint32_t *parent_addr = child_addr + child_address_cells;
|
|
||||||
grub_uint64_t child_size = get64 (parent_addr + parent_address_cells, child_size_cells);
|
|
||||||
|
|
||||||
if (child_address_cells > 2 && grub_memcmp (reg, child_addr, (child_address_cells - 2) * 4) != 0)
|
|
||||||
continue;
|
|
||||||
if (get64 (reg, child_address_cells) < get64 (child_addr, child_address_cells))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
grub_uint64_t offset = get64 (reg, child_address_cells) - get64 (child_addr, child_address_cells);
|
|
||||||
if (offset >= child_size)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
ret = translate (dev->parent, parent_addr);
|
|
||||||
if (grub_fdtbus_is_mapping_valid (ret))
|
|
||||||
ret = (volatile char *) ret + offset;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
return grub_fdtbus_invalid_mapping;
|
|
||||||
}
|
|
||||||
|
|
||||||
volatile void *
|
|
||||||
grub_fdtbus_map_reg (const struct grub_fdtbus_dev *dev, int regno, grub_size_t *size)
|
|
||||||
{
|
|
||||||
grub_size_t address_cells, size_cells;
|
|
||||||
address_cells = get_address_cells (dev->parent);
|
|
||||||
size_cells = get_size_cells (dev->parent);
|
|
||||||
const grub_uint32_t *reg = grub_fdt_get_prop (dtb, dev->node, "reg", 0);
|
|
||||||
if (size && size_cells)
|
|
||||||
*size = reg[(address_cells + size_cells) * regno + address_cells];
|
|
||||||
if (size && !size_cells)
|
|
||||||
*size = 0;
|
|
||||||
return translate (dev->parent, reg + (address_cells + size_cells) * regno);
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *
|
|
||||||
grub_fdtbus_get_name (const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
return grub_fdt_get_nodename (dtb, dev->node);
|
|
||||||
}
|
|
||||||
|
|
||||||
const void *
|
|
||||||
grub_fdtbus_get_prop (const struct grub_fdtbus_dev *dev,
|
|
||||||
const char *name,
|
|
||||||
grub_uint32_t *len)
|
|
||||||
{
|
|
||||||
return grub_fdt_get_prop (dtb, dev->node, name, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
const void *
|
|
||||||
grub_fdtbus_get_fdt (void)
|
|
||||||
{
|
|
||||||
return dtb;
|
|
||||||
}
|
|
||||||
+2
-2
@@ -159,12 +159,12 @@ grub_pci_find_capability (grub_pci_device_t dev, grub_uint8_t cap)
|
|||||||
|
|
||||||
pos &= ~3;
|
pos &= ~3;
|
||||||
|
|
||||||
addr = grub_pci_make_address (dev, pos);
|
addr = grub_pci_make_address (dev, pos);
|
||||||
id = grub_pci_read_byte (addr);
|
id = grub_pci_read_byte (addr);
|
||||||
|
|
||||||
if (id == 0xff)
|
if (id == 0xff)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (id == cap)
|
if (id == cap)
|
||||||
return pos;
|
return pos;
|
||||||
pos++;
|
pos++;
|
||||||
|
|||||||
@@ -1,103 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
*
|
|
||||||
* Copyright (C) 2012 Google Inc.
|
|
||||||
* Copyright (C) 2016 Free Software Foundation, Inc.
|
|
||||||
*
|
|
||||||
* This is based on depthcharge code.
|
|
||||||
*
|
|
||||||
* 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/time.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/fdtbus.h>
|
|
||||||
#include <grub/machine/kernel.h>
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
spi_send (const struct grub_fdtbus_dev *dev, const void *data, grub_size_t sz)
|
|
||||||
{
|
|
||||||
const grub_uint8_t *ptr = data, *end = ptr + sz;
|
|
||||||
volatile grub_uint32_t *spi = grub_fdtbus_map_reg (dev, 0, 0);
|
|
||||||
spi[2] = 0;
|
|
||||||
spi[1] = sz - 1;
|
|
||||||
spi[0] = ((1 << 18) | spi[0]) & ~(1 << 19);
|
|
||||||
spi[2] = 1;
|
|
||||||
while (ptr < end)
|
|
||||||
{
|
|
||||||
while (spi[9] & 2);
|
|
||||||
spi[256] = *ptr++;
|
|
||||||
}
|
|
||||||
while (spi[9] & 1);
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
spi_receive (const struct grub_fdtbus_dev *dev, void *data, grub_size_t sz)
|
|
||||||
{
|
|
||||||
grub_uint8_t *ptr = data, *end = ptr + sz;
|
|
||||||
volatile grub_uint32_t *spi = grub_fdtbus_map_reg (dev, 0, 0);
|
|
||||||
spi[2] = 0;
|
|
||||||
spi[1] = sz - 1;
|
|
||||||
spi[0] = ((1 << 19) | spi[0]) & ~(1 << 18);
|
|
||||||
spi[2] = 1;
|
|
||||||
while (ptr < end)
|
|
||||||
{
|
|
||||||
while (spi[9] & 8);
|
|
||||||
*ptr++ = spi[512];
|
|
||||||
}
|
|
||||||
while (spi[9] & 1);
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
spi_start (const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
volatile grub_uint32_t *spi = grub_fdtbus_map_reg (dev, 0, 0);
|
|
||||||
spi[3] = 1;
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
spi_stop (const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
volatile grub_uint32_t *spi = grub_fdtbus_map_reg (dev, 0, 0);
|
|
||||||
spi[3] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
spi_attach(const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
if (!grub_fdtbus_is_mapping_valid (grub_fdtbus_map_reg (dev, 0, 0)))
|
|
||||||
return GRUB_ERR_IO;
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static struct grub_fdtbus_driver spi =
|
|
||||||
{
|
|
||||||
.compatible = "rockchip,rk3288-spi",
|
|
||||||
.attach = spi_attach,
|
|
||||||
.send = spi_send,
|
|
||||||
.receive = spi_receive,
|
|
||||||
.start = spi_start,
|
|
||||||
.stop = spi_stop,
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_rk3288_spi_init (void)
|
|
||||||
{
|
|
||||||
grub_fdtbus_register (&spi);
|
|
||||||
}
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
/* ehci.c - EHCI Support. */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2011 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/time.h>
|
|
||||||
#include <grub/usb.h>
|
|
||||||
#include <grub/fdtbus.h>
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
ehci_attach(const struct grub_fdtbus_dev *dev)
|
|
||||||
{
|
|
||||||
grub_dprintf ("ehci", "Found generic-ehci\n");
|
|
||||||
|
|
||||||
grub_ehci_init_device (grub_fdtbus_map_reg (dev, 0, 0));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct grub_fdtbus_driver ehci =
|
|
||||||
{
|
|
||||||
.compatible = "generic-ehci",
|
|
||||||
.attach = ehci_attach
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_ehci_pci_scan (void)
|
|
||||||
{
|
|
||||||
grub_fdtbus_register (&ehci);
|
|
||||||
}
|
|
||||||
@@ -1,208 +0,0 @@
|
|||||||
/* ehci.c - EHCI Support. */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2011 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/pci.h>
|
|
||||||
#include <grub/cpu/pci.h>
|
|
||||||
#include <grub/cs5536.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/time.h>
|
|
||||||
#include <grub/usb.h>
|
|
||||||
|
|
||||||
#define GRUB_EHCI_PCI_SBRN_REG 0x60
|
|
||||||
#define GRUB_EHCI_ADDR_MEM_MASK (~0xff)
|
|
||||||
|
|
||||||
/* USBLEGSUP bits and related OS OWNED byte offset */
|
|
||||||
enum
|
|
||||||
{
|
|
||||||
GRUB_EHCI_BIOS_OWNED = (1 << 16),
|
|
||||||
GRUB_EHCI_OS_OWNED = (1 << 24)
|
|
||||||
};
|
|
||||||
|
|
||||||
/* PCI iteration function... */
|
|
||||||
static int
|
|
||||||
grub_ehci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|
||||||
void *data __attribute__ ((unused)))
|
|
||||||
{
|
|
||||||
volatile grub_uint32_t *regs;
|
|
||||||
grub_uint32_t base, base_h;
|
|
||||||
grub_uint32_t eecp_offset;
|
|
||||||
grub_uint32_t usblegsup = 0;
|
|
||||||
grub_uint64_t maxtime;
|
|
||||||
grub_uint32_t interf;
|
|
||||||
grub_uint32_t subclass;
|
|
||||||
grub_uint32_t class;
|
|
||||||
grub_uint8_t release;
|
|
||||||
grub_uint32_t class_code;
|
|
||||||
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: begin\n");
|
|
||||||
|
|
||||||
if (pciid == GRUB_CS5536_PCIID)
|
|
||||||
{
|
|
||||||
grub_uint64_t basereg;
|
|
||||||
|
|
||||||
basereg = grub_cs5536_read_msr (dev, GRUB_CS5536_MSR_USB_EHCI_BASE);
|
|
||||||
if (!(basereg & GRUB_CS5536_MSR_USB_BASE_MEMORY_ENABLE))
|
|
||||||
{
|
|
||||||
/* Shouldn't happen. */
|
|
||||||
grub_dprintf ("ehci", "No EHCI address is assigned\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
base = (basereg & GRUB_CS5536_MSR_USB_BASE_ADDR_MASK);
|
|
||||||
basereg |= GRUB_CS5536_MSR_USB_BASE_BUS_MASTER;
|
|
||||||
basereg &= ~GRUB_CS5536_MSR_USB_BASE_PME_ENABLED;
|
|
||||||
basereg &= ~GRUB_CS5536_MSR_USB_BASE_PME_STATUS;
|
|
||||||
basereg &= ~GRUB_CS5536_MSR_USB_BASE_SMI_ENABLE;
|
|
||||||
grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_USB_EHCI_BASE, basereg);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
grub_pci_address_t addr;
|
|
||||||
addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS);
|
|
||||||
class_code = grub_pci_read (addr) >> 8;
|
|
||||||
interf = class_code & 0xFF;
|
|
||||||
subclass = (class_code >> 8) & 0xFF;
|
|
||||||
class = class_code >> 16;
|
|
||||||
|
|
||||||
/* If this is not an EHCI controller, just return. */
|
|
||||||
if (class != 0x0c || subclass != 0x03 || interf != 0x20)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: class OK\n");
|
|
||||||
|
|
||||||
/* Check Serial Bus Release Number */
|
|
||||||
addr = grub_pci_make_address (dev, GRUB_EHCI_PCI_SBRN_REG);
|
|
||||||
release = grub_pci_read_byte (addr);
|
|
||||||
if (release != 0x20)
|
|
||||||
{
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: Wrong SBRN: %0x\n",
|
|
||||||
release);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: bus rev. num. OK\n");
|
|
||||||
|
|
||||||
/* Determine EHCI EHCC registers base address. */
|
|
||||||
addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0);
|
|
||||||
base = grub_pci_read (addr);
|
|
||||||
addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG1);
|
|
||||||
base_h = grub_pci_read (addr);
|
|
||||||
/* Stop if registers are mapped above 4G - GRUB does not currently
|
|
||||||
* work with registers mapped above 4G */
|
|
||||||
if (((base & GRUB_PCI_ADDR_MEM_TYPE_MASK) != GRUB_PCI_ADDR_MEM_TYPE_32)
|
|
||||||
&& (base_h != 0))
|
|
||||||
{
|
|
||||||
grub_dprintf ("ehci",
|
|
||||||
"EHCI grub_ehci_pci_iter: registers above 4G are not supported\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
base &= GRUB_PCI_ADDR_MEM_MASK;
|
|
||||||
if (!base)
|
|
||||||
{
|
|
||||||
grub_dprintf ("ehci",
|
|
||||||
"EHCI: EHCI is not mapped\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set bus master - needed for coreboot, VMware, broken BIOSes etc. */
|
|
||||||
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
|
|
||||||
grub_pci_write_word(addr,
|
|
||||||
GRUB_PCI_COMMAND_MEM_ENABLED
|
|
||||||
| GRUB_PCI_COMMAND_BUS_MASTER
|
|
||||||
| grub_pci_read_word(addr));
|
|
||||||
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: 32-bit EHCI OK\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: iobase of EHCC: %08x\n",
|
|
||||||
(base & GRUB_EHCI_ADDR_MEM_MASK));
|
|
||||||
|
|
||||||
regs = grub_pci_device_map_range (dev,
|
|
||||||
(base & GRUB_EHCI_ADDR_MEM_MASK),
|
|
||||||
0x100);
|
|
||||||
|
|
||||||
/* Is there EECP ? */
|
|
||||||
eecp_offset = (grub_le_to_cpu32 (regs[2]) >> 8) & 0xff;
|
|
||||||
|
|
||||||
/* Determine and change ownership. */
|
|
||||||
/* EECP offset valid in HCCPARAMS */
|
|
||||||
/* Ownership can be changed via EECP only */
|
|
||||||
if (pciid != GRUB_CS5536_PCIID && eecp_offset >= 0x40)
|
|
||||||
{
|
|
||||||
grub_pci_address_t pciaddr_eecp;
|
|
||||||
pciaddr_eecp = grub_pci_make_address (dev, eecp_offset);
|
|
||||||
|
|
||||||
usblegsup = grub_pci_read (pciaddr_eecp);
|
|
||||||
if (usblegsup & GRUB_EHCI_BIOS_OWNED)
|
|
||||||
{
|
|
||||||
grub_boot_time ("Taking ownership of EHCI controller");
|
|
||||||
grub_dprintf ("ehci",
|
|
||||||
"EHCI grub_ehci_pci_iter: EHCI owned by: BIOS\n");
|
|
||||||
/* Ownership change - set OS_OWNED bit */
|
|
||||||
grub_pci_write (pciaddr_eecp, usblegsup | GRUB_EHCI_OS_OWNED);
|
|
||||||
/* Ensure PCI register is written */
|
|
||||||
grub_pci_read (pciaddr_eecp);
|
|
||||||
|
|
||||||
/* Wait for finish of ownership change, EHCI specification
|
|
||||||
* doesn't say how long it can take... */
|
|
||||||
maxtime = grub_get_time_ms () + 1000;
|
|
||||||
while ((grub_pci_read (pciaddr_eecp) & GRUB_EHCI_BIOS_OWNED)
|
|
||||||
&& (grub_get_time_ms () < maxtime));
|
|
||||||
if (grub_pci_read (pciaddr_eecp) & GRUB_EHCI_BIOS_OWNED)
|
|
||||||
{
|
|
||||||
grub_dprintf ("ehci",
|
|
||||||
"EHCI grub_ehci_pci_iter: EHCI change ownership timeout");
|
|
||||||
/* Change ownership in "hard way" - reset BIOS ownership */
|
|
||||||
grub_pci_write (pciaddr_eecp, GRUB_EHCI_OS_OWNED);
|
|
||||||
/* Ensure PCI register is written */
|
|
||||||
grub_pci_read (pciaddr_eecp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (usblegsup & GRUB_EHCI_OS_OWNED)
|
|
||||||
/* XXX: What to do in this case - nothing ? Can it happen ? */
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: EHCI owned by: OS\n");
|
|
||||||
else
|
|
||||||
{
|
|
||||||
grub_dprintf ("ehci",
|
|
||||||
"EHCI grub_ehci_pci_iter: EHCI owned by: NONE\n");
|
|
||||||
/* XXX: What to do in this case ? Can it happen ?
|
|
||||||
* Is code below correct ? */
|
|
||||||
/* Ownership change - set OS_OWNED bit */
|
|
||||||
grub_pci_write (pciaddr_eecp, GRUB_EHCI_OS_OWNED);
|
|
||||||
/* Ensure PCI register is written */
|
|
||||||
grub_pci_read (pciaddr_eecp);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Disable SMI, just to be sure. */
|
|
||||||
pciaddr_eecp = grub_pci_make_address (dev, eecp_offset + 4);
|
|
||||||
grub_pci_write (pciaddr_eecp, 0);
|
|
||||||
/* Ensure PCI register is written */
|
|
||||||
grub_pci_read (pciaddr_eecp);
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_dprintf ("ehci", "inithw: EHCI grub_ehci_pci_iter: ownership OK\n");
|
|
||||||
|
|
||||||
grub_ehci_init_device (regs);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_ehci_pci_scan (void)
|
|
||||||
{
|
|
||||||
grub_pci_iterate (grub_ehci_pci_iter, NULL);
|
|
||||||
}
|
|
||||||
+193
-20
@@ -22,10 +22,13 @@
|
|||||||
#include <grub/usb.h>
|
#include <grub/usb.h>
|
||||||
#include <grub/usbtrans.h>
|
#include <grub/usbtrans.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
|
#include <grub/pci.h>
|
||||||
|
#include <grub/cpu/pci.h>
|
||||||
|
#include <grub/cpu/io.h>
|
||||||
#include <grub/time.h>
|
#include <grub/time.h>
|
||||||
#include <grub/loader.h>
|
#include <grub/loader.h>
|
||||||
|
#include <grub/cs5536.h>
|
||||||
#include <grub/disk.h>
|
#include <grub/disk.h>
|
||||||
#include <grub/dma.h>
|
|
||||||
#include <grub/cache.h>
|
#include <grub/cache.h>
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
@@ -36,6 +39,8 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
* - is not supporting interrupt transfers
|
* - is not supporting interrupt transfers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#define GRUB_EHCI_PCI_SBRN_REG 0x60
|
||||||
|
|
||||||
/* Capability registers offsets */
|
/* Capability registers offsets */
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@@ -49,6 +54,7 @@ enum
|
|||||||
#define GRUB_EHCI_EECP_MASK (0xff << 8)
|
#define GRUB_EHCI_EECP_MASK (0xff << 8)
|
||||||
#define GRUB_EHCI_EECP_SHIFT 8
|
#define GRUB_EHCI_EECP_SHIFT 8
|
||||||
|
|
||||||
|
#define GRUB_EHCI_ADDR_MEM_MASK (~0xff)
|
||||||
#define GRUB_EHCI_POINTER_MASK (~0x1f)
|
#define GRUB_EHCI_POINTER_MASK (~0x1f)
|
||||||
|
|
||||||
/* Capability register SPARAMS bits */
|
/* Capability register SPARAMS bits */
|
||||||
@@ -79,6 +85,13 @@ enum
|
|||||||
|
|
||||||
#define GRUB_EHCI_QH_EMPTY 1
|
#define GRUB_EHCI_QH_EMPTY 1
|
||||||
|
|
||||||
|
/* USBLEGSUP bits and related OS OWNED byte offset */
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
GRUB_EHCI_BIOS_OWNED = (1 << 16),
|
||||||
|
GRUB_EHCI_OS_OWNED = (1 << 24)
|
||||||
|
};
|
||||||
|
|
||||||
/* Operational registers offsets */
|
/* Operational registers offsets */
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
@@ -442,10 +455,9 @@ grub_ehci_reset (struct grub_ehci *e)
|
|||||||
|
|
||||||
sync_all_caches (e);
|
sync_all_caches (e);
|
||||||
|
|
||||||
grub_dprintf ("ehci", "reset\n");
|
|
||||||
|
|
||||||
grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND,
|
grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND,
|
||||||
GRUB_EHCI_CMD_HC_RESET);
|
GRUB_EHCI_CMD_HC_RESET
|
||||||
|
| grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND));
|
||||||
/* Ensure command is written */
|
/* Ensure command is written */
|
||||||
grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND);
|
grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND);
|
||||||
/* XXX: How long time could take reset of HC ? */
|
/* XXX: How long time could take reset of HC ? */
|
||||||
@@ -461,24 +473,116 @@ grub_ehci_reset (struct grub_ehci *e)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* PCI iteration function... */
|
/* PCI iteration function... */
|
||||||
void
|
static int
|
||||||
grub_ehci_init_device (volatile void *regs)
|
grub_ehci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
||||||
|
void *data __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
|
grub_uint8_t release;
|
||||||
|
grub_uint32_t class_code;
|
||||||
|
grub_uint32_t interf;
|
||||||
|
grub_uint32_t subclass;
|
||||||
|
grub_uint32_t class;
|
||||||
|
grub_uint32_t base, base_h;
|
||||||
struct grub_ehci *e;
|
struct grub_ehci *e;
|
||||||
|
grub_uint32_t eecp_offset;
|
||||||
grub_uint32_t fp;
|
grub_uint32_t fp;
|
||||||
int i;
|
int i;
|
||||||
|
grub_uint32_t usblegsup = 0;
|
||||||
|
grub_uint64_t maxtime;
|
||||||
grub_uint32_t n_ports;
|
grub_uint32_t n_ports;
|
||||||
grub_uint8_t caplen;
|
grub_uint8_t caplen;
|
||||||
|
|
||||||
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: begin\n");
|
||||||
|
|
||||||
|
if (pciid == GRUB_CS5536_PCIID)
|
||||||
|
{
|
||||||
|
grub_uint64_t basereg;
|
||||||
|
|
||||||
|
basereg = grub_cs5536_read_msr (dev, GRUB_CS5536_MSR_USB_EHCI_BASE);
|
||||||
|
if (!(basereg & GRUB_CS5536_MSR_USB_BASE_MEMORY_ENABLE))
|
||||||
|
{
|
||||||
|
/* Shouldn't happen. */
|
||||||
|
grub_dprintf ("ehci", "No EHCI address is assigned\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
base = (basereg & GRUB_CS5536_MSR_USB_BASE_ADDR_MASK);
|
||||||
|
basereg |= GRUB_CS5536_MSR_USB_BASE_BUS_MASTER;
|
||||||
|
basereg &= ~GRUB_CS5536_MSR_USB_BASE_PME_ENABLED;
|
||||||
|
basereg &= ~GRUB_CS5536_MSR_USB_BASE_PME_STATUS;
|
||||||
|
basereg &= ~GRUB_CS5536_MSR_USB_BASE_SMI_ENABLE;
|
||||||
|
grub_cs5536_write_msr (dev, GRUB_CS5536_MSR_USB_EHCI_BASE, basereg);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
grub_pci_address_t addr;
|
||||||
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS);
|
||||||
|
class_code = grub_pci_read (addr) >> 8;
|
||||||
|
interf = class_code & 0xFF;
|
||||||
|
subclass = (class_code >> 8) & 0xFF;
|
||||||
|
class = class_code >> 16;
|
||||||
|
|
||||||
|
/* If this is not an EHCI controller, just return. */
|
||||||
|
if (class != 0x0c || subclass != 0x03 || interf != 0x20)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: class OK\n");
|
||||||
|
|
||||||
|
/* Check Serial Bus Release Number */
|
||||||
|
addr = grub_pci_make_address (dev, GRUB_EHCI_PCI_SBRN_REG);
|
||||||
|
release = grub_pci_read_byte (addr);
|
||||||
|
if (release != 0x20)
|
||||||
|
{
|
||||||
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: Wrong SBRN: %0x\n",
|
||||||
|
release);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: bus rev. num. OK\n");
|
||||||
|
|
||||||
|
/* Determine EHCI EHCC registers base address. */
|
||||||
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0);
|
||||||
|
base = grub_pci_read (addr);
|
||||||
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG1);
|
||||||
|
base_h = grub_pci_read (addr);
|
||||||
|
/* Stop if registers are mapped above 4G - GRUB does not currently
|
||||||
|
* work with registers mapped above 4G */
|
||||||
|
if (((base & GRUB_PCI_ADDR_MEM_TYPE_MASK) != GRUB_PCI_ADDR_MEM_TYPE_32)
|
||||||
|
&& (base_h != 0))
|
||||||
|
{
|
||||||
|
grub_dprintf ("ehci",
|
||||||
|
"EHCI grub_ehci_pci_iter: registers above 4G are not supported\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
base &= GRUB_PCI_ADDR_MEM_MASK;
|
||||||
|
if (!base)
|
||||||
|
{
|
||||||
|
grub_dprintf ("ehci",
|
||||||
|
"EHCI: EHCI is not mapped\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Set bus master - needed for coreboot, VMware, broken BIOSes etc. */
|
||||||
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
|
||||||
|
grub_pci_write_word(addr,
|
||||||
|
GRUB_PCI_COMMAND_MEM_ENABLED
|
||||||
|
| GRUB_PCI_COMMAND_BUS_MASTER
|
||||||
|
| grub_pci_read_word(addr));
|
||||||
|
|
||||||
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: 32-bit EHCI OK\n");
|
||||||
|
}
|
||||||
|
|
||||||
/* Allocate memory for the controller and fill basic values. */
|
/* Allocate memory for the controller and fill basic values. */
|
||||||
e = grub_zalloc (sizeof (*e));
|
e = grub_zalloc (sizeof (*e));
|
||||||
if (!e)
|
if (!e)
|
||||||
return;
|
return 1;
|
||||||
e->framelist_chunk = NULL;
|
e->framelist_chunk = NULL;
|
||||||
e->td_chunk = NULL;
|
e->td_chunk = NULL;
|
||||||
e->qh_chunk = NULL;
|
e->qh_chunk = NULL;
|
||||||
e->iobase_ehcc = regs;
|
e->iobase_ehcc = grub_pci_device_map_range (dev,
|
||||||
|
(base & GRUB_EHCI_ADDR_MEM_MASK),
|
||||||
|
0x100);
|
||||||
|
|
||||||
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: iobase of EHCC: %08x\n",
|
||||||
|
(base & GRUB_EHCI_ADDR_MEM_MASK));
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CAPLEN: %02x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CAPLEN: %02x\n",
|
||||||
grub_ehci_ehcc_read8 (e, GRUB_EHCI_EHCC_CAPLEN));
|
grub_ehci_ehcc_read8 (e, GRUB_EHCI_EHCC_CAPLEN));
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: VERSION: %04x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: VERSION: %04x\n",
|
||||||
@@ -494,18 +598,18 @@ grub_ehci_init_device (volatile void *regs)
|
|||||||
if (caplen & (sizeof (grub_uint32_t) - 1))
|
if (caplen & (sizeof (grub_uint32_t) - 1))
|
||||||
{
|
{
|
||||||
grub_dprintf ("ehci", "Unaligned caplen\n");
|
grub_dprintf ("ehci", "Unaligned caplen\n");
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
e->iobase = ((volatile grub_uint32_t *) e->iobase_ehcc
|
e->iobase = ((volatile grub_uint32_t *) e->iobase_ehcc
|
||||||
+ (caplen / sizeof (grub_uint32_t)));
|
+ (caplen / sizeof (grub_uint32_t)));
|
||||||
#else
|
#else
|
||||||
e->iobase = (volatile grub_uint32_t *)
|
e->iobase = (volatile grub_uint32_t *)
|
||||||
((grub_uint8_t *) e->iobase_ehcc + caplen);
|
((grub_uint8_t *) e->iobase_ehcc + caplen);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
grub_dprintf ("ehci",
|
grub_dprintf ("ehci",
|
||||||
"EHCI grub_ehci_pci_iter: iobase of oper. regs: %08llxx\n",
|
"EHCI grub_ehci_pci_iter: iobase of oper. regs: %08x\n",
|
||||||
(unsigned long long) (grub_addr_t) e->iobase_ehcc + caplen);
|
(base & GRUB_EHCI_ADDR_MEM_MASK) + caplen);
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: COMMAND: %08x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: COMMAND: %08x\n",
|
||||||
grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND));
|
grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND));
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: STATUS: %08x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: STATUS: %08x\n",
|
||||||
@@ -521,6 +625,10 @@ grub_ehci_init_device (volatile void *regs)
|
|||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CONFIG_FLAG: %08x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CONFIG_FLAG: %08x\n",
|
||||||
grub_ehci_oper_read32 (e, GRUB_EHCI_CONFIG_FLAG));
|
grub_ehci_oper_read32 (e, GRUB_EHCI_CONFIG_FLAG));
|
||||||
|
|
||||||
|
/* Is there EECP ? */
|
||||||
|
eecp_offset = (grub_ehci_ehcc_read32 (e, GRUB_EHCI_EHCC_CPARAMS)
|
||||||
|
& GRUB_EHCI_EECP_MASK) >> GRUB_EHCI_EECP_SHIFT;
|
||||||
|
|
||||||
/* Check format of data structures requested by EHCI */
|
/* Check format of data structures requested by EHCI */
|
||||||
/* XXX: In fact it is not used at any place, it is prepared for future
|
/* XXX: In fact it is not used at any place, it is prepared for future
|
||||||
* This implementation uses 32-bits pointers only */
|
* This implementation uses 32-bits pointers only */
|
||||||
@@ -624,6 +732,65 @@ grub_ehci_init_device (volatile void *regs)
|
|||||||
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: QH/TD init. OK\n");
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: QH/TD init. OK\n");
|
||||||
|
|
||||||
|
/* Determine and change ownership. */
|
||||||
|
/* EECP offset valid in HCCPARAMS */
|
||||||
|
/* Ownership can be changed via EECP only */
|
||||||
|
if (pciid != GRUB_CS5536_PCIID && eecp_offset >= 0x40)
|
||||||
|
{
|
||||||
|
grub_pci_address_t pciaddr_eecp;
|
||||||
|
pciaddr_eecp = grub_pci_make_address (dev, eecp_offset);
|
||||||
|
|
||||||
|
usblegsup = grub_pci_read (pciaddr_eecp);
|
||||||
|
if (usblegsup & GRUB_EHCI_BIOS_OWNED)
|
||||||
|
{
|
||||||
|
grub_boot_time ("Taking ownership of EHCI controller");
|
||||||
|
grub_dprintf ("ehci",
|
||||||
|
"EHCI grub_ehci_pci_iter: EHCI owned by: BIOS\n");
|
||||||
|
/* Ownership change - set OS_OWNED bit */
|
||||||
|
grub_pci_write (pciaddr_eecp, usblegsup | GRUB_EHCI_OS_OWNED);
|
||||||
|
/* Ensure PCI register is written */
|
||||||
|
grub_pci_read (pciaddr_eecp);
|
||||||
|
|
||||||
|
/* Wait for finish of ownership change, EHCI specification
|
||||||
|
* doesn't say how long it can take... */
|
||||||
|
maxtime = grub_get_time_ms () + 1000;
|
||||||
|
while ((grub_pci_read (pciaddr_eecp) & GRUB_EHCI_BIOS_OWNED)
|
||||||
|
&& (grub_get_time_ms () < maxtime));
|
||||||
|
if (grub_pci_read (pciaddr_eecp) & GRUB_EHCI_BIOS_OWNED)
|
||||||
|
{
|
||||||
|
grub_dprintf ("ehci",
|
||||||
|
"EHCI grub_ehci_pci_iter: EHCI change ownership timeout");
|
||||||
|
/* Change ownership in "hard way" - reset BIOS ownership */
|
||||||
|
grub_pci_write (pciaddr_eecp, GRUB_EHCI_OS_OWNED);
|
||||||
|
/* Ensure PCI register is written */
|
||||||
|
grub_pci_read (pciaddr_eecp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (usblegsup & GRUB_EHCI_OS_OWNED)
|
||||||
|
/* XXX: What to do in this case - nothing ? Can it happen ? */
|
||||||
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: EHCI owned by: OS\n");
|
||||||
|
else
|
||||||
|
{
|
||||||
|
grub_dprintf ("ehci",
|
||||||
|
"EHCI grub_ehci_pci_iter: EHCI owned by: NONE\n");
|
||||||
|
/* XXX: What to do in this case ? Can it happen ?
|
||||||
|
* Is code below correct ? */
|
||||||
|
/* Ownership change - set OS_OWNED bit */
|
||||||
|
grub_pci_write (pciaddr_eecp, GRUB_EHCI_OS_OWNED);
|
||||||
|
/* Ensure PCI register is written */
|
||||||
|
grub_pci_read (pciaddr_eecp);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Disable SMI, just to be sure. */
|
||||||
|
pciaddr_eecp = grub_pci_make_address (dev, eecp_offset + 4);
|
||||||
|
grub_pci_write (pciaddr_eecp, 0);
|
||||||
|
/* Ensure PCI register is written */
|
||||||
|
grub_pci_read (pciaddr_eecp);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
grub_dprintf ("ehci", "inithw: EHCI grub_ehci_pci_iter: ownership OK\n");
|
||||||
|
|
||||||
/* Now we can setup EHCI (maybe...) */
|
/* Now we can setup EHCI (maybe...) */
|
||||||
|
|
||||||
/* Check if EHCI is halted and halt it if not */
|
/* Check if EHCI is halted and halt it if not */
|
||||||
@@ -696,8 +863,8 @@ grub_ehci_init_device (volatile void *regs)
|
|||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: OK at all\n");
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: OK at all\n");
|
||||||
|
|
||||||
grub_dprintf ("ehci",
|
grub_dprintf ("ehci",
|
||||||
"EHCI grub_ehci_pci_iter: iobase of oper. regs: %08llx\n",
|
"EHCI grub_ehci_pci_iter: iobase of oper. regs: %08x\n",
|
||||||
(unsigned long long) (grub_addr_t) regs);
|
(base & GRUB_EHCI_ADDR_MEM_MASK));
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: COMMAND: %08x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: COMMAND: %08x\n",
|
||||||
grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND));
|
grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND));
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: STATUS: %08x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: STATUS: %08x\n",
|
||||||
@@ -713,7 +880,7 @@ grub_ehci_init_device (volatile void *regs)
|
|||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CONFIG_FLAG: %08x\n",
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: CONFIG_FLAG: %08x\n",
|
||||||
grub_ehci_oper_read32 (e, GRUB_EHCI_CONFIG_FLAG));
|
grub_ehci_oper_read32 (e, GRUB_EHCI_CONFIG_FLAG));
|
||||||
|
|
||||||
return;
|
return 0;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
if (e)
|
if (e)
|
||||||
@@ -727,7 +894,7 @@ fail:
|
|||||||
}
|
}
|
||||||
grub_free (e);
|
grub_free (e);
|
||||||
|
|
||||||
return;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -869,7 +1036,7 @@ grub_ehci_find_qh (struct grub_ehci *e, grub_usb_transfer_t transfer)
|
|||||||
i++ )
|
i++ )
|
||||||
{
|
{
|
||||||
if (target == (qh_iter->ep_char & mask))
|
if (target == (qh_iter->ep_char & mask))
|
||||||
{
|
{
|
||||||
/* Found proper existing (and linked) QH, do setup of QH */
|
/* Found proper existing (and linked) QH, do setup of QH */
|
||||||
grub_dprintf ("ehci", "find_qh: found, QH=%p\n", qh_iter);
|
grub_dprintf ("ehci", "find_qh: found, QH=%p\n", qh_iter);
|
||||||
grub_ehci_setup_qh (qh_iter, transfer);
|
grub_ehci_setup_qh (qh_iter, transfer);
|
||||||
@@ -1724,6 +1891,12 @@ grub_ehci_detect_dev (grub_usb_controller_t dev, int port, int *changed)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
grub_ehci_inithw (void)
|
||||||
|
{
|
||||||
|
grub_pci_iterate (grub_ehci_pci_iter, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_ehci_restore_hw (void)
|
grub_ehci_restore_hw (void)
|
||||||
{
|
{
|
||||||
@@ -1813,7 +1986,7 @@ static struct grub_usb_controller_dev usb_controller = {
|
|||||||
.portstatus = grub_ehci_portstatus,
|
.portstatus = grub_ehci_portstatus,
|
||||||
.detect_dev = grub_ehci_detect_dev,
|
.detect_dev = grub_ehci_detect_dev,
|
||||||
/* estimated max. count of TDs for one bulk transfer */
|
/* estimated max. count of TDs for one bulk transfer */
|
||||||
.max_bulk_tds = GRUB_EHCI_N_TD * 3 / 4
|
.max_bulk_tds = GRUB_EHCI_N_TD * 3 / 4
|
||||||
};
|
};
|
||||||
|
|
||||||
GRUB_MOD_INIT (ehci)
|
GRUB_MOD_INIT (ehci)
|
||||||
@@ -1824,7 +1997,7 @@ GRUB_MOD_INIT (ehci)
|
|||||||
grub_stop_disk_firmware ();
|
grub_stop_disk_firmware ();
|
||||||
|
|
||||||
grub_boot_time ("Initing EHCI hardware");
|
grub_boot_time ("Initing EHCI hardware");
|
||||||
grub_ehci_pci_scan ();
|
grub_ehci_inithw ();
|
||||||
grub_boot_time ("Registering EHCI driver");
|
grub_boot_time ("Registering EHCI driver");
|
||||||
grub_usb_controller_dev_register (&usb_controller);
|
grub_usb_controller_dev_register (&usb_controller);
|
||||||
grub_boot_time ("EHCI driver registered");
|
grub_boot_time ("EHCI driver registered");
|
||||||
|
|||||||
+27
-27
@@ -196,7 +196,7 @@ grub_ohci_td_virt2phys (struct grub_ohci *o, grub_ohci_td_t x)
|
|||||||
return (grub_uint8_t *)x - (grub_uint8_t *)o->td + o->td_addr;
|
return (grub_uint8_t *)x - (grub_uint8_t *)o->td + o->td_addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static grub_uint32_t
|
static grub_uint32_t
|
||||||
grub_ohci_readreg32 (struct grub_ohci *o, grub_ohci_reg_t reg)
|
grub_ohci_readreg32 (struct grub_ohci *o, grub_ohci_reg_t reg)
|
||||||
{
|
{
|
||||||
@@ -224,7 +224,7 @@ grub_ohci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
struct grub_ohci *o;
|
struct grub_ohci *o;
|
||||||
grub_uint32_t revision;
|
grub_uint32_t revision;
|
||||||
int j;
|
int j;
|
||||||
|
|
||||||
/* Determine IO base address. */
|
/* Determine IO base address. */
|
||||||
grub_dprintf ("ohci", "pciid = %x\n", pciid);
|
grub_dprintf ("ohci", "pciid = %x\n", pciid);
|
||||||
|
|
||||||
@@ -253,7 +253,7 @@ grub_ohci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
|
|
||||||
addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS);
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_CLASS);
|
||||||
class_code = grub_pci_read (addr) >> 8;
|
class_code = grub_pci_read (addr) >> 8;
|
||||||
|
|
||||||
interf = class_code & 0xFF;
|
interf = class_code & 0xFF;
|
||||||
subclass = (class_code >> 8) & 0xFF;
|
subclass = (class_code >> 8) & 0xFF;
|
||||||
class = class_code >> 16;
|
class = class_code >> 16;
|
||||||
@@ -315,7 +315,7 @@ grub_ohci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
* GRUB_OHCI_CTRL_EDS);
|
* GRUB_OHCI_CTRL_EDS);
|
||||||
for (j=0; j < GRUB_OHCI_CTRL_EDS; j++)
|
for (j=0; j < GRUB_OHCI_CTRL_EDS; j++)
|
||||||
o->ed_ctrl[j].target = grub_cpu_to_le32_compile_time (1 << 14); /* skip */
|
o->ed_ctrl[j].target = grub_cpu_to_le32_compile_time (1 << 14); /* skip */
|
||||||
|
|
||||||
grub_dprintf ("ohci", "EDs-C: chunk=%p, virt=%p, phys=0x%02x\n",
|
grub_dprintf ("ohci", "EDs-C: chunk=%p, virt=%p, phys=0x%02x\n",
|
||||||
o->ed_ctrl_chunk, o->ed_ctrl, o->ed_ctrl_addr);
|
o->ed_ctrl_chunk, o->ed_ctrl, o->ed_ctrl_addr);
|
||||||
|
|
||||||
@@ -385,7 +385,7 @@ grub_ohci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
grub_dprintf("ohci", "Ownership changing timeout, change forced !\n");
|
grub_dprintf("ohci", "Ownership changing timeout, change forced !\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (((control & 0x100) == 0) &&
|
else if (((control & 0x100) == 0) &&
|
||||||
((control & 0xc0) != 0)) /* Not owned by SMM nor reset */
|
((control & 0xc0) != 0)) /* Not owned by SMM nor reset */
|
||||||
{
|
{
|
||||||
grub_dprintf("ohci", "OHCI is owned by BIOS\n");
|
grub_dprintf("ohci", "OHCI is owned by BIOS\n");
|
||||||
@@ -396,7 +396,7 @@ grub_ohci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
{
|
{
|
||||||
grub_dprintf("ohci", "OHCI is not owned by SMM nor BIOS\n");
|
grub_dprintf("ohci", "OHCI is not owned by SMM nor BIOS\n");
|
||||||
/* We can setup OHCI. */
|
/* We can setup OHCI. */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Suspend the OHCI by issuing a reset. */
|
/* Suspend the OHCI by issuing a reset. */
|
||||||
@@ -513,7 +513,7 @@ grub_ohci_find_ed (struct grub_ohci *o, int bulk, grub_uint32_t target)
|
|||||||
|
|
||||||
/* Use proper values and structures. */
|
/* Use proper values and structures. */
|
||||||
if (bulk)
|
if (bulk)
|
||||||
{
|
{
|
||||||
count = GRUB_OHCI_BULK_EDS;
|
count = GRUB_OHCI_BULK_EDS;
|
||||||
ed = o->ed_bulk;
|
ed = o->ed_bulk;
|
||||||
ed_next = grub_ohci_ed_phys2virt(o, bulk,
|
ed_next = grub_ohci_ed_phys2virt(o, bulk,
|
||||||
@@ -576,7 +576,7 @@ grub_ohci_alloc_td (struct grub_ohci *o)
|
|||||||
static void
|
static void
|
||||||
grub_ohci_free_td (struct grub_ohci *o, grub_ohci_td_t td)
|
grub_ohci_free_td (struct grub_ohci *o, grub_ohci_td_t td)
|
||||||
{
|
{
|
||||||
grub_memset ( (void*)td, 0, sizeof(struct grub_ohci_td) );
|
grub_memset ( (void*)td, 0, sizeof(struct grub_ohci_td) );
|
||||||
td->link_td = o->td_free; /* Cahin new free TD & rest */
|
td->link_td = o->td_free; /* Cahin new free TD & rest */
|
||||||
o->td_free = td; /* Change address of first free TD */
|
o->td_free = td; /* Change address of first free TD */
|
||||||
}
|
}
|
||||||
@@ -586,7 +586,7 @@ grub_ohci_free_tds (struct grub_ohci *o, grub_ohci_td_t td)
|
|||||||
{
|
{
|
||||||
if (!td)
|
if (!td)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* Unchain first TD from previous TD if it is chained */
|
/* Unchain first TD from previous TD if it is chained */
|
||||||
if (td->prev_td_phys)
|
if (td->prev_td_phys)
|
||||||
{
|
{
|
||||||
@@ -596,12 +596,12 @@ grub_ohci_free_tds (struct grub_ohci *o, grub_ohci_td_t td)
|
|||||||
if (td == (grub_ohci_td_t) td_prev_virt->link_td)
|
if (td == (grub_ohci_td_t) td_prev_virt->link_td)
|
||||||
td_prev_virt->link_td = 0;
|
td_prev_virt->link_td = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Free all TDs from td (chained by link_td) */
|
/* Free all TDs from td (chained by link_td) */
|
||||||
while (td)
|
while (td)
|
||||||
{
|
{
|
||||||
grub_ohci_td_t tdprev;
|
grub_ohci_td_t tdprev;
|
||||||
|
|
||||||
/* Unlink the queue. */
|
/* Unlink the queue. */
|
||||||
tdprev = td;
|
tdprev = td;
|
||||||
td = (grub_ohci_td_t) td->link_td;
|
td = (grub_ohci_td_t) td->link_td;
|
||||||
@@ -658,7 +658,7 @@ grub_ohci_transaction (grub_ohci_td_t td,
|
|||||||
td->buffer = grub_cpu_to_le32 (buffer);
|
td->buffer = grub_cpu_to_le32 (buffer);
|
||||||
td->buffer_end = grub_cpu_to_le32 (buffer_end);
|
td->buffer_end = grub_cpu_to_le32 (buffer_end);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
td->buffer = 0;
|
td->buffer = 0;
|
||||||
td->buffer_end = 0;
|
td->buffer_end = 0;
|
||||||
@@ -728,7 +728,7 @@ grub_ohci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Take pointer to first TD from ED */
|
/* Take pointer to first TD from ED */
|
||||||
td_head_phys = grub_le_to_cpu32 (cdata->ed_virt->td_head) & ~0xf;
|
td_head_phys = grub_le_to_cpu32 (cdata->ed_virt->td_head) & ~0xf;
|
||||||
td_tail_phys = grub_le_to_cpu32 (cdata->ed_virt->td_tail) & ~0xf;
|
td_tail_phys = grub_le_to_cpu32 (cdata->ed_virt->td_tail) & ~0xf;
|
||||||
@@ -743,7 +743,7 @@ grub_ohci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Now we should handle first TD. If ED is newly allocated,
|
/* Now we should handle first TD. If ED is newly allocated,
|
||||||
* we must allocate the first TD. */
|
* we must allocate the first TD. */
|
||||||
if (!td_head_phys)
|
if (!td_head_phys)
|
||||||
@@ -762,7 +762,7 @@ grub_ohci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
cdata->td_head_virt = grub_ohci_td_phys2virt ( o, td_head_phys );
|
cdata->td_head_virt = grub_ohci_td_phys2virt ( o, td_head_phys );
|
||||||
|
|
||||||
/* Set TDs */
|
/* Set TDs */
|
||||||
cdata->td_last_phys = td_head_phys; /* initial value to make compiler happy... */
|
cdata->td_last_phys = td_head_phys; /* initial value to make compiler happy... */
|
||||||
for (i = 0, cdata->td_current_virt = cdata->td_head_virt;
|
for (i = 0, cdata->td_current_virt = cdata->td_head_virt;
|
||||||
@@ -775,10 +775,10 @@ grub_ohci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
|
|
||||||
/* Set index of TD in transfer */
|
/* Set index of TD in transfer */
|
||||||
cdata->td_current_virt->tr_index = (grub_uint32_t) i;
|
cdata->td_current_virt->tr_index = (grub_uint32_t) i;
|
||||||
|
|
||||||
/* Remember last used (processed) TD phys. addr. */
|
/* Remember last used (processed) TD phys. addr. */
|
||||||
cdata->td_last_phys = grub_ohci_td_virt2phys (o, cdata->td_current_virt);
|
cdata->td_last_phys = grub_ohci_td_virt2phys (o, cdata->td_current_virt);
|
||||||
|
|
||||||
/* Allocate next TD */
|
/* Allocate next TD */
|
||||||
td_next_virt = grub_ohci_alloc_td (o);
|
td_next_virt = grub_ohci_alloc_td (o);
|
||||||
if (!td_next_virt) /* No free TD, cancel transfer and free TDs except head TD */
|
if (!td_next_virt) /* No free TD, cancel transfer and free TDs except head TD */
|
||||||
@@ -807,7 +807,7 @@ grub_ohci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
|
|
||||||
grub_dprintf ("ohci", "Tail TD (not processed) = %p\n",
|
grub_dprintf ("ohci", "Tail TD (not processed) = %p\n",
|
||||||
cdata->td_current_virt);
|
cdata->td_current_virt);
|
||||||
|
|
||||||
/* Setup the Endpoint Descriptor for transfer. */
|
/* Setup the Endpoint Descriptor for transfer. */
|
||||||
/* First set necessary fields in TARGET but keep (or set) skip bit */
|
/* First set necessary fields in TARGET but keep (or set) skip bit */
|
||||||
/* Note: It could be simpler if speed, format and max. packet
|
/* Note: It could be simpler if speed, format and max. packet
|
||||||
@@ -923,7 +923,7 @@ finish_transfer (grub_usb_controller_t dev,
|
|||||||
struct grub_ohci_transfer_controller_data *cdata = transfer->controller_data;
|
struct grub_ohci_transfer_controller_data *cdata = transfer->controller_data;
|
||||||
|
|
||||||
/* Set empty ED - set HEAD = TAIL = last (not processed) TD */
|
/* Set empty ED - set HEAD = TAIL = last (not processed) TD */
|
||||||
cdata->ed_virt->td_head = grub_cpu_to_le32 (grub_le_to_cpu32 (cdata->ed_virt->td_tail) & ~0xf);
|
cdata->ed_virt->td_head = grub_cpu_to_le32 (grub_le_to_cpu32 (cdata->ed_virt->td_tail) & ~0xf);
|
||||||
|
|
||||||
/* At this point always should be:
|
/* At this point always should be:
|
||||||
* ED has skip bit set and halted or empty or after next SOF,
|
* ED has skip bit set and halted or empty or after next SOF,
|
||||||
@@ -935,7 +935,7 @@ finish_transfer (grub_usb_controller_t dev,
|
|||||||
{
|
{
|
||||||
grub_ohci_td_t td_prev_virt
|
grub_ohci_td_t td_prev_virt
|
||||||
= grub_ohci_td_phys2virt (o, cdata->td_current_virt->prev_td_phys);
|
= grub_ohci_td_phys2virt (o, cdata->td_current_virt->prev_td_phys);
|
||||||
|
|
||||||
if (cdata->td_current_virt == (grub_ohci_td_t) td_prev_virt->link_td)
|
if (cdata->td_current_virt == (grub_ohci_td_t) td_prev_virt->link_td)
|
||||||
td_prev_virt->link_td = 0;
|
td_prev_virt->link_td = 0;
|
||||||
|
|
||||||
@@ -978,7 +978,7 @@ parse_halt (grub_usb_controller_t dev,
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
transfer->last_trans = -1;
|
transfer->last_trans = -1;
|
||||||
|
|
||||||
/* Evaluation of error code */
|
/* Evaluation of error code */
|
||||||
grub_dprintf ("ohci", "OHCI tderr_phys=0x%02x, errcode=0x%02x\n",
|
grub_dprintf ("ohci", "OHCI tderr_phys=0x%02x, errcode=0x%02x\n",
|
||||||
cdata->tderr_phys, errcode);
|
cdata->tderr_phys, errcode);
|
||||||
@@ -1089,7 +1089,7 @@ parse_success (grub_usb_controller_t dev,
|
|||||||
|
|
||||||
/* Prepare pointer to last processed TD */
|
/* Prepare pointer to last processed TD */
|
||||||
tderr_virt = grub_ohci_td_phys2virt (o, cdata->tderr_phys);
|
tderr_virt = grub_ohci_td_phys2virt (o, cdata->tderr_phys);
|
||||||
|
|
||||||
/* Set index of last processed TD */
|
/* Set index of last processed TD */
|
||||||
if (tderr_virt)
|
if (tderr_virt)
|
||||||
transfer->last_trans = tderr_virt->tr_index;
|
transfer->last_trans = tderr_virt->tr_index;
|
||||||
@@ -1207,7 +1207,7 @@ grub_ohci_cancel_transfer (grub_usb_controller_t dev,
|
|||||||
cdata->tderr_phys
|
cdata->tderr_phys
|
||||||
= grub_ohci_td_phys2virt (o, grub_le_to_cpu32 (cdata->ed_virt->td_head)
|
= grub_ohci_td_phys2virt (o, grub_le_to_cpu32 (cdata->ed_virt->td_head)
|
||||||
& ~0xf)->prev_td_phys;
|
& ~0xf)->prev_td_phys;
|
||||||
|
|
||||||
tderr_virt = grub_ohci_td_phys2virt (o,cdata-> tderr_phys);
|
tderr_virt = grub_ohci_td_phys2virt (o,cdata-> tderr_phys);
|
||||||
|
|
||||||
grub_dprintf ("ohci", "Cancel: tderr_phys=0x%x, tderr_virt=%p\n",
|
grub_dprintf ("ohci", "Cancel: tderr_phys=0x%x, tderr_virt=%p\n",
|
||||||
@@ -1249,7 +1249,7 @@ grub_ohci_portstatus (grub_usb_controller_t dev,
|
|||||||
grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port));
|
grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port));
|
||||||
return GRUB_USB_ERR_NONE;
|
return GRUB_USB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* OHCI does one reset signal 10ms long but USB spec.
|
/* OHCI does one reset signal 10ms long but USB spec.
|
||||||
* requests 50ms for root hub (no need to be continuous).
|
* requests 50ms for root hub (no need to be continuous).
|
||||||
* So, we do reset 5 times... */
|
* So, we do reset 5 times... */
|
||||||
@@ -1276,7 +1276,7 @@ grub_ohci_portstatus (grub_usb_controller_t dev,
|
|||||||
grub_ohci_writereg32 (o, GRUB_OHCI_REG_RHUBPORT + port,
|
grub_ohci_writereg32 (o, GRUB_OHCI_REG_RHUBPORT + port,
|
||||||
GRUB_OHCI_SET_PORT_ENABLE);
|
GRUB_OHCI_SET_PORT_ENABLE);
|
||||||
grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port);
|
grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port);
|
||||||
|
|
||||||
/* Wait for signal enabled */
|
/* Wait for signal enabled */
|
||||||
endtime = grub_get_time_ms () + 1000;
|
endtime = grub_get_time_ms () + 1000;
|
||||||
while (! (grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port)
|
while (! (grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port)
|
||||||
@@ -1290,10 +1290,10 @@ grub_ohci_portstatus (grub_usb_controller_t dev,
|
|||||||
|
|
||||||
/* "Reset recovery time" (USB spec.) */
|
/* "Reset recovery time" (USB spec.) */
|
||||||
grub_millisleep (10);
|
grub_millisleep (10);
|
||||||
|
|
||||||
grub_dprintf ("ohci", "end of portstatus=0x%02x\n",
|
grub_dprintf ("ohci", "end of portstatus=0x%02x\n",
|
||||||
grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port));
|
grub_ohci_readreg32 (o, GRUB_OHCI_REG_RHUBPORT + port));
|
||||||
|
|
||||||
return GRUB_USB_ERR_NONE;
|
return GRUB_USB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ grub_usbserial_attach (grub_usb_device_t usbdev, int configno, int interfno,
|
|||||||
/* Configure device */
|
/* Configure device */
|
||||||
if (port->out_endp && port->in_endp)
|
if (port->out_endp && port->in_endp)
|
||||||
err = grub_usb_set_configuration (usbdev, configno + 1);
|
err = grub_usb_set_configuration (usbdev, configno + 1);
|
||||||
|
|
||||||
if (!port->out_endp || !port->in_endp || err)
|
if (!port->out_endp || !port->in_endp || err)
|
||||||
{
|
{
|
||||||
grub_free (port->name);
|
grub_free (port->name);
|
||||||
|
|||||||
@@ -174,7 +174,7 @@ static struct grub_serial_driver grub_ftdi_driver =
|
|||||||
.fini = grub_usbserial_fini
|
.fini = grub_usbserial_fini
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct
|
static const struct
|
||||||
{
|
{
|
||||||
grub_uint16_t vendor, product;
|
grub_uint16_t vendor, product;
|
||||||
} products[] =
|
} products[] =
|
||||||
|
|||||||
@@ -187,7 +187,7 @@ static struct grub_serial_driver grub_pl2303_driver =
|
|||||||
.fini = grub_usbserial_fini
|
.fini = grub_usbserial_fini
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct
|
static const struct
|
||||||
{
|
{
|
||||||
grub_uint16_t vendor, product;
|
grub_uint16_t vendor, product;
|
||||||
} products[] =
|
} products[] =
|
||||||
|
|||||||
+16
-16
@@ -244,10 +244,10 @@ grub_uhci_pci_iter (grub_pci_device_t dev,
|
|||||||
u->iobase = (base & GRUB_UHCI_IOMASK) + GRUB_MACHINE_PCI_IO_BASE;
|
u->iobase = (base & GRUB_UHCI_IOMASK) + GRUB_MACHINE_PCI_IO_BASE;
|
||||||
|
|
||||||
/* Reset PIRQ and SMI */
|
/* Reset PIRQ and SMI */
|
||||||
addr = grub_pci_make_address (dev, GRUB_UHCI_REG_USBLEGSUP);
|
addr = grub_pci_make_address (dev, GRUB_UHCI_REG_USBLEGSUP);
|
||||||
grub_pci_write_word(addr, GRUB_UHCI_RESET_LEGSUP_SMI);
|
grub_pci_write_word(addr, GRUB_UHCI_RESET_LEGSUP_SMI);
|
||||||
/* Reset the HC */
|
/* Reset the HC */
|
||||||
grub_uhci_writereg16(u, GRUB_UHCI_REG_USBCMD, GRUB_UHCI_CMD_HCRESET);
|
grub_uhci_writereg16(u, GRUB_UHCI_REG_USBCMD, GRUB_UHCI_CMD_HCRESET);
|
||||||
grub_millisleep(5);
|
grub_millisleep(5);
|
||||||
/* Disable interrupts and commands (just to be safe) */
|
/* Disable interrupts and commands (just to be safe) */
|
||||||
grub_uhci_writereg16(u, GRUB_UHCI_REG_USBINTR, 0);
|
grub_uhci_writereg16(u, GRUB_UHCI_REG_USBINTR, 0);
|
||||||
@@ -399,7 +399,7 @@ grub_free_queue (struct grub_uhci *u, grub_uhci_qh_t qh, grub_uhci_td_t td,
|
|||||||
u->qh_busy[qh - u->qh_virt] = 0;
|
u->qh_busy[qh - u->qh_virt] = 0;
|
||||||
|
|
||||||
*actual = 0;
|
*actual = 0;
|
||||||
|
|
||||||
/* Free the TDs in this queue and set last_trans. */
|
/* Free the TDs in this queue and set last_trans. */
|
||||||
for (i=0; td; i++)
|
for (i=0; td; i++)
|
||||||
{
|
{
|
||||||
@@ -411,7 +411,7 @@ grub_free_queue (struct grub_uhci *u, grub_uhci_qh_t qh, grub_uhci_td_t td,
|
|||||||
transfer->last_trans = i;
|
transfer->last_trans = i;
|
||||||
|
|
||||||
*actual += (td->ctrl_status + 1) & 0x7ff;
|
*actual += (td->ctrl_status + 1) & 0x7ff;
|
||||||
|
|
||||||
/* Unlink the queue. */
|
/* Unlink the queue. */
|
||||||
tdprev = td;
|
tdprev = td;
|
||||||
if (!td->linkptr2)
|
if (!td->linkptr2)
|
||||||
@@ -537,7 +537,7 @@ grub_uhci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
}
|
}
|
||||||
|
|
||||||
grub_dprintf ("uhci", "transfer, iobase:%08x\n", u->iobase);
|
grub_dprintf ("uhci", "transfer, iobase:%08x\n", u->iobase);
|
||||||
|
|
||||||
for (i = 0; i < transfer->transcnt; i++)
|
for (i = 0; i < transfer->transcnt; i++)
|
||||||
{
|
{
|
||||||
grub_usb_transaction_t tr = &transfer->transactions[i];
|
grub_usb_transaction_t tr = &transfer->transactions[i];
|
||||||
@@ -604,7 +604,7 @@ grub_uhci_check_transfer (grub_usb_controller_t dev,
|
|||||||
errtd = grub_dma_phys2virt (cdata->qh->elinkptr & ~0x0f, u->qh_chunk);
|
errtd = grub_dma_phys2virt (cdata->qh->elinkptr & ~0x0f, u->qh_chunk);
|
||||||
else
|
else
|
||||||
errtd = 0;
|
errtd = 0;
|
||||||
|
|
||||||
if (errtd)
|
if (errtd)
|
||||||
{
|
{
|
||||||
grub_dprintf ("uhci", ">t status=0x%02x data=0x%02x td=%p, %x\n",
|
grub_dprintf ("uhci", ">t status=0x%02x data=0x%02x td=%p, %x\n",
|
||||||
@@ -632,27 +632,27 @@ grub_uhci_check_transfer (grub_usb_controller_t dev,
|
|||||||
/* Check if the endpoint is stalled. */
|
/* Check if the endpoint is stalled. */
|
||||||
if (errtd->ctrl_status & (1 << 22))
|
if (errtd->ctrl_status & (1 << 22))
|
||||||
err = GRUB_USB_ERR_STALL;
|
err = GRUB_USB_ERR_STALL;
|
||||||
|
|
||||||
/* Check if an error related to the data buffer occurred. */
|
/* Check if an error related to the data buffer occurred. */
|
||||||
else if (errtd->ctrl_status & (1 << 21))
|
else if (errtd->ctrl_status & (1 << 21))
|
||||||
err = GRUB_USB_ERR_DATA;
|
err = GRUB_USB_ERR_DATA;
|
||||||
|
|
||||||
/* Check if a babble error occurred. */
|
/* Check if a babble error occurred. */
|
||||||
else if (errtd->ctrl_status & (1 << 20))
|
else if (errtd->ctrl_status & (1 << 20))
|
||||||
err = GRUB_USB_ERR_BABBLE;
|
err = GRUB_USB_ERR_BABBLE;
|
||||||
|
|
||||||
/* Check if a NAK occurred. */
|
/* Check if a NAK occurred. */
|
||||||
else if (errtd->ctrl_status & (1 << 19))
|
else if (errtd->ctrl_status & (1 << 19))
|
||||||
err = GRUB_USB_ERR_NAK;
|
err = GRUB_USB_ERR_NAK;
|
||||||
|
|
||||||
/* Check if a timeout occurred. */
|
/* Check if a timeout occurred. */
|
||||||
else if (errtd->ctrl_status & (1 << 18))
|
else if (errtd->ctrl_status & (1 << 18))
|
||||||
err = GRUB_USB_ERR_TIMEOUT;
|
err = GRUB_USB_ERR_TIMEOUT;
|
||||||
|
|
||||||
/* Check if a bitstuff error occurred. */
|
/* Check if a bitstuff error occurred. */
|
||||||
else if (errtd->ctrl_status & (1 << 17))
|
else if (errtd->ctrl_status & (1 << 17))
|
||||||
err = GRUB_USB_ERR_BITSTUFF;
|
err = GRUB_USB_ERR_BITSTUFF;
|
||||||
|
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
grub_dprintf ("uhci", "transaction failed\n");
|
grub_dprintf ("uhci", "transaction failed\n");
|
||||||
@@ -719,7 +719,7 @@ grub_uhci_portstatus (grub_usb_controller_t dev,
|
|||||||
grub_uint64_t endtime;
|
grub_uint64_t endtime;
|
||||||
|
|
||||||
grub_dprintf ("uhci", "portstatus, iobase:%08x\n", u->iobase);
|
grub_dprintf ("uhci", "portstatus, iobase:%08x\n", u->iobase);
|
||||||
|
|
||||||
grub_dprintf ("uhci", "enable=%d port=%d\n", enable, port);
|
grub_dprintf ("uhci", "enable=%d port=%d\n", enable, port);
|
||||||
|
|
||||||
if (port == 0)
|
if (port == 0)
|
||||||
@@ -746,7 +746,7 @@ grub_uhci_portstatus (grub_usb_controller_t dev,
|
|||||||
grub_dprintf ("uhci", ">3detect=0x%02x\n", status);
|
grub_dprintf ("uhci", ">3detect=0x%02x\n", status);
|
||||||
return GRUB_USB_ERR_NONE;
|
return GRUB_USB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Reset the port. */
|
/* Reset the port. */
|
||||||
status = grub_uhci_readreg16 (u, reg) & ~GRUB_UHCI_PORTSC_RWC;
|
status = grub_uhci_readreg16 (u, reg) & ~GRUB_UHCI_PORTSC_RWC;
|
||||||
grub_uhci_writereg16 (u, reg, status | (1 << 9));
|
grub_uhci_writereg16 (u, reg, status | (1 << 9));
|
||||||
@@ -796,7 +796,7 @@ grub_uhci_detect_dev (grub_usb_controller_t dev, int port, int *changed)
|
|||||||
unsigned int status;
|
unsigned int status;
|
||||||
|
|
||||||
grub_dprintf ("uhci", "detect_dev, iobase:%08x\n", u->iobase);
|
grub_dprintf ("uhci", "detect_dev, iobase:%08x\n", u->iobase);
|
||||||
|
|
||||||
if (port == 0)
|
if (port == 0)
|
||||||
reg = GRUB_UHCI_REG_PORTSC1;
|
reg = GRUB_UHCI_REG_PORTSC1;
|
||||||
else if (port == 1)
|
else if (port == 1)
|
||||||
@@ -818,7 +818,7 @@ grub_uhci_detect_dev (grub_usb_controller_t dev, int port, int *changed)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
*changed = 0;
|
*changed = 0;
|
||||||
|
|
||||||
if (! (status & GRUB_UHCI_DETECT_HAVE_DEVICE))
|
if (! (status & GRUB_UHCI_DETECT_HAVE_DEVICE))
|
||||||
return GRUB_USB_SPEED_NONE;
|
return GRUB_USB_SPEED_NONE;
|
||||||
else if (status & GRUB_UHCI_DETECT_LOW_SPEED)
|
else if (status & GRUB_UHCI_DETECT_LOW_SPEED)
|
||||||
|
|||||||
+6
-15
@@ -75,9 +75,6 @@ grub_usb_controller_iterate (grub_usb_controller_iterate_hook_t hook,
|
|||||||
grub_usb_err_t
|
grub_usb_err_t
|
||||||
grub_usb_clear_halt (grub_usb_device_t dev, int endpoint)
|
grub_usb_clear_halt (grub_usb_device_t dev, int endpoint)
|
||||||
{
|
{
|
||||||
if (endpoint >= GRUB_USB_MAX_TOGGLE)
|
|
||||||
return GRUB_USB_ERR_BADDEVICE;
|
|
||||||
|
|
||||||
dev->toggle[endpoint] = 0;
|
dev->toggle[endpoint] = 0;
|
||||||
return grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_OUT
|
return grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_OUT
|
||||||
| GRUB_USB_REQTYPE_STANDARD
|
| GRUB_USB_REQTYPE_STANDARD
|
||||||
@@ -137,14 +134,14 @@ grub_usb_device_initialize (grub_usb_device_t dev)
|
|||||||
return err;
|
return err;
|
||||||
descdev = &dev->descdev;
|
descdev = &dev->descdev;
|
||||||
|
|
||||||
for (i = 0; i < GRUB_USB_MAX_CONF; i++)
|
for (i = 0; i < 8; i++)
|
||||||
dev->config[i].descconf = NULL;
|
dev->config[i].descconf = NULL;
|
||||||
|
|
||||||
if (descdev->configcnt == 0 || descdev->configcnt > GRUB_USB_MAX_CONF)
|
if (descdev->configcnt == 0)
|
||||||
{
|
{
|
||||||
err = GRUB_USB_ERR_BADDEVICE;
|
err = GRUB_USB_ERR_BADDEVICE;
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < descdev->configcnt; i++)
|
for (i = 0; i < descdev->configcnt; i++)
|
||||||
{
|
{
|
||||||
@@ -175,12 +172,6 @@ grub_usb_device_initialize (grub_usb_device_t dev)
|
|||||||
/* Skip the configuration descriptor. */
|
/* Skip the configuration descriptor. */
|
||||||
pos = dev->config[i].descconf->length;
|
pos = dev->config[i].descconf->length;
|
||||||
|
|
||||||
if (dev->config[i].descconf->numif > GRUB_USB_MAX_IF)
|
|
||||||
{
|
|
||||||
err = GRUB_USB_ERR_BADDEVICE;
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Read all interfaces. */
|
/* Read all interfaces. */
|
||||||
for (currif = 0; currif < dev->config[i].descconf->numif; currif++)
|
for (currif = 0; currif < dev->config[i].descconf->numif; currif++)
|
||||||
{
|
{
|
||||||
@@ -226,7 +217,7 @@ grub_usb_device_initialize (grub_usb_device_t dev)
|
|||||||
|
|
||||||
fail:
|
fail:
|
||||||
|
|
||||||
for (i = 0; i < GRUB_USB_MAX_CONF; i++)
|
for (i = 0; i < 8; i++)
|
||||||
grub_free (dev->config[i].descconf);
|
grub_free (dev->config[i].descconf);
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
@@ -235,7 +226,7 @@ grub_usb_device_initialize (grub_usb_device_t dev)
|
|||||||
void grub_usb_device_attach (grub_usb_device_t dev)
|
void grub_usb_device_attach (grub_usb_device_t dev)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
/* XXX: Just check configuration 0 for now. */
|
/* XXX: Just check configuration 0 for now. */
|
||||||
for (i = 0; i < dev->config[0].descconf->numif; i++)
|
for (i = 0; i < dev->config[0].descconf->numif; i++)
|
||||||
{
|
{
|
||||||
@@ -331,7 +322,7 @@ grub_usb_register_attach_hook_class (struct grub_usb_attach_desc *desc)
|
|||||||
void
|
void
|
||||||
grub_usb_unregister_attach_hook_class (struct grub_usb_attach_desc *desc)
|
grub_usb_unregister_attach_hook_class (struct grub_usb_attach_desc *desc)
|
||||||
{
|
{
|
||||||
grub_list_remove (GRUB_AS_LIST (desc));
|
grub_list_remove (GRUB_AS_LIST (desc));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+16
-16
@@ -82,7 +82,7 @@ grub_usb_hub_add_dev (grub_usb_controller_t controller,
|
|||||||
if (i == GRUB_USBHUB_MAX_DEVICES)
|
if (i == GRUB_USBHUB_MAX_DEVICES)
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_IO, "can't assign address to USB device");
|
grub_error (GRUB_ERR_IO, "can't assign address to USB device");
|
||||||
for (i = 0; i < GRUB_USB_MAX_CONF; i++)
|
for (i = 0; i < 8; i++)
|
||||||
grub_free (dev->config[i].descconf);
|
grub_free (dev->config[i].descconf);
|
||||||
grub_free (dev);
|
grub_free (dev);
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -96,7 +96,7 @@ grub_usb_hub_add_dev (grub_usb_controller_t controller,
|
|||||||
i, 0, 0, NULL);
|
i, 0, 0, NULL);
|
||||||
if (err)
|
if (err)
|
||||||
{
|
{
|
||||||
for (i = 0; i < GRUB_USB_MAX_CONF; i++)
|
for (i = 0; i < 8; i++)
|
||||||
grub_free (dev->config[i].descconf);
|
grub_free (dev->config[i].descconf);
|
||||||
grub_free (dev);
|
grub_free (dev);
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -115,11 +115,11 @@ grub_usb_hub_add_dev (grub_usb_controller_t controller,
|
|||||||
grub_millisleep (2);
|
grub_millisleep (2);
|
||||||
|
|
||||||
grub_boot_time ("Probing USB device driver");
|
grub_boot_time ("Probing USB device driver");
|
||||||
|
|
||||||
grub_usb_device_attach (dev);
|
grub_usb_device_attach (dev);
|
||||||
|
|
||||||
grub_boot_time ("Attached USB device");
|
grub_boot_time ("Attached USB device");
|
||||||
|
|
||||||
return dev;
|
return dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -130,7 +130,7 @@ grub_usb_add_hub (grub_usb_device_t dev)
|
|||||||
struct grub_usb_usb_hubdesc hubdesc;
|
struct grub_usb_usb_hubdesc hubdesc;
|
||||||
grub_usb_err_t err;
|
grub_usb_err_t err;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
err = grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_IN
|
err = grub_usb_control_msg (dev, (GRUB_USB_REQTYPE_IN
|
||||||
| GRUB_USB_REQTYPE_CLASS
|
| GRUB_USB_REQTYPE_CLASS
|
||||||
| GRUB_USB_REQTYPE_TARGET_DEV),
|
| GRUB_USB_REQTYPE_TARGET_DEV),
|
||||||
@@ -149,8 +149,8 @@ grub_usb_add_hub (grub_usb_device_t dev)
|
|||||||
grub_usb_set_configuration (dev, 1);
|
grub_usb_set_configuration (dev, 1);
|
||||||
|
|
||||||
dev->nports = hubdesc.portcnt;
|
dev->nports = hubdesc.portcnt;
|
||||||
dev->children = grub_calloc (hubdesc.portcnt, sizeof (dev->children[0]));
|
dev->children = grub_zalloc (hubdesc.portcnt * sizeof (dev->children[0]));
|
||||||
dev->ports = grub_calloc (dev->nports, sizeof (dev->ports[0]));
|
dev->ports = grub_zalloc (dev->nports * sizeof (dev->ports[0]));
|
||||||
if (!dev->children || !dev->ports)
|
if (!dev->children || !dev->ports)
|
||||||
{
|
{
|
||||||
grub_free (dev->children);
|
grub_free (dev->children);
|
||||||
@@ -268,8 +268,8 @@ grub_usb_controller_dev_register_iter (grub_usb_controller_t controller, void *d
|
|||||||
|
|
||||||
/* Query the number of ports the root Hub has. */
|
/* Query the number of ports the root Hub has. */
|
||||||
hub->nports = controller->dev->hubports (controller);
|
hub->nports = controller->dev->hubports (controller);
|
||||||
hub->devices = grub_calloc (hub->nports, sizeof (hub->devices[0]));
|
hub->devices = grub_zalloc (sizeof (hub->devices[0]) * hub->nports);
|
||||||
hub->ports = grub_calloc (hub->nports, sizeof (hub->ports[0]));
|
hub->ports = grub_zalloc (sizeof (hub->ports[0]) * hub->nports);
|
||||||
if (!hub->devices || !hub->ports)
|
if (!hub->devices || !hub->ports)
|
||||||
{
|
{
|
||||||
grub_free (hub->devices);
|
grub_free (hub->devices);
|
||||||
@@ -328,7 +328,7 @@ grub_usb_controller_dev_register (grub_usb_controller_dev_t usb)
|
|||||||
|
|
||||||
speed = hub->controller->dev->detect_dev (hub->controller, portno,
|
speed = hub->controller->dev->detect_dev (hub->controller, portno,
|
||||||
&changed);
|
&changed);
|
||||||
|
|
||||||
if (hub->ports[portno].state == PORT_STATE_NORMAL
|
if (hub->ports[portno].state == PORT_STATE_NORMAL
|
||||||
&& speed != GRUB_USB_SPEED_NONE)
|
&& speed != GRUB_USB_SPEED_NONE)
|
||||||
{
|
{
|
||||||
@@ -422,7 +422,7 @@ wait_power_nonroot_hub (grub_usb_device_t dev)
|
|||||||
grub_usb_err_t err;
|
grub_usb_err_t err;
|
||||||
int continue_waiting = 0;
|
int continue_waiting = 0;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
for (i = 1; i <= dev->nports; i++)
|
for (i = 1; i <= dev->nports; i++)
|
||||||
if (dev->ports[i - 1].state == PORT_STATE_WAITING_FOR_STABLE_POWER)
|
if (dev->ports[i - 1].state == PORT_STATE_WAITING_FOR_STABLE_POWER)
|
||||||
{
|
{
|
||||||
@@ -564,7 +564,7 @@ poll_nonroot_hub (grub_usb_device_t dev)
|
|||||||
|
|
||||||
detach_device (dev->children[i - 1]);
|
detach_device (dev->children[i - 1]);
|
||||||
dev->children[i - 1] = NULL;
|
dev->children[i - 1] = NULL;
|
||||||
|
|
||||||
/* Connected and status of connection changed ? */
|
/* Connected and status of connection changed ? */
|
||||||
if (status & GRUB_USB_HUB_STATUS_PORT_CONNECTED)
|
if (status & GRUB_USB_HUB_STATUS_PORT_CONNECTED)
|
||||||
{
|
{
|
||||||
@@ -642,7 +642,7 @@ poll_nonroot_hub (grub_usb_device_t dev)
|
|||||||
split_hubport = dev->split_hubport;
|
split_hubport = dev->split_hubport;
|
||||||
split_hubaddr = dev->split_hubaddr;
|
split_hubaddr = dev->split_hubaddr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add the device and assign a device address to it. */
|
/* Add the device and assign a device address to it. */
|
||||||
next_dev = grub_usb_hub_add_dev (&dev->controller, speed,
|
next_dev = grub_usb_hub_add_dev (&dev->controller, speed,
|
||||||
split_hubport, split_hubaddr);
|
split_hubport, split_hubaddr);
|
||||||
@@ -707,12 +707,12 @@ grub_usb_poll_devices (int wait_for_completion)
|
|||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
rescan = 0;
|
rescan = 0;
|
||||||
|
|
||||||
/* We should check changes of non-root hubs too. */
|
/* We should check changes of non-root hubs too. */
|
||||||
for (i = 0; i < GRUB_USBHUB_MAX_DEVICES; i++)
|
for (i = 0; i < GRUB_USBHUB_MAX_DEVICES; i++)
|
||||||
{
|
{
|
||||||
grub_usb_device_t dev = grub_usb_devs[i];
|
grub_usb_device_t dev = grub_usb_devs[i];
|
||||||
|
|
||||||
if (dev && dev->descdev.class == 0x09)
|
if (dev && dev->descdev.class == 0x09)
|
||||||
poll_nonroot_hub (dev);
|
poll_nonroot_hub (dev);
|
||||||
}
|
}
|
||||||
@@ -723,7 +723,7 @@ grub_usb_poll_devices (int wait_for_completion)
|
|||||||
for (i = 0; i < GRUB_USBHUB_MAX_DEVICES; i++)
|
for (i = 0; i < GRUB_USBHUB_MAX_DEVICES; i++)
|
||||||
{
|
{
|
||||||
grub_usb_device_t dev = grub_usb_devs[i];
|
grub_usb_device_t dev = grub_usb_devs[i];
|
||||||
|
|
||||||
if (dev && dev->descdev.class == 0x09)
|
if (dev && dev->descdev.class == 0x09)
|
||||||
continue_waiting = continue_waiting || wait_power_nonroot_hub (dev);
|
continue_waiting = continue_waiting || wait_power_nonroot_hub (dev);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <grub/dl.h>
|
#include <grub/dl.h>
|
||||||
#include <grub/dma.h>
|
#include <grub/pci.h>
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/usb.h>
|
#include <grub/usb.h>
|
||||||
@@ -40,7 +40,7 @@ grub_usb_bulk_maxpacket (grub_usb_device_t dev,
|
|||||||
|
|
||||||
|
|
||||||
static grub_usb_err_t
|
static grub_usb_err_t
|
||||||
grub_usb_execute_and_wait_transfer (grub_usb_device_t dev,
|
grub_usb_execute_and_wait_transfer (grub_usb_device_t dev,
|
||||||
grub_usb_transfer_t transfer,
|
grub_usb_transfer_t transfer,
|
||||||
int timeout, grub_size_t *actual)
|
int timeout, grub_size_t *actual)
|
||||||
{
|
{
|
||||||
@@ -205,7 +205,7 @@ grub_usb_control_msg (grub_usb_device_t dev,
|
|||||||
grub_dprintf ("usb", "control: err=%d\n", err);
|
grub_dprintf ("usb", "control: err=%d\n", err);
|
||||||
|
|
||||||
grub_free (transfer->transactions);
|
grub_free (transfer->transactions);
|
||||||
|
|
||||||
grub_free (transfer);
|
grub_free (transfer);
|
||||||
grub_dma_free (setupdata_chunk);
|
grub_dma_free (setupdata_chunk);
|
||||||
|
|
||||||
|
|||||||
+26
-42
@@ -27,7 +27,6 @@
|
|||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/memory.h>
|
#include <grub/memory.h>
|
||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
#include <grub/lockdown.h>
|
|
||||||
|
|
||||||
#ifdef GRUB_MACHINE_EFI
|
#ifdef GRUB_MACHINE_EFI
|
||||||
#include <grub/efi/efi.h>
|
#include <grub/efi/efi.h>
|
||||||
@@ -168,7 +167,7 @@ grub_acpi_create_ebda (void)
|
|||||||
struct grub_acpi_rsdp_v10 *v1;
|
struct grub_acpi_rsdp_v10 *v1;
|
||||||
struct grub_acpi_rsdp_v20 *v2;
|
struct grub_acpi_rsdp_v20 *v2;
|
||||||
|
|
||||||
ebda = (grub_uint8_t *) (grub_addr_t) ((*((grub_uint16_t *) grub_absolute_pointer (0x40e))) << 4);
|
ebda = (grub_uint8_t *) (grub_addr_t) ((*((grub_uint16_t *)0x40e)) << 4);
|
||||||
grub_dprintf ("acpi", "EBDA @%p\n", ebda);
|
grub_dprintf ("acpi", "EBDA @%p\n", ebda);
|
||||||
if (ebda)
|
if (ebda)
|
||||||
ebda_kb_len = *(grub_uint16_t *) ebda;
|
ebda_kb_len = *(grub_uint16_t *) ebda;
|
||||||
@@ -298,7 +297,7 @@ grub_acpi_create_ebda (void)
|
|||||||
*target = 0;
|
*target = 0;
|
||||||
|
|
||||||
grub_dprintf ("acpi", "Switching EBDA\n");
|
grub_dprintf ("acpi", "Switching EBDA\n");
|
||||||
(*((grub_uint16_t *) grub_absolute_pointer (0x40e))) = ((grub_addr_t) targetebda) >> 4;
|
(*((grub_uint16_t *) 0x40e)) = ((grub_addr_t) targetebda) >> 4;
|
||||||
grub_dprintf ("acpi", "EBDA switched\n");
|
grub_dprintf ("acpi", "EBDA switched\n");
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
@@ -490,12 +489,12 @@ grub_cmd_acpi (struct grub_extcmd_context *ctxt, int argc, char **args)
|
|||||||
|
|
||||||
if (rsdp)
|
if (rsdp)
|
||||||
{
|
{
|
||||||
grub_uint8_t *entry_ptr;
|
grub_uint32_t *entry_ptr;
|
||||||
char *exclude = 0;
|
char *exclude = 0;
|
||||||
char *load_only = 0;
|
char *load_only = 0;
|
||||||
char *ptr;
|
char *ptr;
|
||||||
grub_size_t tbl_addr_size;
|
/* RSDT consists of header and an array of 32-bit pointers. */
|
||||||
struct grub_acpi_table_header *table_head;
|
struct grub_acpi_table_header *rsdt;
|
||||||
|
|
||||||
exclude = state[0].set ? grub_strdup (state[0].arg) : 0;
|
exclude = state[0].set ? grub_strdup (state[0].arg) : 0;
|
||||||
if (exclude)
|
if (exclude)
|
||||||
@@ -514,32 +513,17 @@ grub_cmd_acpi (struct grub_extcmd_context *ctxt, int argc, char **args)
|
|||||||
/* Set revision variables to replicate the same version as host. */
|
/* Set revision variables to replicate the same version as host. */
|
||||||
rev1 = ! rsdp->revision;
|
rev1 = ! rsdp->revision;
|
||||||
rev2 = rsdp->revision;
|
rev2 = rsdp->revision;
|
||||||
if (rev2 && ((struct grub_acpi_table_header *) (grub_addr_t) ((struct grub_acpi_rsdp_v20 *) rsdp)->xsdt_addr) != NULL)
|
rsdt = (struct grub_acpi_table_header *) (grub_addr_t) rsdp->rsdt_addr;
|
||||||
{
|
|
||||||
/* XSDT consists of header and an array of 64-bit pointers. */
|
|
||||||
table_head = (struct grub_acpi_table_header *) (grub_addr_t) ((struct grub_acpi_rsdp_v20 *) rsdp)->xsdt_addr;
|
|
||||||
tbl_addr_size = sizeof (((struct grub_acpi_rsdp_v20 *) rsdp)->xsdt_addr);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* RSDT consists of header and an array of 32-bit pointers. */
|
|
||||||
table_head = (struct grub_acpi_table_header *) (grub_addr_t) rsdp->rsdt_addr;
|
|
||||||
tbl_addr_size = sizeof (rsdp->rsdt_addr);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Load host tables. */
|
/* Load host tables. */
|
||||||
for (entry_ptr = (grub_uint8_t *) (table_head + 1);
|
for (entry_ptr = (grub_uint32_t *) (rsdt + 1);
|
||||||
entry_ptr < (grub_uint8_t *) (((grub_uint8_t *) table_head) + table_head->length);
|
entry_ptr < (grub_uint32_t *) (((grub_uint8_t *) rsdt)
|
||||||
entry_ptr += tbl_addr_size)
|
+ rsdt->length);
|
||||||
|
entry_ptr++)
|
||||||
{
|
{
|
||||||
char signature[5];
|
char signature[5];
|
||||||
struct efiemu_acpi_table *table;
|
struct efiemu_acpi_table *table;
|
||||||
struct grub_acpi_table_header *curtable;
|
struct grub_acpi_table_header *curtable
|
||||||
if (tbl_addr_size == sizeof (rsdp->rsdt_addr))
|
= (struct grub_acpi_table_header *) (grub_addr_t) *entry_ptr;
|
||||||
curtable = (struct grub_acpi_table_header *) (grub_addr_t) *((grub_uint32_t *) entry_ptr);
|
|
||||||
else
|
|
||||||
curtable = (struct grub_acpi_table_header *) (grub_addr_t) *((grub_uint64_t *) entry_ptr);
|
|
||||||
|
|
||||||
signature[4] = 0;
|
signature[4] = 0;
|
||||||
for (i = 0; i < 4;i++)
|
for (i = 0; i < 4;i++)
|
||||||
signature[i] = grub_tolower (curtable->signature[i]);
|
signature[i] = grub_tolower (curtable->signature[i]);
|
||||||
@@ -651,7 +635,7 @@ grub_cmd_acpi (struct grub_extcmd_context *ctxt, int argc, char **args)
|
|||||||
grub_size_t size;
|
grub_size_t size;
|
||||||
char *buf;
|
char *buf;
|
||||||
|
|
||||||
file = grub_file_open (args[i], GRUB_FILE_TYPE_ACPI_TABLE);
|
file = grub_file_open (args[i]);
|
||||||
if (! file)
|
if (! file)
|
||||||
{
|
{
|
||||||
free_tables ();
|
free_tables ();
|
||||||
@@ -774,13 +758,13 @@ grub_cmd_acpi (struct grub_extcmd_context *ctxt, int argc, char **args)
|
|||||||
|
|
||||||
#ifdef GRUB_MACHINE_EFI
|
#ifdef GRUB_MACHINE_EFI
|
||||||
{
|
{
|
||||||
static grub_guid_t acpi = GRUB_EFI_ACPI_TABLE_GUID;
|
struct grub_efi_guid acpi = GRUB_EFI_ACPI_TABLE_GUID;
|
||||||
static grub_guid_t acpi20 = GRUB_EFI_ACPI_20_TABLE_GUID;
|
struct grub_efi_guid acpi20 = GRUB_EFI_ACPI_20_TABLE_GUID;
|
||||||
|
|
||||||
grub_efi_system_table->boot_services->install_configuration_table (&acpi20,
|
efi_call_2 (grub_efi_system_table->boot_services->install_configuration_table,
|
||||||
grub_acpi_get_rsdpv2 ());
|
&acpi20, grub_acpi_get_rsdpv2 ());
|
||||||
grub_efi_system_table->boot_services->install_configuration_table (&acpi,
|
efi_call_2 (grub_efi_system_table->boot_services->install_configuration_table,
|
||||||
grub_acpi_get_rsdpv1 ());
|
&acpi, grub_acpi_get_rsdpv1 ());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -791,13 +775,13 @@ static grub_extcmd_t cmd;
|
|||||||
|
|
||||||
GRUB_MOD_INIT(acpi)
|
GRUB_MOD_INIT(acpi)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd_lockdown ("acpi", grub_cmd_acpi, 0,
|
cmd = grub_register_extcmd ("acpi", grub_cmd_acpi, 0,
|
||||||
N_("[-1|-2] [--exclude=TABLE1,TABLE2|"
|
N_("[-1|-2] [--exclude=TABLE1,TABLE2|"
|
||||||
"--load-only=TABLE1,TABLE2] FILE1"
|
"--load-only=TABLE1,TABLE2] FILE1"
|
||||||
" [FILE2] [...]"),
|
" [FILE2] [...]"),
|
||||||
N_("Load host ACPI tables and tables "
|
N_("Load host ACPI tables and tables "
|
||||||
"specified by arguments."),
|
"specified by arguments."),
|
||||||
options);
|
options);
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(acpi)
|
GRUB_MOD_FINI(acpi)
|
||||||
|
|||||||
@@ -78,7 +78,7 @@ static inline grub_uint32_t
|
|||||||
skip_name_string (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
skip_name_string (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
||||||
{
|
{
|
||||||
const grub_uint8_t *ptr0 = ptr;
|
const grub_uint8_t *ptr0 = ptr;
|
||||||
|
|
||||||
while (ptr < end && (*ptr == '^' || *ptr == '\\'))
|
while (ptr < end && (*ptr == '^' || *ptr == '\\'))
|
||||||
ptr++;
|
ptr++;
|
||||||
switch (*ptr)
|
switch (*ptr)
|
||||||
@@ -231,7 +231,7 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
|
|||||||
grub_uint8_t *scope, int scope_len)
|
grub_uint8_t *scope, int scope_len)
|
||||||
{
|
{
|
||||||
grub_uint8_t *prev = table;
|
grub_uint8_t *prev = table;
|
||||||
|
|
||||||
if (!ptr)
|
if (!ptr)
|
||||||
ptr = table + sizeof (struct grub_acpi_table_header);
|
ptr = table + sizeof (struct grub_acpi_table_header);
|
||||||
while (ptr < end && prev < ptr)
|
while (ptr < end && prev < ptr)
|
||||||
@@ -337,7 +337,7 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
|
|||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
grub_printf ("Unknown opcode 0x%x\n", *ptr);
|
grub_printf ("Unknown opcode 0x%x\n", *ptr);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,120 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2023 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/>.
|
|
||||||
*
|
|
||||||
* Implementation of the Boot Loader Interface.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/charset.h>
|
|
||||||
#include <grub/efi/api.h>
|
|
||||||
#include <grub/efi/disk.h>
|
|
||||||
#include <grub/efi/efi.h>
|
|
||||||
#include <grub/err.h>
|
|
||||||
#include <grub/extcmd.h>
|
|
||||||
#include <grub/gpt_partition.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/partition.h>
|
|
||||||
#include <grub/types.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
|
||||||
|
|
||||||
#define MODNAME "bli"
|
|
||||||
|
|
||||||
static const grub_guid_t bli_vendor_guid = GRUB_EFI_VENDOR_BOOT_LOADER_INTERFACE_GUID;
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
get_part_uuid (const char *device_name, char **part_uuid)
|
|
||||||
{
|
|
||||||
grub_device_t device;
|
|
||||||
grub_err_t status = GRUB_ERR_NONE;
|
|
||||||
grub_disk_t disk = NULL;
|
|
||||||
struct grub_gpt_partentry entry;
|
|
||||||
|
|
||||||
device = grub_device_open (device_name);
|
|
||||||
if (device == NULL)
|
|
||||||
return grub_error (grub_errno, N_("cannot open device: %s"), device_name);
|
|
||||||
|
|
||||||
disk = grub_disk_open (device->disk->name);
|
|
||||||
if (disk == NULL)
|
|
||||||
{
|
|
||||||
status = grub_error (grub_errno, N_("cannot open disk: %s"), device_name);
|
|
||||||
grub_device_close (device);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (grub_strcmp (device->disk->partition->partmap->name, "gpt") != 0)
|
|
||||||
{
|
|
||||||
status = grub_error (GRUB_ERR_BAD_PART_TABLE,
|
|
||||||
N_("this is not a GPT partition table: %s"), device_name);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (grub_disk_read (disk, device->disk->partition->offset,
|
|
||||||
device->disk->partition->index, sizeof (entry), &entry) != GRUB_ERR_NONE)
|
|
||||||
{
|
|
||||||
status = grub_error (grub_errno, N_("read error: %s"), device_name);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
*part_uuid = grub_xasprintf ("%pG", &entry.guid);
|
|
||||||
if (*part_uuid == NULL)
|
|
||||||
status = grub_errno;
|
|
||||||
|
|
||||||
fail:
|
|
||||||
grub_disk_close (disk);
|
|
||||||
grub_device_close (device);
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
set_loader_device_part_uuid (void)
|
|
||||||
{
|
|
||||||
grub_efi_loaded_image_t *image;
|
|
||||||
char *device_name;
|
|
||||||
grub_err_t status = GRUB_ERR_NONE;
|
|
||||||
char *part_uuid = NULL;
|
|
||||||
|
|
||||||
image = grub_efi_get_loaded_image (grub_efi_image_handle);
|
|
||||||
if (image == NULL)
|
|
||||||
return grub_error (GRUB_ERR_BAD_DEVICE, N_("unable to find boot device"));
|
|
||||||
|
|
||||||
device_name = grub_efidisk_get_device_name (image->device_handle);
|
|
||||||
if (device_name == NULL)
|
|
||||||
return grub_error (GRUB_ERR_BAD_DEVICE, N_("unable to find boot device"));
|
|
||||||
|
|
||||||
status = get_part_uuid (device_name, &part_uuid);
|
|
||||||
|
|
||||||
if (status == GRUB_ERR_NONE)
|
|
||||||
status = grub_efi_set_variable_to_string ("LoaderDevicePartUUID", &bli_vendor_guid, part_uuid,
|
|
||||||
GRUB_EFI_VARIABLE_BOOTSERVICE_ACCESS |
|
|
||||||
GRUB_EFI_VARIABLE_RUNTIME_ACCESS);
|
|
||||||
else
|
|
||||||
grub_error (status, N_("unable to determine partition UUID of boot device"));
|
|
||||||
|
|
||||||
grub_free (part_uuid);
|
|
||||||
grub_free (device_name);
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_INIT (bli)
|
|
||||||
{
|
|
||||||
grub_efi_set_variable_to_string ("LoaderInfo", &bli_vendor_guid, PACKAGE_STRING,
|
|
||||||
GRUB_EFI_VARIABLE_BOOTSERVICE_ACCESS |
|
|
||||||
GRUB_EFI_VARIABLE_RUNTIME_ACCESS);
|
|
||||||
set_loader_device_part_uuid ();
|
|
||||||
}
|
|
||||||
@@ -53,9 +53,9 @@ print_blocklist (grub_disk_addr_t sector, unsigned num,
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Helper for grub_cmd_blocklist. */
|
/* Helper for grub_cmd_blocklist. */
|
||||||
static grub_err_t
|
static void
|
||||||
read_blocklist (grub_disk_addr_t sector, unsigned offset, unsigned length,
|
read_blocklist (grub_disk_addr_t sector, unsigned offset, unsigned length,
|
||||||
char *buf __attribute__ ((unused)), void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
struct blocklist_ctx *ctx = data;
|
struct blocklist_ctx *ctx = data;
|
||||||
|
|
||||||
@@ -70,7 +70,7 @@ read_blocklist (grub_disk_addr_t sector, unsigned offset, unsigned length,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!length)
|
if (!length)
|
||||||
return GRUB_ERR_NONE;
|
return;
|
||||||
print_blocklist (ctx->start_sector, ctx->num_sectors, 0, 0, ctx);
|
print_blocklist (ctx->start_sector, ctx->num_sectors, 0, 0, ctx);
|
||||||
ctx->num_sectors = 0;
|
ctx->num_sectors = 0;
|
||||||
}
|
}
|
||||||
@@ -87,7 +87,7 @@ read_blocklist (grub_disk_addr_t sector, unsigned offset, unsigned length,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!length)
|
if (!length)
|
||||||
return GRUB_ERR_NONE;
|
return;
|
||||||
|
|
||||||
if (length & (GRUB_DISK_SECTOR_SIZE - 1))
|
if (length & (GRUB_DISK_SECTOR_SIZE - 1))
|
||||||
{
|
{
|
||||||
@@ -103,8 +103,6 @@ read_blocklist (grub_disk_addr_t sector, unsigned offset, unsigned length,
|
|||||||
ctx->start_sector = sector;
|
ctx->start_sector = sector;
|
||||||
ctx->num_sectors = length >> GRUB_DISK_SECTOR_BITS;
|
ctx->num_sectors = length >> GRUB_DISK_SECTOR_BITS;
|
||||||
}
|
}
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
@@ -123,8 +121,8 @@ grub_cmd_blocklist (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
if (argc < 1)
|
if (argc < 1)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
||||||
|
|
||||||
file = grub_file_open (args[0], GRUB_FILE_TYPE_PRINT_BLOCKLIST
|
grub_file_filter_disable_compression ();
|
||||||
| GRUB_FILE_TYPE_NO_DECOMPRESS);
|
file = grub_file_open (args[0]);
|
||||||
if (! file)
|
if (! file)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
|
|||||||
@@ -27,20 +27,10 @@
|
|||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
static grub_err_t (*grub_loader_boot_func) (void *context);
|
static grub_err_t (*grub_loader_boot_func) (void);
|
||||||
static grub_err_t (*grub_loader_unload_func) (void *context);
|
static grub_err_t (*grub_loader_unload_func) (void);
|
||||||
static void *grub_loader_context;
|
|
||||||
static int grub_loader_flags;
|
static int grub_loader_flags;
|
||||||
|
|
||||||
struct grub_simple_loader_hooks
|
|
||||||
{
|
|
||||||
grub_err_t (*boot) (void);
|
|
||||||
grub_err_t (*unload) (void);
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Don't heap allocate this to avoid making grub_loader_set() fallible. */
|
|
||||||
static struct grub_simple_loader_hooks simple_loader_hooks;
|
|
||||||
|
|
||||||
struct grub_preboot
|
struct grub_preboot
|
||||||
{
|
{
|
||||||
grub_err_t (*preboot_func) (int);
|
grub_err_t (*preboot_func) (int);
|
||||||
@@ -54,29 +44,6 @@ static int grub_loader_loaded;
|
|||||||
static struct grub_preboot *preboots_head = 0,
|
static struct grub_preboot *preboots_head = 0,
|
||||||
*preboots_tail = 0;
|
*preboots_tail = 0;
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_simple_boot_hook (void *context)
|
|
||||||
{
|
|
||||||
struct grub_simple_loader_hooks *hooks;
|
|
||||||
|
|
||||||
hooks = (struct grub_simple_loader_hooks *) context;
|
|
||||||
return hooks->boot ();
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_simple_unload_hook (void *context)
|
|
||||||
{
|
|
||||||
struct grub_simple_loader_hooks *hooks;
|
|
||||||
grub_err_t ret;
|
|
||||||
|
|
||||||
hooks = (struct grub_simple_loader_hooks *) context;
|
|
||||||
|
|
||||||
ret = hooks->unload ();
|
|
||||||
grub_memset (hooks, 0, sizeof (*hooks));
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
int
|
||||||
grub_loader_is_loaded (void)
|
grub_loader_is_loaded (void)
|
||||||
{
|
{
|
||||||
@@ -143,45 +110,28 @@ grub_loader_unregister_preboot_hook (struct grub_preboot *hnd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_loader_set_ex (grub_err_t (*boot) (void *context),
|
grub_loader_set (grub_err_t (*boot) (void),
|
||||||
grub_err_t (*unload) (void *context),
|
grub_err_t (*unload) (void),
|
||||||
void *context,
|
int flags)
|
||||||
int flags)
|
|
||||||
{
|
{
|
||||||
if (grub_loader_loaded && grub_loader_unload_func)
|
if (grub_loader_loaded && grub_loader_unload_func)
|
||||||
grub_loader_unload_func (grub_loader_context);
|
grub_loader_unload_func ();
|
||||||
|
|
||||||
grub_loader_boot_func = boot;
|
grub_loader_boot_func = boot;
|
||||||
grub_loader_unload_func = unload;
|
grub_loader_unload_func = unload;
|
||||||
grub_loader_context = context;
|
|
||||||
grub_loader_flags = flags;
|
grub_loader_flags = flags;
|
||||||
|
|
||||||
grub_loader_loaded = 1;
|
grub_loader_loaded = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
grub_loader_set (grub_err_t (*boot) (void),
|
|
||||||
grub_err_t (*unload) (void),
|
|
||||||
int flags)
|
|
||||||
{
|
|
||||||
grub_loader_set_ex (grub_simple_boot_hook,
|
|
||||||
grub_simple_unload_hook,
|
|
||||||
&simple_loader_hooks,
|
|
||||||
flags);
|
|
||||||
|
|
||||||
simple_loader_hooks.boot = boot;
|
|
||||||
simple_loader_hooks.unload = unload;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_loader_unset(void)
|
grub_loader_unset(void)
|
||||||
{
|
{
|
||||||
if (grub_loader_loaded && grub_loader_unload_func)
|
if (grub_loader_loaded && grub_loader_unload_func)
|
||||||
grub_loader_unload_func (grub_loader_context);
|
grub_loader_unload_func ();
|
||||||
|
|
||||||
grub_loader_boot_func = 0;
|
grub_loader_boot_func = 0;
|
||||||
grub_loader_unload_func = 0;
|
grub_loader_unload_func = 0;
|
||||||
grub_loader_context = 0;
|
|
||||||
|
|
||||||
grub_loader_loaded = 0;
|
grub_loader_loaded = 0;
|
||||||
}
|
}
|
||||||
@@ -208,7 +158,7 @@ grub_loader_boot (void)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
err = (grub_loader_boot_func) (grub_loader_context);
|
err = (grub_loader_boot_func) ();
|
||||||
|
|
||||||
for (cur = preboots_tail; cur; cur = cur->prev)
|
for (cur = preboots_tail; cur; cur = cur->prev)
|
||||||
if (! err)
|
if (! err)
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ grub_cmd_boottime (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
grub_uint32_t tmrel = cur->tp - last_time;
|
grub_uint32_t tmrel = cur->tp - last_time;
|
||||||
last_time = cur->tp;
|
last_time = cur->tp;
|
||||||
|
|
||||||
grub_printf ("%3d.%03ds %2d.%03ds %s:%d %s\n",
|
grub_printf ("%3d.%03ds %2d.%03ds %s:%d %s\n",
|
||||||
tmabs / 1000, tmabs % 1000, tmrel / 1000, tmrel % 1000, cur->file, cur->line,
|
tmabs / 1000, tmabs % 1000, tmrel / 1000, tmrel % 1000, cur->file, cur->line,
|
||||||
cur->msg);
|
cur->msg);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ grub_rescue_cmd_info (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
hits, misses);
|
hits, misses);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
grub_printf ("%s\n", _("No disk cache statistics available\n"));
|
grub_printf ("%s\n", _("No disk cache statistics available\n"));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ grub_cmd_cat (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
if (argc != 1)
|
if (argc != 1)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
||||||
|
|
||||||
file = grub_file_open (args[0], GRUB_FILE_TYPE_CAT);
|
file = grub_file_open (args[0]);
|
||||||
if (! file)
|
if (! file)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
@@ -104,7 +104,7 @@ grub_cmd_cat (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
|| grub_isspace (code)) && code != '\r')
|
|| grub_isspace (code)) && code != '\r')
|
||||||
{
|
{
|
||||||
grub_printf ("%C", code);
|
grub_printf ("%C", code);
|
||||||
count = 0;
|
count = 0;
|
||||||
code = 0;
|
code = 0;
|
||||||
utcount = 0;
|
utcount = 0;
|
||||||
continue;
|
continue;
|
||||||
@@ -113,7 +113,7 @@ grub_cmd_cat (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
if (dos && code == '\r')
|
if (dos && code == '\r')
|
||||||
{
|
{
|
||||||
is_0d = 1;
|
is_0d = 1;
|
||||||
count = 0;
|
count = 0;
|
||||||
code = 0;
|
code = 0;
|
||||||
utcount = 0;
|
utcount = 0;
|
||||||
continue;
|
continue;
|
||||||
@@ -123,7 +123,7 @@ grub_cmd_cat (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
for (j = 0; j < utcount; j++)
|
for (j = 0; j < utcount; j++)
|
||||||
grub_printf ("<%x>", (unsigned int) utbuf[j]);
|
grub_printf ("<%x>", (unsigned int) utbuf[j]);
|
||||||
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
|
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
|
||||||
count = 0;
|
count = 0;
|
||||||
code = 0;
|
code = 0;
|
||||||
utcount = 0;
|
utcount = 0;
|
||||||
}
|
}
|
||||||
|
|||||||
+15
-27
@@ -22,21 +22,14 @@
|
|||||||
#include <grub/file.h>
|
#include <grub/file.h>
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
#include <grub/extcmd.h>
|
|
||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
#define BUFFER_SIZE 512
|
#define BUFFER_SIZE 512
|
||||||
|
|
||||||
static const struct grub_arg_option options[] =
|
|
||||||
{
|
|
||||||
{0, 'v', 0, N_("Enable verbose output"), 0, 0},
|
|
||||||
{0, 0, 0, 0, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_cmp (grub_extcmd_context_t ctxt,
|
grub_cmd_cmp (grub_command_t cmd __attribute__ ((unused)),
|
||||||
int argc, char **args)
|
int argc, char **args)
|
||||||
{
|
{
|
||||||
grub_ssize_t rd1, rd2;
|
grub_ssize_t rd1, rd2;
|
||||||
@@ -45,20 +38,19 @@ grub_cmd_cmp (grub_extcmd_context_t ctxt,
|
|||||||
grub_file_t file2 = 0;
|
grub_file_t file2 = 0;
|
||||||
char *buf1 = 0;
|
char *buf1 = 0;
|
||||||
char *buf2 = 0;
|
char *buf2 = 0;
|
||||||
grub_err_t err = GRUB_ERR_TEST_FAILURE;
|
|
||||||
|
|
||||||
if (argc != 2)
|
if (argc != 2)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("two arguments expected"));
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("two arguments expected"));
|
||||||
|
|
||||||
if (ctxt->state[0].set)
|
grub_printf_ (N_("Compare file `%s' with `%s':\n"), args[0],
|
||||||
grub_printf_ (N_("Compare file `%s' with `%s':\n"), args[0], args[1]);
|
args[1]);
|
||||||
|
|
||||||
file1 = grub_file_open (args[0], GRUB_FILE_TYPE_CMP);
|
file1 = grub_file_open (args[0]);
|
||||||
file2 = grub_file_open (args[1], GRUB_FILE_TYPE_CMP);
|
file2 = grub_file_open (args[1]);
|
||||||
if (! file1 || ! file2)
|
if (! file1 || ! file2)
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
|
|
||||||
if (ctxt->state[0].set && (grub_file_size (file1) != grub_file_size (file2)))
|
if (grub_file_size (file1) != grub_file_size (file2))
|
||||||
grub_printf_ (N_("Files differ in size: %llu [%s], %llu [%s]\n"),
|
grub_printf_ (N_("Files differ in size: %llu [%s], %llu [%s]\n"),
|
||||||
(unsigned long long) grub_file_size (file1), args[0],
|
(unsigned long long) grub_file_size (file1), args[0],
|
||||||
(unsigned long long) grub_file_size (file2), args[1]);
|
(unsigned long long) grub_file_size (file2), args[1]);
|
||||||
@@ -86,10 +78,9 @@ grub_cmd_cmp (grub_extcmd_context_t ctxt,
|
|||||||
{
|
{
|
||||||
if (buf1[i] != buf2[i])
|
if (buf1[i] != buf2[i])
|
||||||
{
|
{
|
||||||
if (ctxt->state[0].set)
|
grub_printf_ (N_("Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n"),
|
||||||
grub_printf_ (N_("Files differ at the offset %llu: 0x%x [%s], 0x%x [%s]\n"),
|
(unsigned long long) (i + pos), buf1[i],
|
||||||
(unsigned long long) (i + pos), buf1[i],
|
args[0], buf2[i], args[1]);
|
||||||
args[0], buf2[i], args[1]);
|
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -99,9 +90,7 @@ grub_cmd_cmp (grub_extcmd_context_t ctxt,
|
|||||||
while (rd2);
|
while (rd2);
|
||||||
|
|
||||||
/* TRANSLATORS: it's always exactly 2 files. */
|
/* TRANSLATORS: it's always exactly 2 files. */
|
||||||
if (ctxt->state[0].set)
|
grub_printf_ (N_("The files are identical.\n"));
|
||||||
grub_printf_ (N_("The files are identical.\n"));
|
|
||||||
err = GRUB_ERR_NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
@@ -113,19 +102,18 @@ cleanup:
|
|||||||
if (file2)
|
if (file2)
|
||||||
grub_file_close (file2);
|
grub_file_close (file2);
|
||||||
|
|
||||||
return err;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_extcmd_t cmd;
|
static grub_command_t cmd;
|
||||||
|
|
||||||
GRUB_MOD_INIT(cmp)
|
GRUB_MOD_INIT(cmp)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd ("cmp", grub_cmd_cmp, 0,
|
cmd = grub_register_command ("cmp", grub_cmd_cmp,
|
||||||
N_("FILE1 FILE2"), N_("Compare two files."),
|
N_("FILE1 FILE2"), N_("Compare two files."));
|
||||||
options);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(cmp)
|
GRUB_MOD_FINI(cmp)
|
||||||
{
|
{
|
||||||
grub_unregister_extcmd (cmd);
|
grub_unregister_command (cmd);
|
||||||
}
|
}
|
||||||
@@ -59,8 +59,7 @@ grub_cmd_date (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
for (; argc; argc--, args++)
|
for (; argc; argc--, args++)
|
||||||
{
|
{
|
||||||
const char *p;
|
char *p, c;
|
||||||
char c;
|
|
||||||
int m1, ofs, n, cur_mask;
|
int m1, ofs, n, cur_mask;
|
||||||
|
|
||||||
p = args[0];
|
p = args[0];
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ grub_cmd_echo (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
if (newline)
|
if (newline)
|
||||||
grub_printf ("\n");
|
grub_printf ("\n");
|
||||||
|
|
||||||
grub_refresh ();
|
grub_refresh ();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,8 +27,6 @@
|
|||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
static grub_efi_boolean_t efifwsetup_is_supported (void);
|
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_fwsetup (grub_command_t cmd __attribute__ ((unused)),
|
grub_cmd_fwsetup (grub_command_t cmd __attribute__ ((unused)),
|
||||||
int argc __attribute__ ((unused)),
|
int argc __attribute__ ((unused)),
|
||||||
@@ -38,23 +36,14 @@ grub_cmd_fwsetup (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
grub_efi_uint64_t os_indications = GRUB_EFI_OS_INDICATIONS_BOOT_TO_FW_UI;
|
grub_efi_uint64_t os_indications = GRUB_EFI_OS_INDICATIONS_BOOT_TO_FW_UI;
|
||||||
grub_err_t status;
|
grub_err_t status;
|
||||||
grub_size_t oi_size;
|
grub_size_t oi_size;
|
||||||
static grub_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID;
|
grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID;
|
||||||
|
|
||||||
if (argc >= 1 && grub_strcmp(args[0], "--is-supported") == 0)
|
old_os_indications = grub_efi_get_variable ("OsIndications", &global,
|
||||||
return !efifwsetup_is_supported ();
|
&oi_size);
|
||||||
|
|
||||||
if (!efifwsetup_is_supported ())
|
|
||||||
return grub_error (GRUB_ERR_INVALID_COMMAND,
|
|
||||||
N_("reboot to firmware setup is not supported by the current firmware"));
|
|
||||||
|
|
||||||
grub_efi_get_variable ("OsIndications", &global, &oi_size,
|
|
||||||
(void **) &old_os_indications);
|
|
||||||
|
|
||||||
if (old_os_indications != NULL && oi_size == sizeof (os_indications))
|
if (old_os_indications != NULL && oi_size == sizeof (os_indications))
|
||||||
os_indications |= *old_os_indications;
|
os_indications |= *old_os_indications;
|
||||||
|
|
||||||
grub_free (old_os_indications);
|
|
||||||
|
|
||||||
status = grub_efi_set_variable ("OsIndications", &global, &os_indications,
|
status = grub_efi_set_variable ("OsIndications", &global, &os_indications,
|
||||||
sizeof (os_indications));
|
sizeof (os_indications));
|
||||||
if (status != GRUB_ERR_NONE)
|
if (status != GRUB_ERR_NONE)
|
||||||
@@ -72,27 +61,26 @@ efifwsetup_is_supported (void)
|
|||||||
{
|
{
|
||||||
grub_efi_uint64_t *os_indications_supported = NULL;
|
grub_efi_uint64_t *os_indications_supported = NULL;
|
||||||
grub_size_t oi_size = 0;
|
grub_size_t oi_size = 0;
|
||||||
static grub_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID;
|
grub_efi_guid_t global = GRUB_EFI_GLOBAL_VARIABLE_GUID;
|
||||||
grub_efi_boolean_t ret = 0;
|
|
||||||
|
|
||||||
grub_efi_get_variable ("OsIndicationsSupported", &global, &oi_size,
|
os_indications_supported = grub_efi_get_variable ("OsIndicationsSupported",
|
||||||
(void **) &os_indications_supported);
|
&global, &oi_size);
|
||||||
|
|
||||||
if (!os_indications_supported)
|
if (!os_indications_supported)
|
||||||
goto done;
|
return 0;
|
||||||
|
|
||||||
if (*os_indications_supported & GRUB_EFI_OS_INDICATIONS_BOOT_TO_FW_UI)
|
if (*os_indications_supported & GRUB_EFI_OS_INDICATIONS_BOOT_TO_FW_UI)
|
||||||
ret = 1;
|
return 1;
|
||||||
|
|
||||||
done:
|
return 0;
|
||||||
grub_free (os_indications_supported);
|
|
||||||
return ret;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_INIT (efifwsetup)
|
GRUB_MOD_INIT (efifwsetup)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("fwsetup", grub_cmd_fwsetup, NULL,
|
if (efifwsetup_is_supported ())
|
||||||
N_("Reboot into firmware setup menu."));
|
cmd = grub_register_command ("fwsetup", grub_cmd_fwsetup, NULL,
|
||||||
|
N_("Reboot into firmware setup menu."));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI (efifwsetup)
|
GRUB_MOD_FINI (efifwsetup)
|
||||||
|
|||||||
@@ -1,153 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2022 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/>.
|
|
||||||
*
|
|
||||||
* Set/Get UEFI text output mode resolution.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/dl.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/command.h>
|
|
||||||
#include <grub/i18n.h>
|
|
||||||
#include <grub/efi/efi.h>
|
|
||||||
#include <grub/efi/api.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_efi_set_mode (grub_efi_simple_text_output_interface_t *o,
|
|
||||||
grub_efi_int32_t mode)
|
|
||||||
{
|
|
||||||
grub_efi_status_t status;
|
|
||||||
|
|
||||||
if (mode != o->mode->mode)
|
|
||||||
{
|
|
||||||
status = o->set_mode (o, mode);
|
|
||||||
if (status == GRUB_EFI_SUCCESS)
|
|
||||||
;
|
|
||||||
else if (status == GRUB_EFI_DEVICE_ERROR)
|
|
||||||
return grub_error (GRUB_ERR_BAD_DEVICE,
|
|
||||||
N_("device error: could not set requested mode"));
|
|
||||||
else if (status == GRUB_EFI_UNSUPPORTED)
|
|
||||||
return grub_error (GRUB_ERR_OUT_OF_RANGE,
|
|
||||||
N_("invalid mode: number not valid"));
|
|
||||||
else
|
|
||||||
return grub_error (GRUB_ERR_BAD_FIRMWARE,
|
|
||||||
N_("unexpected EFI error number: `%u'"),
|
|
||||||
(unsigned) status);
|
|
||||||
}
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_cmd_efitextmode (grub_command_t cmd __attribute__ ((unused)),
|
|
||||||
int argc, char **args)
|
|
||||||
{
|
|
||||||
grub_efi_simple_text_output_interface_t *o = grub_efi_system_table->con_out;
|
|
||||||
unsigned long mode;
|
|
||||||
const char *p = NULL;
|
|
||||||
grub_err_t err;
|
|
||||||
grub_efi_uintn_t columns, rows;
|
|
||||||
grub_efi_int32_t i;
|
|
||||||
|
|
||||||
if (o == NULL)
|
|
||||||
return grub_error (GRUB_ERR_BAD_DEVICE, N_("no UEFI output console interface"));
|
|
||||||
|
|
||||||
if (o->mode == NULL)
|
|
||||||
return grub_error (GRUB_ERR_BUG, N_("no mode struct for UEFI output console"));
|
|
||||||
|
|
||||||
if (argc > 2)
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("at most two arguments expected"));
|
|
||||||
|
|
||||||
if (argc == 0)
|
|
||||||
{
|
|
||||||
grub_printf_ (N_("Available modes for console output device.\n"));
|
|
||||||
|
|
||||||
for (i = 0; i < o->mode->max_mode; i++)
|
|
||||||
if (GRUB_EFI_SUCCESS == o->query_mode (o, i, &columns, &rows))
|
|
||||||
grub_printf_ (N_(" [%" PRIuGRUB_EFI_UINT32_T "] Col %5"
|
|
||||||
PRIuGRUB_EFI_UINTN_T " Row %5" PRIuGRUB_EFI_UINTN_T
|
|
||||||
" %c\n"),
|
|
||||||
i, columns, rows, (i == o->mode->mode) ? '*' : ' ');
|
|
||||||
}
|
|
||||||
else if (argc == 1)
|
|
||||||
{
|
|
||||||
if (grub_strcmp (args[0], "min") == 0)
|
|
||||||
mode = 0;
|
|
||||||
else if (grub_strcmp (args[0], "max") == 0)
|
|
||||||
mode = o->mode->max_mode - 1;
|
|
||||||
else
|
|
||||||
{
|
|
||||||
mode = grub_strtoul (args[0], &p, 0);
|
|
||||||
|
|
||||||
if (*args[0] == '\0' || *p != '\0')
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
|
||||||
N_("non-numeric or invalid mode `%s'"), args[0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mode < (unsigned long) o->mode->max_mode)
|
|
||||||
{
|
|
||||||
err = grub_efi_set_mode (o, (grub_efi_int32_t) mode);
|
|
||||||
if (err != GRUB_ERR_NONE)
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
|
||||||
N_("invalid mode: `%lu' is greater than maximum mode `%lu'"),
|
|
||||||
mode, (unsigned long) o->mode->max_mode);
|
|
||||||
}
|
|
||||||
else if (argc == 2)
|
|
||||||
{
|
|
||||||
grub_efi_uintn_t u_columns, u_rows;
|
|
||||||
|
|
||||||
u_columns = (grub_efi_uintn_t) grub_strtoul (args[0], &p, 0);
|
|
||||||
|
|
||||||
if (*args[0] == '\0' || *p != '\0')
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
|
||||||
N_("non-numeric or invalid columns number `%s'"), args[0]);
|
|
||||||
|
|
||||||
u_rows = (grub_efi_uintn_t) grub_strtoul (args[1], &p, 0);
|
|
||||||
|
|
||||||
if (*args[1] == '\0' || *p != '\0')
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
|
||||||
N_("non-numeric or invalid rows number `%s'"), args[1]);
|
|
||||||
|
|
||||||
for (i = 0; i < o->mode->max_mode; i++)
|
|
||||||
if (GRUB_EFI_SUCCESS == o->query_mode (o, i, &columns, &rows))
|
|
||||||
if (u_columns == columns && u_rows == rows)
|
|
||||||
return grub_efi_set_mode (o, (grub_efi_int32_t) i);
|
|
||||||
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
|
||||||
N_("no mode found with requested columns and rows"));
|
|
||||||
}
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_command_t cmd;
|
|
||||||
GRUB_MOD_INIT (efitextmode)
|
|
||||||
{
|
|
||||||
cmd = grub_register_command ("efitextmode", grub_cmd_efitextmode,
|
|
||||||
N_("[min | max | <mode_num> | <cols> <rows>]"),
|
|
||||||
N_("Get or set EFI text mode."));
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_FINI (efitextmode)
|
|
||||||
{
|
|
||||||
grub_unregister_command (cmd);
|
|
||||||
}
|
|
||||||
@@ -27,9 +27,9 @@
|
|||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
static grub_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID;
|
static grub_efi_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID;
|
||||||
static grub_guid_t acpi2_guid = GRUB_EFI_ACPI_20_TABLE_GUID;
|
static grub_efi_guid_t acpi2_guid = GRUB_EFI_ACPI_20_TABLE_GUID;
|
||||||
static grub_guid_t smbios_guid = GRUB_EFI_SMBIOS_TABLE_GUID;
|
static grub_efi_guid_t smbios_guid = GRUB_EFI_SMBIOS_TABLE_GUID;
|
||||||
|
|
||||||
#define EBDA_SEG_ADDR 0x40e
|
#define EBDA_SEG_ADDR 0x40e
|
||||||
#define LOW_MEM_ADDR 0x413
|
#define LOW_MEM_ADDR 0x413
|
||||||
@@ -46,7 +46,7 @@ enable_rom_area (void)
|
|||||||
grub_uint32_t *rom_ptr;
|
grub_uint32_t *rom_ptr;
|
||||||
grub_pci_device_t dev = { .bus = 0, .device = 0, .function = 0};
|
grub_pci_device_t dev = { .bus = 0, .device = 0, .function = 0};
|
||||||
|
|
||||||
rom_ptr = grub_absolute_pointer (VBIOS_ADDR);
|
rom_ptr = (grub_uint32_t *) VBIOS_ADDR;
|
||||||
if (*rom_ptr != BLANK_MEM)
|
if (*rom_ptr != BLANK_MEM)
|
||||||
{
|
{
|
||||||
grub_puts_ (N_("ROM image is present."));
|
grub_puts_ (N_("ROM image is present."));
|
||||||
@@ -92,29 +92,47 @@ lock_rom_area (void)
|
|||||||
static void
|
static void
|
||||||
fake_bios_data (int use_rom)
|
fake_bios_data (int use_rom)
|
||||||
{
|
{
|
||||||
|
unsigned i;
|
||||||
void *acpi, *smbios;
|
void *acpi, *smbios;
|
||||||
grub_uint16_t *ebda_seg_ptr, *low_mem_ptr;
|
grub_uint16_t *ebda_seg_ptr, *low_mem_ptr;
|
||||||
|
|
||||||
ebda_seg_ptr = grub_absolute_pointer (EBDA_SEG_ADDR);
|
ebda_seg_ptr = (grub_uint16_t *) EBDA_SEG_ADDR;
|
||||||
low_mem_ptr = grub_absolute_pointer (LOW_MEM_ADDR);
|
low_mem_ptr = (grub_uint16_t *) LOW_MEM_ADDR;
|
||||||
if ((*ebda_seg_ptr) || (*low_mem_ptr))
|
if ((*ebda_seg_ptr) || (*low_mem_ptr))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
acpi = grub_efi_find_configuration_table (&acpi2_guid);
|
acpi = 0;
|
||||||
grub_dprintf ("efi", "ACPI2: %p\n", acpi);
|
smbios = 0;
|
||||||
if (!acpi) {
|
for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
|
||||||
acpi = grub_efi_find_configuration_table (&acpi_guid);
|
{
|
||||||
grub_dprintf ("efi", "ACPI: %p\n", acpi);
|
grub_efi_packed_guid_t *guid =
|
||||||
}
|
&grub_efi_system_table->configuration_table[i].vendor_guid;
|
||||||
|
|
||||||
smbios = grub_efi_find_configuration_table (&smbios_guid);
|
if (! grub_memcmp (guid, &acpi2_guid, sizeof (grub_efi_guid_t)))
|
||||||
grub_dprintf ("efi", "SMBIOS: %p\n", smbios);
|
{
|
||||||
|
acpi = grub_efi_system_table->configuration_table[i].vendor_table;
|
||||||
|
grub_dprintf ("efi", "ACPI2: %p\n", acpi);
|
||||||
|
}
|
||||||
|
else if (! grub_memcmp (guid, &acpi_guid, sizeof (grub_efi_guid_t)))
|
||||||
|
{
|
||||||
|
void *t;
|
||||||
|
|
||||||
|
t = grub_efi_system_table->configuration_table[i].vendor_table;
|
||||||
|
if (! acpi)
|
||||||
|
acpi = t;
|
||||||
|
grub_dprintf ("efi", "ACPI: %p\n", t);
|
||||||
|
}
|
||||||
|
else if (! grub_memcmp (guid, &smbios_guid, sizeof (grub_efi_guid_t)))
|
||||||
|
{
|
||||||
|
smbios = grub_efi_system_table->configuration_table[i].vendor_table;
|
||||||
|
grub_dprintf ("efi", "SMBIOS: %p\n", smbios);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
*ebda_seg_ptr = FAKE_EBDA_SEG;
|
*ebda_seg_ptr = FAKE_EBDA_SEG;
|
||||||
*low_mem_ptr = (FAKE_EBDA_SEG >> 6);
|
*low_mem_ptr = (FAKE_EBDA_SEG >> 6);
|
||||||
|
|
||||||
/* *((grub_uint16_t *) (FAKE_EBDA_SEG << 4)) = 640 - *low_mem_ptr; */
|
*((grub_uint16_t *) (FAKE_EBDA_SEG << 4)) = 640 - *low_mem_ptr;
|
||||||
*((grub_uint16_t *) (grub_absolute_pointer (FAKE_EBDA_SEG << 4))) = 640 - *low_mem_ptr;
|
|
||||||
|
|
||||||
if (acpi)
|
if (acpi)
|
||||||
grub_memcpy ((char *) ((FAKE_EBDA_SEG << 4) + 16), acpi, 1024 - 16);
|
grub_memcpy ((char *) ((FAKE_EBDA_SEG << 4) + 16), acpi, 1024 - 16);
|
||||||
@@ -151,7 +169,7 @@ grub_cmd_loadbios (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
if (argc > 1)
|
if (argc > 1)
|
||||||
{
|
{
|
||||||
file = grub_file_open (argv[1], GRUB_FILE_TYPE_VBE_DUMP);
|
file = grub_file_open (argv[1]);
|
||||||
if (! file)
|
if (! file)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
@@ -165,7 +183,7 @@ grub_cmd_loadbios (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
file = grub_file_open (argv[0], GRUB_FILE_TYPE_VBE_DUMP);
|
file = grub_file_open (argv[0]);
|
||||||
if (! file)
|
if (! file)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
@@ -187,14 +205,14 @@ static grub_command_t cmd_fakebios, cmd_loadbios;
|
|||||||
|
|
||||||
GRUB_MOD_INIT(loadbios)
|
GRUB_MOD_INIT(loadbios)
|
||||||
{
|
{
|
||||||
cmd_fakebios = grub_register_command_lockdown ("fakebios", grub_cmd_fakebios,
|
cmd_fakebios = grub_register_command ("fakebios", grub_cmd_fakebios,
|
||||||
0, N_("Create BIOS-like structures for"
|
0, N_("Create BIOS-like structures for"
|
||||||
" backward compatibility with"
|
" backward compatibility with"
|
||||||
" existing OS."));
|
" existing OS."));
|
||||||
|
|
||||||
cmd_loadbios = grub_register_command_lockdown ("loadbios", grub_cmd_loadbios,
|
cmd_loadbios = grub_register_command ("loadbios", grub_cmd_loadbios,
|
||||||
N_("BIOS_DUMP [INT10_DUMP]"),
|
N_("BIOS_DUMP [INT10_DUMP]"),
|
||||||
N_("Load BIOS dump."));
|
N_("Load BIOS dump."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(loadbios)
|
GRUB_MOD_FINI(loadbios)
|
||||||
|
|||||||
@@ -29,11 +29,11 @@
|
|||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
static struct known_protocol
|
struct known_protocol
|
||||||
{
|
{
|
||||||
grub_guid_t guid;
|
grub_efi_guid_t guid;
|
||||||
const char *name;
|
const char *name;
|
||||||
} known_protocols[] =
|
} known_protocols[] =
|
||||||
{
|
{
|
||||||
{ GRUB_EFI_DISK_IO_GUID, "disk" },
|
{ GRUB_EFI_DISK_IO_GUID, "disk" },
|
||||||
{ GRUB_EFI_BLOCK_IO_GUID, "block" },
|
{ GRUB_EFI_BLOCK_IO_GUID, "block" },
|
||||||
@@ -55,7 +55,6 @@ static struct known_protocol
|
|||||||
{ GRUB_EFI_ABSOLUTE_POINTER_PROTOCOL_GUID, "absolute pointer" },
|
{ GRUB_EFI_ABSOLUTE_POINTER_PROTOCOL_GUID, "absolute pointer" },
|
||||||
{ GRUB_EFI_DRIVER_BINDING_PROTOCOL_GUID, "EFI driver binding" },
|
{ GRUB_EFI_DRIVER_BINDING_PROTOCOL_GUID, "EFI driver binding" },
|
||||||
{ GRUB_EFI_LOAD_FILE_PROTOCOL_GUID, "load file" },
|
{ GRUB_EFI_LOAD_FILE_PROTOCOL_GUID, "load file" },
|
||||||
{ GRUB_EFI_LOAD_FILE2_PROTOCOL_GUID, "load file2" },
|
|
||||||
{ GRUB_EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID, "simple FS" },
|
{ GRUB_EFI_SIMPLE_FILE_SYSTEM_PROTOCOL_GUID, "simple FS" },
|
||||||
{ GRUB_EFI_TAPE_IO_PROTOCOL_GUID, "tape I/O" },
|
{ GRUB_EFI_TAPE_IO_PROTOCOL_GUID, "tape I/O" },
|
||||||
{ GRUB_EFI_UNICODE_COLLATION_PROTOCOL_GUID, "unicode collation" },
|
{ GRUB_EFI_UNICODE_COLLATION_PROTOCOL_GUID, "unicode collation" },
|
||||||
@@ -96,7 +95,7 @@ grub_cmd_lsefi (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
grub_efi_handle_t handle = handles[i];
|
grub_efi_handle_t handle = handles[i];
|
||||||
grub_efi_status_t status;
|
grub_efi_status_t status;
|
||||||
grub_efi_uintn_t num_protocols;
|
grub_efi_uintn_t num_protocols;
|
||||||
grub_packed_guid_t **protocols;
|
grub_efi_packed_guid_t **protocols;
|
||||||
grub_efi_device_path_t *dp;
|
grub_efi_device_path_t *dp;
|
||||||
|
|
||||||
grub_printf ("Handle %p\n", handle);
|
grub_printf ("Handle %p\n", handle);
|
||||||
@@ -108,13 +107,10 @@ grub_cmd_lsefi (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
grub_efi_print_device_path (dp);
|
grub_efi_print_device_path (dp);
|
||||||
}
|
}
|
||||||
|
|
||||||
status = grub_efi_system_table->boot_services->protocols_per_handle (handle,
|
status = efi_call_3 (grub_efi_system_table->boot_services->protocols_per_handle,
|
||||||
&protocols,
|
handle, &protocols, &num_protocols);
|
||||||
&num_protocols);
|
if (status != GRUB_EFI_SUCCESS)
|
||||||
if (status != GRUB_EFI_SUCCESS) {
|
|
||||||
grub_printf ("Unable to retrieve protocols\n");
|
grub_printf ("Unable to retrieve protocols\n");
|
||||||
continue;
|
|
||||||
}
|
|
||||||
for (j = 0; j < num_protocols; j++)
|
for (j = 0; j < num_protocols; j++)
|
||||||
{
|
{
|
||||||
for (k = 0; k < ARRAY_SIZE (known_protocols); k++)
|
for (k = 0; k < ARRAY_SIZE (known_protocols); k++)
|
||||||
@@ -124,7 +120,18 @@ grub_cmd_lsefi (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
if (k < ARRAY_SIZE (known_protocols))
|
if (k < ARRAY_SIZE (known_protocols))
|
||||||
grub_printf (" %s\n", known_protocols[k].name);
|
grub_printf (" %s\n", known_protocols[k].name);
|
||||||
else
|
else
|
||||||
grub_printf (" %pG\n", protocols[j]);
|
grub_printf (" %08x-%04x-%04x-%02x%02x-%02x%02x%02x%02x%02x%02x\n",
|
||||||
|
protocols[j]->data1,
|
||||||
|
protocols[j]->data2,
|
||||||
|
protocols[j]->data3,
|
||||||
|
(unsigned) protocols[j]->data4[0],
|
||||||
|
(unsigned) protocols[j]->data4[1],
|
||||||
|
(unsigned) protocols[j]->data4[2],
|
||||||
|
(unsigned) protocols[j]->data4[3],
|
||||||
|
(unsigned) protocols[j]->data4[4],
|
||||||
|
(unsigned) protocols[j]->data4[5],
|
||||||
|
(unsigned) protocols[j]->data4[6],
|
||||||
|
(unsigned) protocols[j]->data4[7]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,9 +59,9 @@ grub_cmd_lsefimmap (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
{
|
{
|
||||||
grub_efi_uint64_t size;
|
grub_efi_uint64_t size;
|
||||||
grub_efi_uint64_t attr;
|
grub_efi_uint64_t attr;
|
||||||
static const char types_str[][9] =
|
static const char types_str[][9] =
|
||||||
{
|
{
|
||||||
"reserved",
|
"reserved",
|
||||||
"ldr-code",
|
"ldr-code",
|
||||||
"ldr-data",
|
"ldr-data",
|
||||||
"BS-code ",
|
"BS-code ",
|
||||||
@@ -81,7 +81,7 @@ grub_cmd_lsefimmap (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
grub_printf ("%s ", types_str[desc->type]);
|
grub_printf ("%s ", types_str[desc->type]);
|
||||||
else
|
else
|
||||||
grub_printf ("Unk %02x ", desc->type);
|
grub_printf ("Unk %02x ", desc->type);
|
||||||
|
|
||||||
grub_printf (" %016" PRIxGRUB_UINT64_T "-%016" PRIxGRUB_UINT64_T
|
grub_printf (" %016" PRIxGRUB_UINT64_T "-%016" PRIxGRUB_UINT64_T
|
||||||
" %08" PRIxGRUB_UINT64_T,
|
" %08" PRIxGRUB_UINT64_T,
|
||||||
desc->physical_start,
|
desc->physical_start,
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
|
|
||||||
struct guid_mapping
|
struct guid_mapping
|
||||||
{
|
{
|
||||||
grub_guid_t guid;
|
grub_efi_guid_t guid;
|
||||||
const char *name;
|
const char *name;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -37,22 +37,17 @@ static const struct guid_mapping guid_mappings[] =
|
|||||||
{
|
{
|
||||||
{ GRUB_EFI_ACPI_20_TABLE_GUID, "ACPI-2.0"},
|
{ GRUB_EFI_ACPI_20_TABLE_GUID, "ACPI-2.0"},
|
||||||
{ GRUB_EFI_ACPI_TABLE_GUID, "ACPI-1.0"},
|
{ GRUB_EFI_ACPI_TABLE_GUID, "ACPI-1.0"},
|
||||||
{ GRUB_EFI_CONFORMANCE_PROFILES_TABLE_GUID, "CONFORMANCE PROFILES"},
|
|
||||||
{ GRUB_EFI_CRC32_GUIDED_SECTION_EXTRACTION_GUID,
|
{ GRUB_EFI_CRC32_GUIDED_SECTION_EXTRACTION_GUID,
|
||||||
"CRC32 GUIDED SECTION EXTRACTION"},
|
"CRC32 GUIDED SECTION EXTRACTION"},
|
||||||
{ GRUB_EFI_DEBUG_IMAGE_INFO_TABLE_GUID, "DEBUG IMAGE INFO"},
|
{ GRUB_EFI_DEBUG_IMAGE_INFO_TABLE_GUID, "DEBUG IMAGE INFO"},
|
||||||
{ GRUB_EFI_DEVICE_TREE_GUID, "DEVICE TREE"},
|
|
||||||
{ GRUB_EFI_DXE_SERVICES_TABLE_GUID, "DXE SERVICES"},
|
{ GRUB_EFI_DXE_SERVICES_TABLE_GUID, "DXE SERVICES"},
|
||||||
{ GRUB_EFI_HCDP_TABLE_GUID, "HCDP"},
|
{ GRUB_EFI_HCDP_TABLE_GUID, "HCDP"},
|
||||||
{ GRUB_EFI_HOB_LIST_GUID, "HOB LIST"},
|
{ GRUB_EFI_HOB_LIST_GUID, "HOB LIST"},
|
||||||
{ GRUB_EFI_IMAGE_SECURITY_DATABASE_GUID, "IMAGE EXECUTION INFORMATION"},
|
|
||||||
{ GRUB_EFI_LZMA_CUSTOM_DECOMPRESS_GUID, "LZMA CUSTOM DECOMPRESS"},
|
{ GRUB_EFI_LZMA_CUSTOM_DECOMPRESS_GUID, "LZMA CUSTOM DECOMPRESS"},
|
||||||
{ GRUB_EFI_MEMORY_TYPE_INFORMATION_GUID, "MEMORY TYPE INFO"},
|
{ GRUB_EFI_MEMORY_TYPE_INFORMATION_GUID, "MEMORY TYPE INFO"},
|
||||||
{ GRUB_EFI_MPS_TABLE_GUID, "MPS"},
|
{ GRUB_EFI_MPS_TABLE_GUID, "MPS"},
|
||||||
{ GRUB_EFI_RT_PROPERTIES_TABLE_GUID, "RT PROPERTIES"},
|
|
||||||
{ GRUB_EFI_SAL_TABLE_GUID, "SAL"},
|
{ GRUB_EFI_SAL_TABLE_GUID, "SAL"},
|
||||||
{ GRUB_EFI_SMBIOS_TABLE_GUID, "SMBIOS"},
|
{ GRUB_EFI_SMBIOS_TABLE_GUID, "SMBIOS"},
|
||||||
{ GRUB_EFI_SMBIOS3_TABLE_GUID, "SMBIOS3"},
|
|
||||||
{ GRUB_EFI_SYSTEM_RESOURCE_TABLE_GUID, "SYSTEM RESOURCE TABLE"},
|
{ GRUB_EFI_SYSTEM_RESOURCE_TABLE_GUID, "SYSTEM RESOURCE TABLE"},
|
||||||
{ GRUB_EFI_TIANO_CUSTOM_DECOMPRESS_GUID, "TIANO CUSTOM DECOMPRESS"},
|
{ GRUB_EFI_TIANO_CUSTOM_DECOMPRESS_GUID, "TIANO CUSTOM DECOMPRESS"},
|
||||||
{ GRUB_EFI_TSC_FREQUENCY_GUID, "TSC FREQUENCY"},
|
{ GRUB_EFI_TSC_FREQUENCY_GUID, "TSC FREQUENCY"},
|
||||||
@@ -64,26 +59,19 @@ grub_cmd_lsefisystab (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
char **args __attribute__ ((unused)))
|
char **args __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
const grub_efi_system_table_t *st = grub_efi_system_table;
|
const grub_efi_system_table_t *st = grub_efi_system_table;
|
||||||
const grub_efi_uint32_t major_rev = st->hdr.revision >> 16;
|
|
||||||
const grub_efi_uint32_t minor_rev_upper = (st->hdr.revision & 0xffff) / 10;
|
|
||||||
const grub_efi_uint32_t minor_rev_lower = (st->hdr.revision & 0xffff) % 10;
|
|
||||||
grub_efi_configuration_table_t *t;
|
grub_efi_configuration_table_t *t;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
grub_printf ("Address: %p\n", st);
|
grub_printf ("Address: %p\n", st);
|
||||||
grub_printf ("Signature: %016" PRIxGRUB_UINT64_T " revision: %u.%u",
|
grub_printf ("Signature: %016" PRIxGRUB_UINT64_T " revision: %08x\n",
|
||||||
st->hdr.signature, major_rev, minor_rev_upper);
|
st->hdr.signature, st->hdr.revision);
|
||||||
if (minor_rev_lower)
|
|
||||||
grub_printf (".%u", minor_rev_lower);
|
|
||||||
grub_printf ("\n");
|
|
||||||
{
|
{
|
||||||
char *vendor;
|
char *vendor;
|
||||||
grub_uint16_t *vendor_utf16;
|
grub_uint16_t *vendor_utf16;
|
||||||
grub_printf ("Vendor: ");
|
grub_printf ("Vendor: ");
|
||||||
|
|
||||||
for (vendor_utf16 = st->firmware_vendor; *vendor_utf16; vendor_utf16++);
|
for (vendor_utf16 = st->firmware_vendor; *vendor_utf16; vendor_utf16++);
|
||||||
/* Allocate extra 3 bytes to simplify math. */
|
vendor = grub_malloc (4 * (vendor_utf16 - st->firmware_vendor) + 1);
|
||||||
vendor = grub_calloc (4, vendor_utf16 - st->firmware_vendor + 1);
|
|
||||||
if (!vendor)
|
if (!vendor)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
*grub_utf16_to_utf8 ((grub_uint8_t *) vendor, st->firmware_vendor,
|
*grub_utf16_to_utf8 ((grub_uint8_t *) vendor, st->firmware_vendor,
|
||||||
@@ -102,11 +90,15 @@ grub_cmd_lsefisystab (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
grub_printf ("%p ", t->vendor_table);
|
grub_printf ("%p ", t->vendor_table);
|
||||||
|
|
||||||
grub_printf ("%pG", &t->vendor_guid);
|
grub_printf ("%08x-%04x-%04x-",
|
||||||
|
t->vendor_guid.data1, t->vendor_guid.data2,
|
||||||
|
t->vendor_guid.data3);
|
||||||
|
for (j = 0; j < 8; j++)
|
||||||
|
grub_printf ("%02x", t->vendor_guid.data4[j]);
|
||||||
|
|
||||||
for (j = 0; j < ARRAY_SIZE (guid_mappings); j++)
|
for (j = 0; j < ARRAY_SIZE (guid_mappings); j++)
|
||||||
if (grub_memcmp (&guid_mappings[j].guid, &t->vendor_guid,
|
if (grub_memcmp (&guid_mappings[j].guid, &t->vendor_guid,
|
||||||
sizeof (grub_guid_t)) == 0)
|
sizeof (grub_efi_guid_t)) == 0)
|
||||||
grub_printf (" %s", guid_mappings[j].name);
|
grub_printf (" %s", guid_mappings[j].name);
|
||||||
|
|
||||||
grub_printf ("\n");
|
grub_printf ("\n");
|
||||||
@@ -119,7 +111,7 @@ static grub_command_t cmd;
|
|||||||
|
|
||||||
GRUB_MOD_INIT(lsefisystab)
|
GRUB_MOD_INIT(lsefisystab)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("lsefisystab", grub_cmd_lsefisystab,
|
cmd = grub_register_command ("lsefisystab", grub_cmd_lsefisystab,
|
||||||
"", "Display EFI system tables.");
|
"", "Display EFI system tables.");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -136,16 +136,22 @@ grub_cmd_lssal (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
int argc __attribute__ ((unused)),
|
int argc __attribute__ ((unused)),
|
||||||
char **args __attribute__ ((unused)))
|
char **args __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
static grub_guid_t guid = GRUB_EFI_SAL_TABLE_GUID;
|
const grub_efi_system_table_t *st = grub_efi_system_table;
|
||||||
void *table = grub_efi_find_configuration_table (&guid);
|
grub_efi_configuration_table_t *t = st->configuration_table;
|
||||||
|
unsigned int i;
|
||||||
|
grub_efi_packed_guid_t guid = GRUB_EFI_SAL_TABLE_GUID;
|
||||||
|
|
||||||
if (table == NULL)
|
for (i = 0; i < st->num_table_entries; i++)
|
||||||
{
|
{
|
||||||
grub_printf ("SAL not found\n");
|
if (grub_memcmp (&guid, &t->vendor_guid,
|
||||||
return GRUB_ERR_NONE;
|
sizeof (grub_efi_packed_guid_t)) == 0)
|
||||||
|
{
|
||||||
|
disp_sal (t->vendor_table);
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
t++;
|
||||||
}
|
}
|
||||||
|
grub_printf ("SAL not found\n");
|
||||||
disp_sal (table);
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,37 +0,0 @@
|
|||||||
/* smbios.c - get smbios tables. */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2019 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/smbios.h>
|
|
||||||
#include <grub/efi/efi.h>
|
|
||||||
|
|
||||||
struct grub_smbios_eps *
|
|
||||||
grub_machine_smbios_get_eps (void)
|
|
||||||
{
|
|
||||||
static grub_guid_t smbios_guid = GRUB_EFI_SMBIOS_TABLE_GUID;
|
|
||||||
|
|
||||||
return (struct grub_smbios_eps *) grub_efi_find_configuration_table (&smbios_guid);
|
|
||||||
}
|
|
||||||
|
|
||||||
struct grub_smbios_eps3 *
|
|
||||||
grub_machine_smbios_get_eps3 (void)
|
|
||||||
{
|
|
||||||
static grub_guid_t smbios3_guid = GRUB_EFI_SMBIOS3_TABLE_GUID;
|
|
||||||
|
|
||||||
return (struct grub_smbios_eps3 *) grub_efi_find_configuration_table (&smbios3_guid);
|
|
||||||
}
|
|
||||||
@@ -1,325 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2018 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/>.
|
|
||||||
*
|
|
||||||
* EFI TPM support code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/err.h>
|
|
||||||
#include <grub/i18n.h>
|
|
||||||
#include <grub/efi/api.h>
|
|
||||||
#include <grub/efi/efi.h>
|
|
||||||
#include <grub/efi/cc.h>
|
|
||||||
#include <grub/efi/tpm.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/tpm.h>
|
|
||||||
#include <grub/term.h>
|
|
||||||
|
|
||||||
typedef TCG_PCR_EVENT grub_tpm_event_t;
|
|
||||||
|
|
||||||
static grub_guid_t tpm_guid = EFI_TPM_GUID;
|
|
||||||
static grub_guid_t tpm2_guid = EFI_TPM2_GUID;
|
|
||||||
static grub_guid_t cc_measurement_guid = GRUB_EFI_CC_MEASUREMENT_PROTOCOL_GUID;
|
|
||||||
|
|
||||||
static grub_efi_handle_t *grub_tpm_handle;
|
|
||||||
static grub_uint8_t grub_tpm_version;
|
|
||||||
|
|
||||||
static grub_int8_t tpm1_present = -1;
|
|
||||||
static grub_int8_t tpm2_present = -1;
|
|
||||||
|
|
||||||
static grub_efi_boolean_t
|
|
||||||
grub_tpm1_present (grub_efi_tpm_protocol_t *tpm)
|
|
||||||
{
|
|
||||||
grub_efi_status_t status;
|
|
||||||
TCG_EFI_BOOT_SERVICE_CAPABILITY caps;
|
|
||||||
grub_uint32_t flags;
|
|
||||||
grub_efi_physical_address_t eventlog, lastevent;
|
|
||||||
|
|
||||||
if (tpm1_present != -1)
|
|
||||||
return (grub_efi_boolean_t) tpm1_present;
|
|
||||||
|
|
||||||
caps.Size = (grub_uint8_t) sizeof (caps);
|
|
||||||
|
|
||||||
status = tpm->status_check (tpm, &caps, &flags, &eventlog, &lastevent);
|
|
||||||
|
|
||||||
if (status != GRUB_EFI_SUCCESS || caps.TPMDeactivatedFlag
|
|
||||||
|| !caps.TPMPresentFlag)
|
|
||||||
tpm1_present = 0;
|
|
||||||
else
|
|
||||||
tpm1_present = 1;
|
|
||||||
|
|
||||||
grub_dprintf ("tpm", "tpm1%s present\n", tpm1_present ? "" : " NOT");
|
|
||||||
|
|
||||||
return (grub_efi_boolean_t) tpm1_present;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_efi_boolean_t
|
|
||||||
grub_tpm2_present (grub_efi_tpm2_protocol_t *tpm)
|
|
||||||
{
|
|
||||||
grub_efi_status_t status;
|
|
||||||
EFI_TCG2_BOOT_SERVICE_CAPABILITY caps;
|
|
||||||
|
|
||||||
caps.Size = (grub_uint8_t) sizeof (caps);
|
|
||||||
|
|
||||||
if (tpm2_present != -1)
|
|
||||||
return (grub_efi_boolean_t) tpm2_present;
|
|
||||||
|
|
||||||
status = tpm->get_capability (tpm, &caps);
|
|
||||||
|
|
||||||
if (status != GRUB_EFI_SUCCESS || !caps.TPMPresentFlag)
|
|
||||||
tpm2_present = 0;
|
|
||||||
else
|
|
||||||
tpm2_present = 1;
|
|
||||||
|
|
||||||
grub_dprintf ("tpm", "tpm2%s present\n", tpm2_present ? "" : " NOT");
|
|
||||||
|
|
||||||
return (grub_efi_boolean_t) tpm2_present;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_efi_boolean_t
|
|
||||||
grub_tpm_handle_find (grub_efi_handle_t *tpm_handle,
|
|
||||||
grub_efi_uint8_t *protocol_version)
|
|
||||||
{
|
|
||||||
grub_efi_handle_t *handles;
|
|
||||||
grub_efi_uintn_t num_handles;
|
|
||||||
|
|
||||||
if (grub_tpm_handle != NULL)
|
|
||||||
{
|
|
||||||
*tpm_handle = grub_tpm_handle;
|
|
||||||
*protocol_version = grub_tpm_version;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, &tpm_guid, NULL,
|
|
||||||
&num_handles);
|
|
||||||
if (handles && num_handles > 0)
|
|
||||||
{
|
|
||||||
grub_tpm_handle = handles[0];
|
|
||||||
*tpm_handle = handles[0];
|
|
||||||
grub_tpm_version = 1;
|
|
||||||
*protocol_version = 1;
|
|
||||||
grub_dprintf ("tpm", "TPM handle Found, version: 1\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
handles = grub_efi_locate_handle (GRUB_EFI_BY_PROTOCOL, &tpm2_guid, NULL,
|
|
||||||
&num_handles);
|
|
||||||
if (handles && num_handles > 0)
|
|
||||||
{
|
|
||||||
grub_tpm_handle = handles[0];
|
|
||||||
*tpm_handle = handles[0];
|
|
||||||
grub_tpm_version = 2;
|
|
||||||
*protocol_version = 2;
|
|
||||||
grub_dprintf ("tpm", "TPM handle Found, version: 2\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_efi_log_event_status (grub_efi_status_t status)
|
|
||||||
{
|
|
||||||
switch (status)
|
|
||||||
{
|
|
||||||
case GRUB_EFI_SUCCESS:
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
case GRUB_EFI_DEVICE_ERROR:
|
|
||||||
return grub_error (GRUB_ERR_IO, N_("command failed"));
|
|
||||||
case GRUB_EFI_INVALID_PARAMETER:
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("invalid parameter"));
|
|
||||||
case GRUB_EFI_BUFFER_TOO_SMALL:
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("output buffer too small"));
|
|
||||||
case GRUB_EFI_NOT_FOUND:
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, N_("TPM unavailable"));
|
|
||||||
default:
|
|
||||||
return grub_error (grub_is_tpm_fail_fatal () ? GRUB_ERR_UNKNOWN_DEVICE : GRUB_ERR_NONE, N_("unknown TPM error"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_tpm1_log_event (grub_efi_handle_t tpm_handle, unsigned char *buf,
|
|
||||||
grub_size_t size, grub_uint8_t pcr,
|
|
||||||
const char *description)
|
|
||||||
{
|
|
||||||
grub_tpm_event_t *event;
|
|
||||||
grub_efi_status_t status;
|
|
||||||
grub_efi_tpm_protocol_t *tpm;
|
|
||||||
grub_efi_physical_address_t lastevent;
|
|
||||||
grub_uint32_t algorithm;
|
|
||||||
grub_uint32_t eventnum = 0;
|
|
||||||
|
|
||||||
tpm = grub_efi_open_protocol (tpm_handle, &tpm_guid,
|
|
||||||
GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
|
|
||||||
|
|
||||||
if (!grub_tpm1_present (tpm))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
event = grub_zalloc (sizeof (*event) + grub_strlen (description) + 1);
|
|
||||||
if (!event)
|
|
||||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
|
||||||
N_("cannot allocate TPM event buffer"));
|
|
||||||
|
|
||||||
event->PCRIndex = pcr;
|
|
||||||
event->EventType = EV_IPL;
|
|
||||||
event->EventSize = grub_strlen (description) + 1;
|
|
||||||
grub_strcpy ((char *) event->Event, description);
|
|
||||||
|
|
||||||
algorithm = TCG_ALG_SHA;
|
|
||||||
status = tpm->log_extend_event (tpm, (grub_addr_t) buf, (grub_uint64_t) size,
|
|
||||||
algorithm, event, &eventnum, &lastevent);
|
|
||||||
grub_free (event);
|
|
||||||
|
|
||||||
return grub_efi_log_event_status (status);
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_tpm2_log_event (grub_efi_handle_t tpm_handle, unsigned char *buf,
|
|
||||||
grub_size_t size, grub_uint8_t pcr,
|
|
||||||
const char *description)
|
|
||||||
{
|
|
||||||
EFI_TCG2_EVENT *event;
|
|
||||||
grub_efi_status_t status;
|
|
||||||
grub_efi_tpm2_protocol_t *tpm;
|
|
||||||
|
|
||||||
tpm = grub_efi_open_protocol (tpm_handle, &tpm2_guid,
|
|
||||||
GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
|
|
||||||
|
|
||||||
if (!grub_tpm2_present (tpm))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
event =
|
|
||||||
grub_zalloc (sizeof (EFI_TCG2_EVENT) + grub_strlen (description) + 1);
|
|
||||||
if (!event)
|
|
||||||
return grub_error (GRUB_ERR_OUT_OF_MEMORY,
|
|
||||||
N_("cannot allocate TPM event buffer"));
|
|
||||||
|
|
||||||
event->Header.HeaderSize = sizeof (EFI_TCG2_EVENT_HEADER);
|
|
||||||
event->Header.HeaderVersion = 1;
|
|
||||||
event->Header.PCRIndex = pcr;
|
|
||||||
event->Header.EventType = EV_IPL;
|
|
||||||
event->Size =
|
|
||||||
sizeof (*event) - sizeof (event->Event) + grub_strlen (description) + 1;
|
|
||||||
grub_strcpy ((char *) event->Event, description);
|
|
||||||
|
|
||||||
status = tpm->hash_log_extend_event (tpm, 0, (grub_addr_t) buf,
|
|
||||||
(grub_uint64_t) size, event);
|
|
||||||
grub_free (event);
|
|
||||||
|
|
||||||
return grub_efi_log_event_status (status);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
grub_cc_log_event (unsigned char *buf, grub_size_t size, grub_uint8_t pcr,
|
|
||||||
const char *description)
|
|
||||||
{
|
|
||||||
grub_efi_cc_event_t *event;
|
|
||||||
grub_efi_status_t status;
|
|
||||||
grub_efi_cc_protocol_t *cc;
|
|
||||||
grub_efi_cc_mr_index_t mr;
|
|
||||||
|
|
||||||
cc = grub_efi_locate_protocol (&cc_measurement_guid, NULL);
|
|
||||||
if (cc == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
status = cc->map_pcr_to_mr_index (cc, pcr, &mr);
|
|
||||||
if (status != GRUB_EFI_SUCCESS)
|
|
||||||
{
|
|
||||||
grub_efi_log_event_status (status);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
event = grub_zalloc (sizeof (grub_efi_cc_event_t) +
|
|
||||||
grub_strlen (description) + 1);
|
|
||||||
if (event == NULL)
|
|
||||||
{
|
|
||||||
grub_error (GRUB_ERR_OUT_OF_MEMORY, N_("cannot allocate CC event buffer"));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
event->Header.HeaderSize = sizeof (grub_efi_cc_event_header_t);
|
|
||||||
event->Header.HeaderVersion = GRUB_EFI_CC_EVENT_HEADER_VERSION;
|
|
||||||
event->Header.MrIndex = mr;
|
|
||||||
event->Header.EventType = EV_IPL;
|
|
||||||
event->Size = sizeof (*event) + grub_strlen (description) + 1;
|
|
||||||
grub_strcpy ((char *) event->Event, description);
|
|
||||||
|
|
||||||
status = cc->hash_log_extend_event (cc, 0,
|
|
||||||
(grub_efi_physical_address_t)(grub_addr_t) buf,
|
|
||||||
(grub_efi_uint64_t) size, event);
|
|
||||||
grub_free (event);
|
|
||||||
|
|
||||||
if (status != GRUB_EFI_SUCCESS)
|
|
||||||
grub_efi_log_event_status (status);
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_err_t
|
|
||||||
grub_tpm_measure (unsigned char *buf, grub_size_t size, grub_uint8_t pcr,
|
|
||||||
const char *description)
|
|
||||||
{
|
|
||||||
grub_efi_handle_t tpm_handle;
|
|
||||||
grub_efi_uint8_t protocol_version;
|
|
||||||
|
|
||||||
grub_cc_log_event(buf, size, pcr, description);
|
|
||||||
|
|
||||||
if (!grub_tpm_handle_find (&tpm_handle, &protocol_version))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
grub_dprintf ("tpm", "log_event, pcr = %d, size = 0x%" PRIxGRUB_SIZE ", %s\n",
|
|
||||||
pcr, size, description);
|
|
||||||
|
|
||||||
if (protocol_version == 1)
|
|
||||||
return grub_tpm1_log_event (tpm_handle, buf, size, pcr, description);
|
|
||||||
else
|
|
||||||
return grub_tpm2_log_event (tpm_handle, buf, size, pcr, description);
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
grub_tpm_present (void)
|
|
||||||
{
|
|
||||||
grub_efi_handle_t tpm_handle;
|
|
||||||
grub_efi_uint8_t protocol_version;
|
|
||||||
|
|
||||||
if (!grub_tpm_handle_find (&tpm_handle, &protocol_version))
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (protocol_version == 1)
|
|
||||||
{
|
|
||||||
grub_efi_tpm_protocol_t *tpm;
|
|
||||||
|
|
||||||
tpm = grub_efi_open_protocol (tpm_handle, &tpm_guid,
|
|
||||||
GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
|
|
||||||
if (!tpm)
|
|
||||||
{
|
|
||||||
grub_dprintf ("tpm", "Cannot open TPM protocol\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return grub_tpm1_present (tpm);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
grub_efi_tpm2_protocol_t *tpm;
|
|
||||||
|
|
||||||
tpm = grub_efi_open_protocol (tpm_handle, &tpm2_guid,
|
|
||||||
GRUB_EFI_OPEN_PROTOCOL_GET_PROTOCOL);
|
|
||||||
if (!tpm)
|
|
||||||
{
|
|
||||||
grub_dprintf ("tpm", "Cannot open TPM protocol\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
return grub_tpm2_present (tpm);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/list.h>
|
#include <grub/list.h>
|
||||||
#include <grub/lockdown.h>
|
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
#include <grub/script_sh.h>
|
#include <grub/script_sh.h>
|
||||||
@@ -111,28 +110,6 @@ grub_register_extcmd (const char *name, grub_extcmd_func_t func,
|
|||||||
summary, description, parser, 1);
|
summary, description, parser, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_extcmd_lockdown (grub_extcmd_context_t ctxt __attribute__ ((unused)),
|
|
||||||
int argc __attribute__ ((unused)),
|
|
||||||
char **argv __attribute__ ((unused)))
|
|
||||||
{
|
|
||||||
return grub_error (GRUB_ERR_ACCESS_DENIED,
|
|
||||||
N_("%s: the command is not allowed when lockdown is enforced"),
|
|
||||||
ctxt->extcmd->cmd->name);
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_extcmd_t
|
|
||||||
grub_register_extcmd_lockdown (const char *name, grub_extcmd_func_t func,
|
|
||||||
grub_command_flags_t flags, const char *summary,
|
|
||||||
const char *description,
|
|
||||||
const struct grub_arg_option *parser)
|
|
||||||
{
|
|
||||||
if (grub_is_lockdown () == GRUB_LOCKDOWN_ENABLED)
|
|
||||||
func = grub_extcmd_lockdown;
|
|
||||||
|
|
||||||
return grub_register_extcmd (name, func, flags, summary, description, parser);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_unregister_extcmd (grub_extcmd_t ext)
|
grub_unregister_extcmd (grub_extcmd_t ext)
|
||||||
{
|
{
|
||||||
|
|||||||
+20
-46
@@ -25,10 +25,8 @@
|
|||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
#include <grub/file.h>
|
#include <grub/file.h>
|
||||||
#include <grub/elf.h>
|
#include <grub/elf.h>
|
||||||
#include <grub/efi/efi.h>
|
|
||||||
#include <grub/xen_file.h>
|
#include <grub/xen_file.h>
|
||||||
#include <grub/efi/pe32.h>
|
#include <grub/efi/pe32.h>
|
||||||
#include <grub/arm/linux.h>
|
|
||||||
#include <grub/i386/linux.h>
|
#include <grub/i386/linux.h>
|
||||||
#include <grub/xnu.h>
|
#include <grub/xnu.h>
|
||||||
#include <grub/machoload.h>
|
#include <grub/machoload.h>
|
||||||
@@ -90,10 +88,6 @@ static const struct grub_arg_option options[] = {
|
|||||||
N_("Check if FILE is ARM64 EFI file"), 0, 0},
|
N_("Check if FILE is ARM64 EFI file"), 0, 0},
|
||||||
{"is-arm-efi", 0, 0,
|
{"is-arm-efi", 0, 0,
|
||||||
N_("Check if FILE is ARM EFI file"), 0, 0},
|
N_("Check if FILE is ARM EFI file"), 0, 0},
|
||||||
{"is-riscv32-efi", 0, 0,
|
|
||||||
N_("Check if FILE is RISC-V 32bit EFI file"), 0, 0},
|
|
||||||
{"is-riscv64-efi", 0, 0,
|
|
||||||
N_("Check if FILE is RISC-V 64bit EFI file"), 0, 0},
|
|
||||||
{"is-hibernated-hiberfil", 0, 0,
|
{"is-hibernated-hiberfil", 0, 0,
|
||||||
N_("Check if FILE is hiberfil.sys in hibernated state"), 0, 0},
|
N_("Check if FILE is hiberfil.sys in hibernated state"), 0, 0},
|
||||||
{"is-x86_64-xnu", 0, 0,
|
{"is-x86_64-xnu", 0, 0,
|
||||||
@@ -134,8 +128,6 @@ enum
|
|||||||
IS_IA_EFI,
|
IS_IA_EFI,
|
||||||
IS_ARM64_EFI,
|
IS_ARM64_EFI,
|
||||||
IS_ARM_EFI,
|
IS_ARM_EFI,
|
||||||
IS_RISCV32_EFI,
|
|
||||||
IS_RISCV64_EFI,
|
|
||||||
IS_HIBERNATED,
|
IS_HIBERNATED,
|
||||||
IS_XNU64,
|
IS_XNU64,
|
||||||
IS_XNU32,
|
IS_XNU32,
|
||||||
@@ -171,7 +163,7 @@ grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
if (type == -1)
|
if (type == -1)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no type specified");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no type specified");
|
||||||
|
|
||||||
file = grub_file_open (args[0], GRUB_FILE_TYPE_XNU_KERNEL);
|
file = grub_file_open (args[0]);
|
||||||
if (!file)
|
if (!file)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
switch (type)
|
switch (type)
|
||||||
@@ -391,19 +383,21 @@ grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
}
|
}
|
||||||
case IS_ARM_LINUX:
|
case IS_ARM_LINUX:
|
||||||
{
|
{
|
||||||
struct linux_arch_kernel_header lh;
|
grub_uint32_t sig, sig_pi;
|
||||||
|
if (grub_file_read (file, &sig_pi, 4) != 4)
|
||||||
if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh))
|
|
||||||
break;
|
break;
|
||||||
/* Short forward branch in A32 state (for Raspberry pi kernels). */
|
/* Raspberry pi. */
|
||||||
if (lh.code0 == grub_cpu_to_le32_compile_time (0xea000006))
|
if (sig_pi == grub_cpu_to_le32_compile_time (0xea000006))
|
||||||
{
|
{
|
||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lh.magic ==
|
if (grub_file_seek (file, 0x24) == (grub_size_t) -1)
|
||||||
grub_cpu_to_le32_compile_time (GRUB_LINUX_ARM_MAGIC_SIGNATURE))
|
break;
|
||||||
|
if (grub_file_read (file, &sig, 4) != 4)
|
||||||
|
break;
|
||||||
|
if (sig == grub_cpu_to_le32_compile_time (0x016f2818))
|
||||||
{
|
{
|
||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
@@ -412,24 +406,13 @@ grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
}
|
}
|
||||||
case IS_ARM64_LINUX:
|
case IS_ARM64_LINUX:
|
||||||
{
|
{
|
||||||
struct linux_arch_kernel_header lh;
|
grub_uint32_t sig;
|
||||||
|
|
||||||
if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh))
|
if (grub_file_seek (file, 0x38) == (grub_size_t) -1)
|
||||||
break;
|
break;
|
||||||
|
if (grub_file_read (file, &sig, 4) != 4)
|
||||||
/*
|
break;
|
||||||
* The PE/COFF header can be anywhere in the file. Load it from the correct
|
if (sig == grub_cpu_to_le32_compile_time (0x644d5241))
|
||||||
* offset if it is not where it is expected.
|
|
||||||
*/
|
|
||||||
if ((grub_uint8_t *) &lh + lh.hdr_offset != (grub_uint8_t *) &lh.pe_image_header)
|
|
||||||
{
|
|
||||||
if (grub_file_seek (file, lh.hdr_offset) == (grub_off_t) -1
|
|
||||||
|| grub_file_read (file, &lh.pe_image_header, sizeof (struct grub_pe_image_header))
|
|
||||||
!= sizeof (struct grub_pe_image_header))
|
|
||||||
return grub_error (GRUB_ERR_FILE_READ_ERROR, "failed to read COFF image header");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lh.pe_image_header.coff_header.machine == grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_ARM64))
|
|
||||||
{
|
{
|
||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
@@ -514,7 +497,7 @@ grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
case IS_X86_LINUX32:
|
case IS_X86_LINUX32:
|
||||||
case IS_X86_LINUX:
|
case IS_X86_LINUX:
|
||||||
{
|
{
|
||||||
struct linux_i386_kernel_header lh;
|
struct linux_kernel_header lh;
|
||||||
if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh))
|
if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh))
|
||||||
break;
|
break;
|
||||||
if (lh.boot_flag != grub_cpu_to_le16_compile_time (0xaa55))
|
if (lh.boot_flag != grub_cpu_to_le16_compile_time (0xaa55))
|
||||||
@@ -525,7 +508,7 @@ grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
|
|
||||||
/* FIXME: some really old kernels (< 1.3.73) will fail this. */
|
/* FIXME: some really old kernels (< 1.3.73) will fail this. */
|
||||||
if (lh.header !=
|
if (lh.header !=
|
||||||
grub_cpu_to_le32_compile_time (GRUB_LINUX_I386_MAGIC_SIGNATURE)
|
grub_cpu_to_le32_compile_time (GRUB_LINUX_MAGIC_SIGNATURE)
|
||||||
|| grub_le_to_cpu16 (lh.version) < 0x0200)
|
|| grub_le_to_cpu16 (lh.version) < 0x0200)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -538,7 +521,7 @@ grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
/* FIXME: 2.03 is not always good enough (Linux 2.4 can be 2.03 and
|
/* FIXME: 2.03 is not always good enough (Linux 2.4 can be 2.03 and
|
||||||
still not support 32-bit boot. */
|
still not support 32-bit boot. */
|
||||||
if (lh.header !=
|
if (lh.header !=
|
||||||
grub_cpu_to_le32_compile_time (GRUB_LINUX_I386_MAGIC_SIGNATURE)
|
grub_cpu_to_le32_compile_time (GRUB_LINUX_MAGIC_SIGNATURE)
|
||||||
|| grub_le_to_cpu16 (lh.version) < 0x0203)
|
|| grub_le_to_cpu16 (lh.version) < 0x0203)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -563,8 +546,7 @@ grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
case IS_XNU64:
|
case IS_XNU64:
|
||||||
case IS_XNU32:
|
case IS_XNU32:
|
||||||
{
|
{
|
||||||
macho = grub_macho_open (args[0], GRUB_FILE_TYPE_XNU_KERNEL,
|
macho = grub_macho_open (args[0], (type == IS_XNU64));
|
||||||
(type == IS_XNU64));
|
|
||||||
if (!macho)
|
if (!macho)
|
||||||
break;
|
break;
|
||||||
/* FIXME: more checks? */
|
/* FIXME: more checks? */
|
||||||
@@ -588,8 +570,6 @@ grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
case IS_IA_EFI:
|
case IS_IA_EFI:
|
||||||
case IS_ARM64_EFI:
|
case IS_ARM64_EFI:
|
||||||
case IS_ARM_EFI:
|
case IS_ARM_EFI:
|
||||||
case IS_RISCV32_EFI:
|
|
||||||
case IS_RISCV64_EFI:
|
|
||||||
{
|
{
|
||||||
char signature[4];
|
char signature[4];
|
||||||
grub_uint32_t pe_offset;
|
grub_uint32_t pe_offset;
|
||||||
@@ -635,13 +615,7 @@ grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
&& coff_head.machine !=
|
&& coff_head.machine !=
|
||||||
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_ARMTHUMB_MIXED))
|
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_ARMTHUMB_MIXED))
|
||||||
break;
|
break;
|
||||||
if ((type == IS_RISCV32_EFI || type == IS_RISCV64_EFI)
|
if (type == IS_IA_EFI || type == IS_64_EFI || type == IS_ARM64_EFI)
|
||||||
&& coff_head.machine !=
|
|
||||||
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_RISCV64))
|
|
||||||
/* TODO: Determine bitness dynamically */
|
|
||||||
break;
|
|
||||||
if (type == IS_IA_EFI || type == IS_64_EFI || type == IS_ARM64_EFI ||
|
|
||||||
type == IS_RISCV32_EFI || type == IS_RISCV64_EFI)
|
|
||||||
{
|
{
|
||||||
struct grub_pe64_optional_header o64;
|
struct grub_pe64_optional_header o64;
|
||||||
if (grub_file_read (file, &o64, sizeof (o64)) != sizeof (o64))
|
if (grub_file_read (file, &o64, sizeof (o64)) != sizeof (o64))
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ static grub_command_t cmd;
|
|||||||
GRUB_MOD_INIT(halt)
|
GRUB_MOD_INIT(halt)
|
||||||
{
|
{
|
||||||
cmd = grub_register_command ("halt", grub_cmd_halt,
|
cmd = grub_register_command ("halt", grub_cmd_halt,
|
||||||
0, N_("Halts the computer. This command does"
|
0, N_("Halts the computer. This command does"
|
||||||
" not work on all firmware implementations."));
|
" not work on all firmware implementations."));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ static const struct grub_arg_option options[] = {
|
|||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct { const char *name; const char *hashname; } aliases[] =
|
static struct { const char *name; const char *hashname; } aliases[] =
|
||||||
{
|
{
|
||||||
{"sha256sum", "sha256"},
|
{"sha256sum", "sha256"},
|
||||||
{"sha512sum", "sha512"},
|
{"sha512sum", "sha512"},
|
||||||
@@ -113,10 +113,10 @@ check_list (const gcry_md_spec_t *hash, const char *hashfilename,
|
|||||||
if (hash->mdlen > GRUB_CRYPTO_MAX_MDLEN)
|
if (hash->mdlen > GRUB_CRYPTO_MAX_MDLEN)
|
||||||
return grub_error (GRUB_ERR_BUG, "mdlen is too long");
|
return grub_error (GRUB_ERR_BUG, "mdlen is too long");
|
||||||
|
|
||||||
hashlist = grub_file_open (hashfilename, GRUB_FILE_TYPE_HASHLIST);
|
hashlist = grub_file_open (hashfilename);
|
||||||
if (!hashlist)
|
if (!hashlist)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
while (grub_free (buf), (buf = grub_file_getline (hashlist)))
|
while (grub_free (buf), (buf = grub_file_getline (hashlist)))
|
||||||
{
|
{
|
||||||
const char *p = buf;
|
const char *p = buf;
|
||||||
@@ -128,37 +128,30 @@ check_list (const gcry_md_spec_t *hash, const char *hashfilename,
|
|||||||
high = hextoval (*p++);
|
high = hextoval (*p++);
|
||||||
low = hextoval (*p++);
|
low = hextoval (*p++);
|
||||||
if (high < 0 || low < 0)
|
if (high < 0 || low < 0)
|
||||||
{
|
return grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid hash list");
|
||||||
grub_free (buf);
|
|
||||||
return grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid hash list");
|
|
||||||
}
|
|
||||||
expected[i] = (high << 4) | low;
|
expected[i] = (high << 4) | low;
|
||||||
}
|
}
|
||||||
if ((p[0] != ' ' && p[0] != '\t') || (p[1] != ' ' && p[1] != '\t'))
|
if ((p[0] != ' ' && p[0] != '\t') || (p[1] != ' ' && p[1] != '\t'))
|
||||||
{
|
return grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid hash list");
|
||||||
grub_free (buf);
|
|
||||||
return grub_error (GRUB_ERR_BAD_FILE_TYPE, "invalid hash list");
|
|
||||||
}
|
|
||||||
p += 2;
|
p += 2;
|
||||||
if (prefix)
|
if (prefix)
|
||||||
{
|
{
|
||||||
char *filename;
|
char *filename;
|
||||||
|
|
||||||
filename = grub_xasprintf ("%s/%s", prefix, p);
|
filename = grub_xasprintf ("%s/%s", prefix, p);
|
||||||
if (!filename)
|
if (!filename)
|
||||||
{
|
return grub_errno;
|
||||||
grub_free (buf);
|
if (!uncompress)
|
||||||
return grub_errno;
|
grub_file_filter_disable_compression ();
|
||||||
}
|
file = grub_file_open (filename);
|
||||||
file = grub_file_open (filename, GRUB_FILE_TYPE_TO_HASH
|
|
||||||
| (!uncompress ? GRUB_FILE_TYPE_NO_DECOMPRESS
|
|
||||||
: GRUB_FILE_TYPE_NONE));
|
|
||||||
grub_free (filename);
|
grub_free (filename);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
file = grub_file_open (p, GRUB_FILE_TYPE_TO_HASH
|
{
|
||||||
| (!uncompress ? GRUB_FILE_TYPE_NO_DECOMPRESS
|
if (!uncompress)
|
||||||
: GRUB_FILE_TYPE_NONE));
|
grub_file_filter_disable_compression ();
|
||||||
|
file = grub_file_open (p);
|
||||||
|
}
|
||||||
if (!file)
|
if (!file)
|
||||||
{
|
{
|
||||||
grub_file_close (hashlist);
|
grub_file_close (hashlist);
|
||||||
@@ -192,7 +185,7 @@ check_list (const gcry_md_spec_t *hash, const char *hashfilename,
|
|||||||
"hash of '%s' mismatches", p);
|
"hash of '%s' mismatches", p);
|
||||||
}
|
}
|
||||||
mismatch++;
|
mismatch++;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
grub_printf_ (N_("%s: OK\n"), p);
|
grub_printf_ (N_("%s: OK\n"), p);
|
||||||
}
|
}
|
||||||
@@ -249,9 +242,9 @@ grub_cmd_hashsum (struct grub_extcmd_context *ctxt,
|
|||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
unsigned j;
|
unsigned j;
|
||||||
file = grub_file_open (args[i], GRUB_FILE_TYPE_TO_HASH
|
if (!uncompress)
|
||||||
| (!uncompress ? GRUB_FILE_TYPE_NO_DECOMPRESS
|
grub_file_filter_disable_compression ();
|
||||||
: GRUB_FILE_TYPE_NONE));
|
file = grub_file_open (args[i]);
|
||||||
if (!file)
|
if (!file)
|
||||||
{
|
{
|
||||||
if (!keep)
|
if (!keep)
|
||||||
|
|||||||
@@ -333,7 +333,7 @@ grub_cmd_hdparm (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
grub_disk_close (disk);
|
grub_disk_close (disk);
|
||||||
return grub_error (GRUB_ERR_IO, "not an ATA device");
|
return grub_error (GRUB_ERR_IO, "not an ATA device");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Change settings. */
|
/* Change settings. */
|
||||||
if (aam >= 0)
|
if (aam >= 0)
|
||||||
@@ -436,9 +436,9 @@ static grub_extcmd_t cmd;
|
|||||||
|
|
||||||
GRUB_MOD_INIT(hdparm)
|
GRUB_MOD_INIT(hdparm)
|
||||||
{
|
{
|
||||||
cmd = grub_register_extcmd_lockdown ("hdparm", grub_cmd_hdparm, 0,
|
cmd = grub_register_extcmd ("hdparm", grub_cmd_hdparm, 0,
|
||||||
N_("[OPTIONS] DISK"),
|
N_("[OPTIONS] DISK"),
|
||||||
N_("Get/set ATA disk parameters."), options);
|
N_("Get/set ATA disk parameters."), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(hdparm)
|
GRUB_MOD_FINI(hdparm)
|
||||||
|
|||||||
@@ -64,11 +64,11 @@ grub_cmd_help (grub_extcmd_context_t ctxt __attribute__ ((unused)), int argc,
|
|||||||
|
|
||||||
stringwidth = 0;
|
stringwidth = 0;
|
||||||
|
|
||||||
while (unicode_last_screen_position < unicode_last_position &&
|
while (unicode_last_screen_position < unicode_last_position &&
|
||||||
stringwidth < ((grub_term_width (term) / 2) - 2))
|
stringwidth < ((grub_term_width (term) / 2) - 2))
|
||||||
{
|
{
|
||||||
struct grub_unicode_glyph glyph;
|
struct grub_unicode_glyph glyph;
|
||||||
unicode_last_screen_position
|
unicode_last_screen_position
|
||||||
+= grub_unicode_aglomerate_comb (unicode_last_screen_position,
|
+= grub_unicode_aglomerate_comb (unicode_last_screen_position,
|
||||||
unicode_last_position
|
unicode_last_position
|
||||||
- unicode_last_screen_position,
|
- unicode_last_screen_position,
|
||||||
@@ -88,7 +88,7 @@ grub_cmd_help (grub_extcmd_context_t ctxt __attribute__ ((unused)), int argc,
|
|||||||
if (cnt % 2)
|
if (cnt % 2)
|
||||||
grub_printf ("\n");
|
grub_printf ("\n");
|
||||||
cnt++;
|
cnt++;
|
||||||
|
|
||||||
grub_free (command_help);
|
grub_free (command_help);
|
||||||
grub_free (unicode_command_help);
|
grub_free (unicode_command_help);
|
||||||
}
|
}
|
||||||
@@ -135,8 +135,6 @@ grub_cmd_help (grub_extcmd_context_t ctxt __attribute__ ((unused)), int argc,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_printf ("\n\nTo enable less(1)-like paging, \"set pager=1\".\n");
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -90,7 +90,7 @@ grub_cmd_hexdump (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
{
|
{
|
||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
|
|
||||||
file = grub_file_open (args[0], GRUB_FILE_TYPE_HEXCAT);
|
file = grub_file_open (args[0]);
|
||||||
if (! file)
|
if (! file)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
static grub_err_t
|
static grub_err_t
|
||||||
parse_args (int argc, char *argv[], int *byte, int *bit)
|
parse_args (int argc, char *argv[], int *byte, int *bit)
|
||||||
{
|
{
|
||||||
const char *rest;
|
char *rest;
|
||||||
|
|
||||||
if (argc != 1)
|
if (argc != 1)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "address required");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "address required");
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
#include <grub/coreboot/lbio.h>
|
#include <grub/i386/coreboot/lbio.h>
|
||||||
#include <grub/i386/tsc.h>
|
#include <grub/i386/tsc.h>
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
@@ -84,7 +84,7 @@ iterate_linuxbios_table (grub_linuxbios_table_item_t table_item,
|
|||||||
grub_uint32_t tmrel = tsc2ms (ts_table->entries[i].tsc - last_tsc);
|
grub_uint32_t tmrel = tsc2ms (ts_table->entries[i].tsc - last_tsc);
|
||||||
last_tsc = ts_table->entries[i].tsc;
|
last_tsc = ts_table->entries[i].tsc;
|
||||||
|
|
||||||
grub_printf ("%3d.%03ds %2d.%03ds %02d %s\n",
|
grub_printf ("%3d.%03ds %2d.%03ds %02d %s\n",
|
||||||
tmabs / 1000, tmabs % 1000, tmrel / 1000, tmrel % 1000,
|
tmabs / 1000, tmabs % 1000, tmrel / 1000, tmrel % 1000,
|
||||||
ts_table->entries[i].id,
|
ts_table->entries[i].id,
|
||||||
(ts_table->entries[i].id < ARRAY_SIZE (descs)
|
(ts_table->entries[i].id < ARRAY_SIZE (descs)
|
||||||
|
|||||||
@@ -20,7 +20,7 @@
|
|||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/command.h>
|
#include <grub/command.h>
|
||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
#include <grub/coreboot/lbio.h>
|
#include <grub/i386/coreboot/lbio.h>
|
||||||
#include <grub/i386/tsc.h>
|
#include <grub/i386/tsc.h>
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
@@ -84,7 +84,7 @@ iterate_linuxbios_table (grub_linuxbios_table_item_t table_item,
|
|||||||
|
|
||||||
grub_printf (": %dx%dx%d pitch=%d lfb=0x%llx %d/%d/%d/%d %d/%d/%d/%d",
|
grub_printf (": %dx%dx%d pitch=%d lfb=0x%llx %d/%d/%d/%d %d/%d/%d/%d",
|
||||||
fb->width, fb->height,
|
fb->width, fb->height,
|
||||||
fb->bpp, fb->pitch,
|
fb->bpp, fb->pitch,
|
||||||
(unsigned long long) fb->lfb,
|
(unsigned long long) fb->lfb,
|
||||||
fb->red_mask_size, fb->green_mask_size,
|
fb->red_mask_size, fb->green_mask_size,
|
||||||
fb->blue_mask_size, fb->reserved_mask_size,
|
fb->blue_mask_size, fb->reserved_mask_size,
|
||||||
|
|||||||
@@ -31,6 +31,9 @@
|
|||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
|
/* Real mode IVT slot (seg:off far pointer) for interrupt 0x13. */
|
||||||
|
static grub_uint32_t *const int13slot = (grub_uint32_t *) (4 * 0x13);
|
||||||
|
|
||||||
/* Remember to update enum opt_idxs accordingly. */
|
/* Remember to update enum opt_idxs accordingly. */
|
||||||
static const struct grub_arg_option options[] = {
|
static const struct grub_arg_option options[] = {
|
||||||
/* TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if
|
/* TRANSLATORS: In this file "mapping" refers to a change GRUB makes so if
|
||||||
@@ -182,7 +185,7 @@ list_mappings (void)
|
|||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TRANSLATORS: This is the header of mapping list.
|
/* TRANSLATORS: This is the header of mapping list.
|
||||||
On the left is how OS will see the disks and
|
On the left is how OS will see the disks and
|
||||||
on the right current GRUB vision. */
|
on the right current GRUB vision. */
|
||||||
grub_puts_ (N_("OS disk #num ------> GRUB/BIOS device"));
|
grub_puts_ (N_("OS disk #num ------> GRUB/BIOS device"));
|
||||||
@@ -277,8 +280,6 @@ install_int13_handler (int noret __attribute__ ((unused)))
|
|||||||
grub_uint8_t *handler_base = 0;
|
grub_uint8_t *handler_base = 0;
|
||||||
/* Address of the map within the deployed bundle. */
|
/* Address of the map within the deployed bundle. */
|
||||||
int13map_node_t *handler_map;
|
int13map_node_t *handler_map;
|
||||||
/* Real mode IVT slot (seg:off far pointer) for interrupt 0x13. */
|
|
||||||
grub_uint32_t *int13slot = (grub_uint32_t *) grub_absolute_pointer (4 * 0x13);
|
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
int entries = 0;
|
int entries = 0;
|
||||||
@@ -353,9 +354,6 @@ install_int13_handler (int noret __attribute__ ((unused)))
|
|||||||
static grub_err_t
|
static grub_err_t
|
||||||
uninstall_int13_handler (void)
|
uninstall_int13_handler (void)
|
||||||
{
|
{
|
||||||
/* Real mode IVT slot (seg:off far pointer) for interrupt 0x13. */
|
|
||||||
grub_uint32_t *int13slot = (grub_uint32_t *) grub_absolute_pointer (4 * 0x13);
|
|
||||||
|
|
||||||
if (! grub_drivemap_oldhandler)
|
if (! grub_drivemap_oldhandler)
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
|
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ grub_halt (int no_apm)
|
|||||||
regs.ebx = 0;
|
regs.ebx = 0;
|
||||||
regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT;
|
regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT;
|
||||||
grub_bios_interrupt (0x15, ®s);
|
grub_bios_interrupt (0x15, ®s);
|
||||||
|
|
||||||
if (regs.flags & GRUB_CPU_INT_FLAGS_CARRY)
|
if (regs.flags & GRUB_CPU_INT_FLAGS_CARRY)
|
||||||
stop ();
|
stop ();
|
||||||
|
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ grub_apm_get_info (struct grub_apm_info *info)
|
|||||||
regs.ebx = 0;
|
regs.ebx = 0;
|
||||||
regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT;
|
regs.flags = GRUB_CPU_INT_FLAGS_DEFAULT;
|
||||||
grub_bios_interrupt (0x15, ®s);
|
grub_bios_interrupt (0x15, ®s);
|
||||||
|
|
||||||
if (regs.flags & GRUB_CPU_INT_FLAGS_CARRY)
|
if (regs.flags & GRUB_CPU_INT_FLAGS_CARRY)
|
||||||
return 0;
|
return 0;
|
||||||
info->version = regs.eax & 0xffff;
|
info->version = regs.eax & 0xffff;
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ grub_cmd_play (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
{
|
{
|
||||||
|
|
||||||
if (argc < 1)
|
if (argc < 1)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
return grub_error (GRUB_ERR_BAD_ARGUMENT,
|
||||||
/* TRANSLATORS: It's musical notes, not the notes
|
/* TRANSLATORS: It's musical notes, not the notes
|
||||||
you take. Play command expects arguments which can
|
you take. Play command expects arguments which can
|
||||||
be either a filename or tempo+notes.
|
be either a filename or tempo+notes.
|
||||||
@@ -93,7 +93,7 @@ grub_cmd_play (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
grub_uint32_t tempo;
|
grub_uint32_t tempo;
|
||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
|
|
||||||
file = grub_file_open (args[0], GRUB_FILE_TYPE_AUDIO);
|
file = grub_file_open (args[0]);
|
||||||
|
|
||||||
if (! file)
|
if (! file)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
@@ -132,7 +132,7 @@ grub_cmd_play (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
const char *end;
|
char *end;
|
||||||
unsigned tempo;
|
unsigned tempo;
|
||||||
struct note note;
|
struct note note;
|
||||||
int i;
|
int i;
|
||||||
|
|||||||
@@ -55,12 +55,12 @@ static const struct grub_arg_option options[] =
|
|||||||
{"no-led", 0, 0, N_("don't update LED state"), 0, 0},
|
{"no-led", 0, 0, N_("don't update LED state"), 0, 0},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
static int simple_flag_offsets[]
|
static int simple_flag_offsets[]
|
||||||
= {5, 6, 4, 7, 11, 1, 0, 10, 13, 14, 12, 15, 9, 3, 8, 2};
|
= {5, 6, 4, 7, 11, 1, 0, 10, 13, 14, 12, 15, 9, 3, 8, 2};
|
||||||
|
|
||||||
static grub_uint32_t andmask = 0xffffffff, ormask = 0;
|
static grub_uint32_t andmask = 0xffffffff, ormask = 0;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
keysym
|
keysym
|
||||||
{
|
{
|
||||||
const char *unshifted_name; /* the name in unshifted state */
|
const char *unshifted_name; /* the name in unshifted state */
|
||||||
@@ -171,13 +171,13 @@ static struct keysym keysym_table[] =
|
|||||||
{"right", 0, 0xe0, 0, 0x4d}
|
{"right", 0, 0xe0, 0, 0x4d}
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Set a simple flag in flags variable
|
/* Set a simple flag in flags variable
|
||||||
OUTOFFSET - offset of flag in FLAGS,
|
OUTOFFSET - offset of flag in FLAGS,
|
||||||
OP - action id
|
OP - action id
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
grub_sendkey_set_simple_flag (int outoffset, int op)
|
grub_sendkey_set_simple_flag (int outoffset, int op)
|
||||||
{
|
{
|
||||||
if (op == 2)
|
if (op == 2)
|
||||||
{
|
{
|
||||||
andmask |= (1 << outoffset);
|
andmask |= (1 << outoffset);
|
||||||
@@ -199,7 +199,7 @@ grub_sendkey_parse_op (struct grub_arg_list state)
|
|||||||
if (! state.set)
|
if (! state.set)
|
||||||
return 2;
|
return 2;
|
||||||
|
|
||||||
if (grub_strcmp (state.arg, "off") == 0 || grub_strcmp (state.arg, "0") == 0
|
if (grub_strcmp (state.arg, "off") == 0 || grub_strcmp (state.arg, "0") == 0
|
||||||
|| grub_strcmp (state.arg, "unpress") == 0)
|
|| grub_strcmp (state.arg, "unpress") == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
@@ -216,12 +216,12 @@ static grub_err_t
|
|||||||
grub_sendkey_postboot (void)
|
grub_sendkey_postboot (void)
|
||||||
{
|
{
|
||||||
/* For convention: pointer to flags. */
|
/* For convention: pointer to flags. */
|
||||||
grub_uint32_t *flags = grub_absolute_pointer (0x417);
|
grub_uint32_t *flags = (grub_uint32_t *) 0x417;
|
||||||
|
|
||||||
*flags = oldflags;
|
*flags = oldflags;
|
||||||
|
|
||||||
*((volatile char *) grub_absolute_pointer (0x41a)) = 0x1e;
|
*((char *) 0x41a) = 0x1e;
|
||||||
*((volatile char *) grub_absolute_pointer (0x41c)) = 0x1e;
|
*((char *) 0x41c) = 0x1e;
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
@@ -231,13 +231,13 @@ static grub_err_t
|
|||||||
grub_sendkey_preboot (int noret __attribute__ ((unused)))
|
grub_sendkey_preboot (int noret __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
/* For convention: pointer to flags. */
|
/* For convention: pointer to flags. */
|
||||||
grub_uint32_t *flags = grub_absolute_pointer (0x417);
|
grub_uint32_t *flags = (grub_uint32_t *) 0x417;
|
||||||
|
|
||||||
oldflags = *flags;
|
oldflags = *flags;
|
||||||
|
|
||||||
/* Set the sendkey. */
|
/* Set the sendkey. */
|
||||||
*((volatile char *) grub_absolute_pointer (0x41a)) = 0x1e;
|
*((char *) 0x41a) = 0x1e;
|
||||||
*((volatile char *) grub_absolute_pointer (0x41c)) = keylen + 0x1e;
|
*((char *) 0x41c) = keylen + 0x1e;
|
||||||
grub_memcpy ((char *) 0x41e, sendkey, 0x20);
|
grub_memcpy ((char *) 0x41e, sendkey, 0x20);
|
||||||
|
|
||||||
/* Transform "any ctrl" to "right ctrl" flag. */
|
/* Transform "any ctrl" to "right ctrl" flag. */
|
||||||
@@ -247,7 +247,7 @@ grub_sendkey_preboot (int noret __attribute__ ((unused)))
|
|||||||
/* Transform "any alt" to "right alt" flag. */
|
/* Transform "any alt" to "right alt" flag. */
|
||||||
if (*flags & (1 << 9))
|
if (*flags & (1 << 9))
|
||||||
*flags &= ~(1 << 3);
|
*flags &= ~(1 << 3);
|
||||||
|
|
||||||
*flags = (*flags & andmask) | ormask;
|
*flags = (*flags & andmask) | ormask;
|
||||||
|
|
||||||
/* Transform "right ctrl" to "any ctrl" flag. */
|
/* Transform "right ctrl" to "any ctrl" flag. */
|
||||||
@@ -294,10 +294,10 @@ find_key_code (char *key)
|
|||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(keysym_table); i++)
|
for (i = 0; i < ARRAY_SIZE(keysym_table); i++)
|
||||||
{
|
{
|
||||||
if (keysym_table[i].unshifted_name
|
if (keysym_table[i].unshifted_name
|
||||||
&& grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
|
&& grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
|
||||||
return keysym_table[i].keycode;
|
return keysym_table[i].keycode;
|
||||||
else if (keysym_table[i].shifted_name
|
else if (keysym_table[i].shifted_name
|
||||||
&& grub_strcmp (key, keysym_table[i].shifted_name) == 0)
|
&& grub_strcmp (key, keysym_table[i].shifted_name) == 0)
|
||||||
return keysym_table[i].keycode;
|
return keysym_table[i].keycode;
|
||||||
}
|
}
|
||||||
@@ -313,10 +313,10 @@ find_ascii_code (char *key)
|
|||||||
|
|
||||||
for (i = 0; i < ARRAY_SIZE(keysym_table); i++)
|
for (i = 0; i < ARRAY_SIZE(keysym_table); i++)
|
||||||
{
|
{
|
||||||
if (keysym_table[i].unshifted_name
|
if (keysym_table[i].unshifted_name
|
||||||
&& grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
|
&& grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
|
||||||
return keysym_table[i].unshifted_ascii;
|
return keysym_table[i].unshifted_ascii;
|
||||||
else if (keysym_table[i].shifted_name
|
else if (keysym_table[i].shifted_name
|
||||||
&& grub_strcmp (key, keysym_table[i].shifted_name) == 0)
|
&& grub_strcmp (key, keysym_table[i].shifted_name) == 0)
|
||||||
return keysym_table[i].shifted_ascii;
|
return keysym_table[i].shifted_ascii;
|
||||||
}
|
}
|
||||||
@@ -340,7 +340,7 @@ grub_cmd_sendkey (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
for (i = 0; i < argc && keylen < 0x20; i++)
|
for (i = 0; i < argc && keylen < 0x20; i++)
|
||||||
{
|
{
|
||||||
int key_code;
|
int key_code;
|
||||||
|
|
||||||
key_code = find_key_code (args[i]);
|
key_code = find_key_code (args[i]);
|
||||||
if (key_code)
|
if (key_code)
|
||||||
{
|
{
|
||||||
@@ -353,7 +353,7 @@ grub_cmd_sendkey (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
for (i = 0; i < ARRAY_SIZE(simple_flag_offsets); i++)
|
for (i = 0; i < ARRAY_SIZE(simple_flag_offsets); i++)
|
||||||
grub_sendkey_set_simple_flag (simple_flag_offsets[i],
|
grub_sendkey_set_simple_flag (simple_flag_offsets[i],
|
||||||
grub_sendkey_parse_op(state[i]));
|
grub_sendkey_parse_op(state[i]));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -374,8 +374,8 @@ GRUB_MOD_INIT (sendkey)
|
|||||||
keypresses. */
|
keypresses. */
|
||||||
N_("Emulate a keystroke sequence"), options);
|
N_("Emulate a keystroke sequence"), options);
|
||||||
|
|
||||||
preboot_hook
|
preboot_hook
|
||||||
= grub_loader_register_preboot_hook (grub_sendkey_preboot,
|
= grub_loader_register_preboot_hook (grub_sendkey_preboot,
|
||||||
grub_sendkey_postboot,
|
grub_sendkey_postboot,
|
||||||
GRUB_LOADER_PREBOOT_HOOK_PRIO_CONSOLE);
|
GRUB_LOADER_PREBOOT_HOOK_PRIO_CONSOLE);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,52 +0,0 @@
|
|||||||
/* smbios.c - get smbios tables. */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2019 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/acpi.h>
|
|
||||||
#include <grub/smbios.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
|
|
||||||
struct grub_smbios_eps *
|
|
||||||
grub_machine_smbios_get_eps (void)
|
|
||||||
{
|
|
||||||
grub_uint8_t *ptr;
|
|
||||||
|
|
||||||
grub_dprintf ("smbios", "Looking for SMBIOS EPS. Scanning BIOS\n");
|
|
||||||
|
|
||||||
for (ptr = (grub_uint8_t *) 0xf0000; ptr < (grub_uint8_t *) 0x100000; ptr += 16)
|
|
||||||
if (grub_memcmp (ptr, "_SM_", 4) == 0
|
|
||||||
&& grub_byte_checksum (ptr, sizeof (struct grub_smbios_eps)) == 0)
|
|
||||||
return (struct grub_smbios_eps *) ptr;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct grub_smbios_eps3 *
|
|
||||||
grub_machine_smbios_get_eps3 (void)
|
|
||||||
{
|
|
||||||
grub_uint8_t *ptr;
|
|
||||||
|
|
||||||
grub_dprintf ("smbios", "Looking for SMBIOS3 EPS. Scanning BIOS\n");
|
|
||||||
|
|
||||||
for (ptr = (grub_uint8_t *) 0xf0000; ptr < (grub_uint8_t *) 0x100000; ptr += 16)
|
|
||||||
if (grub_memcmp (ptr, "_SM3_", 5) == 0
|
|
||||||
&& grub_byte_checksum (ptr, sizeof (struct grub_smbios_eps3)) == 0)
|
|
||||||
return (struct grub_smbios_eps3 *) ptr;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1,102 +0,0 @@
|
|||||||
/* rdmsr.c - Read CPU model-specific registers. */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2019 Free Software Foundation, Inc.
|
|
||||||
* Based on gcc/gcc/config/i386/driver-i386.c
|
|
||||||
*
|
|
||||||
* 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/dl.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/env.h>
|
|
||||||
#include <grub/command.h>
|
|
||||||
#include <grub/extcmd.h>
|
|
||||||
#include <grub/i18n.h>
|
|
||||||
#include <grub/i386/cpuid.h>
|
|
||||||
#include <grub/i386/rdmsr.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE("GPLv3+");
|
|
||||||
|
|
||||||
static grub_extcmd_t cmd_read;
|
|
||||||
|
|
||||||
static const struct grub_arg_option options[] =
|
|
||||||
{
|
|
||||||
{0, 'v', 0, N_("Save read value into variable VARNAME."),
|
|
||||||
N_("VARNAME"), ARG_TYPE_STRING},
|
|
||||||
{0, 0, 0, 0, 0, 0}
|
|
||||||
};
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_cmd_msr_read (grub_extcmd_context_t ctxt, int argc, char **argv)
|
|
||||||
{
|
|
||||||
grub_uint32_t manufacturer[3], max_cpuid, a, b, c, features, addr;
|
|
||||||
grub_uint64_t value;
|
|
||||||
const char *ptr;
|
|
||||||
char buf[sizeof("1122334455667788")];
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The CPUID instruction should be used to determine whether MSRs
|
|
||||||
* are supported. (CPUID.01H:EDX[5] = 1)
|
|
||||||
*/
|
|
||||||
if (! grub_cpu_is_cpuid_supported ())
|
|
||||||
return grub_error (GRUB_ERR_BUG, N_("unsupported instruction"));
|
|
||||||
|
|
||||||
grub_cpuid (0, max_cpuid, manufacturer[0], manufacturer[2], manufacturer[1]);
|
|
||||||
|
|
||||||
if (max_cpuid < 1)
|
|
||||||
return grub_error (GRUB_ERR_BUG, N_("unsupported instruction"));
|
|
||||||
|
|
||||||
grub_cpuid (1, a, b, c, features);
|
|
||||||
|
|
||||||
if (!(features & (1 << 5)))
|
|
||||||
return grub_error (GRUB_ERR_BUG, N_("unsupported instruction"));
|
|
||||||
|
|
||||||
if (argc != 1)
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected"));
|
|
||||||
|
|
||||||
grub_errno = GRUB_ERR_NONE;
|
|
||||||
ptr = argv[0];
|
|
||||||
addr = grub_strtoul (ptr, &ptr, 0);
|
|
||||||
|
|
||||||
if (grub_errno != GRUB_ERR_NONE)
|
|
||||||
return grub_errno;
|
|
||||||
if (*ptr != '\0')
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("invalid argument"));
|
|
||||||
|
|
||||||
value = grub_msr_read (addr);
|
|
||||||
|
|
||||||
if (ctxt->state[0].set)
|
|
||||||
{
|
|
||||||
grub_snprintf (buf, sizeof(buf), "%llx", (unsigned long long) value);
|
|
||||||
grub_env_set (ctxt->state[0].arg, buf);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
grub_printf ("0x%llx\n", (unsigned long long) value);
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_INIT(rdmsr)
|
|
||||||
{
|
|
||||||
cmd_read = grub_register_extcmd ("rdmsr", grub_cmd_msr_read, 0, N_("ADDR"),
|
|
||||||
N_("Read a CPU model specific register."),
|
|
||||||
options);
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_FINI(rdmsr)
|
|
||||||
{
|
|
||||||
grub_unregister_extcmd (cmd_read);
|
|
||||||
}
|
|
||||||
@@ -1,94 +0,0 @@
|
|||||||
/* wrmsr.c - Write CPU model-specific registers. */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2019 Free Software Foundation, Inc.
|
|
||||||
* Based on gcc/gcc/config/i386/driver-i386.c
|
|
||||||
*
|
|
||||||
* 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/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/dl.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/env.h>
|
|
||||||
#include <grub/command.h>
|
|
||||||
#include <grub/extcmd.h>
|
|
||||||
#include <grub/lockdown.h>
|
|
||||||
#include <grub/i18n.h>
|
|
||||||
#include <grub/i386/cpuid.h>
|
|
||||||
#include <grub/i386/wrmsr.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE("GPLv3+");
|
|
||||||
|
|
||||||
static grub_command_t cmd_write;
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
grub_cmd_msr_write (grub_command_t cmd __attribute__ ((unused)), int argc, char **argv)
|
|
||||||
{
|
|
||||||
grub_uint32_t manufacturer[3], max_cpuid, a, b, c, features, addr;
|
|
||||||
grub_uint64_t value;
|
|
||||||
const char *ptr;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The CPUID instruction should be used to determine whether MSRs
|
|
||||||
* are supported. (CPUID.01H:EDX[5] = 1)
|
|
||||||
*/
|
|
||||||
if (!grub_cpu_is_cpuid_supported ())
|
|
||||||
return grub_error (GRUB_ERR_BUG, N_("unsupported instruction"));
|
|
||||||
|
|
||||||
grub_cpuid (0, max_cpuid, manufacturer[0], manufacturer[2], manufacturer[1]);
|
|
||||||
|
|
||||||
if (max_cpuid < 1)
|
|
||||||
return grub_error (GRUB_ERR_BUG, N_("unsupported instruction"));
|
|
||||||
|
|
||||||
grub_cpuid (1, a, b, c, features);
|
|
||||||
|
|
||||||
if (!(features & (1 << 5)))
|
|
||||||
return grub_error (GRUB_ERR_BUG, N_("unsupported instruction"));
|
|
||||||
|
|
||||||
if (argc != 2)
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("two arguments expected"));
|
|
||||||
|
|
||||||
grub_errno = GRUB_ERR_NONE;
|
|
||||||
ptr = argv[0];
|
|
||||||
addr = grub_strtoul (ptr, &ptr, 0);
|
|
||||||
|
|
||||||
if (grub_errno != GRUB_ERR_NONE)
|
|
||||||
return grub_errno;
|
|
||||||
if (*ptr != '\0')
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("invalid argument"));
|
|
||||||
|
|
||||||
ptr = argv[1];
|
|
||||||
value = grub_strtoull (ptr, &ptr, 0);
|
|
||||||
|
|
||||||
if (grub_errno != GRUB_ERR_NONE)
|
|
||||||
return grub_errno;
|
|
||||||
if (*ptr != '\0')
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("invalid argument"));
|
|
||||||
|
|
||||||
grub_msr_write (addr, value);
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_INIT(wrmsr)
|
|
||||||
{
|
|
||||||
cmd_write = grub_register_command_lockdown ("wrmsr", grub_cmd_msr_write, N_("ADDR VALUE"),
|
|
||||||
N_("Write a value to a CPU model specific register."));
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_FINI(wrmsr)
|
|
||||||
{
|
|
||||||
grub_unregister_command (cmd_write);
|
|
||||||
}
|
|
||||||
@@ -1,155 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2022 Free Software Foundation, Inc.
|
|
||||||
* Copyright (C) 2022 IBM Corporation
|
|
||||||
*
|
|
||||||
* 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/>.
|
|
||||||
*
|
|
||||||
* IBM vTPM support code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/err.h>
|
|
||||||
#include <grub/types.h>
|
|
||||||
#include <grub/tpm.h>
|
|
||||||
#include <grub/ieee1275/ieee1275.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
|
|
||||||
static grub_ieee1275_ihandle_t tpm_ihandle;
|
|
||||||
static grub_uint8_t tpm_version;
|
|
||||||
|
|
||||||
#define IEEE1275_IHANDLE_INVALID ((grub_ieee1275_ihandle_t) 0)
|
|
||||||
|
|
||||||
static void
|
|
||||||
tpm_get_tpm_version (void)
|
|
||||||
{
|
|
||||||
grub_ieee1275_phandle_t vtpm;
|
|
||||||
char buffer[20];
|
|
||||||
|
|
||||||
if (!grub_ieee1275_finddevice ("/vdevice/vtpm", &vtpm) &&
|
|
||||||
!grub_ieee1275_get_property (vtpm, "compatible", buffer,
|
|
||||||
sizeof (buffer), NULL) &&
|
|
||||||
!grub_strcmp (buffer, "IBM,vtpm20"))
|
|
||||||
tpm_version = 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
tpm_init (void)
|
|
||||||
{
|
|
||||||
static int init_success = 0;
|
|
||||||
|
|
||||||
if (!init_success)
|
|
||||||
{
|
|
||||||
if (grub_ieee1275_open ("/vdevice/vtpm", &tpm_ihandle) < 0)
|
|
||||||
{
|
|
||||||
tpm_ihandle = IEEE1275_IHANDLE_INVALID;
|
|
||||||
return GRUB_ERR_UNKNOWN_DEVICE;
|
|
||||||
}
|
|
||||||
|
|
||||||
init_success = 1;
|
|
||||||
|
|
||||||
tpm_get_tpm_version ();
|
|
||||||
}
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
|
||||||
ibmvtpm_2hash_ext_log (grub_uint8_t pcrindex,
|
|
||||||
grub_uint32_t eventtype,
|
|
||||||
const char *description,
|
|
||||||
grub_size_t description_size,
|
|
||||||
void *buf, grub_size_t size)
|
|
||||||
{
|
|
||||||
struct tpm_2hash_ext_log
|
|
||||||
{
|
|
||||||
struct grub_ieee1275_common_hdr common;
|
|
||||||
grub_ieee1275_cell_t method;
|
|
||||||
grub_ieee1275_cell_t ihandle;
|
|
||||||
grub_ieee1275_cell_t size;
|
|
||||||
grub_ieee1275_cell_t buf;
|
|
||||||
grub_ieee1275_cell_t description_size;
|
|
||||||
grub_ieee1275_cell_t description;
|
|
||||||
grub_ieee1275_cell_t eventtype;
|
|
||||||
grub_ieee1275_cell_t pcrindex;
|
|
||||||
grub_ieee1275_cell_t catch_result;
|
|
||||||
grub_ieee1275_cell_t rc;
|
|
||||||
};
|
|
||||||
struct tpm_2hash_ext_log args;
|
|
||||||
|
|
||||||
INIT_IEEE1275_COMMON (&args.common, "call-method", 8, 2);
|
|
||||||
args.method = (grub_ieee1275_cell_t) "2hash-ext-log";
|
|
||||||
args.ihandle = tpm_ihandle;
|
|
||||||
args.pcrindex = pcrindex;
|
|
||||||
args.eventtype = eventtype;
|
|
||||||
args.description = (grub_ieee1275_cell_t) description;
|
|
||||||
args.description_size = description_size;
|
|
||||||
args.buf = (grub_ieee1275_cell_t) buf;
|
|
||||||
args.size = (grub_ieee1275_cell_t) size;
|
|
||||||
|
|
||||||
if (IEEE1275_CALL_ENTRY_FN (&args) == -1)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* catch_result is set if firmware does not support 2hash-ext-log
|
|
||||||
* rc is GRUB_IEEE1275_CELL_FALSE (0) on failure
|
|
||||||
*/
|
|
||||||
if ((args.catch_result) || args.rc == GRUB_IEEE1275_CELL_FALSE)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static grub_err_t
|
|
||||||
tpm2_log_event (unsigned char *buf, grub_size_t size, grub_uint8_t pcr,
|
|
||||||
const char *description)
|
|
||||||
{
|
|
||||||
static int error_displayed = 0;
|
|
||||||
int rc;
|
|
||||||
|
|
||||||
rc = ibmvtpm_2hash_ext_log (pcr, EV_IPL,
|
|
||||||
description, grub_strlen(description) + 1,
|
|
||||||
buf, size);
|
|
||||||
if (rc && !error_displayed)
|
|
||||||
{
|
|
||||||
error_displayed++;
|
|
||||||
return grub_error (GRUB_ERR_BAD_DEVICE,
|
|
||||||
"2HASH-EXT-LOG failed: Firmware is likely too old.\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_err_t
|
|
||||||
grub_tpm_measure (unsigned char *buf, grub_size_t size, grub_uint8_t pcr,
|
|
||||||
const char *description)
|
|
||||||
{
|
|
||||||
grub_dprintf ("tpm", "log_event, pcr = %d, size = 0x%" PRIxGRUB_SIZE ", %s\n",
|
|
||||||
pcr, size, description);
|
|
||||||
|
|
||||||
if (tpm_version == 2)
|
|
||||||
return tpm2_log_event (buf, size, pcr, description);
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
grub_tpm_present (void)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Call tpm_init() "late" rather than from GRUB_MOD_INIT() so that device nodes
|
|
||||||
* can be found.
|
|
||||||
*/
|
|
||||||
return tpm_init() == GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
@@ -23,7 +23,6 @@
|
|||||||
#include <grub/env.h>
|
#include <grub/env.h>
|
||||||
#include <grub/cpu/io.h>
|
#include <grub/cpu/io.h>
|
||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
#include <grub/lockdown.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
@@ -132,17 +131,17 @@ GRUB_MOD_INIT(memrw)
|
|||||||
N_("PORT"), N_("Read 32-bit value from PORT."),
|
N_("PORT"), N_("Read 32-bit value from PORT."),
|
||||||
options);
|
options);
|
||||||
cmd_write_byte =
|
cmd_write_byte =
|
||||||
grub_register_command_lockdown ("outb", grub_cmd_write,
|
grub_register_command ("outb", grub_cmd_write,
|
||||||
N_("PORT VALUE [MASK]"),
|
N_("PORT VALUE [MASK]"),
|
||||||
N_("Write 8-bit VALUE to PORT."));
|
N_("Write 8-bit VALUE to PORT."));
|
||||||
cmd_write_word =
|
cmd_write_word =
|
||||||
grub_register_command_lockdown ("outw", grub_cmd_write,
|
grub_register_command ("outw", grub_cmd_write,
|
||||||
N_("PORT VALUE [MASK]"),
|
N_("PORT VALUE [MASK]"),
|
||||||
N_("Write 16-bit VALUE to PORT."));
|
N_("Write 16-bit VALUE to PORT."));
|
||||||
cmd_write_dword =
|
cmd_write_dword =
|
||||||
grub_register_command_lockdown ("outl", grub_cmd_write,
|
grub_register_command ("outl", grub_cmd_write,
|
||||||
N_("ADDR VALUE [MASK]"),
|
N_("ADDR VALUE [MASK]"),
|
||||||
N_("Write 32-bit VALUE to PORT."));
|
N_("Write 32-bit VALUE to PORT."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(memrw)
|
GRUB_MOD_FINI(memrw)
|
||||||
|
|||||||
@@ -35,19 +35,19 @@ static struct grub_keyboard_layout layout_us = {
|
|||||||
/* Keyboard errors. Handled by driver. */
|
/* Keyboard errors. Handled by driver. */
|
||||||
/* 0x00 */ 0, 0, 0, 0,
|
/* 0x00 */ 0, 0, 0, 0,
|
||||||
|
|
||||||
/* 0x04 */ 'a', 'b', 'c', 'd',
|
/* 0x04 */ 'a', 'b', 'c', 'd',
|
||||||
/* 0x08 */ 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
|
/* 0x08 */ 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l',
|
||||||
/* 0x10 */ 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
|
/* 0x10 */ 'm', 'n', 'o', 'p', 'q', 'r', 's', 't',
|
||||||
/* 0x18 */ 'u', 'v', 'w', 'x', 'y', 'z', '1', '2',
|
/* 0x18 */ 'u', 'v', 'w', 'x', 'y', 'z', '1', '2',
|
||||||
/* 0x20 */ '3', '4', '5', '6', '7', '8', '9', '0',
|
/* 0x20 */ '3', '4', '5', '6', '7', '8', '9', '0',
|
||||||
/* 0x28 */ '\n', GRUB_TERM_ESC, GRUB_TERM_BACKSPACE, GRUB_TERM_TAB, ' ', '-', '=', '[',
|
/* 0x28 */ '\n', '\e', '\b', '\t', ' ', '-', '=', '[',
|
||||||
/* According to usage table 0x31 should be mapped to '/'
|
/* According to usage table 0x31 should be mapped to '/'
|
||||||
but testing with real keyboard shows that 0x32 is remapped to '/'.
|
but testing with real keyboard shows that 0x32 is remapped to '/'.
|
||||||
Map 0x31 to 0.
|
Map 0x31 to 0.
|
||||||
*/
|
*/
|
||||||
/* 0x30 */ ']', 0, '\\', ';', '\'', '`', ',', '.',
|
/* 0x30 */ ']', 0, '\\', ';', '\'', '`', ',', '.',
|
||||||
/* 0x39 is CapsLock. Handled by driver. */
|
/* 0x39 is CapsLock. Handled by driver. */
|
||||||
/* 0x38 */ '/', 0, GRUB_TERM_KEY_F1, GRUB_TERM_KEY_F2,
|
/* 0x38 */ '/', 0, GRUB_TERM_KEY_F1, GRUB_TERM_KEY_F2,
|
||||||
/* 0x3c */ GRUB_TERM_KEY_F3, GRUB_TERM_KEY_F4,
|
/* 0x3c */ GRUB_TERM_KEY_F3, GRUB_TERM_KEY_F4,
|
||||||
/* 0x3e */ GRUB_TERM_KEY_F5, GRUB_TERM_KEY_F6,
|
/* 0x3e */ GRUB_TERM_KEY_F5, GRUB_TERM_KEY_F6,
|
||||||
/* 0x40 */ GRUB_TERM_KEY_F7, GRUB_TERM_KEY_F8,
|
/* 0x40 */ GRUB_TERM_KEY_F7, GRUB_TERM_KEY_F8,
|
||||||
@@ -56,16 +56,16 @@ static struct grub_keyboard_layout layout_us = {
|
|||||||
/* PrtScr and ScrollLock. Not handled yet. */
|
/* PrtScr and ScrollLock. Not handled yet. */
|
||||||
/* 0x46 */ 0, 0,
|
/* 0x46 */ 0, 0,
|
||||||
/* 0x48 is Pause. Not handled yet. */
|
/* 0x48 is Pause. Not handled yet. */
|
||||||
/* 0x48 */ 0, GRUB_TERM_KEY_INSERT,
|
/* 0x48 */ 0, GRUB_TERM_KEY_INSERT,
|
||||||
/* 0x4a */ GRUB_TERM_KEY_HOME, GRUB_TERM_KEY_PPAGE,
|
/* 0x4a */ GRUB_TERM_KEY_HOME, GRUB_TERM_KEY_PPAGE,
|
||||||
/* 0x4c */ GRUB_TERM_KEY_DC, GRUB_TERM_KEY_END,
|
/* 0x4c */ GRUB_TERM_KEY_DC, GRUB_TERM_KEY_END,
|
||||||
/* 0x4e */ GRUB_TERM_KEY_NPAGE, GRUB_TERM_KEY_RIGHT,
|
/* 0x4e */ GRUB_TERM_KEY_NPAGE, GRUB_TERM_KEY_RIGHT,
|
||||||
/* 0x50 */ GRUB_TERM_KEY_LEFT, GRUB_TERM_KEY_DOWN,
|
/* 0x50 */ GRUB_TERM_KEY_LEFT, GRUB_TERM_KEY_DOWN,
|
||||||
/* 0x53 is NumLock. Handled by driver. */
|
/* 0x53 is NumLock. Handled by driver. */
|
||||||
/* 0x52 */ GRUB_TERM_KEY_UP, 0,
|
/* 0x52 */ GRUB_TERM_KEY_UP, 0,
|
||||||
/* 0x54 */ '/', '*',
|
/* 0x54 */ '/', '*',
|
||||||
/* 0x56 */ '-', '+',
|
/* 0x56 */ '-', '+',
|
||||||
/* 0x58 */ '\n', GRUB_TERM_KEY_END,
|
/* 0x58 */ '\n', GRUB_TERM_KEY_END,
|
||||||
/* 0x5a */ GRUB_TERM_KEY_DOWN, GRUB_TERM_KEY_NPAGE,
|
/* 0x5a */ GRUB_TERM_KEY_DOWN, GRUB_TERM_KEY_NPAGE,
|
||||||
/* 0x5c */ GRUB_TERM_KEY_LEFT, GRUB_TERM_KEY_CENTER,
|
/* 0x5c */ GRUB_TERM_KEY_LEFT, GRUB_TERM_KEY_CENTER,
|
||||||
/* 0x5e */ GRUB_TERM_KEY_RIGHT, GRUB_TERM_KEY_HOME,
|
/* 0x5e */ GRUB_TERM_KEY_RIGHT, GRUB_TERM_KEY_HOME,
|
||||||
@@ -77,37 +77,37 @@ static struct grub_keyboard_layout layout_us = {
|
|||||||
/* Keyboard errors. Handled by driver. */
|
/* Keyboard errors. Handled by driver. */
|
||||||
/* 0x00 */ 0, 0, 0, 0,
|
/* 0x00 */ 0, 0, 0, 0,
|
||||||
|
|
||||||
/* 0x04 */ 'A', 'B', 'C', 'D',
|
/* 0x04 */ 'A', 'B', 'C', 'D',
|
||||||
/* 0x08 */ 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
|
/* 0x08 */ 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L',
|
||||||
/* 0x10 */ 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
|
/* 0x10 */ 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T',
|
||||||
/* 0x18 */ 'U', 'V', 'W', 'X', 'Y', 'Z', '!', '@',
|
/* 0x18 */ 'U', 'V', 'W', 'X', 'Y', 'Z', '!', '@',
|
||||||
/* 0x20 */ '#', '$', '%', '^', '&', '*', '(', ')',
|
/* 0x20 */ '#', '$', '%', '^', '&', '*', '(', ')',
|
||||||
/* 0x28 */ '\n' | GRUB_TERM_SHIFT, GRUB_TERM_ESC | GRUB_TERM_SHIFT,
|
/* 0x28 */ '\n' | GRUB_TERM_SHIFT, '\e' | GRUB_TERM_SHIFT,
|
||||||
/* 0x2a */ GRUB_TERM_BACKSPACE | GRUB_TERM_SHIFT, GRUB_TERM_TAB | GRUB_TERM_SHIFT,
|
/* 0x2a */ '\b' | GRUB_TERM_SHIFT, '\t' | GRUB_TERM_SHIFT,
|
||||||
/* 0x2c */ ' ' | GRUB_TERM_SHIFT, '_', '+', '{',
|
/* 0x2c */ ' ' | GRUB_TERM_SHIFT, '_', '+', '{',
|
||||||
/* According to usage table 0x31 should be mapped to '/'
|
/* According to usage table 0x31 should be mapped to '/'
|
||||||
but testing with real keyboard shows that 0x32 is remapped to '/'.
|
but testing with real keyboard shows that 0x32 is remapped to '/'.
|
||||||
Map 0x31 to 0.
|
Map 0x31 to 0.
|
||||||
*/
|
*/
|
||||||
/* 0x30 */ '}', 0, '|', ':', '"', '~', '<', '>',
|
/* 0x30 */ '}', 0, '|', ':', '"', '~', '<', '>',
|
||||||
/* 0x39 is CapsLock. Handled by driver. */
|
/* 0x39 is CapsLock. Handled by driver. */
|
||||||
/* 0x38 */ '?', 0,
|
/* 0x38 */ '?', 0,
|
||||||
/* 0x3a */ GRUB_TERM_KEY_F1 | GRUB_TERM_SHIFT,
|
/* 0x3a */ GRUB_TERM_KEY_F1 | GRUB_TERM_SHIFT,
|
||||||
/* 0x3b */ GRUB_TERM_KEY_F2 | GRUB_TERM_SHIFT,
|
/* 0x3b */ GRUB_TERM_KEY_F2 | GRUB_TERM_SHIFT,
|
||||||
/* 0x3c */ GRUB_TERM_KEY_F3 | GRUB_TERM_SHIFT,
|
/* 0x3c */ GRUB_TERM_KEY_F3 | GRUB_TERM_SHIFT,
|
||||||
/* 0x3d */ GRUB_TERM_KEY_F4 | GRUB_TERM_SHIFT,
|
/* 0x3d */ GRUB_TERM_KEY_F4 | GRUB_TERM_SHIFT,
|
||||||
/* 0x3e */ GRUB_TERM_KEY_F5 | GRUB_TERM_SHIFT,
|
/* 0x3e */ GRUB_TERM_KEY_F5 | GRUB_TERM_SHIFT,
|
||||||
/* 0x3f */ GRUB_TERM_KEY_F6 | GRUB_TERM_SHIFT,
|
/* 0x3f */ GRUB_TERM_KEY_F6 | GRUB_TERM_SHIFT,
|
||||||
/* 0x40 */ GRUB_TERM_KEY_F7 | GRUB_TERM_SHIFT,
|
/* 0x40 */ GRUB_TERM_KEY_F7 | GRUB_TERM_SHIFT,
|
||||||
/* 0x41 */ GRUB_TERM_KEY_F8 | GRUB_TERM_SHIFT,
|
/* 0x41 */ GRUB_TERM_KEY_F8 | GRUB_TERM_SHIFT,
|
||||||
/* 0x42 */ GRUB_TERM_KEY_F9 | GRUB_TERM_SHIFT,
|
/* 0x42 */ GRUB_TERM_KEY_F9 | GRUB_TERM_SHIFT,
|
||||||
/* 0x43 */ GRUB_TERM_KEY_F10 | GRUB_TERM_SHIFT,
|
/* 0x43 */ GRUB_TERM_KEY_F10 | GRUB_TERM_SHIFT,
|
||||||
/* 0x44 */ GRUB_TERM_KEY_F11 | GRUB_TERM_SHIFT,
|
/* 0x44 */ GRUB_TERM_KEY_F11 | GRUB_TERM_SHIFT,
|
||||||
/* 0x45 */ GRUB_TERM_KEY_F12 | GRUB_TERM_SHIFT,
|
/* 0x45 */ GRUB_TERM_KEY_F12 | GRUB_TERM_SHIFT,
|
||||||
/* PrtScr and ScrollLock. Not handled yet. */
|
/* PrtScr and ScrollLock. Not handled yet. */
|
||||||
/* 0x46 */ 0, 0,
|
/* 0x46 */ 0, 0,
|
||||||
/* 0x48 is Pause. Not handled yet. */
|
/* 0x48 is Pause. Not handled yet. */
|
||||||
/* 0x48 */ 0, GRUB_TERM_KEY_INSERT | GRUB_TERM_SHIFT,
|
/* 0x48 */ 0, GRUB_TERM_KEY_INSERT | GRUB_TERM_SHIFT,
|
||||||
/* 0x4a */ GRUB_TERM_KEY_HOME | GRUB_TERM_SHIFT,
|
/* 0x4a */ GRUB_TERM_KEY_HOME | GRUB_TERM_SHIFT,
|
||||||
/* 0x4b */ GRUB_TERM_KEY_PPAGE | GRUB_TERM_SHIFT,
|
/* 0x4b */ GRUB_TERM_KEY_PPAGE | GRUB_TERM_SHIFT,
|
||||||
/* 0x4c */ GRUB_TERM_KEY_DC | GRUB_TERM_SHIFT,
|
/* 0x4c */ GRUB_TERM_KEY_DC | GRUB_TERM_SHIFT,
|
||||||
@@ -118,7 +118,7 @@ static struct grub_keyboard_layout layout_us = {
|
|||||||
/* 0x51 */ GRUB_TERM_KEY_DOWN | GRUB_TERM_SHIFT,
|
/* 0x51 */ GRUB_TERM_KEY_DOWN | GRUB_TERM_SHIFT,
|
||||||
/* 0x53 is NumLock. Handled by driver. */
|
/* 0x53 is NumLock. Handled by driver. */
|
||||||
/* 0x52 */ GRUB_TERM_KEY_UP | GRUB_TERM_SHIFT, 0,
|
/* 0x52 */ GRUB_TERM_KEY_UP | GRUB_TERM_SHIFT, 0,
|
||||||
/* 0x54 */ '/', '*',
|
/* 0x54 */ '/', '*',
|
||||||
/* 0x56 */ '-', '+',
|
/* 0x56 */ '-', '+',
|
||||||
/* 0x58 */ '\n' | GRUB_TERM_SHIFT, '1', '2', '3', '4', '5','6', '7',
|
/* 0x58 */ '\n' | GRUB_TERM_SHIFT, '1', '2', '3', '4', '5','6', '7',
|
||||||
/* 0x60 */ '8', '9', '0', '.', '|'
|
/* 0x60 */ '8', '9', '0', '.', '|'
|
||||||
@@ -148,7 +148,7 @@ map_key_core (int code, int status, int *alt_gr_consumed)
|
|||||||
else if (grub_current_layout->keyboard_map_l3[code])
|
else if (grub_current_layout->keyboard_map_l3[code])
|
||||||
{
|
{
|
||||||
*alt_gr_consumed = 1;
|
*alt_gr_consumed = 1;
|
||||||
return grub_current_layout->keyboard_map_l3[code];
|
return grub_current_layout->keyboard_map_l3[code];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (status & (GRUB_TERM_STATUS_LSHIFT | GRUB_TERM_STATUS_RSHIFT))
|
if (status & (GRUB_TERM_STATUS_LSHIFT | GRUB_TERM_STATUS_RSHIFT))
|
||||||
@@ -172,12 +172,12 @@ grub_term_map_key (grub_keyboard_key_t code, int status)
|
|||||||
}
|
}
|
||||||
|
|
||||||
key = map_key_core (code, status, &alt_gr_consumed);
|
key = map_key_core (code, status, &alt_gr_consumed);
|
||||||
|
|
||||||
if (key == 0 || key == GRUB_TERM_SHIFT) {
|
if (key == 0 || key == GRUB_TERM_SHIFT) {
|
||||||
grub_printf ("Unknown key 0x%x detected\n", code);
|
grub_printf ("Unknown key 0x%x detected\n", code);
|
||||||
return GRUB_TERM_NO_KEY;
|
return GRUB_TERM_NO_KEY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (status & GRUB_TERM_STATUS_CAPS)
|
if (status & GRUB_TERM_STATUS_CAPS)
|
||||||
{
|
{
|
||||||
if ((key >= 'a') && (key <= 'z'))
|
if ((key >= 'a') && (key <= 'z'))
|
||||||
@@ -185,8 +185,8 @@ grub_term_map_key (grub_keyboard_key_t code, int status)
|
|||||||
else if ((key >= 'A') && (key <= 'Z'))
|
else if ((key >= 'A') && (key <= 'Z'))
|
||||||
key += 'a' - 'A';
|
key += 'a' - 'A';
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((status & GRUB_TERM_STATUS_LALT) ||
|
if ((status & GRUB_TERM_STATUS_LALT) ||
|
||||||
((status & GRUB_TERM_STATUS_RALT) && !alt_gr_consumed))
|
((status & GRUB_TERM_STATUS_RALT) && !alt_gr_consumed))
|
||||||
key |= GRUB_TERM_ALT;
|
key |= GRUB_TERM_ALT;
|
||||||
if (status & (GRUB_TERM_STATUS_LCTRL | GRUB_TERM_STATUS_RCTRL))
|
if (status & (GRUB_TERM_STATUS_LCTRL | GRUB_TERM_STATUS_RCTRL))
|
||||||
@@ -212,7 +212,7 @@ grub_cmd_keymap (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
{
|
{
|
||||||
const char *prefix = grub_env_get ("prefix");
|
const char *prefix = grub_env_get ("prefix");
|
||||||
if (!prefix)
|
if (!prefix)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("variable `%s' isn't set"), "prefix");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("variable `%s' isn't set"), "prefix");
|
||||||
filename = grub_xasprintf ("%s/layouts/%s.gkb", prefix, argv[0]);
|
filename = grub_xasprintf ("%s/layouts/%s.gkb", prefix, argv[0]);
|
||||||
if (!filename)
|
if (!filename)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
@@ -220,7 +220,7 @@ grub_cmd_keymap (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
else
|
else
|
||||||
filename = argv[0];
|
filename = argv[0];
|
||||||
|
|
||||||
file = grub_file_open (filename, GRUB_FILE_TYPE_KEYBOARD_LAYOUT);
|
file = grub_file_open (filename);
|
||||||
if (! file)
|
if (! file)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
|
|||||||
@@ -35,6 +35,24 @@ static const struct grub_arg_option options[] =
|
|||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static int
|
||||||
|
grub_getkeystatus (void)
|
||||||
|
{
|
||||||
|
int status = 0;
|
||||||
|
grub_term_input_t term;
|
||||||
|
|
||||||
|
if (grub_term_poll_usb)
|
||||||
|
grub_term_poll_usb (0);
|
||||||
|
|
||||||
|
FOR_ACTIVE_TERM_INPUTS(term)
|
||||||
|
{
|
||||||
|
if (term->getkeystatus)
|
||||||
|
status |= term->getkeystatus (term);
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_cmd_keystatus (grub_extcmd_context_t ctxt,
|
grub_cmd_keystatus (grub_extcmd_context_t ctxt,
|
||||||
int argc __attribute__ ((unused)),
|
int argc __attribute__ ((unused)),
|
||||||
|
|||||||
@@ -32,7 +32,6 @@
|
|||||||
#include <grub/auth.h>
|
#include <grub/auth.h>
|
||||||
#include <grub/disk.h>
|
#include <grub/disk.h>
|
||||||
#include <grub/partition.h>
|
#include <grub/partition.h>
|
||||||
#include <grub/safemath.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
@@ -56,7 +55,7 @@ legacy_file (const char *filename)
|
|||||||
if (!suffix)
|
if (!suffix)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
file = grub_file_open (filename, GRUB_FILE_TYPE_CONFIG);
|
file = grub_file_open (filename);
|
||||||
if (! file)
|
if (! file)
|
||||||
{
|
{
|
||||||
grub_free (suffix);
|
grub_free (suffix);
|
||||||
@@ -105,22 +104,13 @@ legacy_file (const char *filename)
|
|||||||
if (newsuffix)
|
if (newsuffix)
|
||||||
{
|
{
|
||||||
char *t;
|
char *t;
|
||||||
grub_size_t sz;
|
|
||||||
|
|
||||||
if (grub_add (grub_strlen (suffix), grub_strlen (newsuffix), &sz) ||
|
|
||||||
grub_add (sz, 1, &sz))
|
|
||||||
{
|
|
||||||
grub_errno = GRUB_ERR_OUT_OF_RANGE;
|
|
||||||
goto fail_0;
|
|
||||||
}
|
|
||||||
|
|
||||||
t = suffix;
|
t = suffix;
|
||||||
suffix = grub_realloc (suffix, sz);
|
suffix = grub_realloc (suffix, grub_strlen (suffix)
|
||||||
|
+ grub_strlen (newsuffix) + 1);
|
||||||
if (!suffix)
|
if (!suffix)
|
||||||
{
|
{
|
||||||
grub_free (t);
|
grub_free (t);
|
||||||
|
|
||||||
fail_0:
|
|
||||||
grub_free (entrysrc);
|
grub_free (entrysrc);
|
||||||
grub_free (parsed);
|
grub_free (parsed);
|
||||||
grub_free (newsuffix);
|
grub_free (newsuffix);
|
||||||
@@ -164,22 +154,13 @@ legacy_file (const char *filename)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
char *t;
|
char *t;
|
||||||
grub_size_t sz;
|
|
||||||
|
|
||||||
if (grub_add (grub_strlen (entrysrc), grub_strlen (parsed), &sz) ||
|
|
||||||
grub_add (sz, 1, &sz))
|
|
||||||
{
|
|
||||||
grub_errno = GRUB_ERR_OUT_OF_RANGE;
|
|
||||||
goto fail_1;
|
|
||||||
}
|
|
||||||
|
|
||||||
t = entrysrc;
|
t = entrysrc;
|
||||||
entrysrc = grub_realloc (entrysrc, sz);
|
entrysrc = grub_realloc (entrysrc, grub_strlen (entrysrc)
|
||||||
|
+ grub_strlen (parsed) + 1);
|
||||||
if (!entrysrc)
|
if (!entrysrc)
|
||||||
{
|
{
|
||||||
grub_free (t);
|
grub_free (t);
|
||||||
|
|
||||||
fail_1:
|
|
||||||
grub_free (parsed);
|
grub_free (parsed);
|
||||||
grub_free (suffix);
|
grub_free (suffix);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
@@ -257,8 +238,8 @@ grub_cmd_legacy_source (struct grub_command *cmd,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static enum
|
static enum
|
||||||
{
|
{
|
||||||
GUESS_IT, LINUX, MULTIBOOT, KFREEBSD, KNETBSD, KOPENBSD
|
GUESS_IT, LINUX, MULTIBOOT, KFREEBSD, KNETBSD, KOPENBSD
|
||||||
} kernel_type;
|
} kernel_type;
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
@@ -273,7 +254,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
char **cutargs;
|
char **cutargs;
|
||||||
int cutargc;
|
int cutargc;
|
||||||
grub_err_t err = GRUB_ERR_NONE;
|
grub_err_t err = GRUB_ERR_NONE;
|
||||||
|
|
||||||
for (i = 0; i < 2; i++)
|
for (i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
/* FIXME: really support this. */
|
/* FIXME: really support this. */
|
||||||
@@ -333,7 +314,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (argc < 2)
|
if (argc < 2)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
||||||
|
|
||||||
cutargs = grub_calloc (argc - 1, sizeof (cutargs[0]));
|
cutargs = grub_malloc (sizeof (cutargs[0]) * (argc - 1));
|
||||||
if (!cutargs)
|
if (!cutargs)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
cutargc = argc - 1;
|
cutargc = argc - 1;
|
||||||
@@ -410,7 +391,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (dev)
|
if (dev)
|
||||||
grub_device_close (dev);
|
grub_device_close (dev);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* k*BSD didn't really work well with grub-legacy. */
|
/* k*BSD didn't really work well with grub-legacy. */
|
||||||
if (kernel_type == GUESS_IT || kernel_type == KFREEBSD)
|
if (kernel_type == GUESS_IT || kernel_type == KFREEBSD)
|
||||||
{
|
{
|
||||||
@@ -455,7 +436,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
{
|
{
|
||||||
char rbuf[3] = "-r";
|
char rbuf[3] = "-r";
|
||||||
bsdargc = cutargc + 2;
|
bsdargc = cutargc + 2;
|
||||||
bsdargs = grub_calloc (bsdargc, sizeof (bsdargs[0]));
|
bsdargs = grub_malloc (sizeof (bsdargs[0]) * bsdargc);
|
||||||
if (!bsdargs)
|
if (!bsdargs)
|
||||||
{
|
{
|
||||||
err = grub_errno;
|
err = grub_errno;
|
||||||
@@ -578,7 +559,7 @@ grub_cmd_legacy_initrdnounzip (struct grub_command *mycmd __attribute__ ((unused
|
|||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"),
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"),
|
||||||
"module");
|
"module");
|
||||||
|
|
||||||
newargs = grub_calloc (argc + 1, sizeof (newargs[0]));
|
newargs = grub_malloc ((argc + 1) * sizeof (newargs[0]));
|
||||||
if (!newargs)
|
if (!newargs)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
grub_memcpy (newargs + 1, args, argc * sizeof (newargs[0]));
|
grub_memcpy (newargs + 1, args, argc * sizeof (newargs[0]));
|
||||||
@@ -632,7 +613,7 @@ check_password_md5_real (const char *entered,
|
|||||||
digest = GRUB_MD_MD5->read (ctx);
|
digest = GRUB_MD_MD5->read (ctx);
|
||||||
GRUB_MD_MD5->final (ctx);
|
GRUB_MD_MD5->final (ctx);
|
||||||
grub_memcpy (alt_result, digest, MD5_HASHLEN);
|
grub_memcpy (alt_result, digest, MD5_HASHLEN);
|
||||||
|
|
||||||
GRUB_MD_MD5->init (ctx);
|
GRUB_MD_MD5->init (ctx);
|
||||||
GRUB_MD_MD5->write (ctx, entered, enteredlen);
|
GRUB_MD_MD5->write (ctx, entered, enteredlen);
|
||||||
GRUB_MD_MD5->write (ctx, pw->salt, pw->saltlen); /* include the $1$ header */
|
GRUB_MD_MD5->write (ctx, pw->salt, pw->saltlen); /* include the $1$ header */
|
||||||
@@ -654,7 +635,7 @@ check_password_md5_real (const char *entered,
|
|||||||
GRUB_MD_MD5->write (ctx, entered, enteredlen);
|
GRUB_MD_MD5->write (ctx, entered, enteredlen);
|
||||||
else
|
else
|
||||||
GRUB_MD_MD5->write (ctx, alt_result, 16);
|
GRUB_MD_MD5->write (ctx, alt_result, 16);
|
||||||
|
|
||||||
if (i % 3 != 0)
|
if (i % 3 != 0)
|
||||||
GRUB_MD_MD5->write (ctx, pw->salt + 3, pw->saltlen - 3);
|
GRUB_MD_MD5->write (ctx, pw->salt + 3, pw->saltlen - 3);
|
||||||
|
|
||||||
|
|||||||
@@ -44,8 +44,7 @@ static const struct grub_arg_option options[] =
|
|||||||
PUBKEY filter (that insists upon properly signed files) as well. PUBKEY
|
PUBKEY filter (that insists upon properly signed files) as well. PUBKEY
|
||||||
filter is restored before the function returns. */
|
filter is restored before the function returns. */
|
||||||
static grub_file_t
|
static grub_file_t
|
||||||
open_envblk_file (char *filename,
|
open_envblk_file (char *filename, int untrusted)
|
||||||
enum grub_file_type type)
|
|
||||||
{
|
{
|
||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
char *buf = 0;
|
char *buf = 0;
|
||||||
@@ -73,7 +72,13 @@ open_envblk_file (char *filename,
|
|||||||
grub_strcpy (filename + len + 1, GRUB_ENVBLK_DEFCFG);
|
grub_strcpy (filename + len + 1, GRUB_ENVBLK_DEFCFG);
|
||||||
}
|
}
|
||||||
|
|
||||||
file = grub_file_open (filename, type);
|
/* The filters that are disabled will be re-enabled by the call to
|
||||||
|
grub_file_open() after this particular file is opened. */
|
||||||
|
grub_file_filter_disable_compression ();
|
||||||
|
if (untrusted)
|
||||||
|
grub_file_filter_disable_pubkey ();
|
||||||
|
|
||||||
|
file = grub_file_open (filename);
|
||||||
|
|
||||||
grub_free (buf);
|
grub_free (buf);
|
||||||
return file;
|
return file;
|
||||||
@@ -166,10 +171,7 @@ grub_cmd_load_env (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
whitelist.list = args;
|
whitelist.list = args;
|
||||||
|
|
||||||
/* state[0] is the -f flag; state[1] is the --skip-sig flag */
|
/* state[0] is the -f flag; state[1] is the --skip-sig flag */
|
||||||
file = open_envblk_file ((state[0].set) ? state[0].arg : 0,
|
file = open_envblk_file ((state[0].set) ? state[0].arg : 0, state[1].set);
|
||||||
GRUB_FILE_TYPE_LOADENV
|
|
||||||
| (state[1].set
|
|
||||||
? GRUB_FILE_TYPE_SKIP_SIGNATURE : GRUB_FILE_TYPE_NONE));
|
|
||||||
if (! file)
|
if (! file)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
@@ -204,10 +206,7 @@ grub_cmd_list_env (grub_extcmd_context_t ctxt,
|
|||||||
grub_file_t file;
|
grub_file_t file;
|
||||||
grub_envblk_t envblk;
|
grub_envblk_t envblk;
|
||||||
|
|
||||||
file = open_envblk_file ((state[0].set) ? state[0].arg : 0,
|
file = open_envblk_file ((state[0].set) ? state[0].arg : 0, 0);
|
||||||
GRUB_FILE_TYPE_LOADENV
|
|
||||||
| (state[1].set
|
|
||||||
? GRUB_FILE_TYPE_SKIP_SIGNATURE : GRUB_FILE_TYPE_NONE));
|
|
||||||
if (! file)
|
if (! file)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
@@ -352,16 +351,16 @@ struct grub_cmd_save_env_ctx
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* Store blocklists in a linked list. */
|
/* Store blocklists in a linked list. */
|
||||||
static grub_err_t
|
static void
|
||||||
save_env_read_hook (grub_disk_addr_t sector, unsigned offset, unsigned length,
|
save_env_read_hook (grub_disk_addr_t sector, unsigned offset, unsigned length,
|
||||||
char *buf __attribute__ ((unused)), void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
struct grub_cmd_save_env_ctx *ctx = data;
|
struct grub_cmd_save_env_ctx *ctx = data;
|
||||||
struct blocklist *block;
|
struct blocklist *block;
|
||||||
|
|
||||||
block = grub_malloc (sizeof (*block));
|
block = grub_malloc (sizeof (*block));
|
||||||
if (! block)
|
if (! block)
|
||||||
return GRUB_ERR_NONE;
|
return;
|
||||||
|
|
||||||
block->sector = sector;
|
block->sector = sector;
|
||||||
block->offset = offset;
|
block->offset = offset;
|
||||||
@@ -374,8 +373,6 @@ save_env_read_hook (grub_disk_addr_t sector, unsigned offset, unsigned length,
|
|||||||
ctx->tail = block;
|
ctx->tail = block;
|
||||||
if (! ctx->head)
|
if (! ctx->head)
|
||||||
ctx->head = block;
|
ctx->head = block;
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
@@ -393,8 +390,7 @@ grub_cmd_save_env (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no variable is specified");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no variable is specified");
|
||||||
|
|
||||||
file = open_envblk_file ((state[0].set) ? state[0].arg : 0,
|
file = open_envblk_file ((state[0].set) ? state[0].arg : 0,
|
||||||
GRUB_FILE_TYPE_SAVEENV
|
1 /* allow untrusted */);
|
||||||
| GRUB_FILE_TYPE_SKIP_SIGNATURE);
|
|
||||||
if (! file)
|
if (! file)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
|
|||||||
+21
-30
@@ -70,7 +70,7 @@ grub_ls_list_devices (int longlist)
|
|||||||
FOR_NET_APP_LEVEL (proto)
|
FOR_NET_APP_LEVEL (proto)
|
||||||
{
|
{
|
||||||
if (first)
|
if (first)
|
||||||
grub_puts_ (N_("Network protocols:"));
|
grub_puts_ (N_ ("Network protocols:"));
|
||||||
first = 0;
|
first = 0;
|
||||||
grub_printf ("%s ", proto->name);
|
grub_printf ("%s ", proto->name);
|
||||||
}
|
}
|
||||||
@@ -129,22 +129,22 @@ print_files_long (const char *filename, const struct grub_dirhook_info *info,
|
|||||||
|
|
||||||
/* XXX: For ext2fs symlinks are detected as files while they
|
/* XXX: For ext2fs symlinks are detected as files while they
|
||||||
should be reported as directories. */
|
should be reported as directories. */
|
||||||
file = grub_file_open (pathname, GRUB_FILE_TYPE_GET_SIZE
|
grub_file_filter_disable_compression ();
|
||||||
| GRUB_FILE_TYPE_NO_DECOMPRESS);
|
file = grub_file_open (pathname);
|
||||||
if (file)
|
if (! file)
|
||||||
{
|
{
|
||||||
if (! ctx->human)
|
grub_errno = 0;
|
||||||
grub_printf ("%-12llu", (unsigned long long) file->size);
|
grub_free (pathname);
|
||||||
else
|
return 0;
|
||||||
grub_printf ("%-12s", grub_get_human_size (file->size,
|
|
||||||
GRUB_HUMAN_SIZE_SHORT));
|
|
||||||
grub_file_close (file);
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
grub_xputs ("????????????");
|
|
||||||
|
|
||||||
|
if (! ctx->human)
|
||||||
|
grub_printf ("%-12llu", (unsigned long long) file->size);
|
||||||
|
else
|
||||||
|
grub_printf ("%-12s", grub_get_human_size (file->size,
|
||||||
|
GRUB_HUMAN_SIZE_SHORT));
|
||||||
|
grub_file_close (file);
|
||||||
grub_free (pathname);
|
grub_free (pathname);
|
||||||
grub_errno = GRUB_ERR_NONE;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
grub_printf ("%-12s", _("DIR"));
|
grub_printf ("%-12s", _("DIR"));
|
||||||
@@ -196,20 +196,11 @@ grub_ls_list_files (char *dirname, int longlist, int all, int human)
|
|||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! *path && device_name)
|
if (! *path)
|
||||||
{
|
{
|
||||||
if (grub_errno == GRUB_ERR_UNKNOWN_FS)
|
if (grub_errno == GRUB_ERR_UNKNOWN_FS)
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
|
|
||||||
#ifdef GRUB_MACHINE_IEEE1275
|
|
||||||
/*
|
|
||||||
* Close device to prevent a double open in grub_normal_print_device_info().
|
|
||||||
* Otherwise it may lead to hangs on some IEEE 1275 platforms.
|
|
||||||
*/
|
|
||||||
grub_device_close (dev);
|
|
||||||
dev = NULL;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
grub_normal_print_device_info (device_name);
|
grub_normal_print_device_info (device_name);
|
||||||
}
|
}
|
||||||
else if (fs)
|
else if (fs)
|
||||||
@@ -221,9 +212,9 @@ grub_ls_list_files (char *dirname, int longlist, int all, int human)
|
|||||||
};
|
};
|
||||||
|
|
||||||
if (longlist)
|
if (longlist)
|
||||||
(fs->fs_dir) (dev, path, print_files_long, &ctx);
|
(fs->dir) (dev, path, print_files_long, &ctx);
|
||||||
else
|
else
|
||||||
(fs->fs_dir) (dev, path, print_files, &ctx);
|
(fs->dir) (dev, path, print_files, &ctx);
|
||||||
|
|
||||||
if (grub_errno == GRUB_ERR_BAD_FILE_TYPE
|
if (grub_errno == GRUB_ERR_BAD_FILE_TYPE
|
||||||
&& path[grub_strlen (path) - 1] != '/')
|
&& path[grub_strlen (path) - 1] != '/')
|
||||||
@@ -234,16 +225,16 @@ grub_ls_list_files (char *dirname, int longlist, int all, int human)
|
|||||||
struct grub_dirhook_info info;
|
struct grub_dirhook_info info;
|
||||||
grub_errno = 0;
|
grub_errno = 0;
|
||||||
|
|
||||||
file = grub_file_open (dirname, GRUB_FILE_TYPE_GET_SIZE
|
grub_file_filter_disable_compression ();
|
||||||
| GRUB_FILE_TYPE_NO_DECOMPRESS);
|
file = grub_file_open (dirname);
|
||||||
if (! file)
|
if (! file)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
grub_file_close (file);
|
grub_file_close (file);
|
||||||
|
|
||||||
p = grub_strrchr (dirname, '/') + 1;
|
p = grub_strrchr (dirname, '/') + 1;
|
||||||
ctx.dirname = grub_strndup (dirname, p - dirname);
|
dirname = grub_strndup (dirname, p - dirname);
|
||||||
if (ctx.dirname == NULL)
|
if (! dirname)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
all = 1;
|
all = 1;
|
||||||
@@ -253,7 +244,7 @@ grub_ls_list_files (char *dirname, int longlist, int all, int human)
|
|||||||
else
|
else
|
||||||
print_files (p, &info, &ctx);
|
print_files (p, &info, &ctx);
|
||||||
|
|
||||||
grub_free (ctx.dirname);
|
grub_free (dirname);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grub_errno == GRUB_ERR_NONE)
|
if (grub_errno == GRUB_ERR_NONE)
|
||||||
|
|||||||
@@ -35,7 +35,7 @@ print_strn (grub_uint8_t *str, grub_size_t len)
|
|||||||
for (; *str && len; str++, len--)
|
for (; *str && len; str++, len--)
|
||||||
grub_printf ("%c", *str);
|
grub_printf ("%c", *str);
|
||||||
for (len++; len; len--)
|
for (len++; len; len--)
|
||||||
grub_printf (" ");
|
grub_printf (" ");
|
||||||
}
|
}
|
||||||
|
|
||||||
#define print_field(x) print_strn(x, sizeof (x))
|
#define print_field(x) print_strn(x, sizeof (x))
|
||||||
|
|||||||
@@ -171,7 +171,7 @@ grub_lspci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
|
|
||||||
if (space == 0)
|
if (space == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
switch (space & GRUB_PCI_ADDR_SPACE_MASK)
|
switch (space & GRUB_PCI_ADDR_SPACE_MASK)
|
||||||
{
|
{
|
||||||
case GRUB_PCI_ADDR_SPACE_IO:
|
case GRUB_PCI_ADDR_SPACE_IO:
|
||||||
@@ -195,13 +195,13 @@ grub_lspci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
(space & GRUB_PCI_ADDR_MEM_MASK),
|
(space & GRUB_PCI_ADDR_MEM_MASK),
|
||||||
space & GRUB_PCI_ADDR_MEM_PREFETCH
|
space & GRUB_PCI_ADDR_MEM_PREFETCH
|
||||||
? "prefetchable" : "non-prefetchable");
|
? "prefetchable" : "non-prefetchable");
|
||||||
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
grub_printf ("\t32-bit memory space %d at 0x%016llx [%s]\n",
|
grub_printf ("\t32-bit memory space %d at 0x%016llx [%s]\n",
|
||||||
(unsigned) ((reg - GRUB_PCI_REG_ADDRESSES)
|
(unsigned) ((reg - GRUB_PCI_REG_ADDRESSES)
|
||||||
/ sizeof (grub_uint32_t)) - 1,
|
/ sizeof (grub_uint32_t)) - 1,
|
||||||
(unsigned long long)
|
(unsigned long long)
|
||||||
(space & GRUB_PCI_ADDR_MEM_MASK),
|
(space & GRUB_PCI_ADDR_MEM_MASK),
|
||||||
space & GRUB_PCI_ADDR_MEM_PREFETCH
|
space & GRUB_PCI_ADDR_MEM_PREFETCH
|
||||||
? "prefetchable" : "non-prefetchable");
|
? "prefetchable" : "non-prefetchable");
|
||||||
|
|||||||
@@ -159,12 +159,12 @@ grub_mac_bless_file (grub_device_t dev, const char *path_in, int intel)
|
|||||||
*tail = 0;
|
*tail = 0;
|
||||||
ctx.dirname = tail + 1;
|
ctx.dirname = tail + 1;
|
||||||
|
|
||||||
(fs->fs_dir) (dev, *path == 0 ? "/" : path, find_inode, &ctx);
|
(fs->dir) (dev, *path == 0 ? "/" : path, find_inode, &ctx);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ctx.dirname = path + 1;
|
ctx.dirname = path + 1;
|
||||||
(fs->fs_dir) (dev, "/", find_inode, &ctx);
|
(fs->dir) (dev, "/", find_inode, &ctx);
|
||||||
}
|
}
|
||||||
if (!ctx.found)
|
if (!ctx.found)
|
||||||
{
|
{
|
||||||
@@ -220,10 +220,12 @@ GRUB_MOD_INIT(macbless)
|
|||||||
{
|
{
|
||||||
cmd = grub_register_command ("mactelbless", grub_cmd_macbless,
|
cmd = grub_register_command ("mactelbless", grub_cmd_macbless,
|
||||||
N_("FILE"),
|
N_("FILE"),
|
||||||
N_("Bless FILE of HFS or HFS+ partition for intel macs."));
|
N_
|
||||||
|
("Bless FILE of HFS or HFS+ partition for intel macs."));
|
||||||
cmd_ppc =
|
cmd_ppc =
|
||||||
grub_register_command ("macppcbless", grub_cmd_macbless, N_("DIR"),
|
grub_register_command ("macppcbless", grub_cmd_macbless, N_("DIR"),
|
||||||
N_("Bless DIR of HFS or HFS+ partition for PPC macs."));
|
N_
|
||||||
|
("Bless DIR of HFS or HFS+ partition for PPC macs."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(macbless)
|
GRUB_MOD_FINI(macbless)
|
||||||
|
|||||||
@@ -22,7 +22,6 @@
|
|||||||
#include <grub/extcmd.h>
|
#include <grub/extcmd.h>
|
||||||
#include <grub/env.h>
|
#include <grub/env.h>
|
||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
#include <grub/lockdown.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
@@ -134,17 +133,17 @@ GRUB_MOD_INIT(memrw)
|
|||||||
N_("ADDR"), N_("Read 32-bit value from ADDR."),
|
N_("ADDR"), N_("Read 32-bit value from ADDR."),
|
||||||
options);
|
options);
|
||||||
cmd_write_byte =
|
cmd_write_byte =
|
||||||
grub_register_command_lockdown ("write_byte", grub_cmd_write,
|
grub_register_command ("write_byte", grub_cmd_write,
|
||||||
N_("ADDR VALUE [MASK]"),
|
N_("ADDR VALUE [MASK]"),
|
||||||
N_("Write 8-bit VALUE to ADDR."));
|
N_("Write 8-bit VALUE to ADDR."));
|
||||||
cmd_write_word =
|
cmd_write_word =
|
||||||
grub_register_command_lockdown ("write_word", grub_cmd_write,
|
grub_register_command ("write_word", grub_cmd_write,
|
||||||
N_("ADDR VALUE [MASK]"),
|
N_("ADDR VALUE [MASK]"),
|
||||||
N_("Write 16-bit VALUE to ADDR."));
|
N_("Write 16-bit VALUE to ADDR."));
|
||||||
cmd_write_dword =
|
cmd_write_dword =
|
||||||
grub_register_command_lockdown ("write_dword", grub_cmd_write,
|
grub_register_command ("write_dword", grub_cmd_write,
|
||||||
N_("ADDR VALUE [MASK]"),
|
N_("ADDR VALUE [MASK]"),
|
||||||
N_("Write 32-bit VALUE to ADDR."));
|
N_("Write 32-bit VALUE to ADDR."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(memrw)
|
GRUB_MOD_FINI(memrw)
|
||||||
|
|||||||
Loaded 100 of 1146 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user