mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-25 16:49:23 +00:00
Merge branch 'master' into next
Conflicts: ChangeLog-2015 grub-core/net/drivers/ieee1275/ofnet.c include/grub/ieee1275/ieee1275.h
This commit is contained in:
commit
c4748ead11
355 files changed
+7323
-2118
No files matched your search
@@ -58,6 +58,8 @@ grub-emu.exe
|
|||||||
grub-emu-lite.exe
|
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
|
||||||
grub-fstest.exe
|
grub-fstest.exe
|
||||||
grub_fstest_init.c
|
grub_fstest_init.c
|
||||||
@@ -66,6 +68,8 @@ grub_func_test
|
|||||||
grub-install
|
grub-install
|
||||||
grub-install.exe
|
grub-install.exe
|
||||||
grub-kbdcomp
|
grub-kbdcomp
|
||||||
|
/grub-macbless
|
||||||
|
/grub-macbless.exe
|
||||||
grub-macho2img
|
grub-macho2img
|
||||||
/grub-menulst2cfg
|
/grub-menulst2cfg
|
||||||
/grub-menulst2cfg.exe
|
/grub-menulst2cfg.exe
|
||||||
@@ -120,6 +124,8 @@ grub-shell
|
|||||||
grub-shell-tester
|
grub-shell-tester
|
||||||
grub-sparc64-setup
|
grub-sparc64-setup
|
||||||
grub-sparc64-setup.exe
|
grub-sparc64-setup.exe
|
||||||
|
/grub-syslinux2cfg
|
||||||
|
/grub-syslinux2cfg.exe
|
||||||
gzcompress_test
|
gzcompress_test
|
||||||
hddboot_test
|
hddboot_test
|
||||||
help_test
|
help_test
|
||||||
@@ -194,6 +200,7 @@ grub-core/modinfo.sh
|
|||||||
grub-core/*.module
|
grub-core/*.module
|
||||||
grub-core/*.module.exe
|
grub-core/*.module.exe
|
||||||
grub-core/*.pp
|
grub-core/*.pp
|
||||||
|
grub-core/kernel.img.bin
|
||||||
util/bash-completion.d/grub
|
util/bash-completion.d/grub
|
||||||
grub-core/gnulib/alloca.h
|
grub-core/gnulib/alloca.h
|
||||||
grub-core/gnulib/arg-nonnull.h
|
grub-core/gnulib/arg-nonnull.h
|
||||||
|
|||||||
+1230
-21
File diff suppressed because it is too large.
Load diff
@@ -13,6 +13,9 @@ configuring the GRUB.
|
|||||||
|
|
||||||
* GCC 4.1.3 or later
|
* GCC 4.1.3 or later
|
||||||
Note: older versions may work but support is limited
|
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 (except thumb), arm64, mips(el), powerpc, sparc64
|
||||||
Note: clang 3.2 or later works for i386 and x86_64 targets but results in
|
Note: clang 3.2 or later works for i386 and x86_64 targets but results in
|
||||||
much bigger binaries.
|
much bigger binaries.
|
||||||
earlier versions not tested
|
earlier versions not tested
|
||||||
@@ -26,7 +29,8 @@ configuring the GRUB.
|
|||||||
fail.
|
fail.
|
||||||
Note: clang 3.2 or later works for powerpc
|
Note: clang 3.2 or later works for powerpc
|
||||||
earlier versions not tested
|
earlier versions not tested
|
||||||
Note: clang doesn't support -mno-app-regs and so can't be used for sparc64
|
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
|
Note: clang has no support for ia64 and hence you can't compile GRUB
|
||||||
for ia64 with clang
|
for ia64 with clang
|
||||||
* GNU Make
|
* GNU Make
|
||||||
@@ -35,6 +39,7 @@ configuring the GRUB.
|
|||||||
* 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
|
||||||
* Other standard GNU/Unix tools
|
* Other standard GNU/Unix tools
|
||||||
|
* a libc with large file support (e.g. glibc 2.1 or later)
|
||||||
|
|
||||||
On GNU/Linux, you also need:
|
On GNU/Linux, you also need:
|
||||||
|
|
||||||
@@ -140,7 +145,7 @@ If build and host are different make check isn't available.
|
|||||||
If build and host are different man pages are not generated.
|
If build and host are different man pages are not generated.
|
||||||
|
|
||||||
As an example imagine you have a build system running on FreeBSD on sparc
|
As an example imagine you have a build system running on FreeBSD on sparc
|
||||||
which prepares packages for developpers running amd64 GNU/Linux laptop and
|
which prepares packages for developers running amd64 GNU/Linux laptop and
|
||||||
they need to make images for ARM board running U-boot. In this case:
|
they need to make images for ARM board running U-boot. In this case:
|
||||||
|
|
||||||
build=sparc64-freebsd
|
build=sparc64-freebsd
|
||||||
@@ -149,7 +154,7 @@ target=arm-uboot
|
|||||||
|
|
||||||
For this example the configure line might look like (more details below)
|
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 omited):
|
used options are omitted):
|
||||||
|
|
||||||
./configure BUILD_CC=gcc BUILD_FREETYPE=freetype-config --host=amd64-linux-gnu
|
./configure BUILD_CC=gcc BUILD_FREETYPE=freetype-config --host=amd64-linux-gnu
|
||||||
CC=amd64-linux-gnu-gcc CFLAGS="-g -O2" FREETYPE=amd64-linux-gnu-freetype-config
|
CC=amd64-linux-gnu-gcc CFLAGS="-g -O2" FREETYPE=amd64-linux-gnu-freetype-config
|
||||||
@@ -168,14 +173,15 @@ corresponding platform are not needed for the platform in question.
|
|||||||
generate sin and cos tables.
|
generate sin and cos tables.
|
||||||
2. BUILD_CFLAGS= for C options for build.
|
2. BUILD_CFLAGS= for C options for build.
|
||||||
3. BUILD_CPPFLAGS= for C preprocessor options for build.
|
3. BUILD_CPPFLAGS= for C preprocessor options for build.
|
||||||
4. BUILD_FREETYPE= for freetype-config for build (optional).
|
4. BUILD_LDFLAGS= for linker options for build.
|
||||||
|
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. CPPFLAGS= for C preprocessor options for host.
|
4. HOST_CPPFLAGS= for C preprocessor options for host.
|
||||||
5. LDFLAGS= for linker options for host.
|
5. HOST_LDFLAGS= for linker options for host.
|
||||||
6. FREETYPE= for freetype-config for host (optional).
|
6. FREETYPE= for freetype-config for host (optional).
|
||||||
7. Libdevmapper if any must be in standard linker folders (-ldevmapper) (optional).
|
7. Libdevmapper if any must be in standard linker folders (-ldevmapper) (optional).
|
||||||
8. Libfuse if any must be in standard linker folders (-lfuse) (optional).
|
8. Libfuse if any must be in standard linker folders (-lfuse) (optional).
|
||||||
@@ -196,9 +202,9 @@ corresponding platform are not needed for the platform in question.
|
|||||||
11. TARGET_RANLIB= for ranlib for target.
|
11. TARGET_RANLIB= for ranlib for target.
|
||||||
|
|
||||||
- Additionally for emu, for host and target.
|
- Additionally for emu, for host and target.
|
||||||
1. SDL is looked for in stadard linker directories (-lSDL) (optional)
|
1. SDL is looked for in standard linker directories (-lSDL) (optional)
|
||||||
2. libpciaccess is looked for in stadard linker directories (-lpciaccess) (optional)
|
2. libpciaccess is looked for in standard linker directories (-lpciaccess) (optional)
|
||||||
3. libusb is looked for in stadard linker directories (-lusb) (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.
|
||||||
|
|||||||
+49
-18
@@ -1,7 +1,11 @@
|
|||||||
AUTOMAKE_OPTIONS = subdir-objects -Wno-portability
|
AUTOMAKE_OPTIONS = subdir-objects -Wno-portability
|
||||||
|
|
||||||
DEPDIR = .deps-util
|
DEPDIR = .deps-util
|
||||||
SUBDIRS = grub-core/gnulib . grub-core po docs util/bash-completion.d
|
SUBDIRS = grub-core/gnulib .
|
||||||
|
if COND_real_platform
|
||||||
|
SUBDIRS += grub-core
|
||||||
|
endif
|
||||||
|
SUBDIRS += po docs util/bash-completion.d
|
||||||
|
|
||||||
include $(top_srcdir)/conf/Makefile.common
|
include $(top_srcdir)/conf/Makefile.common
|
||||||
include $(top_srcdir)/conf/Makefile.extra-dist
|
include $(top_srcdir)/conf/Makefile.extra-dist
|
||||||
@@ -66,22 +70,22 @@ 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: 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) -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
|
CLEANFILES += build-grub-mkfont$(BUILD_EXEEXT)
|
||||||
|
|
||||||
garbage-gen: util/garbage-gen.c
|
garbage-gen$(BUILD_EXEEXT): util/garbage-gen.c
|
||||||
$(BUILD_CC) -o $@ $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $^
|
$(BUILD_CC) -o $@ $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $^
|
||||||
CLEANFILES += garbage-gen
|
CLEANFILES += garbage-gen$(BUILD_EXEEXT)
|
||||||
EXTRA_DIST += util/garbage-gen.c
|
EXTRA_DIST += util/garbage-gen.c
|
||||||
|
|
||||||
build-grub-gen-asciih: 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) -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
|
CLEANFILES += build-grub-gen-asciih$(BUILD_EXEEXT)
|
||||||
|
|
||||||
build-grub-gen-widthspec: 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) -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
|
CLEANFILES += build-grub-gen-widthspec$(BUILD_EXEEXT)
|
||||||
|
|
||||||
if COND_STARFIELD
|
if COND_STARFIELD
|
||||||
starfield_DATA = dejavu_10.pf2 dejavu_12.pf2 dejavu_bold_14.pf2 dejavu_14.pf2 dejavu_16.pf2 $(starfield_theme_files)
|
starfield_DATA = dejavu_10.pf2 dejavu_12.pf2 dejavu_bold_14.pf2 dejavu_14.pf2 dejavu_16.pf2 $(starfield_theme_files)
|
||||||
@@ -127,11 +131,13 @@ widthspec.h: $(FONT_SOURCE) build-grub-gen-widthspec
|
|||||||
CLEANFILES += widthspec.h
|
CLEANFILES += widthspec.h
|
||||||
|
|
||||||
# Install config.h into platformdir
|
# Install config.h into platformdir
|
||||||
platform_HEADERS = config.h
|
nodist_platform_HEADERS = config.h
|
||||||
|
|
||||||
pkgdata_DATA += grub-mkconfig_lib
|
pkgdata_DATA += grub-mkconfig_lib
|
||||||
|
|
||||||
|
|
||||||
|
if COND_real_platform
|
||||||
|
|
||||||
if COND_i386_coreboot
|
if COND_i386_coreboot
|
||||||
QEMU32=qemu-system-i386
|
QEMU32=qemu-system-i386
|
||||||
endif
|
endif
|
||||||
@@ -383,12 +389,10 @@ if COND_powerpc_ieee1275
|
|||||||
BOOTCHECKS = bootcheck-linux-ppc
|
BOOTCHECKS = bootcheck-linux-ppc
|
||||||
endif
|
endif
|
||||||
|
|
||||||
EXTRA_DIST += grub-core/tests/boot/kbsd.init-i386.S grub-core/tests/boot/kbsd.init-x86_64.S grub-core/tests/boot/kbsd.spec.txt grub-core/tests/boot/kernel-8086.S grub-core/tests/boot/kernel-i386.S grub-core/tests/boot/kfreebsd-aout.cfg grub-core/tests/boot/kfreebsd.cfg grub-core/tests/boot/kfreebsd.init-i386.S grub-core/tests/boot/kfreebsd.init-x86_64.S grub-core/tests/boot/knetbsd.cfg grub-core/tests/boot/kopenbsd.cfg grub-core/tests/boot/kopenbsdlabel.txt grub-core/tests/boot/linux16.cfg grub-core/tests/boot/linux.cfg grub-core/tests/boot/linux.init-i386.S grub-core/tests/boot/linux.init-mips.S grub-core/tests/boot/linux.init-ppc.S grub-core/tests/boot/linux.init-x86_64.S grub-core/tests/boot/linux-ppc.cfg grub-core/tests/boot/multiboot2.cfg grub-core/tests/boot/multiboot.cfg grub-core/tests/boot/ntldr.cfg grub-core/tests/boot/pc-chainloader.cfg grub-core/tests/boot/qemu-shutdown-x86.S
|
|
||||||
|
|
||||||
.PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \
|
.PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \
|
||||||
bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \
|
bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \
|
||||||
bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 \
|
bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 \
|
||||||
bootcheck-linux-mips
|
bootcheck-linux-mips FORCE
|
||||||
|
|
||||||
# Randomly generated
|
# Randomly generated
|
||||||
SUCCESSFUL_BOOT_STRING=3e49994fd5d82b7c9298d672d774080d
|
SUCCESSFUL_BOOT_STRING=3e49994fd5d82b7c9298d672d774080d
|
||||||
@@ -399,9 +403,13 @@ bootcheck: $(BOOTCHECKS)
|
|||||||
|
|
||||||
if COND_i386_coreboot
|
if COND_i386_coreboot
|
||||||
default_payload.elf: grub-mkstandalone grub-mkimage
|
default_payload.elf: grub-mkstandalone grub-mkimage
|
||||||
pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos xfs 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' --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 xfs 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' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
endif
|
||||||
|
|
||||||
|
EXTRA_DIST += grub-core/tests/boot/kbsd.init-i386.S grub-core/tests/boot/kbsd.init-x86_64.S grub-core/tests/boot/kbsd.spec.txt grub-core/tests/boot/kernel-8086.S grub-core/tests/boot/kernel-i386.S grub-core/tests/boot/kfreebsd-aout.cfg grub-core/tests/boot/kfreebsd.cfg grub-core/tests/boot/kfreebsd.init-i386.S grub-core/tests/boot/kfreebsd.init-x86_64.S grub-core/tests/boot/knetbsd.cfg grub-core/tests/boot/kopenbsd.cfg grub-core/tests/boot/kopenbsdlabel.txt grub-core/tests/boot/linux16.cfg grub-core/tests/boot/linux.cfg grub-core/tests/boot/linux.init-i386.S grub-core/tests/boot/linux.init-mips.S grub-core/tests/boot/linux.init-ppc.S grub-core/tests/boot/linux.init-x86_64.S grub-core/tests/boot/linux-ppc.cfg grub-core/tests/boot/multiboot2.cfg grub-core/tests/boot/multiboot.cfg grub-core/tests/boot/ntldr.cfg grub-core/tests/boot/pc-chainloader.cfg grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
|
|
||||||
windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows
|
windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows
|
||||||
windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA)
|
windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA)
|
||||||
test -d $(windowsdir) && rm -rf $(windowsdir) || true
|
test -d $(windowsdir) && rm -rf $(windowsdir) || true
|
||||||
@@ -420,10 +428,33 @@ windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA)
|
|||||||
for x in $(starfield_DATA); do \
|
for x in $(starfield_DATA); do \
|
||||||
cp -fp $$x $(windowsdir)/themes/starfield/$$(basename $$x); \
|
cp -fp $$x $(windowsdir)/themes/starfield/$$(basename $$x); \
|
||||||
done
|
done
|
||||||
|
for x in $(GRUB_WINDOWS_EXTRA_DIST); do \
|
||||||
|
cp -fp $$x $(windowsdir); \
|
||||||
|
done
|
||||||
|
|
||||||
windowszip=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows.zip
|
windowszip=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows.zip
|
||||||
windowszip: windowsdir
|
windowszip: windowsdir
|
||||||
test -f $(windowszip) && rm $(windowszip) || true
|
test -f $(windowszip) && rm $(windowszip) || true
|
||||||
zip -r $(windowszip) $(windowsdir)
|
zip -r $(windowszip) $(windowsdir)
|
||||||
|
rm -rf $(windowsdir)
|
||||||
|
|
||||||
EXTRA_DIST += linguas.sh
|
EXTRA_DIST += linguas.sh
|
||||||
|
|
||||||
|
changelog_start_date = 2015-01-23
|
||||||
|
gitlog_to_changelog = $(top_srcdir)/build-aux/gitlog-to-changelog
|
||||||
|
|
||||||
|
ChangeLog: FORCE
|
||||||
|
if test -d $(top_srcdir)/.git; then \
|
||||||
|
$(gitlog_to_changelog) --srcdir=$(top_srcdir) --since=$(changelog_start_date) > '$@.tmp'; \
|
||||||
|
rm -f '$@'; mv '$@.tmp' '$@'; \
|
||||||
|
else \
|
||||||
|
touch $@; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
EXTRA_DIST += ChangeLog ChangeLog-2015
|
||||||
|
|
||||||
|
syslinux_test: $(top_builddir)/config.status tests/syslinux/ubuntu10.04_grub.cfg
|
||||||
|
|
||||||
|
tests/syslinux/ubuntu10.04_grub.cfg: $(top_builddir)/config.status tests/syslinux/ubuntu10.04_grub.cfg.in
|
||||||
|
(for x in tests/syslinux/ubuntu10.04_grub.cfg.in ; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:-
|
||||||
|
CLEANFILES += tests/syslinux/ubuntu10.04_grub.cfg
|
||||||
+28
-3
@@ -384,7 +384,7 @@ program = {
|
|||||||
ldadd = libgrubgcry.a;
|
ldadd = libgrubgcry.a;
|
||||||
ldadd = libgrubkern.a;
|
ldadd = libgrubkern.a;
|
||||||
ldadd = grub-core/gnulib/libgnu.a;
|
ldadd = grub-core/gnulib/libgnu.a;
|
||||||
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
program = {
|
program = {
|
||||||
@@ -405,7 +405,7 @@ program = {
|
|||||||
program = {
|
program = {
|
||||||
name = grub-macbless;
|
name = grub-macbless;
|
||||||
installdir = sbin;
|
installdir = sbin;
|
||||||
mansection = 1;
|
mansection = 8;
|
||||||
common = util/grub-macbless.c;
|
common = util/grub-macbless.c;
|
||||||
common = grub-core/osdep/init.c;
|
common = grub-core/osdep/init.c;
|
||||||
common = grub-core/kern/emu/argp_common.c;
|
common = grub-core/kern/emu/argp_common.c;
|
||||||
@@ -439,42 +439,49 @@ script = {
|
|||||||
name = '10_hurd';
|
name = '10_hurd';
|
||||||
common = util/grub.d/10_hurd.in;
|
common = util/grub.d/10_hurd.in;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
|
condition = COND_HOST_HURD;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
name = '10_kfreebsd';
|
name = '10_kfreebsd';
|
||||||
common = util/grub.d/10_kfreebsd.in;
|
common = util/grub.d/10_kfreebsd.in;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
|
condition = COND_HOST_KFREEBSD;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
name = '10_illumos';
|
name = '10_illumos';
|
||||||
common = util/grub.d/10_illumos.in;
|
common = util/grub.d/10_illumos.in;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
|
condition = COND_HOST_ILLUMOS;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
name = '10_netbsd';
|
name = '10_netbsd';
|
||||||
common = util/grub.d/10_netbsd.in;
|
common = util/grub.d/10_netbsd.in;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
|
condition = COND_HOST_NETBSD;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
name = '10_linux';
|
name = '10_linux';
|
||||||
common = util/grub.d/10_linux.in;
|
common = util/grub.d/10_linux.in;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
|
condition = COND_HOST_LINUX;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
name = '10_xnu';
|
name = '10_xnu';
|
||||||
common = util/grub.d/10_xnu.in;
|
common = util/grub.d/10_xnu.in;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
|
condition = COND_HOST_XNU;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
name = '20_linux_xen';
|
name = '20_linux_xen';
|
||||||
common = util/grub.d/20_linux_xen.in;
|
common = util/grub.d/20_linux_xen.in;
|
||||||
installdir = grubconf;
|
installdir = grubconf;
|
||||||
|
condition = COND_HOST_LINUX;
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
@@ -701,7 +708,7 @@ script = {
|
|||||||
name = grub-fs-tester;
|
name = grub-fs-tester;
|
||||||
common = tests/util/grub-fs-tester.in;
|
common = tests/util/grub-fs-tester.in;
|
||||||
installdir = noinst;
|
installdir = noinst;
|
||||||
dependencies = garbage-gen;
|
dependencies = 'garbage-gen$(BUILD_EXEEXT)';
|
||||||
};
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
@@ -1143,6 +1150,24 @@ script = {
|
|||||||
common = tests/grub_cmd_tr.in;
|
common = tests/grub_cmd_tr.in;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = file_filter_test;
|
||||||
|
common = tests/file_filter_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = grub_cmd_test;
|
||||||
|
common = tests/grub_cmd_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = syslinux_test;
|
||||||
|
common = tests/syslinux_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
program = {
|
program = {
|
||||||
testcase;
|
testcase;
|
||||||
name = example_unit_test;
|
name = example_unit_test;
|
||||||
|
|||||||
@@ -1,3 +1,153 @@
|
|||||||
|
New in 2.02:
|
||||||
|
|
||||||
|
* New/improved filesystem and disk support:
|
||||||
|
* Big-endian UFS1.
|
||||||
|
* Experimental 64-bit ext2 support.
|
||||||
|
* Various fixes for non-512-byte sector devices.
|
||||||
|
* New `proc' filesystem framework, used by LUKS disks.
|
||||||
|
* Fix DM-RAID partition handling.
|
||||||
|
* New `nativedisk' command to switch from firmware to native disk drivers.
|
||||||
|
* Compressed HFS+.
|
||||||
|
* DragonFly BSD labels.
|
||||||
|
* CBFS (coreboot).
|
||||||
|
* Handle partitioned LVM properly.
|
||||||
|
* Use LVM UUIDs whenever possible.
|
||||||
|
* GPT PReP.
|
||||||
|
* New `progress' module that shows progress information while reading
|
||||||
|
files.
|
||||||
|
* ZFS features support.
|
||||||
|
* ZFS LZ4 support.
|
||||||
|
|
||||||
|
* New/improved terminal and video support:
|
||||||
|
* Monochrome text (matching `hercules' in GRUB Legacy).
|
||||||
|
* Morse code output using system speaker.
|
||||||
|
* `spkmodem' output (simple data protocol using system speaker).
|
||||||
|
* Handle Japanese special keys.
|
||||||
|
* coreboot framebuffer.
|
||||||
|
* Serial on ARC.
|
||||||
|
* Native vt100 handling for grub-emu, replacing the use of the curses
|
||||||
|
library.
|
||||||
|
* New gfxmenu options for terminal window positioning, theme background
|
||||||
|
image handling, and scrollbar padding, plus `item_pixmap_style' and
|
||||||
|
`highlight_overlay'.
|
||||||
|
* Support several more image types (paletted and greyscale).
|
||||||
|
|
||||||
|
* Boot protocol improvements:
|
||||||
|
* Support Apple FAT binaries on non-Apple platforms.
|
||||||
|
* Improve FreeDOS direct loading support compatibility.
|
||||||
|
* Enable `linux16' on all x86 platforms, not just BIOS.
|
||||||
|
* New TrueCrypt ISO loader.
|
||||||
|
* multiboot2 boot-services EFI specification.
|
||||||
|
* multiboot2 EFI memory map specification.
|
||||||
|
* multiboot2 full-file specfication.
|
||||||
|
|
||||||
|
* New/improved network support:
|
||||||
|
* New variables `net_default_*' containing properties of the default
|
||||||
|
interface.
|
||||||
|
* Autoload `http' and `tftp' modules if necessary.
|
||||||
|
* Improve TFTP robustness.
|
||||||
|
* Parse `nd' disk names in GRUB Legacy configuration files.
|
||||||
|
* Issue separate DNS queries for IPv4 and IPv6.
|
||||||
|
|
||||||
|
* Coreboot improvements:
|
||||||
|
* CBFS support both in on-disk images (loopback) and flash.
|
||||||
|
* Ability to launch another payload from flash or disk
|
||||||
|
* Coreboot framebuffer
|
||||||
|
* CBMEMC support (both logging and inspecting logs)
|
||||||
|
* Command for inspecting coreboot timestamps (`coreboot_boottime').
|
||||||
|
* Command for inspecting coreboot tables (`lscoreboot').
|
||||||
|
* New target default_payload.elf.
|
||||||
|
* Increased maximal core size.
|
||||||
|
|
||||||
|
* New/improved platform support:
|
||||||
|
* New `efifwsetup' and `lsefi' commands on EFI platforms.
|
||||||
|
* New `cmosdump' and `cmosset' commands on platforms with CMOS support.
|
||||||
|
* New command `pcidump' for PCI platforms.
|
||||||
|
* Improve opcode parsing in ACPI halt implementation.
|
||||||
|
* Use the TSC as a possible time source on i386-ieee1275.
|
||||||
|
* Merge PowerPC grub-mkrescue implementation with the common one.
|
||||||
|
* Support grub-mkrescue on i386-ieee1275, sparc64, bootinfo machines such
|
||||||
|
as pSeries, and mips-arc.
|
||||||
|
* Make grub-mkrescue better support Apple Intel Macs on CD.
|
||||||
|
* Enable GRUB Legacy configuration file parsing on EFI.
|
||||||
|
* Support halt for Loongson 2E.
|
||||||
|
* ARM U-Boot and EFI ports.
|
||||||
|
* Reorganise platform-dependent code in utilities to avoid #ifdef mess.
|
||||||
|
* AROS and Haiku support for userspace utilities.
|
||||||
|
* Xen PV port.
|
||||||
|
* Fix EFI stack alignment.
|
||||||
|
* ARM64 EFI port.
|
||||||
|
* On Linux, read partition start offsets from sysfs if possible.
|
||||||
|
* New grub-macbless utility, and better integration with Mac firmware in
|
||||||
|
grub-install.
|
||||||
|
* Support Yeeloong 3A.
|
||||||
|
* Add `cpuid --pae' option to detect Physical Address Extension on x86.
|
||||||
|
* Support for USB debug dongles.
|
||||||
|
* Support for *-emu on all platforms (previously only i386/x86_64 worked).
|
||||||
|
* Support *-emu on Windows.
|
||||||
|
* New platform `none' which builds only user level utilities. This is now
|
||||||
|
default if target CPU is not supported.
|
||||||
|
|
||||||
|
* Security:
|
||||||
|
* Add optional facility to enforce that all files read by the core image
|
||||||
|
from disk have a valid detached digital signature.
|
||||||
|
|
||||||
|
* Performance:
|
||||||
|
* Avoid costly division operations in many places.
|
||||||
|
* New boot time analysis framework (`./configure --enable-boot-time').
|
||||||
|
* Initialise USB ports in parallel.
|
||||||
|
* New `testspeed' command to test file read speed.
|
||||||
|
* Speed-up gfxterm by storing intermediate results in more compact format.
|
||||||
|
* Lazy LVM/mdraid scan.
|
||||||
|
* Disk hints.
|
||||||
|
|
||||||
|
* Scripting:
|
||||||
|
* New `eval' and `tr' commands.
|
||||||
|
* grub-script-check fails on scripts containing no commands.
|
||||||
|
|
||||||
|
* Installation and other utility improvements:
|
||||||
|
* Add option to compress files on installation or image creation.
|
||||||
|
* Using grub-reboot no longer requires setting `GRUB_DEFAULT=saved'.
|
||||||
|
* Support probing EFI System Partition (requires os-prober >= 1.58).
|
||||||
|
* Fix inconsistent use of `GRUB_CRYPTODISK_ENABLE' and
|
||||||
|
`GRUB_ENABLE_CRYPTODISK'; the latter is now used consistently.
|
||||||
|
* grub-mount handles symbolic links to directories.
|
||||||
|
* Support disabling submenus with `GRUB_DISABLE_SUBMENU' configuration key
|
||||||
|
for grub-mkconfig.
|
||||||
|
* grub-install, grub-mknetdir, grub-mkrescue, and grub-mkstandalone
|
||||||
|
rewritten in C. They should now work in supported non-Unix-like
|
||||||
|
environments.
|
||||||
|
* Native mingw support.
|
||||||
|
* Ability to install on EFI under windows.
|
||||||
|
* Reorganise timeout handling using new `timeout_style' environment
|
||||||
|
variable and `GRUB_TIMEOUT_STYLE' configuration key for grub-mkconfig.
|
||||||
|
Menu hotkeys pressed during a hidden timeout now boot the corresponding
|
||||||
|
menu entry immediately.
|
||||||
|
* New `file' command and grub-file utility to check file types.
|
||||||
|
* New syslinux configuration file parser.
|
||||||
|
|
||||||
|
* Build system:
|
||||||
|
* Remove all uses of nested functions; GRUB no longer requires an
|
||||||
|
executable stack.
|
||||||
|
* Fix documentation build with Texinfo >= 5.1.
|
||||||
|
* More robust and documented cross-compiling support.
|
||||||
|
* Partial clang support for some platforms (experimental).
|
||||||
|
* Partial mingw64 x86_64-efi compile support (highly experimental).
|
||||||
|
* Partial mingw32 i386-* (other than already present i386-pc)
|
||||||
|
compile support (highly experimental).
|
||||||
|
* Support for grub-mkpasswd on Windows.
|
||||||
|
* Eliminate the use of AutoGen. This allowed some performance
|
||||||
|
improvements to the build system.
|
||||||
|
* Remove variable length arrays.
|
||||||
|
* OpenBSD compile and tools support (NetBSD and FreeBSD were already supported).
|
||||||
|
* Fix build with FreeType >= 2.5.1.
|
||||||
|
* Make gentpl.py compatible with Python 3. It now requires at least
|
||||||
|
Python 2.6.
|
||||||
|
* modinfo.sh contains build information now.
|
||||||
|
* Added many new tests to improve robustness.
|
||||||
|
|
||||||
|
* Revision control moved to git.
|
||||||
|
|
||||||
New in 2.00:
|
New in 2.00:
|
||||||
|
|
||||||
* Appearance:
|
* Appearance:
|
||||||
@@ -24,7 +174,6 @@ New in 2.00:
|
|||||||
* IEEE1275 serial.
|
* IEEE1275 serial.
|
||||||
* EFI serial.
|
* EFI serial.
|
||||||
* Network stack for BIOS, IEEE1275, EMU and EFI, including TFTP, HTTP and DNS.
|
* Network stack for BIOS, IEEE1275, EMU and EFI, including TFTP, HTTP and DNS.
|
||||||
* VBE on coreboot support.
|
|
||||||
|
|
||||||
* New filesystem, filters and disks formats:
|
* New filesystem, filters and disks formats:
|
||||||
* DVH partition map.
|
* DVH partition map.
|
||||||
@@ -48,7 +197,7 @@ New in 2.00:
|
|||||||
* multidevice, mirrored and raidz(2,3) ZFS support.
|
* multidevice, mirrored and raidz(2,3) ZFS support.
|
||||||
* RAID LVM (internal RAIDing) support.
|
* RAID LVM (internal RAIDing) support.
|
||||||
* ZFS crypto support.
|
* ZFS crypto support.
|
||||||
* ZLE and GZIP on ZFS support.
|
* ZLE, LZ4 and GZIP on ZFS support.
|
||||||
* Support ZFS up to 33.
|
* Support ZFS up to 33.
|
||||||
* HFS string is now treated like mac-roman and not UTF-8
|
* HFS string is now treated like mac-roman and not UTF-8
|
||||||
* HFS mtime support.
|
* HFS mtime support.
|
||||||
|
|||||||
+3
-77
@@ -210,80 +210,6 @@ fi
|
|||||||
])
|
])
|
||||||
|
|
||||||
|
|
||||||
dnl Mass confusion!
|
|
||||||
dnl Older versions of GAS interpret `.code16' to mean ``generate 32-bit
|
|
||||||
dnl instructions, but implicitly insert addr32 and data32 bytes so
|
|
||||||
dnl that the code works in real mode''.
|
|
||||||
dnl
|
|
||||||
dnl Newer versions of GAS interpret `.code16' to mean ``generate 16-bit
|
|
||||||
dnl instructions,'' which seems right. This requires the programmer
|
|
||||||
dnl to explicitly insert addr32 and data32 instructions when they want
|
|
||||||
dnl them.
|
|
||||||
dnl
|
|
||||||
dnl We only support the newer versions, because the old versions cause
|
|
||||||
dnl major pain, by requiring manual assembly to get 16-bit instructions into
|
|
||||||
dnl asm files.
|
|
||||||
AC_DEFUN([grub_I386_ASM_ADDR32],
|
|
||||||
[AC_REQUIRE([AC_PROG_CC])
|
|
||||||
AC_REQUIRE([grub_I386_ASM_PREFIX_REQUIREMENT])
|
|
||||||
AC_MSG_CHECKING([for .code16 addr32 assembler support])
|
|
||||||
AC_CACHE_VAL(grub_cv_i386_asm_addr32,
|
|
||||||
[cat > conftest.s.in <<\EOF
|
|
||||||
.code16
|
|
||||||
l1: @ADDR32@ movb %al, l1
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if test "x$grub_cv_i386_asm_prefix_requirement" = xyes; then
|
|
||||||
sed -e s/@ADDR32@/addr32/ < conftest.s.in > conftest.s
|
|
||||||
else
|
|
||||||
sed -e s/@ADDR32@/addr32\;/ < conftest.s.in > conftest.s
|
|
||||||
fi
|
|
||||||
|
|
||||||
if AC_TRY_COMMAND([${CC-cc} ${TARGET_CCASFLAGS} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then
|
|
||||||
grub_cv_i386_asm_addr32=yes
|
|
||||||
else
|
|
||||||
grub_cv_i386_asm_addr32=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -f conftest*])
|
|
||||||
|
|
||||||
AC_MSG_RESULT([$grub_cv_i386_asm_addr32])])
|
|
||||||
|
|
||||||
dnl Later versions of GAS requires that addr32 and data32 prefixes
|
|
||||||
dnl appear in the same lines as the instructions they modify, while
|
|
||||||
dnl earlier versions requires that they appear in separate lines.
|
|
||||||
AC_DEFUN([grub_I386_ASM_PREFIX_REQUIREMENT],
|
|
||||||
[AC_REQUIRE([AC_PROG_CC])
|
|
||||||
AC_MSG_CHECKING(dnl
|
|
||||||
[whether addr32 must be in the same line as the instruction])
|
|
||||||
AC_CACHE_VAL(grub_cv_i386_asm_prefix_requirement,
|
|
||||||
[cat > conftest.s <<\EOF
|
|
||||||
.code16
|
|
||||||
l1: addr32 movb %al, l1
|
|
||||||
EOF
|
|
||||||
|
|
||||||
if AC_TRY_COMMAND([${CC-cc} ${TARGET_CCASFLAGS} ${CFLAGS} -c conftest.s]) && test -s conftest.o; then
|
|
||||||
grub_cv_i386_asm_prefix_requirement=yes
|
|
||||||
else
|
|
||||||
grub_cv_i386_asm_prefix_requirement=no
|
|
||||||
fi
|
|
||||||
|
|
||||||
rm -f conftest*])
|
|
||||||
|
|
||||||
if test "x$grub_cv_i386_asm_prefix_requirement" = xyes; then
|
|
||||||
grub_tmp_addr32="addr32"
|
|
||||||
grub_tmp_data32="data32"
|
|
||||||
else
|
|
||||||
grub_tmp_addr32="addr32;"
|
|
||||||
grub_tmp_data32="data32;"
|
|
||||||
fi
|
|
||||||
|
|
||||||
ADDR32=$grub_tmp_addr32
|
|
||||||
DATA32=$grub_tmp_data32
|
|
||||||
|
|
||||||
AC_MSG_RESULT([$grub_cv_i386_asm_prefix_requirement])])
|
|
||||||
|
|
||||||
|
|
||||||
dnl Check what symbol is defined as a bss start symbol.
|
dnl Check what symbol is defined as a bss start symbol.
|
||||||
dnl Written by Michael Hohmoth and Yoshinori K. Okuji.
|
dnl Written by Michael Hohmoth and Yoshinori K. Okuji.
|
||||||
AC_DEFUN([grub_CHECK_BSS_START_SYMBOL],
|
AC_DEFUN([grub_CHECK_BSS_START_SYMBOL],
|
||||||
@@ -418,15 +344,15 @@ else
|
|||||||
[fi]
|
[fi]
|
||||||
])
|
])
|
||||||
|
|
||||||
dnl Check if ln can handle directories properly (mingw).
|
dnl Check if ln -s can handle directories properly (mingw).
|
||||||
AC_DEFUN([grub_CHECK_LINK_DIR],[
|
AC_DEFUN([grub_CHECK_LINK_DIR],[
|
||||||
AC_MSG_CHECKING([whether ln can handle directories properly])
|
AC_MSG_CHECKING([whether ln -s can handle directories properly])
|
||||||
[mkdir testdir 2>/dev/null
|
[mkdir testdir 2>/dev/null
|
||||||
case $srcdir in
|
case $srcdir in
|
||||||
[\\/$]* | ?:[\\/]* ) reldir=$srcdir/include/grub/util ;;
|
[\\/$]* | ?:[\\/]* ) reldir=$srcdir/include/grub/util ;;
|
||||||
*) reldir=../$srcdir/include/grub/util ;;
|
*) reldir=../$srcdir/include/grub/util ;;
|
||||||
esac
|
esac
|
||||||
if ln -s $reldir testdir/util 2>/dev/null ; then]
|
if ln -s $reldir testdir/util 2>/dev/null && rm -f testdir/util 2>/dev/null ; then]
|
||||||
AC_MSG_RESULT([yes])
|
AC_MSG_RESULT([yes])
|
||||||
[link_dir=yes
|
[link_dir=yes
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -0,0 +1,20 @@
|
|||||||
|
/* on arm clang doesn't support .arch directive */
|
||||||
|
|
||||||
|
.text
|
||||||
|
.syntax unified
|
||||||
|
|
||||||
|
#if !defined (__thumb2__)
|
||||||
|
.arch armv7a
|
||||||
|
.arm
|
||||||
|
#else
|
||||||
|
.arch armv7
|
||||||
|
.thumb
|
||||||
|
#endif
|
||||||
|
mcr p15, 0, r11, c7, c14, 2
|
||||||
|
|
||||||
|
/* clang restricts access to dsb/isb despite .arch */
|
||||||
|
dsb
|
||||||
|
isb
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
/* on x86 old clang doesn't support .code16
|
||||||
|
newer clang supports it but creates 6-byte jumps instead of 3-byte ones
|
||||||
|
which makes us go over boot sector size. */
|
||||||
|
|
||||||
|
.code16
|
||||||
|
jmp far
|
||||||
|
.org 4
|
||||||
|
.space 300
|
||||||
|
far:
|
||||||
|
.byte 0
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
/* on x86 old clang doesn't support .code16 */
|
||||||
|
|
||||||
|
.code16
|
||||||
|
movb %al, %bl
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
/* on mips clang doesn't support privilegied instructions, doubleword store/load
|
||||||
|
and crashes with hand-written assembly
|
||||||
|
*/
|
||||||
|
|
||||||
|
.set mips3
|
||||||
|
sync
|
||||||
|
ld $t2, 0($t6)
|
||||||
|
|
||||||
|
a:
|
||||||
|
addiu $t7, $s0, (b - a)
|
||||||
|
b: nop
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
/* clang <= 3.3 doesn't handle most of ppc assembly, not even inline assembly
|
||||||
|
used by gcrypt */
|
||||||
|
/* Cache invalidation loop is a fair test. */
|
||||||
|
li 5, 0
|
||||||
|
1: icbi 5, 3
|
||||||
|
addi 5, 5, 32
|
||||||
|
cmpw 5, 4
|
||||||
|
blt 1b
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
.text
|
||||||
|
1:
|
||||||
|
/* A small list of examples of what clang doesn't support. */
|
||||||
|
clr %o0
|
||||||
|
lduw [%o4 + 4], %o4
|
||||||
|
and %o6, ~0xff, %o6
|
||||||
|
stw %o5, [%o3]
|
||||||
|
bne,pt %icc, 1b
|
||||||
|
nop
|
||||||
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:
|
||||||
+8
-14
@@ -7,12 +7,7 @@ unexport LC_ALL
|
|||||||
|
|
||||||
# Platform specific options
|
# Platform specific options
|
||||||
if COND_sparc64_ieee1275
|
if COND_sparc64_ieee1275
|
||||||
CFLAGS_PLATFORM += -mno-app-regs
|
LDFLAGS_PLATFORM = -Wl,-melf64_sparc
|
||||||
LDFLAGS_PLATFORM = -Wl,-melf64_sparc -Wl,--no-relax
|
|
||||||
endif
|
|
||||||
if COND_sparc64_emu
|
|
||||||
CFLAGS_PLATFORM += -mno-app-regs
|
|
||||||
LDFLAGS_PLATFORM = -Wl,--no-relax
|
|
||||||
endif
|
endif
|
||||||
if COND_arm
|
if COND_arm
|
||||||
if !COND_emu
|
if !COND_emu
|
||||||
@@ -35,26 +30,25 @@ CPPFLAGS_DEFAULT += -I$(top_builddir)
|
|||||||
CPPFLAGS_DEFAULT += -I$(top_srcdir)
|
CPPFLAGS_DEFAULT += -I$(top_srcdir)
|
||||||
CPPFLAGS_DEFAULT += -I$(top_srcdir)/include
|
CPPFLAGS_DEFAULT += -I$(top_srcdir)/include
|
||||||
CPPFLAGS_DEFAULT += -I$(top_builddir)/include
|
CPPFLAGS_DEFAULT += -I$(top_builddir)/include
|
||||||
CPPFLAGS_DEFAULT += -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/include
|
|
||||||
CPPFLAGS_DEFAULT += -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/src/
|
CPPFLAGS_DEFAULT += -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/src/
|
||||||
CCASFLAGS_DEFAULT = $(CPPFLAGS_DEFAULT) -DASM_FILE=1
|
CCASFLAGS_DEFAULT = $(CPPFLAGS_DEFAULT) -DASM_FILE=1
|
||||||
BUILD_CPPFLAGS += $(CPPFLAGS_DEFAULT)
|
BUILD_CPPFLAGS += $(CPPFLAGS_DEFAULT)
|
||||||
|
|
||||||
LDADD_KERNEL = $(TARGET_LIBGCC)
|
LDADD_KERNEL = $(TARGET_LIBGCC)
|
||||||
|
|
||||||
CFLAGS_KERNEL = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding
|
CFLAGS_KERNEL = $(CFLAGS_PLATFORM) -ffreestanding
|
||||||
LDFLAGS_KERNEL = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) $(TARGET_LDFLAGS_STATIC_LIBGCC)
|
LDFLAGS_KERNEL = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) $(TARGET_LDFLAGS_STATIC_LIBGCC)
|
||||||
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
|
STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version -R .MIPS.abiflags
|
||||||
|
|
||||||
CFLAGS_MODULE = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding
|
CFLAGS_MODULE = $(CFLAGS_PLATFORM) -ffreestanding
|
||||||
LDFLAGS_MODULE = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r,-d
|
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)
|
||||||
|
|
||||||
CFLAGS_IMAGE = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -fno-builtin
|
CFLAGS_IMAGE = $(CFLAGS_PLATFORM) -fno-builtin
|
||||||
LDFLAGS_IMAGE = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-S
|
LDFLAGS_IMAGE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-S
|
||||||
CPPFLAGS_IMAGE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM)
|
CPPFLAGS_IMAGE = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM)
|
||||||
CCASFLAGS_IMAGE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
CCASFLAGS_IMAGE = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
||||||
|
|
||||||
|
|||||||
@@ -110,3 +110,26 @@ 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
|
||||||
|
|
||||||
EXTRA_DIST += coreboot.cfg
|
EXTRA_DIST += coreboot.cfg
|
||||||
|
|
||||||
|
EXTRA_DIST += tests/file_filter/file
|
||||||
|
EXTRA_DIST += tests/file_filter/file.gz
|
||||||
|
EXTRA_DIST += tests/file_filter/file.gz.sig
|
||||||
|
EXTRA_DIST += tests/file_filter/file.lzop
|
||||||
|
EXTRA_DIST += tests/file_filter/file.lzop.sig
|
||||||
|
EXTRA_DIST += tests/file_filter/file.xz
|
||||||
|
EXTRA_DIST += tests/file_filter/file.xz.sig
|
||||||
|
EXTRA_DIST += tests/file_filter/keys
|
||||||
|
EXTRA_DIST += tests/file_filter/keys.pub
|
||||||
|
EXTRA_DIST += tests/file_filter/test.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/prompt.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/gfxboot.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/adtxt.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/isolinux.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/exithelp.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/txt.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/menu.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/stdmenu.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/dtmenu.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/po4a.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04/isolinux/rqtxt.cfg
|
||||||
|
EXTRA_DIST += tests/syslinux/ubuntu10.04_grub.cfg.in
|
||||||
+8
-10
@@ -12,6 +12,14 @@
|
|||||||
#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@
|
||||||
|
|
||||||
|
/* We don't need those. */
|
||||||
|
#define MINILZO_CFG_SKIP_LZO_PTR 1
|
||||||
|
#define MINILZO_CFG_SKIP_LZO_UTIL 1
|
||||||
|
#define MINILZO_CFG_SKIP_LZO_STRING 1
|
||||||
|
#define MINILZO_CFG_SKIP_LZO_INIT 1
|
||||||
|
#define MINILZO_CFG_SKIP_LZO1X_1_COMPRESS 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@
|
||||||
@@ -31,10 +39,6 @@
|
|||||||
#define HAVE_FONT_SOURCE @HAVE_FONT_SOURCE@
|
#define HAVE_FONT_SOURCE @HAVE_FONT_SOURCE@
|
||||||
/* Define if C symbols get an underscore after compilation. */
|
/* Define if C symbols get an underscore after compilation. */
|
||||||
#define HAVE_ASM_USCORE @HAVE_ASM_USCORE@
|
#define HAVE_ASM_USCORE @HAVE_ASM_USCORE@
|
||||||
/* Define it to \"addr32\" or \"addr32;\" to make GAS happy. */
|
|
||||||
#define ADDR32 @ADDR32@
|
|
||||||
/* Define it to \"data32\" or \"data32;\" to make GAS happy. */
|
|
||||||
#define DATA32 @DATA32@
|
|
||||||
/* Define it to one of __bss_start, edata and _edata. */
|
/* Define it to one of __bss_start, edata and _edata. */
|
||||||
#define BSS_START_SYMBOL @BSS_START_SYMBOL@
|
#define BSS_START_SYMBOL @BSS_START_SYMBOL@
|
||||||
/* Define it to either end or _end. */
|
/* Define it to either end or _end. */
|
||||||
@@ -51,12 +55,6 @@
|
|||||||
#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@"
|
||||||
/* Default boot directory name" */
|
|
||||||
#define GRUB_BOOT_DIR_NAME "@bootdirname@"
|
|
||||||
/* Default grub directory name */
|
|
||||||
#define GRUB_DIR_NAME "@grubdirname@"
|
|
||||||
/* Define to 1 if GCC generates calls to __register_frame_info(). */
|
|
||||||
#define NEED_REGISTER_FRAME_INFO @NEED_REGISTER_FRAME_INFO@
|
|
||||||
|
|
||||||
#define GRUB_TARGET_CPU "@GRUB_TARGET_CPU@"
|
#define GRUB_TARGET_CPU "@GRUB_TARGET_CPU@"
|
||||||
#define GRUB_PLATFORM "@GRUB_PLATFORM@"
|
#define GRUB_PLATFORM "@GRUB_PLATFORM@"
|
||||||
|
|||||||
+275
-99
@@ -26,20 +26,20 @@ dnl This is necessary because the target type in autoconf does not
|
|||||||
dnl describe such a system very well.
|
dnl describe such a system very well.
|
||||||
dnl
|
dnl
|
||||||
dnl The current strategy is to use variables with no prefix (such as
|
dnl The current strategy is to use variables with no prefix (such as
|
||||||
dnl CC, CFLAGS, etc.) for the host type as well as the build type,
|
dnl CC, CFLAGS, etc.) for the host type, variables with prefix "BUILD_"
|
||||||
dnl because GRUB does not need to use those variables for the build
|
dnl (such as BUILD_CC, BUILD_CFLAGS, etc.) for the build type and variables
|
||||||
dnl type, so there is no conflict. Variables with the prefix "TARGET_"
|
dnl with the prefix "TARGET_" (such as TARGET_CC, TARGET_CFLAGS, etc.) are
|
||||||
dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target
|
dnl used for the target type. See INSTALL for full list of variables.
|
||||||
dnl type.
|
|
||||||
|
|
||||||
AC_INIT([GRUB],[2.02~beta1],[bug-grub@gnu.org])
|
AC_INIT([GRUB],[2.02~beta2],[bug-grub@gnu.org])
|
||||||
|
|
||||||
AC_CONFIG_AUX_DIR([build-aux])
|
AC_CONFIG_AUX_DIR([build-aux])
|
||||||
|
|
||||||
# We don't want -g -O2 by default in CFLAGS
|
# We don't want -g -O2 by default in CFLAGS
|
||||||
: ${CFLAGS=""}
|
: ${CFLAGS=""}
|
||||||
|
|
||||||
# Checks for host and target systems.
|
# Checks for build, host and target systems.
|
||||||
|
AC_CANONICAL_BUILD
|
||||||
AC_CANONICAL_HOST
|
AC_CANONICAL_HOST
|
||||||
save_program_prefix="${program_prefix}"
|
save_program_prefix="${program_prefix}"
|
||||||
AC_CANONICAL_TARGET
|
AC_CANONICAL_TARGET
|
||||||
@@ -78,30 +78,27 @@ fi
|
|||||||
|
|
||||||
# Default HOST_CPPFLAGS
|
# Default HOST_CPPFLAGS
|
||||||
HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W"
|
HOST_CPPFLAGS="$HOST_CPPFLAGS -Wall -W"
|
||||||
HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include"
|
|
||||||
HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1"
|
HOST_CPPFLAGS="$HOST_CPPFLAGS -DGRUB_UTIL=1"
|
||||||
|
|
||||||
TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W"
|
TARGET_CPPFLAGS="$TARGET_CPPFLAGS -Wall -W"
|
||||||
TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include"
|
|
||||||
TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include"
|
|
||||||
|
|
||||||
case "$target_cpu" in
|
case "$target_cpu" in
|
||||||
i[[3456]]86) target_cpu=i386 ;;
|
i[[3456]]86) target_cpu=i386 ;;
|
||||||
amd64) target_cpu=x86_64 ;;
|
amd64) target_cpu=x86_64 ;;
|
||||||
sparc) target_cpu=sparc64 ;;
|
sparc) target_cpu=sparc64 ;;
|
||||||
mipsel|mips64el)
|
mipsel|mips64el)
|
||||||
target_cpu=mipsel;
|
target_cpu=mipsel
|
||||||
machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPSEL=1";
|
machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPSEL=1"
|
||||||
;;
|
;;
|
||||||
mips|mips64)
|
mips|mips64)
|
||||||
target_cpu=mips;
|
target_cpu=mips
|
||||||
machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPS=1";
|
machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPS=1"
|
||||||
;;
|
;;
|
||||||
arm*)
|
arm*)
|
||||||
target_cpu=arm;
|
target_cpu=arm
|
||||||
;;
|
;;
|
||||||
aarch64*)
|
aarch64*)
|
||||||
target_cpu=arm64;
|
target_cpu=arm64
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@@ -125,7 +122,10 @@ if test "x$with_platform" = x; then
|
|||||||
ia64-*) platform=efi ;;
|
ia64-*) platform=efi ;;
|
||||||
arm-*) platform=uboot ;;
|
arm-*) platform=uboot ;;
|
||||||
arm64-*) platform=efi ;;
|
arm64-*) platform=efi ;;
|
||||||
*) AC_MSG_ERROR([unsupported CPU: "$target_cpu"]) ;;
|
*)
|
||||||
|
AC_MSG_WARN([unsupported CPU: "$target_cpu" - only building utilities])
|
||||||
|
platform=none
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
else
|
else
|
||||||
platform="$with_platform"
|
platform="$with_platform"
|
||||||
@@ -135,6 +135,7 @@ case "$target_cpu"-"$platform" in
|
|||||||
x86_64-efi) ;;
|
x86_64-efi) ;;
|
||||||
x86_64-emu) ;;
|
x86_64-emu) ;;
|
||||||
x86_64-xen) ;;
|
x86_64-xen) ;;
|
||||||
|
x86_64-none) ;;
|
||||||
x86_64-*) target_cpu=i386 ;;
|
x86_64-*) target_cpu=i386 ;;
|
||||||
powerpc64-ieee1275) target_cpu=powerpc ;;
|
powerpc64-ieee1275) target_cpu=powerpc ;;
|
||||||
esac
|
esac
|
||||||
@@ -167,6 +168,7 @@ case "$target_cpu"-"$platform" in
|
|||||||
arm-efi) ;;
|
arm-efi) ;;
|
||||||
arm64-efi) ;;
|
arm64-efi) ;;
|
||||||
*-emu) ;;
|
*-emu) ;;
|
||||||
|
*-none) ;;
|
||||||
*) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
|
*) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
@@ -178,7 +180,7 @@ if test x$platform != xemu ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test x"$target_cpu-$platform" = xsparc64-emu ; then
|
if test x"$target_cpu-$platform" = xsparc64-emu ; then
|
||||||
target_m64=1 ;
|
target_m64=1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "$target_os" in
|
case "$target_os" in
|
||||||
@@ -214,20 +216,14 @@ case "$platform" in
|
|||||||
qemu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_QEMU=1" ;;
|
qemu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_QEMU=1" ;;
|
||||||
pc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_PCBIOS=1" ;;
|
pc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_PCBIOS=1" ;;
|
||||||
emu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EMU=1" ;;
|
emu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EMU=1" ;;
|
||||||
loongson) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_LOONGSON=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;;
|
loongson) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_LOONGSON=1" ;;
|
||||||
qemu_mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;;
|
qemu_mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_QEMU_MIPS=1" ;;
|
||||||
arc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARC=1" ;;
|
arc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARC=1" ;;
|
||||||
esac
|
esac
|
||||||
case "$target_cpu" in
|
|
||||||
arm) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARM=1" ;;
|
|
||||||
arm64) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARM64=1" ;;
|
|
||||||
mips |mipsel) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS=1" ;;
|
|
||||||
sparc64) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_SPARC64=1" ;;
|
|
||||||
esac
|
|
||||||
if test x${target_cpu} = xmipsel ; then
|
if test x${target_cpu} = xmipsel ; then
|
||||||
machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo mips_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
|
machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo mips_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
|
||||||
else
|
else
|
||||||
machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,` -DGRUB_TARGET_CPU_`echo ${target_cpu} | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`=1"
|
machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "${target_cpu}-$platform" in
|
case "${target_cpu}-$platform" in
|
||||||
@@ -355,6 +351,9 @@ if test x"$target_cpu-$platform" = xsparc64-emu ; then
|
|||||||
HOST_CFLAGS="$HOST_CFLAGS -m64"
|
HOST_CFLAGS="$HOST_CFLAGS -m64"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64"
|
||||||
|
HOST_CPPFLAGS="$HOST_CPPFLAGS -D_FILE_OFFSET_BITS=64"
|
||||||
|
|
||||||
AC_C_BIGENDIAN
|
AC_C_BIGENDIAN
|
||||||
AC_CHECK_SIZEOF(void *)
|
AC_CHECK_SIZEOF(void *)
|
||||||
AC_CHECK_SIZEOF(long)
|
AC_CHECK_SIZEOF(long)
|
||||||
@@ -367,6 +366,14 @@ case "$host_os" in
|
|||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
case "$host_os" in
|
||||||
|
cygwin | windows* | mingw32* | aros*)
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
AC_CHECK_SIZEOF(off_t)
|
||||||
|
test x"$ac_cv_sizeof_off_t" = x8 || AC_MSG_ERROR([Large file support is required]);;
|
||||||
|
esac
|
||||||
|
|
||||||
if test x$USE_NLS = xno; then
|
if test x$USE_NLS = xno; then
|
||||||
HOST_CFLAGS="$HOST_CFLAGS -fno-builtin-gettext"
|
HOST_CFLAGS="$HOST_CFLAGS -fno-builtin-gettext"
|
||||||
fi
|
fi
|
||||||
@@ -429,11 +436,21 @@ case "$build_os" in
|
|||||||
haiku*) BUILD_LIBM= ;;
|
haiku*) BUILD_LIBM= ;;
|
||||||
*) BUILD_LIBM=-lm ;;
|
*) BUILD_LIBM=-lm ;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
|
dnl FIXME proper test seems to require too deep dive into Autoconf internals.
|
||||||
|
dnl For now just list known platforms that we support.
|
||||||
|
|
||||||
|
case "$build_os" in
|
||||||
|
cygwin*|mingw32*|mingw64*) BUILD_EXEEXT=.exe ;;
|
||||||
|
*) BUILD_EXEEXT= ;;
|
||||||
|
esac
|
||||||
|
AC_SUBST(BUILD_EXEEXT)
|
||||||
|
|
||||||
# For gnulib.
|
# For gnulib.
|
||||||
gl_INIT
|
gl_INIT
|
||||||
|
|
||||||
WARN_FLAGS="-Wall -W -Wshadow -Wpointer-arith -Wundef -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wpointer-arith -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wundef -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes"
|
WARN_FLAGS="-Wall -W -Wshadow -Wpointer-arith -Wundef -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes"
|
||||||
EXTRA_WARN_FLAGS="-Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign"
|
EXTRA_WARN_FLAGS="-Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign -Wmissing-include-dirs -Wmissing-prototypes -Wmissing-declarations -Wformat=2"
|
||||||
|
|
||||||
HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align"
|
HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align"
|
||||||
|
|
||||||
@@ -483,6 +500,7 @@ AC_SUBST(HOST_CC)
|
|||||||
AC_SUBST(BUILD_CC)
|
AC_SUBST(BUILD_CC)
|
||||||
AC_SUBST(BUILD_CFLAGS)
|
AC_SUBST(BUILD_CFLAGS)
|
||||||
AC_SUBST(BUILD_CPPFLAGS)
|
AC_SUBST(BUILD_CPPFLAGS)
|
||||||
|
AC_SUBST(BUILD_LDFLAGS)
|
||||||
AC_SUBST(TARGET_CC)
|
AC_SUBST(TARGET_CC)
|
||||||
AC_SUBST(TARGET_NM)
|
AC_SUBST(TARGET_NM)
|
||||||
AC_SUBST(TARGET_RANLIB)
|
AC_SUBST(TARGET_RANLIB)
|
||||||
@@ -509,6 +527,8 @@ if test "x$target_cpu" != xi386 && test "x$target_cpu" != xx86_64; then
|
|||||||
TARGET_CFLAGS="$TARGET_CFLAGS -Wcast-align"
|
TARGET_CFLAGS="$TARGET_CFLAGS -Wcast-align"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
TARGET_CC_VERSION="$(LC_ALL=C $TARGET_CC --version | head -n1)"
|
||||||
|
|
||||||
AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
|
AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
|
||||||
LDFLAGS="$TARGET_LDFLAGS -nostdlib -static"
|
LDFLAGS="$TARGET_LDFLAGS -nostdlib -static"
|
||||||
|
|
||||||
@@ -529,7 +549,7 @@ int main (void);
|
|||||||
|
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_w_extra_flags"
|
TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_w_extra_flags"
|
||||||
|
|
||||||
AC_CACHE_CHECK([if compiling with clang], [grub_cv_cc_target_clang]
|
AC_CACHE_CHECK([if compiling with clang], [grub_cv_cc_target_clang],
|
||||||
[
|
[
|
||||||
CFLAGS="$TARGET_CFLAGS"
|
CFLAGS="$TARGET_CFLAGS"
|
||||||
AC_COMPILE_IFELSE(
|
AC_COMPILE_IFELSE(
|
||||||
@@ -540,35 +560,42 @@ AC_COMPILE_IFELSE(
|
|||||||
]])],
|
]])],
|
||||||
[grub_cv_cc_target_clang=no], [grub_cv_cc_target_clang=yes])])
|
[grub_cv_cc_target_clang=no], [grub_cv_cc_target_clang=yes])])
|
||||||
|
|
||||||
# on x86 clang doesn't support .code16
|
AC_CACHE_CHECK([for options to compile assembly], [grub_cv_cc_target_asm_compile], [
|
||||||
# on arm clang doesn't support .arch directive
|
test_program=
|
||||||
# on mips clang doesn't support privilegied instructions, doubleword store/load
|
case "x$target_cpu-$platform" in
|
||||||
# and crashes with hand-written assembly
|
xmips-* | xmipsel-*)
|
||||||
if test "x$grub_cv_cc_target_clang" = xyes && ( test "x$target_cpu" = xi386 \
|
test_program=mips
|
||||||
|| test "x$target_cpu" = xx86_64 || test "x$target_cpu" = xarm \
|
;;
|
||||||
|| test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ); then
|
xi386-pc)
|
||||||
TARGET_CCASFLAGS="$TARGET_CCASFLAGS -no-integrated-as"
|
test_program=i386-pc
|
||||||
|
;;
|
||||||
|
xi386-* | xx86_64-*)
|
||||||
|
test_program=i386
|
||||||
|
;;
|
||||||
|
xpowerpc-* | xsparc64-* | xarm-*)
|
||||||
|
test_program=$target_cpu
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
if test x"$test_program" = x ; then
|
||||||
|
grub_cv_cc_target_asm_compile=
|
||||||
|
else
|
||||||
|
found=no
|
||||||
|
for arg in "" "-no-integrated-as"; do
|
||||||
|
cmdline="$TARGET_CC -c -o /dev/null $TARGET_CCASFLAGS $arg $TARGET_CPPFLAGS $srcdir/asm-tests/$test_program.S"
|
||||||
|
echo "Running $cmdline" >&AS_MESSAGE_LOG_FD
|
||||||
|
if $cmdline >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
|
||||||
|
grub_cv_cc_target_asm_compile="$arg"
|
||||||
|
found=yes
|
||||||
|
break
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
if test x"$found" = xno ; then
|
||||||
|
AC_MSG_ERROR([could not compile assembly])
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
])
|
||||||
|
|
||||||
if test "x$grub_cv_cc_target_clang" = xyes && test "x$target_cpu" = xpowerpc; then
|
TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_cc_target_asm_compile"
|
||||||
AC_CACHE_CHECK([if clang can handle ame instruction], [grub_cv_cc_target_clang_ame]
|
|
||||||
[
|
|
||||||
CFLAGS="$TARGET_CFLAGS"
|
|
||||||
AC_COMPILE_IFELSE(
|
|
||||||
[AC_LANG_PROGRAM([], [[
|
|
||||||
unsigned int a = 0, b = 0;
|
|
||||||
asm volatile ("{ame|addme} %0,%1" : "=r" (a) : "r" (b));
|
|
||||||
if (a)
|
|
||||||
return 1;
|
|
||||||
]])],
|
|
||||||
[grub_cv_cc_target_clang_ame=yes], [grub_cv_cc_target_clang_ame=no])])
|
|
||||||
# clang <= 3.3 doesn't handle most of ppc assembly, not even inline assembly
|
|
||||||
# used by gcrypt
|
|
||||||
if test x$grub_cv_cc_target_clang_ame = xno ; then
|
|
||||||
TARGET_CCASFLAGS="$TARGET_CCASFLAGS -no-integrated-as"
|
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -no-integrated-as"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test "x$target_cpu" = xi386 && test "x$platform" != xemu; then
|
if test "x$target_cpu" = xi386 && test "x$platform" != xemu; then
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -march=i386"
|
TARGET_CFLAGS="$TARGET_CFLAGS -march=i386"
|
||||||
@@ -651,6 +678,109 @@ if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ) && test "x$p
|
|||||||
TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-3dnow"
|
TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-3dnow"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# GRUB doesn't use float or doubles at all. Yet some toolchains may decide
|
||||||
|
# that floats are a good fit to run instead of what's written in the code.
|
||||||
|
# Given that floating point unit is disabled (if present to begin with)
|
||||||
|
# when GRUB is running which may result in various hard crashes.
|
||||||
|
if test x"$platform" != xemu ; then
|
||||||
|
AC_CACHE_CHECK([for options to get soft-float], grub_cv_target_cc_soft_float, [
|
||||||
|
grub_cv_target_cc_soft_float=no
|
||||||
|
if test "x$target_cpu" = xarm64; then
|
||||||
|
CFLAGS="$TARGET_CFLAGS -march=armv8-a+nofp+nosimd -Werror"
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
|
[grub_cv_target_cc_soft_float="-march=armv8-a+nofp+nosimd"], [])
|
||||||
|
fi
|
||||||
|
if test "x$target_cpu" = xia64; then
|
||||||
|
CFLAGS="$TARGET_CFLAGS -mno-inline-float-divide -mno-inline-sqrt -Werror"
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
|
[grub_cv_target_cc_soft_float="-mno-inline-float-divide -mno-inline-sqrt"], [])
|
||||||
|
fi
|
||||||
|
for cand in "-msoft-float -Xclang -msoft-float -Xclang -no-implicit-float" \
|
||||||
|
"-Xclang -msoft-float -Xclang -no-implicit-float" \
|
||||||
|
"-Xclang -msoft-float" "-msoft-float"; do
|
||||||
|
if test x"$grub_cv_target_cc_soft_float" != xno ; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
CFLAGS="$TARGET_CFLAGS $cand -Werror"
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
|
[grub_cv_target_cc_soft_float="$cand"], [])
|
||||||
|
done
|
||||||
|
])
|
||||||
|
|
||||||
|
if test x"$grub_cv_target_cc_soft_float" = xno ; then
|
||||||
|
AC_MSG_ERROR([could not force soft-float])
|
||||||
|
fi
|
||||||
|
|
||||||
|
case x"$grub_cv_target_cc_soft_float" in
|
||||||
|
x*"-Xclang"*)
|
||||||
|
# A trick so that clang doesn't see it on link stаge
|
||||||
|
TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_soft_float"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_soft_float"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
case x"$grub_cv_target_cc_soft_float" in
|
||||||
|
x"-march=armv8-a+nofp+nosimd")
|
||||||
|
# +nosimd disables also the cache opcodes that we need in asm.
|
||||||
|
TARGET_CCASFLAGS="$TARGET_CCASFLAGS -march=armv8-a+nofp"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
TARGET_CCASFLAGS="$TARGET_CCASFLAGS $grub_cv_target_cc_soft_float"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
fi
|
||||||
|
|
||||||
|
if test x"$target_cpu" = xsparc64 ; then
|
||||||
|
AC_CACHE_CHECK([for options to reserve application registers], grub_cv_target_cc_mno_app_regs, [
|
||||||
|
grub_cv_target_cc_mno_app_regs=no
|
||||||
|
for cand in "-mllvm -sparc-reserve-app-registers" \
|
||||||
|
"-mno-app-regs"; do
|
||||||
|
if test x"$grub_cv_target_cc_mno_app_regs" != xno ; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
CFLAGS="$TARGET_CFLAGS $cand -Werror"
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
|
[grub_cv_target_cc_mno_app_regs="$cand"], [])
|
||||||
|
done
|
||||||
|
])
|
||||||
|
|
||||||
|
if test x"$grub_cv_target_cc_mno_app_regs" = xno ; then
|
||||||
|
AC_MSG_ERROR([could not reserve application registers])
|
||||||
|
fi
|
||||||
|
if test x"$grub_cv_target_cc_mno_app_regs" = x"-mllvm -sparc-reserve-app-registers" ; then
|
||||||
|
# A trick so that clang doesn't see it on link stаge
|
||||||
|
TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_app_regs"
|
||||||
|
else
|
||||||
|
TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_mno_app_regs"
|
||||||
|
fi
|
||||||
|
|
||||||
|
AC_CACHE_CHECK([for no-relax options], grub_cv_target_cc_mno_relax, [
|
||||||
|
grub_cv_target_cc_mno_relax=no
|
||||||
|
for cand in "-mno-relax" "-Wl,--no-relax"; do
|
||||||
|
if test x"$grub_cv_target_cc_mno_relax" != xno ; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
LDFLAGS="$TARGET_LDFLAGS $cand -nostdlib -static"
|
||||||
|
CFLAGS="$TARGET_CFLAGS -Werror"
|
||||||
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||||
|
asm (".globl start; start:");
|
||||||
|
void __main (void);
|
||||||
|
void __main (void) {}
|
||||||
|
int main (void);
|
||||||
|
]], [[]])], [grub_cv_target_cc_mno_relax="$cand"], [])
|
||||||
|
done
|
||||||
|
])
|
||||||
|
LDFLAGS="$TARGET_LDFLAGS"
|
||||||
|
CFLAGS="$TARGET_CFLAGS"
|
||||||
|
|
||||||
|
if test x"$grub_cv_target_cc_mno_relax" = xno ; then
|
||||||
|
AC_MSG_ERROR([could not find no-relax options])
|
||||||
|
fi
|
||||||
|
TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_mno_relax"
|
||||||
|
fi
|
||||||
|
|
||||||
# By default, GCC 4.4 generates .eh_frame sections containing unwind
|
# By default, GCC 4.4 generates .eh_frame sections containing unwind
|
||||||
# information in some cases where it previously did not. GRUB doesn't need
|
# information in some cases where it previously did not. GRUB doesn't need
|
||||||
# these and they just use up vital space. Restore the old compiler
|
# these and they just use up vital space. Restore the old compiler
|
||||||
@@ -735,7 +865,7 @@ if test x"$efiemu_excuse" = x ; then
|
|||||||
]], [[]])], [flag=1], [flag=0])
|
]], [[]])], [flag=1], [flag=0])
|
||||||
if test x"$flag" = x1; then
|
if test x"$flag" = x1; then
|
||||||
grub_cv_target_cc_efiemu64_link_format="$format"
|
grub_cv_target_cc_efiemu64_link_format="$format"
|
||||||
break;
|
break
|
||||||
fi
|
fi
|
||||||
done])
|
done])
|
||||||
if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then
|
if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then
|
||||||
@@ -745,7 +875,7 @@ if test x"$efiemu_excuse" = x ; then
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
|
if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
|
||||||
AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled])
|
AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled ($efiemu_excuse)])
|
||||||
fi
|
fi
|
||||||
if test x"$efiemu_excuse" = x ; then
|
if test x"$efiemu_excuse" = x ; then
|
||||||
enable_efiemu=yes
|
enable_efiemu=yes
|
||||||
@@ -757,14 +887,35 @@ AC_SUBST([EFIEMU64_LINK_FORMAT])
|
|||||||
|
|
||||||
CFLAGS="$TARGET_CFLAGS"
|
CFLAGS="$TARGET_CFLAGS"
|
||||||
|
|
||||||
if test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
|
|
||||||
|
if test x"$platform" = xemu ; then
|
||||||
|
TARGET_OBJ2ELF=
|
||||||
|
grub_cv_target_cc_link_format=
|
||||||
|
case "$host_os" in
|
||||||
|
*darwin* | *mac*)
|
||||||
|
grub_cv_target_cc_link_format="-arch,${target_cpu}"
|
||||||
|
TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
|
||||||
|
;;
|
||||||
|
*windows* | *cygwin* | *mingw*)
|
||||||
|
if test x${target_cpu} = xi386 ; then
|
||||||
|
grub_cv_target_cc_link_format=-mi386pe
|
||||||
|
TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
|
||||||
|
fi
|
||||||
|
if test x${target_cpu} = xx86_64 ; then
|
||||||
|
grub_cv_target_cc_link_format=-mi386pep
|
||||||
|
TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
|
||||||
|
fi
|
||||||
|
TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
elif test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
|
||||||
AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [
|
AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [
|
||||||
grub_cv_target_cc_link_format=unknown
|
grub_cv_target_cc_link_format=unknown
|
||||||
for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -mi386pe -mi386pep -arch,${target_cpu}; do
|
for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -mi386pe -mi386pep -arch,${target_cpu}; do
|
||||||
if test x${target_cpu} != xi386 && test x$format = xi386pe; then
|
if test x${target_cpu} != xi386 && test x$format = x-mi386pe; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
if test x${target_cpu} != xx86_64 && test x$format = xi386pep; then
|
if test x${target_cpu} != xx86_64 && test x$format = x-mi386pep; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
CFLAGS="$TARGET_CFLAGS"
|
CFLAGS="$TARGET_CFLAGS"
|
||||||
@@ -778,7 +929,7 @@ if test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
|
|||||||
]], [[]])], [flag=1], [flag=0])
|
]], [[]])], [flag=1], [flag=0])
|
||||||
if test x"$flag" = x1; then
|
if test x"$flag" = x1; then
|
||||||
grub_cv_target_cc_link_format="$format"
|
grub_cv_target_cc_link_format="$format"
|
||||||
break;
|
break
|
||||||
fi
|
fi
|
||||||
done])
|
done])
|
||||||
if test x"$grub_cv_target_cc_link_format" = xunknown; then
|
if test x"$grub_cv_target_cc_link_format" = xunknown; then
|
||||||
@@ -786,10 +937,10 @@ if test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
|
|||||||
fi
|
fi
|
||||||
TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
|
TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
|
||||||
if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then
|
if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then
|
||||||
TARGET_OBJ2ELF='./build-grub-pe2elf';
|
TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
|
||||||
fi
|
fi
|
||||||
if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
|
if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
|
||||||
TARGET_OBJ2ELF='./build-grub-pep2elf';
|
TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -831,17 +982,17 @@ AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)
|
|||||||
|
|
||||||
LDFLAGS="$TARGET_LDFLAGS"
|
LDFLAGS="$TARGET_LDFLAGS"
|
||||||
|
|
||||||
if test "$target_cpu" = x86_64 || test "$target_cpu-$platform" = sparc64-emu ; then
|
if test "$target_cpu" = x86_64 || test "$target_cpu" = sparc64 ; then
|
||||||
# Use large model to support 4G memory
|
# Use large model to support 4G memory
|
||||||
AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
|
AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
|
||||||
CFLAGS="$TARGET_CFLAGS -m64 -mcmodel=large"
|
CFLAGS="$TARGET_CFLAGS -mcmodel=large"
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
[grub_cv_cc_mcmodel=yes],
|
[grub_cv_cc_mcmodel=yes],
|
||||||
[grub_cv_cc_mcmodel=no])
|
[grub_cv_cc_mcmodel=no])
|
||||||
])
|
])
|
||||||
if test "x$grub_cv_cc_mcmodel" = xyes; then
|
if test "x$grub_cv_cc_mcmodel" = xyes; then
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
|
TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
|
||||||
elif test "$target_cpu-$platform" = sparc64-emu; then
|
elif test "$target_cpu" = sparc64; then
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
|
TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
@@ -849,7 +1000,7 @@ fi
|
|||||||
if test "$target_cpu"-"$platform" = x86_64-efi; then
|
if test "$target_cpu"-"$platform" = x86_64-efi; then
|
||||||
# EFI writes to stack below %rsp, we must not use the red zone
|
# EFI writes to stack below %rsp, we must not use the red zone
|
||||||
AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
|
AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
|
||||||
CFLAGS="$TARGET_CFLAGS -m64 -mno-red-zone"
|
CFLAGS="$TARGET_CFLAGS -mno-red-zone"
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
[grub_cv_cc_no_red_zone=yes],
|
[grub_cv_cc_no_red_zone=yes],
|
||||||
[grub_cv_cc_no_red_zone=no])
|
[grub_cv_cc_no_red_zone=no])
|
||||||
@@ -879,21 +1030,19 @@ if test "x$target_cpu" = xarm; then
|
|||||||
])
|
])
|
||||||
if test "x$grub_cv_cc_mthumb_interwork" = xyes; then
|
if test "x$grub_cv_cc_mthumb_interwork" = xyes; then
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork"
|
TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork"
|
||||||
|
# Clang defaults to thumb interworking
|
||||||
elif test "x$grub_cv_cc_target_clang" = xno ; then
|
elif test "x$grub_cv_cc_target_clang" = xno ; then
|
||||||
AC_MSG_ERROR([your compiler doesn't support -mthumb-interwork])
|
AC_MSG_ERROR([your compiler doesn't support -mthumb-interwork])
|
||||||
else
|
|
||||||
CFLAGS="$TARGET_CFLAGS"
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
|
|
||||||
#if defined (__thumb__) && !defined (__thumb2__)
|
|
||||||
#error thumb without interworking
|
|
||||||
#endif
|
|
||||||
]])],
|
|
||||||
[no_interwork_ok=yes],
|
|
||||||
[no_interwork_ok=no])
|
|
||||||
if test x$no_interwork_ok = xno ; then
|
|
||||||
AC_MSG_ERROR([attempt to compile to thumb with no thumb interwork])
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
AC_CACHE_CHECK([whether option -Qn works], grub_cv_target_cc_qn, [
|
||||||
|
CFLAGS="$TARGET_CFLAGS -Qn -Werror"
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
|
[grub_cv_target_cc_qn=yes],
|
||||||
|
[grub_cv_target_cc_qn=no])])
|
||||||
|
if test "x$grub_cv_target_cc_qn" = xyes; then
|
||||||
|
TARGET_CFLAGS="$TARGET_CFLAGS -Qn"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
#
|
#
|
||||||
@@ -958,7 +1107,7 @@ if test "$target_cpu" = arm; then
|
|||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
|
||||||
if test x"$flag" = x1; then
|
if test x"$flag" = x1; then
|
||||||
grub_cv_target_cc_strict_align="$arg"
|
grub_cv_target_cc_strict_align="$arg"
|
||||||
break;
|
break
|
||||||
fi
|
fi
|
||||||
done])
|
done])
|
||||||
|
|
||||||
@@ -1031,8 +1180,6 @@ if test "x$target_cpu" = xi386; then
|
|||||||
grub_CHECK_END_SYMBOL
|
grub_CHECK_END_SYMBOL
|
||||||
fi
|
fi
|
||||||
CFLAGS="$TARGET_CFLAGS"
|
CFLAGS="$TARGET_CFLAGS"
|
||||||
grub_I386_ASM_PREFIX_REQUIREMENT
|
|
||||||
grub_I386_ASM_ADDR32
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
grub_PROG_NM_WORKS
|
grub_PROG_NM_WORKS
|
||||||
@@ -1144,7 +1291,7 @@ AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"],
|
|||||||
[grub_emu_usb_excuse=["need libusb headers"]])
|
[grub_emu_usb_excuse=["need libusb headers"]])
|
||||||
[fi]
|
[fi]
|
||||||
if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then
|
if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then
|
||||||
AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled])
|
AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled ($grub_emu_usb_excuse)])
|
||||||
fi
|
fi
|
||||||
if test x"$grub_emu_usb_excuse" = x ; then
|
if test x"$grub_emu_usb_excuse" = x ; then
|
||||||
enable_grub_emu_usb=yes
|
enable_grub_emu_usb=yes
|
||||||
@@ -1153,7 +1300,7 @@ enable_grub_emu_usb=no
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test x"$enable_grub_emu_sdl" = xno ; then
|
if test x"$enable_grub_emu_sdl" = xno ; then
|
||||||
grub_emu_sdl_excuse="explicitely disabled"
|
grub_emu_sdl_excuse="explicitly disabled"
|
||||||
fi
|
fi
|
||||||
[if [ x"$grub_emu_sdl_excuse" = x ]; then
|
[if [ x"$grub_emu_sdl_excuse" = x ]; then
|
||||||
# Check for libSDL libraries.]
|
# Check for libSDL libraries.]
|
||||||
@@ -1169,7 +1316,7 @@ AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"],
|
|||||||
[fi]
|
[fi]
|
||||||
|
|
||||||
if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
|
if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
|
||||||
AC_MSG_ERROR([SDL support for grub-emu was explicitely requested but can't be compiled])
|
AC_MSG_ERROR([SDL support for grub-emu was explicitly requested but can't be compiled ($grub_emu_sdl_excuse)])
|
||||||
fi
|
fi
|
||||||
if test x"$grub_emu_sdl_excuse" = x ; then
|
if test x"$grub_emu_sdl_excuse" = x ; then
|
||||||
enable_grub_emu_sdl=yes
|
enable_grub_emu_sdl=yes
|
||||||
@@ -1249,7 +1396,7 @@ if test x"$grub_mkfont_excuse" = x ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
|
if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
|
||||||
AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled])
|
AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled ($grub_mkfont_excuse)])
|
||||||
fi
|
fi
|
||||||
if test x"$grub_mkfont_excuse" = x ; then
|
if test x"$grub_mkfont_excuse" = x ; then
|
||||||
enable_grub_mkfont=yes
|
enable_grub_mkfont=yes
|
||||||
@@ -1264,10 +1411,12 @@ SAVED_CC="$CC"
|
|||||||
SAVED_CPP="$CPP"
|
SAVED_CPP="$CPP"
|
||||||
SAVED_CFLAGS="$CFLAGS"
|
SAVED_CFLAGS="$CFLAGS"
|
||||||
SAVED_CPPFLAGS="$CPPFLAGS"
|
SAVED_CPPFLAGS="$CPPFLAGS"
|
||||||
|
SAVED_LDFLAGS="$LDFLAGS"
|
||||||
CC="$BUILD_CC"
|
CC="$BUILD_CC"
|
||||||
CPP="$BUILD_CPP"
|
CPP="$BUILD_CPP"
|
||||||
CFLAGS="$BUILD_CFLAGS"
|
CFLAGS="$BUILD_CFLAGS"
|
||||||
CPPFLAGS="$BUILD_CPPFLAGS"
|
CPPFLAGS="$BUILD_CPPFLAGS"
|
||||||
|
LDFLAGS="$BUILD_LDFAGS"
|
||||||
|
|
||||||
unset ac_cv_c_bigendian
|
unset ac_cv_c_bigendian
|
||||||
unset ac_cv_header_ft2build_h
|
unset ac_cv_header_ft2build_h
|
||||||
@@ -1308,7 +1457,7 @@ if test x"$grub_build_mkfont_excuse" = x ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then
|
if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then
|
||||||
AC_MSG_ERROR([build-grub-mkfont was explicitly requested but can't be compiled])
|
AC_MSG_ERROR([build-grub-mkfont was explicitly requested but can't be compiled ($grub_build_mkfont_excuse)])
|
||||||
fi
|
fi
|
||||||
if test x"$grub_build_mkfont_excuse" = x ; then
|
if test x"$grub_build_mkfont_excuse" = x ; then
|
||||||
enable_build_grub_mkfont=yes
|
enable_build_grub_mkfont=yes
|
||||||
@@ -1316,7 +1465,11 @@ else
|
|||||||
enable_build_grub_mkfont=no
|
enable_build_grub_mkfont=no
|
||||||
fi
|
fi
|
||||||
if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
|
if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
|
||||||
|
if test x"$grub_build_mkfont_excuse" = x ; then
|
||||||
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont])
|
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont])
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont ($grub_build_mkfont_excuse)])
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_SUBST([build_freetype_cflags])
|
AC_SUBST([build_freetype_cflags])
|
||||||
@@ -1326,6 +1479,7 @@ CC="$SAVED_CC"
|
|||||||
CPP="$SAVED_CPP"
|
CPP="$SAVED_CPP"
|
||||||
CFLAGS="$SAVED_CFLAGS"
|
CFLAGS="$SAVED_CFLAGS"
|
||||||
CPPFLAGS="$SAVED_CPPFLAGS"
|
CPPFLAGS="$SAVED_CPPFLAGS"
|
||||||
|
LDFLAGS="$SAVED_LDFLAGS"
|
||||||
|
|
||||||
|
|
||||||
DJVU_FONT_SOURCE=
|
DJVU_FONT_SOURCE=
|
||||||
@@ -1345,7 +1499,7 @@ fi
|
|||||||
|
|
||||||
if test x"$starfield_excuse" = x; then
|
if test x"$starfield_excuse" = x; then
|
||||||
for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
|
for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
|
||||||
for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu; do
|
for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu /usr/share/fonts/truetype; do
|
||||||
if test -f "$dir/DejaVuSans.$ext"; then
|
if test -f "$dir/DejaVuSans.$ext"; then
|
||||||
DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext"
|
DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext"
|
||||||
break 2
|
break 2
|
||||||
@@ -1359,7 +1513,7 @@ if test x"$starfield_excuse" = x; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test x"$enable_grub_themes" = xyes && test x"$starfield_excuse" != x; then
|
if test x"$enable_grub_themes" = xyes && test x"$starfield_excuse" != x; then
|
||||||
AC_MSG_ERROR([themes were explicitly requested but requirements are not satisfied])
|
AC_MSG_ERROR([themes were explicitly requested but requirements are not satisfied ($starfield_excuse)])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_SUBST([DJVU_FONT_SOURCE])
|
AC_SUBST([DJVU_FONT_SOURCE])
|
||||||
@@ -1372,7 +1526,7 @@ for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
|
|||||||
md5="$(md5sum "$dir/unifont.$ext"|awk '{ print $1; }')"
|
md5="$(md5sum "$dir/unifont.$ext"|awk '{ print $1; }')"
|
||||||
# PCF and BDF from version 6.3 isn't hanled properly by libfreetype.
|
# PCF and BDF from version 6.3 isn't hanled properly by libfreetype.
|
||||||
if test "$md5" = 0a54834d2788c83886a3e1785a6a1e61 || test "$md5" = 28f2565c7a41d8d407e2551159385edb || test "$md5" = dae5e588461b3b92b87b6ffee734f936 || test "$md5" = 4a3d687aa5bb329ed05f4263a1016791 ; then
|
if test "$md5" = 0a54834d2788c83886a3e1785a6a1e61 || test "$md5" = 28f2565c7a41d8d407e2551159385edb || test "$md5" = dae5e588461b3b92b87b6ffee734f936 || test "$md5" = 4a3d687aa5bb329ed05f4263a1016791 ; then
|
||||||
continue;
|
continue
|
||||||
fi
|
fi
|
||||||
FONT_SOURCE="$dir/unifont.$ext"
|
FONT_SOURCE="$dir/unifont.$ext"
|
||||||
break 2
|
break 2
|
||||||
@@ -1385,7 +1539,11 @@ if test x"$enable_build_grub_mkfont" = xno ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
|
if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
|
||||||
|
if test x"$grub_build_mkfont_excuse" = x ; then
|
||||||
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont])
|
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont])
|
||||||
|
else
|
||||||
|
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)])
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_SUBST([FONT_SOURCE])
|
AC_SUBST([FONT_SOURCE])
|
||||||
@@ -1410,14 +1568,14 @@ fi
|
|||||||
if test x"$grub_mount_excuse" = x ; then
|
if test x"$grub_mount_excuse" = x ; then
|
||||||
# Check for fuse headers.
|
# Check for fuse headers.
|
||||||
SAVED_CPPFLAGS="$CPPFLAGS"
|
SAVED_CPPFLAGS="$CPPFLAGS"
|
||||||
CPPFLAGS="$CPPFLAGS -D_FILE_OFFSET_BITS=64 -DFUSE_USE_VERSION=26"
|
CPPFLAGS="$CPPFLAGS -DFUSE_USE_VERSION=26"
|
||||||
AC_CHECK_HEADERS([fuse/fuse.h], [],
|
AC_CHECK_HEADERS([fuse/fuse.h], [],
|
||||||
[grub_mount_excuse=["need FUSE headers"]])
|
[grub_mount_excuse=["need FUSE headers"]])
|
||||||
CPPFLAGS="$SAVED_CPPFLAGS"
|
CPPFLAGS="$SAVED_CPPFLAGS"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then
|
if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then
|
||||||
AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled])
|
AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled ($grub_mount_excuse)])
|
||||||
fi
|
fi
|
||||||
if test x"$grub_mount_excuse" = x ; then
|
if test x"$grub_mount_excuse" = x ; then
|
||||||
enable_grub_mount=yes
|
enable_grub_mount=yes
|
||||||
@@ -1453,7 +1611,7 @@ if test x"$device_mapper_excuse" = x ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test x"$device_mapper_excuse" = x ; then
|
if test x"$device_mapper_excuse" = x ; then
|
||||||
LIBDEVMAPPER="-ldevmapper";
|
LIBDEVMAPPER="-ldevmapper"
|
||||||
AC_DEFINE([HAVE_DEVICE_MAPPER], [1],
|
AC_DEFINE([HAVE_DEVICE_MAPPER], [1],
|
||||||
[Define to 1 if you have the devmapper library.])
|
[Define to 1 if you have the devmapper library.])
|
||||||
fi
|
fi
|
||||||
@@ -1485,7 +1643,7 @@ AC_CHECK_HEADER([lzma.h], [], [liblzma_excuse="need lzma header"])
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then
|
if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then
|
||||||
AC_MSG_ERROR([liblzma support was explicitly requested but requirements are not satisfied])
|
AC_MSG_ERROR([liblzma support was explicitly requested but requirements are not satisfied ($liblzma_excuse)])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
@@ -1522,7 +1680,7 @@ if test x"$libzfs_excuse" = x ; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then
|
if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then
|
||||||
AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied])
|
AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied ($libzfs_excuse)])
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test x"$libzfs_excuse" = x ; then
|
if test x"$libzfs_excuse" = x ; then
|
||||||
@@ -1545,13 +1703,10 @@ AS_IF([test x$target_cpu = xi386 -a x$platform = xqemu],
|
|||||||
[AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)])
|
[AC_SUBST([GRUB_BOOT_MACHINE_LINK_ADDR], 0xffe00)])
|
||||||
|
|
||||||
AC_SUBST(HAVE_ASM_USCORE)
|
AC_SUBST(HAVE_ASM_USCORE)
|
||||||
AC_SUBST(ADDR32)
|
|
||||||
AC_SUBST(DATA32)
|
|
||||||
AC_SUBST(BSS_START_SYMBOL)
|
AC_SUBST(BSS_START_SYMBOL)
|
||||||
AC_SUBST(END_SYMBOL)
|
AC_SUBST(END_SYMBOL)
|
||||||
AC_SUBST(PACKAGE)
|
AC_SUBST(PACKAGE)
|
||||||
AC_SUBST(VERSION)
|
AC_SUBST(VERSION)
|
||||||
AC_SUBST(NEED_REGISTER_FRAME_INFO)
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([werror],
|
AC_ARG_ENABLE([werror],
|
||||||
[AS_HELP_STRING([--disable-werror],
|
[AS_HELP_STRING([--disable-werror],
|
||||||
@@ -1570,6 +1725,12 @@ fi
|
|||||||
TARGET_CPP="$TARGET_CC -E"
|
TARGET_CPP="$TARGET_CC -E"
|
||||||
TARGET_CCAS=$TARGET_CC
|
TARGET_CCAS=$TARGET_CC
|
||||||
|
|
||||||
|
# Includes which include make-time substitutions. They must come last
|
||||||
|
# as to avoid executing top_builddir in shell.
|
||||||
|
HOST_CPPFLAGS="$HOST_CPPFLAGS -I\$(top_builddir)/include"
|
||||||
|
TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_srcdir)/include"
|
||||||
|
TARGET_CPPFLAGS="$TARGET_CPPFLAGS -I\$(top_builddir)/include"
|
||||||
|
|
||||||
GRUB_TARGET_CPU="${target_cpu}"
|
GRUB_TARGET_CPU="${target_cpu}"
|
||||||
GRUB_PLATFORM="${platform}"
|
GRUB_PLATFORM="${platform}"
|
||||||
|
|
||||||
@@ -1583,6 +1744,7 @@ AC_SUBST(TARGET_CPP)
|
|||||||
AC_SUBST(TARGET_CCAS)
|
AC_SUBST(TARGET_CCAS)
|
||||||
AC_SUBST(TARGET_OBJ2ELF)
|
AC_SUBST(TARGET_OBJ2ELF)
|
||||||
AC_SUBST(TARGET_MODULE_FORMAT)
|
AC_SUBST(TARGET_MODULE_FORMAT)
|
||||||
|
AC_SUBST(TARGET_CC_VERSION)
|
||||||
|
|
||||||
AC_SUBST(TARGET_CFLAGS)
|
AC_SUBST(TARGET_CFLAGS)
|
||||||
AC_SUBST(TARGET_LDFLAGS)
|
AC_SUBST(TARGET_LDFLAGS)
|
||||||
@@ -1605,6 +1767,7 @@ AC_SUBST(BUILD_LIBM)
|
|||||||
# Automake conditionals
|
# Automake conditionals
|
||||||
#
|
#
|
||||||
|
|
||||||
|
AM_CONDITIONAL([COND_real_platform], [test x$platform != xnone])
|
||||||
AM_CONDITIONAL([COND_emu], [test x$platform = xemu])
|
AM_CONDITIONAL([COND_emu], [test x$platform = xemu])
|
||||||
AM_CONDITIONAL([COND_clang], [test x$grub_cv_cc_target_clang = xyes])
|
AM_CONDITIONAL([COND_clang], [test x$grub_cv_cc_target_clang = xyes])
|
||||||
AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc])
|
AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc])
|
||||||
@@ -1632,7 +1795,13 @@ AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi])
|
|||||||
AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
|
AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
|
||||||
AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
|
AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
|
||||||
|
|
||||||
|
AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd])
|
||||||
|
AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux])
|
||||||
|
AM_CONDITIONAL([COND_HOST_NETBSD], [test x$host_kernel = xnetbsd])
|
||||||
AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
|
AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
|
||||||
|
AM_CONDITIONAL([COND_HOST_KFREEBSD], [test x$host_kernel = xkfreebsd])
|
||||||
|
AM_CONDITIONAL([COND_HOST_XNU], [test x$host_kernel = xxnu])
|
||||||
|
AM_CONDITIONAL([COND_HOST_ILLUMOS], [test x$host_kernel = xillumos])
|
||||||
|
|
||||||
AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
|
AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
|
||||||
AM_CONDITIONAL([COND_GRUB_EMU_USB], [test x$enable_grub_emu_usb = xyes])
|
AM_CONDITIONAL([COND_GRUB_EMU_USB], [test x$enable_grub_emu_usb = xyes])
|
||||||
@@ -1672,6 +1841,7 @@ AC_DEFINE_UNQUOTED(GRUB_SYSCONFDIR, "$grub_sysconfdir", [Configuration dir])
|
|||||||
|
|
||||||
|
|
||||||
# Output files.
|
# Output files.
|
||||||
|
if test "$platform" != none; then
|
||||||
cpudir="${target_cpu}"
|
cpudir="${target_cpu}"
|
||||||
if test x${cpudir} = xmipsel; then
|
if test x${cpudir} = xmipsel; then
|
||||||
cpudir=mips;
|
cpudir=mips;
|
||||||
@@ -1691,6 +1861,11 @@ else
|
|||||||
cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null
|
cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
# Just enough to stop the compiler failing with -I$(srcdir)/include.
|
||||||
|
mkdir -p include 2>/dev/null
|
||||||
|
rm -rf include/grub/cpu include/grub/machine
|
||||||
|
fi
|
||||||
|
|
||||||
AC_CONFIG_FILES([Makefile])
|
AC_CONFIG_FILES([Makefile])
|
||||||
AC_CONFIG_FILES([grub-core/Makefile])
|
AC_CONFIG_FILES([grub-core/Makefile])
|
||||||
@@ -1762,6 +1937,7 @@ echo grub-mount: No "($grub_mount_excuse)"
|
|||||||
fi
|
fi
|
||||||
if [ x"$starfield_excuse" = x ]; then
|
if [ x"$starfield_excuse" = x ]; then
|
||||||
echo starfield theme: Yes
|
echo starfield theme: Yes
|
||||||
|
echo With DejaVuSans font from $DJVU_FONT_SOURCE
|
||||||
else
|
else
|
||||||
echo starfield theme: No "($starfield_excuse)"
|
echo starfield theme: No "($starfield_excuse)"
|
||||||
fi
|
fi
|
||||||
|
|||||||
+7
-7
@@ -108,16 +108,16 @@ The branches available are:
|
|||||||
|
|
||||||
@table @samp
|
@table @samp
|
||||||
@item master
|
@item master
|
||||||
Main developpement branch.
|
Main development branch.
|
||||||
@item grub-legacy
|
@item grub-legacy
|
||||||
GRUB 0.97 codebase. Kept for reference and legal reasons
|
GRUB 0.97 codebase. Kept for reference and legal reasons
|
||||||
@item multiboot
|
@item multiboot
|
||||||
Multiboot specfication
|
Multiboot specfication
|
||||||
@item multiboot2
|
@item multiboot2
|
||||||
Multiboot2 specfication
|
Multiboot2 specfication
|
||||||
@item developper branches
|
@item developer branches
|
||||||
Prefixed with developper name. Every developper of a team manages his own branches.
|
Prefixed with developer name. Every developer of a team manages his own branches.
|
||||||
Developper branches do not need changelog entries.
|
Developer branches do not need changelog entries.
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
Once you have used @kbd{git clone} to fetch an initial copy of a branch, you
|
Once you have used @kbd{git clone} to fetch an initial copy of a branch, you
|
||||||
@@ -228,12 +228,12 @@ The opening @samp{/*} and closing @samp{*/} should be placed together on a line
|
|||||||
Here is a brief map of the GRUB code base.
|
Here is a brief map of the GRUB code base.
|
||||||
|
|
||||||
GRUB uses Autoconf and Automake, with most of the Automake input generated
|
GRUB uses Autoconf and Automake, with most of the Automake input generated
|
||||||
by AutoGen. The top-level build rules are in @file{configure.ac},
|
by a Python script. The top-level build rules are in @file{configure.ac},
|
||||||
@file{grub-core/Makefile.core.def}, and @file{Makefile.util.def}. Each
|
@file{grub-core/Makefile.core.def}, and @file{Makefile.util.def}. Each
|
||||||
block in a @file{*.def} file represents a build target, and specifies the
|
block in a @file{*.def} file represents a build target, and specifies the
|
||||||
source files used to build it on various platforms. The @file{*.def} files
|
source files used to build it on various platforms. The @file{*.def} files
|
||||||
are processed into AutoGen input by @file{gentpl.py} (which you only need to
|
are processed into Automake input by @file{gentpl.py} (which you only need
|
||||||
look at if you are extending the build system). If you are adding a new
|
to look at if you are extending the build system). If you are adding a new
|
||||||
module which follows an existing pattern, such as a new command or a new
|
module which follows an existing pattern, such as a new command or a new
|
||||||
filesystem implementation, it is usually easiest to grep
|
filesystem implementation, it is usually easiest to grep
|
||||||
@file{grub-core/Makefile.core.def} and @file{Makefile.util.def} for an
|
@file{grub-core/Makefile.core.def} and @file{Makefile.util.def} for an
|
||||||
|
|||||||
+1
-1
@@ -6385,7 +6385,7 @@ just do:
|
|||||||
@end group
|
@end group
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
Also, the latest version is available using Bazaar. See
|
Also, the latest version is available using Git. See
|
||||||
@uref{http://www.gnu.org/software/grub/grub-download.html} for more
|
@uref{http://www.gnu.org/software/grub/grub-download.html} for more
|
||||||
information.
|
information.
|
||||||
|
|
||||||
|
|||||||
@@ -76,6 +76,12 @@ 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" ]
|
GROUPS["fdt"] = [ "arm64_efi", "arm_uboot", "arm_efi" ]
|
||||||
|
|
||||||
|
# Needs software helpers for division
|
||||||
|
# Must match GRUB_DIVISION_IN_SOFTWARE in misc.h
|
||||||
|
GROUPS["softdiv"] = GROUPS["arm"] + ["ia64_efi"]
|
||||||
|
GROUPS["no_softdiv"] = GRUB_PLATFORMS[:]
|
||||||
|
for i in GROUPS["softdiv"]: GROUPS["no_softdiv"].remove(i)
|
||||||
|
|
||||||
# Miscelaneous groups schedulded to disappear in future
|
# Miscelaneous groups schedulded to disappear in future
|
||||||
GROUPS["i386_coreboot_multiboot_qemu"] = ["i386_coreboot", "i386_multiboot", "i386_qemu"]
|
GROUPS["i386_coreboot_multiboot_qemu"] = ["i386_coreboot", "i386_multiboot", "i386_qemu"]
|
||||||
GROUPS["nopc"] = GRUB_PLATFORMS[:]; GROUPS["nopc"].remove("i386_pc")
|
GROUPS["nopc"] = GRUB_PLATFORMS[:]; GROUPS["nopc"].remove("i386_pc")
|
||||||
@@ -753,7 +759,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 .reginfo -R .rel.dyn -R .note.gnu.gold-version $< $@; \
|
$(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 $< $@; \
|
||||||
fi
|
fi
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
|||||||
+17
-13
@@ -26,20 +26,22 @@ CFLAGS_LIBRARY += $(CFLAGS_PLATFORM) -fno-builtin
|
|||||||
CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM)
|
CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM)
|
||||||
CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM)
|
CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM)
|
||||||
|
|
||||||
build-grub-pep2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
|
build-grub-pep2elf$(BUILD_EXEEXT): $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=64 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pep2elf\" $^
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=64 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pep2elf\" $^
|
||||||
|
CLEANFILES += build-grub-pep2elf$(BUILD_EXEEXT)
|
||||||
|
|
||||||
build-grub-pe2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
|
build-grub-pe2elf$(BUILD_EXEEXT): $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=32 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=32 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^
|
||||||
|
CLEANFILES += build-grub-pe2elf$(BUILD_EXEEXT)
|
||||||
|
|
||||||
# gentrigtables
|
# gentrigtables
|
||||||
gentrigtables: gentrigtables.c
|
gentrigtables$(BUILD_EXEEXT): gentrigtables.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $< $(BUILD_LIBM)
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $< $(BUILD_LIBM)
|
||||||
CLEANFILES += gentrigtables
|
CLEANFILES += gentrigtables$(BUILD_EXEEXT)
|
||||||
|
|
||||||
# trigtables.c
|
# trigtables.c
|
||||||
trigtables.c: gentrigtables gentrigtables.c $(top_srcdir)/configure.ac
|
trigtables.c: gentrigtables$(BUILD_EXEEXT) gentrigtables.c $(top_srcdir)/configure.ac
|
||||||
./gentrigtables > $@
|
./gentrigtables$(BUILD_EXEEXT) > $@
|
||||||
CLEANFILES += trigtables.c
|
CLEANFILES += trigtables.c
|
||||||
|
|
||||||
# XXX Use Automake's LEX & YACC support
|
# XXX Use Automake's LEX & YACC support
|
||||||
@@ -221,12 +223,14 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/uboot/uboot.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/uboot/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/uboot/disk.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
|
||||||
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h
|
||||||
endif
|
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/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
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_arm64_efi
|
if COND_arm64_efi
|
||||||
@@ -290,12 +294,12 @@ grub_emu-grub_emu_init.$(OBJEXT):grub_emu_init.h
|
|||||||
kern/emu/grub_emu_dyn-main.$(OBJEXT):grub_emu_init.h
|
kern/emu/grub_emu_dyn-main.$(OBJEXT):grub_emu_init.h
|
||||||
grub_emu_dyn-grub_emu_init.$(OBJEXT):grub_emu_init.h
|
grub_emu_dyn-grub_emu_init.$(OBJEXT):grub_emu_init.h
|
||||||
|
|
||||||
grub_emu_init.h: genemuinitheader.sh $(MOD_FILES)
|
grub_emu_init.h: genemuinitheader.sh $(MODULE_FILES)
|
||||||
rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinitheader.sh $(TARGET_NM) > $@
|
rm -f $@; echo $(MODULE_FILES) | sh $(srcdir)/genemuinitheader.sh $(TARGET_NM) > $@
|
||||||
CLEANFILES += grub_emu_init.h
|
CLEANFILES += grub_emu_init.h
|
||||||
|
|
||||||
grub_emu_init.c: grub_emu_init.h genemuinit.sh $(MOD_FILES)
|
grub_emu_init.c: grub_emu_init.h genemuinit.sh $(MODULE_FILES)
|
||||||
rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinit.sh $(TARGET_NM) > $@
|
rm -f $@; echo $(MODULE_FILES) | sh $(srcdir)/genemuinit.sh $(TARGET_NM) > $@
|
||||||
CLEANFILES += grub_emu_init.c
|
CLEANFILES += grub_emu_init.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ kernel = {
|
|||||||
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_ldflags = '-Wl,-r,-d';
|
arm64_efi_ldflags = '-Wl,-r,-d';
|
||||||
arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
arm64_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';
|
||||||
@@ -159,6 +159,8 @@ kernel = {
|
|||||||
terminfoinkernel = commands/extcmd.c;
|
terminfoinkernel = commands/extcmd.c;
|
||||||
terminfoinkernel = lib/arg.c;
|
terminfoinkernel = lib/arg.c;
|
||||||
|
|
||||||
|
softdiv = lib/division.c;
|
||||||
|
|
||||||
i386 = kern/i386/dl.c;
|
i386 = kern/i386/dl.c;
|
||||||
i386_xen = kern/i386/dl.c;
|
i386_xen = kern/i386/dl.c;
|
||||||
|
|
||||||
@@ -1672,7 +1674,8 @@ module = {
|
|||||||
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 = loader/arm/linux.c;
|
arm = loader/arm/linux.c;
|
||||||
arm = lib/fdt.c;
|
arm64 = loader/arm64/linux.c;
|
||||||
|
fdt = lib/fdt.c;
|
||||||
common = loader/linux.c;
|
common = loader/linux.c;
|
||||||
common = lib/cmdline.c;
|
common = lib/cmdline.c;
|
||||||
enable = noemu;
|
enable = noemu;
|
||||||
@@ -1968,6 +1971,12 @@ module = {
|
|||||||
enable = xen;
|
enable = xen;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
module = {
|
||||||
|
name = div;
|
||||||
|
common = lib/division.c;
|
||||||
|
enable = no_softdiv;
|
||||||
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = div_test;
|
name = div_test;
|
||||||
common = tests/div_test.c;
|
common = tests/div_test.c;
|
||||||
|
|||||||
@@ -165,8 +165,8 @@ start:
|
|||||||
* this area.
|
* this area.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
. = _start + GRUB_BOOT_MACHINE_BPB_START
|
.org GRUB_BOOT_MACHINE_BPB_START
|
||||||
. = _start + 4
|
.org 4
|
||||||
#endif
|
#endif
|
||||||
#ifdef HYBRID_BOOT
|
#ifdef HYBRID_BOOT
|
||||||
floppy
|
floppy
|
||||||
@@ -174,23 +174,23 @@ start:
|
|||||||
scratch
|
scratch
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
. = _start + GRUB_BOOT_MACHINE_BPB_END
|
.org GRUB_BOOT_MACHINE_BPB_END
|
||||||
/*
|
/*
|
||||||
* End of BIOS parameter block.
|
* End of BIOS parameter block.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
kernel_address:
|
LOCAL(kernel_address):
|
||||||
.word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
.word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
||||||
|
|
||||||
#ifndef HYBRID_BOOT
|
#ifndef HYBRID_BOOT
|
||||||
. = _start + GRUB_BOOT_MACHINE_KERNEL_SECTOR
|
.org GRUB_BOOT_MACHINE_KERNEL_SECTOR
|
||||||
kernel_sector:
|
LOCAL(kernel_sector):
|
||||||
.long 1
|
.long 1
|
||||||
kernel_sector_high:
|
LOCAL(kernel_sector_high):
|
||||||
.long 0
|
.long 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
. = _start + GRUB_BOOT_MACHINE_BOOT_DRIVE
|
.org GRUB_BOOT_MACHINE_BOOT_DRIVE
|
||||||
boot_drive:
|
boot_drive:
|
||||||
.byte 0xff /* the disk to load kernel from */
|
.byte 0xff /* the disk to load kernel from */
|
||||||
/* 0xff means use the boot drive */
|
/* 0xff means use the boot drive */
|
||||||
@@ -208,7 +208,7 @@ LOCAL(after_BPB):
|
|||||||
* possible boot drive. If GRUB is installed into a floppy,
|
* possible boot drive. If GRUB is installed into a floppy,
|
||||||
* this does nothing (only jump).
|
* this does nothing (only jump).
|
||||||
*/
|
*/
|
||||||
. = _start + GRUB_BOOT_MACHINE_DRIVE_CHECK
|
.org GRUB_BOOT_MACHINE_DRIVE_CHECK
|
||||||
boot_drive_check:
|
boot_drive_check:
|
||||||
jmp 3f /* grub-setup may overwrite this jump */
|
jmp 3f /* grub-setup may overwrite this jump */
|
||||||
testb $0x80, %dl
|
testb $0x80, %dl
|
||||||
@@ -275,7 +275,7 @@ real_start:
|
|||||||
andw $1, %cx
|
andw $1, %cx
|
||||||
jz LOCAL(chs_mode)
|
jz LOCAL(chs_mode)
|
||||||
|
|
||||||
lba_mode:
|
LOCAL(lba_mode):
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
movw %ax, 4(%si)
|
movw %ax, 4(%si)
|
||||||
|
|
||||||
@@ -290,9 +290,9 @@ lba_mode:
|
|||||||
movw $0x0010, (%si)
|
movw $0x0010, (%si)
|
||||||
|
|
||||||
/* the absolute address */
|
/* the absolute address */
|
||||||
movl kernel_sector, %ebx
|
movl LOCAL(kernel_sector), %ebx
|
||||||
movl %ebx, 8(%si)
|
movl %ebx, 8(%si)
|
||||||
movl kernel_sector_high, %ebx
|
movl LOCAL(kernel_sector_high), %ebx
|
||||||
movl %ebx, 12(%si)
|
movl %ebx, 12(%si)
|
||||||
|
|
||||||
/* the segment of buffer address */
|
/* the segment of buffer address */
|
||||||
@@ -361,13 +361,13 @@ LOCAL(final_init):
|
|||||||
|
|
||||||
setup_sectors:
|
setup_sectors:
|
||||||
/* load logical sector start (top half) */
|
/* load logical sector start (top half) */
|
||||||
movl kernel_sector_high, %eax
|
movl LOCAL(kernel_sector_high), %eax
|
||||||
|
|
||||||
orl %eax, %eax
|
orl %eax, %eax
|
||||||
jnz LOCAL(geometry_error)
|
jnz LOCAL(geometry_error)
|
||||||
|
|
||||||
/* load logical sector start (bottom half) */
|
/* load logical sector start (bottom half) */
|
||||||
movl kernel_sector, %eax
|
movl LOCAL(kernel_sector), %eax
|
||||||
|
|
||||||
/* zero %edx */
|
/* zero %edx */
|
||||||
xorl %edx, %edx
|
xorl %edx, %edx
|
||||||
@@ -452,7 +452,7 @@ LOCAL(copy_buffer):
|
|||||||
popa
|
popa
|
||||||
|
|
||||||
/* boot kernel */
|
/* boot kernel */
|
||||||
jmp *(kernel_address)
|
jmp *(LOCAL(kernel_address))
|
||||||
|
|
||||||
/* END OF MAIN LOOP */
|
/* END OF MAIN LOOP */
|
||||||
|
|
||||||
@@ -511,13 +511,13 @@ LOCAL(message):
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifdef HYBRID_BOOT
|
#ifdef HYBRID_BOOT
|
||||||
. = _start + 0x1b0
|
.org 0x1b0
|
||||||
kernel_sector:
|
LOCAL(kernel_sector):
|
||||||
.long 1
|
.long 1
|
||||||
kernel_sector_high:
|
LOCAL(kernel_sector_high):
|
||||||
.long 0
|
.long 0
|
||||||
#endif
|
#endif
|
||||||
. = _start + GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC
|
.org GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC
|
||||||
nt_magic:
|
nt_magic:
|
||||||
.long 0
|
.long 0
|
||||||
.word 0
|
.word 0
|
||||||
@@ -528,7 +528,7 @@ nt_magic:
|
|||||||
* sneaky, huh?
|
* sneaky, huh?
|
||||||
*/
|
*/
|
||||||
|
|
||||||
. = _start + GRUB_BOOT_MACHINE_PART_START
|
.org GRUB_BOOT_MACHINE_PART_START
|
||||||
|
|
||||||
#ifndef HYBRID_BOOT
|
#ifndef HYBRID_BOOT
|
||||||
floppy
|
floppy
|
||||||
@@ -536,7 +536,7 @@ nt_magic:
|
|||||||
scratch
|
scratch
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
. = _start + GRUB_BOOT_MACHINE_PART_END
|
.org GRUB_BOOT_MACHINE_PART_END
|
||||||
|
|
||||||
/* the last 2 bytes in the sector 0 contain the signature */
|
/* the last 2 bytes in the sector 0 contain the signature */
|
||||||
.word GRUB_BOOT_MACHINE_SIGNATURE
|
.word GRUB_BOOT_MACHINE_SIGNATURE
|
||||||
@@ -43,7 +43,7 @@ _start:
|
|||||||
LOCAL(next):
|
LOCAL(next):
|
||||||
jmp 1f
|
jmp 1f
|
||||||
|
|
||||||
. = start + 8
|
.org 8
|
||||||
|
|
||||||
bi_pvd:
|
bi_pvd:
|
||||||
.long 0 /* LBA of primary volume descriptor. */
|
.long 0 /* LBA of primary volume descriptor. */
|
||||||
@@ -168,6 +168,6 @@ err_noboot_msg:
|
|||||||
err_cdfail_msg:
|
err_cdfail_msg:
|
||||||
.ascii "cdrom read fails\0"
|
.ascii "cdrom read fails\0"
|
||||||
|
|
||||||
. = start + 0x7FF
|
.org 0x7FF
|
||||||
|
|
||||||
.byte 0
|
.byte 0
|
||||||
@@ -362,7 +362,7 @@ LOCAL(message):
|
|||||||
.word 0
|
.word 0
|
||||||
.word 0
|
.word 0
|
||||||
|
|
||||||
. = _start + 0x200 - GRUB_BOOT_MACHINE_LIST_SIZE
|
.org 0x200 - GRUB_BOOT_MACHINE_LIST_SIZE
|
||||||
LOCAL(firstlist): /* this label has to be before the first list entry!!! */
|
LOCAL(firstlist): /* this label has to be before the first list entry!!! */
|
||||||
/* fill the first data listing with the default */
|
/* fill the first data listing with the default */
|
||||||
blocklist_default_start:
|
blocklist_default_start:
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ data_start:
|
|||||||
xorl %ebp, %ebp
|
xorl %ebp, %ebp
|
||||||
jmp LOCAL(linux_next)
|
jmp LOCAL(linux_next)
|
||||||
|
|
||||||
. = data_start + 0x1F1
|
.org 0x1F1
|
||||||
|
|
||||||
setup_sects:
|
setup_sects:
|
||||||
.byte CODE_SECTORS
|
.byte CODE_SECTORS
|
||||||
@@ -292,4 +292,4 @@ LOCAL(fail):
|
|||||||
err_int15_msg:
|
err_int15_msg:
|
||||||
.ascii "move memory fails\0"
|
.ascii "move memory fails\0"
|
||||||
|
|
||||||
. = _start + CODE_SECTORS * 512
|
.org (CODE_SECTORS * 512 + 512)
|
||||||
@@ -38,5 +38,5 @@ start:
|
|||||||
/* This region is a junk. Do you say that this is wasteful?
|
/* This region is a junk. Do you say that this is wasteful?
|
||||||
But I like that the memory layout of the body is consistent
|
But I like that the memory layout of the body is consistent
|
||||||
among different kernels rather than scamping just for 1.5KB. */
|
among different kernels rather than scamping just for 1.5KB. */
|
||||||
. = _start + 0x8200 - 0x7C00 - 0x200 - 1
|
.org 0x8200 - 0x7C00 - 0x200 - 1
|
||||||
.byte 0
|
.byte 0
|
||||||
@@ -50,23 +50,23 @@ LOCAL (base):
|
|||||||
* This is a special data area.
|
* This is a special data area.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
. = _start + GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
.org GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
||||||
LOCAL(compressed_size):
|
LOCAL(compressed_size):
|
||||||
.long 0
|
.long 0
|
||||||
. = _start + GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
.org GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
||||||
LOCAL(uncompressed_size):
|
LOCAL(uncompressed_size):
|
||||||
.long 0
|
.long 0
|
||||||
|
|
||||||
. = _start + GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY
|
.org GRUB_KERNEL_I386_PC_REED_SOLOMON_REDUNDANCY
|
||||||
reed_solomon_redundancy:
|
reed_solomon_redundancy:
|
||||||
.long 0
|
.long 0
|
||||||
. = _start + GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_LENGTH
|
.org GRUB_KERNEL_I386_PC_NO_REED_SOLOMON_LENGTH
|
||||||
.short (LOCAL(reed_solomon_part) - _start)
|
.short (LOCAL(reed_solomon_part) - _start)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This is the area for all of the special variables.
|
* This is the area for all of the special variables.
|
||||||
*/
|
*/
|
||||||
. = _start + GRUB_DECOMPRESSOR_I386_PC_BOOT_DEVICE
|
.org GRUB_DECOMPRESSOR_I386_PC_BOOT_DEVICE
|
||||||
LOCAL(boot_dev):
|
LOCAL(boot_dev):
|
||||||
.byte 0xFF, 0xFF, 0xFF
|
.byte 0xFF, 0xFF, 0xFF
|
||||||
LOCAL(boot_drive):
|
LOCAL(boot_drive):
|
||||||
@@ -89,13 +89,13 @@ LOCAL (codestart):
|
|||||||
sti /* we're safe again */
|
sti /* we're safe again */
|
||||||
|
|
||||||
/* save the boot drive */
|
/* save the boot drive */
|
||||||
ADDR32 movb %dl, LOCAL(boot_drive)
|
movb %dl, LOCAL(boot_drive)
|
||||||
|
|
||||||
/* reset disk system (%ah = 0) */
|
/* reset disk system (%ah = 0) */
|
||||||
int $0x13
|
int $0x13
|
||||||
|
|
||||||
/* transition to protected mode */
|
/* transition to protected mode */
|
||||||
DATA32 call real_to_prot
|
calll real_to_prot
|
||||||
|
|
||||||
/* The ".code32" directive takes GAS out of 16-bit mode. */
|
/* The ".code32" directive takes GAS out of 16-bit mode. */
|
||||||
.code32
|
.code32
|
||||||
@@ -149,7 +149,7 @@ gate_a20_try_bios:
|
|||||||
movw $0x2401, %ax
|
movw $0x2401, %ax
|
||||||
int $0x15
|
int $0x15
|
||||||
|
|
||||||
DATA32 call real_to_prot
|
calll real_to_prot
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
popl %ebp
|
popl %ebp
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ _start:
|
|||||||
|
|
||||||
jmp 1f
|
jmp 1f
|
||||||
|
|
||||||
. = _start + GRUB_BOOT_I386_QEMU_CORE_ENTRY_ADDR
|
.org GRUB_BOOT_I386_QEMU_CORE_ENTRY_ADDR
|
||||||
VARIABLE(grub_core_entry_addr)
|
VARIABLE(grub_core_entry_addr)
|
||||||
.long 0
|
.long 0
|
||||||
1:
|
1:
|
||||||
@@ -48,8 +48,9 @@ VARIABLE(grub_core_entry_addr)
|
|||||||
/* Transition to protected mode. We use pushl to force generation
|
/* Transition to protected mode. We use pushl to force generation
|
||||||
of a flat return address. */
|
of a flat return address. */
|
||||||
pushl $1f
|
pushl $1f
|
||||||
DATA32 jmp real_to_prot
|
jmp real_to_prot
|
||||||
.code32
|
.code32
|
||||||
|
1:
|
||||||
/* Ensure A20 is enabled. We're in qemu, so control port A works
|
/* Ensure A20 is enabled. We're in qemu, so control port A works
|
||||||
and there is no need to wait since there is no real logic, it's
|
and there is no need to wait since there is no real logic, it's
|
||||||
all emulated. */
|
all emulated. */
|
||||||
@@ -57,7 +58,6 @@ VARIABLE(grub_core_entry_addr)
|
|||||||
andb $(~0x03), %al
|
andb $(~0x03), %al
|
||||||
orb $0x02, %al
|
orb $0x02, %al
|
||||||
outb $0x92
|
outb $0x92
|
||||||
1:
|
|
||||||
movl EXT_C(grub_core_entry_addr), %edx
|
movl EXT_C(grub_core_entry_addr), %edx
|
||||||
jmp *%edx
|
jmp *%edx
|
||||||
|
|
||||||
@@ -66,9 +66,9 @@ VARIABLE(grub_core_entry_addr)
|
|||||||
/* Intel, in its infinite wisdom, decided to put the i8086 entry point
|
/* Intel, in its infinite wisdom, decided to put the i8086 entry point
|
||||||
*right here* and this is why we need this kludge. */
|
*right here* and this is why we need this kludge. */
|
||||||
|
|
||||||
. = GRUB_BOOT_MACHINE_SIZE - 16
|
.org GRUB_BOOT_MACHINE_SIZE - 16
|
||||||
|
|
||||||
.code16
|
.code16
|
||||||
|
|
||||||
jmp _start
|
jmp _start
|
||||||
. = GRUB_BOOT_MACHINE_SIZE
|
.org GRUB_BOOT_MACHINE_SIZE
|
||||||
@@ -162,7 +162,7 @@ retry_cs5536:
|
|||||||
|
|
||||||
b continue
|
b continue
|
||||||
|
|
||||||
. = start + GRUB_CPU_LOONGSON_FLASH_TLB_REFILL - GRUB_CPU_LOONGSON_FLASH_START
|
.org GRUB_CPU_LOONGSON_FLASH_TLB_REFILL - GRUB_CPU_LOONGSON_FLASH_START
|
||||||
tlb_refill:
|
tlb_refill:
|
||||||
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
||||||
mfc0 $s2, GRUB_CPU_LOONGSON_COP0_BADVADDR
|
mfc0 $s2, GRUB_CPU_LOONGSON_COP0_BADVADDR
|
||||||
@@ -196,13 +196,13 @@ tlb_refill:
|
|||||||
b fatal
|
b fatal
|
||||||
addiu $a0, $a0, %lo(unhandled_tlb_refill)
|
addiu $a0, $a0, %lo(unhandled_tlb_refill)
|
||||||
|
|
||||||
. = start + GRUB_CPU_LOONGSON_FLASH_CACHE_ERROR - GRUB_CPU_LOONGSON_FLASH_START
|
.org GRUB_CPU_LOONGSON_FLASH_CACHE_ERROR - GRUB_CPU_LOONGSON_FLASH_START
|
||||||
cache_error:
|
cache_error:
|
||||||
lui $a0, %hi(unhandled_cache_error)
|
lui $a0, %hi(unhandled_cache_error)
|
||||||
b fatal
|
b fatal
|
||||||
addiu $a0, $a0, %lo(unhandled_cache_error)
|
addiu $a0, $a0, %lo(unhandled_cache_error)
|
||||||
|
|
||||||
. = start + GRUB_CPU_LOONGSON_FLASH_OTHER_EXCEPTION - GRUB_CPU_LOONGSON_FLASH_START
|
.org GRUB_CPU_LOONGSON_FLASH_OTHER_EXCEPTION - GRUB_CPU_LOONGSON_FLASH_START
|
||||||
other_exception:
|
other_exception:
|
||||||
mfc0 $s0, GRUB_CPU_LOONGSON_COP0_CAUSE
|
mfc0 $s0, GRUB_CPU_LOONGSON_COP0_CAUSE
|
||||||
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
mfc0 $s1, GRUB_CPU_LOONGSON_COP0_EPC
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#include <grub/offsets.h>
|
#include <grub/offsets.h>
|
||||||
#include <grub/machine/memory.h>
|
#include <grub/machine/memory.h>
|
||||||
#include <grub/machine/kernel.h>
|
#include <grub/machine/kernel.h>
|
||||||
|
#include <grub/cpu/kernel.h>
|
||||||
#include <grub/offsets.h>
|
#include <grub/offsets.h>
|
||||||
|
|
||||||
#define BASE_ADDR 8
|
#define BASE_ADDR 8
|
||||||
@@ -32,6 +33,7 @@
|
|||||||
.globl __start, _start, start
|
.globl __start, _start, start
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.set nomacro
|
.set nomacro
|
||||||
|
mips_attributes
|
||||||
__start:
|
__start:
|
||||||
_start:
|
_start:
|
||||||
start:
|
start:
|
||||||
@@ -39,13 +41,13 @@ start:
|
|||||||
bal codestart
|
bal codestart
|
||||||
nop
|
nop
|
||||||
base:
|
base:
|
||||||
. = _start + GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
.org GRUB_DECOMPRESSOR_MACHINE_COMPRESSED_SIZE
|
||||||
compressed_size:
|
compressed_size:
|
||||||
.long 0
|
.long 0
|
||||||
. = _start + GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
.org GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_SIZE
|
||||||
uncompressed_size:
|
uncompressed_size:
|
||||||
.long 0
|
.long 0
|
||||||
. = _start + GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_ADDR
|
.org GRUB_DECOMPRESSOR_MACHINE_UNCOMPRESSED_ADDR
|
||||||
uncompressed_addr:
|
uncompressed_addr:
|
||||||
.long 0
|
.long 0
|
||||||
codestart:
|
codestart:
|
||||||
@@ -150,18 +152,18 @@ digcont:
|
|||||||
1:
|
1:
|
||||||
jr $ra
|
jr $ra
|
||||||
nop
|
nop
|
||||||
busclockstr: .asciiz "busclock="
|
busclockstr: .asciz "busclock="
|
||||||
cpuclockstr: .asciiz "cpuclock="
|
cpuclockstr: .asciz "cpuclock="
|
||||||
memsizestr: .asciiz "memsize="
|
memsizestr: .asciz "memsize="
|
||||||
highmemsizestr: .asciiz "highmemsize="
|
highmemsizestr: .asciz "highmemsize="
|
||||||
machtype_yeeloong_str1: .asciiz "machtype=8.9"
|
machtype_yeeloong_str1: .asciz "machtype=8.9"
|
||||||
machtype_yeeloong_str2: .asciiz "machtype=lemote-yeeloong-"
|
machtype_yeeloong_str2: .asciz "machtype=lemote-yeeloong-"
|
||||||
machtype_fuloong2f_str: .asciiz "machtype=lemote-fuloong-2f"
|
machtype_fuloong2f_str: .asciz "machtype=lemote-fuloong-2f"
|
||||||
machtype_fuloong2e_str: .asciiz "machtype=lemote-fuloong-2e"
|
machtype_fuloong2e_str: .asciz "machtype=lemote-fuloong-2e"
|
||||||
pmon_yeeloong_str: .asciiz "PMON_VER=LM8"
|
pmon_yeeloong_str: .asciz "PMON_VER=LM8"
|
||||||
pmon_fuloong2f_str: .asciiz "PMON_VER=LM6"
|
pmon_fuloong2f_str: .asciz "PMON_VER=LM6"
|
||||||
pmon_yeeloong_verstr: .asciiz "Version=LM8"
|
pmon_yeeloong_verstr: .asciz "Version=LM8"
|
||||||
pmon_fuloong2f_verstr: .asciiz "Version=LM6"
|
pmon_fuloong2f_verstr: .asciz "Version=LM6"
|
||||||
.p2align 2
|
.p2align 2
|
||||||
|
|
||||||
argdone:
|
argdone:
|
||||||
|
|||||||
@@ -41,9 +41,9 @@ pic_base:
|
|||||||
* After loading in that block we will execute it by jumping to the
|
* After loading in that block we will execute it by jumping to the
|
||||||
* load address plus the size of the prepended A.OUT header (32 bytes).
|
* load address plus the size of the prepended A.OUT header (32 bytes).
|
||||||
*/
|
*/
|
||||||
. = _start + GRUB_BOOT_MACHINE_BOOT_DEVPATH
|
.org GRUB_BOOT_MACHINE_BOOT_DEVPATH
|
||||||
boot_path:
|
boot_path:
|
||||||
. = _start + GRUB_BOOT_MACHINE_KERNEL_BYTE
|
.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
|
||||||
@@ -52,7 +52,7 @@ kernel_address: .word GRUB_BOOT_MACHINE_KERNEL_ADDR
|
|||||||
#define boot_path_end (_start + 1024)
|
#define boot_path_end (_start + 1024)
|
||||||
#include <grub/offsets.h>
|
#include <grub/offsets.h>
|
||||||
|
|
||||||
. = _start + 8
|
.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
|
||||||
@@ -224,7 +224,7 @@ bootpath_known:
|
|||||||
#else
|
#else
|
||||||
nop
|
nop
|
||||||
#endif
|
#endif
|
||||||
. = _start + GRUB_BOOT_MACHINE_CODE_END
|
.org GRUB_BOOT_MACHINE_CODE_END
|
||||||
|
|
||||||
/* the last 4 bytes in the sector 0 contain the signature */
|
/* the last 4 bytes in the sector 0 contain the signature */
|
||||||
.word GRUB_BOOT_MACHINE_SIGNATURE
|
.word GRUB_BOOT_MACHINE_SIGNATURE
|
||||||
@@ -136,7 +136,7 @@ lastlist:
|
|||||||
.word 0
|
.word 0
|
||||||
.word 0
|
.word 0
|
||||||
|
|
||||||
. = _start + (0x200 - GRUB_BOOT_SPARC64_IEEE1275_LIST_SIZE)
|
.org (0x200 - GRUB_BOOT_SPARC64_IEEE1275_LIST_SIZE)
|
||||||
blocklist_default_start:
|
blocklist_default_start:
|
||||||
.word 0
|
.word 0
|
||||||
.word 2
|
.word 2
|
||||||
|
|||||||
+22
-22
@@ -670,23 +670,23 @@ grub_ehci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
for (i = 0; i < (GRUB_EHCI_N_TD - 1); i++)
|
for (i = 0; i < (GRUB_EHCI_N_TD - 1); i++)
|
||||||
{
|
{
|
||||||
e->td_virt[i].link_td = e->td_phys + (i + 1) * sizeof (struct grub_ehci_td);
|
e->td_virt[i].link_td = e->td_phys + (i + 1) * sizeof (struct grub_ehci_td);
|
||||||
e->td_virt[i].next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
e->td_virt[i].next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
e->td_virt[i].alt_next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
e->td_virt[i].alt_next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
}
|
}
|
||||||
e->td_virt[GRUB_EHCI_N_TD - 1].next_td =
|
e->td_virt[GRUB_EHCI_N_TD - 1].next_td =
|
||||||
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
e->td_virt[GRUB_EHCI_N_TD - 1].alt_next_td =
|
e->td_virt[GRUB_EHCI_N_TD - 1].alt_next_td =
|
||||||
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
e->tdfree_virt = e->td_virt;
|
e->tdfree_virt = e->td_virt;
|
||||||
/* Set Terminate in first QH, which is used in framelist */
|
/* Set Terminate in first QH, which is used in framelist */
|
||||||
e->qh_virt[0].qh_hptr = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE | GRUB_EHCI_HPTR_TYPE_QH);
|
e->qh_virt[0].qh_hptr = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE | GRUB_EHCI_HPTR_TYPE_QH);
|
||||||
e->qh_virt[0].td_overlay.next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
e->qh_virt[0].td_overlay.next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
e->qh_virt[0].td_overlay.alt_next_td =
|
e->qh_virt[0].td_overlay.alt_next_td =
|
||||||
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
/* Also set Halted bit in token */
|
/* Also set Halted bit in token */
|
||||||
e->qh_virt[0].td_overlay.token = grub_cpu_to_le32 (GRUB_EHCI_STATUS_HALTED);
|
e->qh_virt[0].td_overlay.token = grub_cpu_to_le32_compile_time (GRUB_EHCI_STATUS_HALTED);
|
||||||
/* Set the H bit in first QH used for AL */
|
/* Set the H bit in first QH used for AL */
|
||||||
e->qh_virt[1].ep_char = grub_cpu_to_le32 (GRUB_EHCI_H);
|
e->qh_virt[1].ep_char = grub_cpu_to_le32_compile_time (GRUB_EHCI_H);
|
||||||
/* Set Terminate into TD in rest of QHs and set horizontal link
|
/* Set Terminate into TD in rest of QHs and set horizontal link
|
||||||
* pointer to itself - these QHs will be used for asynchronous
|
* pointer to itself - these QHs will be used for asynchronous
|
||||||
* schedule and they should have valid value in horiz. link */
|
* schedule and they should have valid value in horiz. link */
|
||||||
@@ -697,12 +697,12 @@ grub_ehci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
e->qh_chunk) &
|
e->qh_chunk) &
|
||||||
GRUB_EHCI_POINTER_MASK) | GRUB_EHCI_HPTR_TYPE_QH);
|
GRUB_EHCI_POINTER_MASK) | GRUB_EHCI_HPTR_TYPE_QH);
|
||||||
e->qh_virt[i].td_overlay.next_td =
|
e->qh_virt[i].td_overlay.next_td =
|
||||||
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
e->qh_virt[i].td_overlay.alt_next_td =
|
e->qh_virt[i].td_overlay.alt_next_td =
|
||||||
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
/* Also set Halted bit in token */
|
/* Also set Halted bit in token */
|
||||||
e->qh_virt[i].td_overlay.token =
|
e->qh_virt[i].td_overlay.token =
|
||||||
grub_cpu_to_le32 (GRUB_EHCI_STATUS_HALTED);
|
grub_cpu_to_le32_compile_time (GRUB_EHCI_STATUS_HALTED);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Note: QH 0 and QH 1 are reserved and must not be used anywhere.
|
/* Note: QH 0 and QH 1 are reserved and must not be used anywhere.
|
||||||
@@ -991,7 +991,7 @@ grub_ehci_find_qh (struct grub_ehci *e, grub_usb_transfer_t transfer)
|
|||||||
target = ((transfer->endpoint << GRUB_EHCI_EP_NUM_OFF) |
|
target = ((transfer->endpoint << GRUB_EHCI_EP_NUM_OFF) |
|
||||||
transfer->devaddr) & GRUB_EHCI_TARGET_MASK;
|
transfer->devaddr) & GRUB_EHCI_TARGET_MASK;
|
||||||
target = grub_cpu_to_le32 (target);
|
target = grub_cpu_to_le32 (target);
|
||||||
mask = grub_cpu_to_le32 (GRUB_EHCI_TARGET_MASK);
|
mask = grub_cpu_to_le32_compile_time (GRUB_EHCI_TARGET_MASK);
|
||||||
|
|
||||||
/* low speed interrupt transfers are linked to the periodic */
|
/* low speed interrupt transfers are linked to the periodic */
|
||||||
/* schedule, everything else to the asynchronous schedule */
|
/* schedule, everything else to the asynchronous schedule */
|
||||||
@@ -1200,7 +1200,7 @@ grub_ehci_transaction (struct grub_ehci *e,
|
|||||||
grub_memset ((void *) td, 0, sizeof (struct grub_ehci_td));
|
grub_memset ((void *) td, 0, sizeof (struct grub_ehci_td));
|
||||||
|
|
||||||
/* Don't point to any TD yet, just terminate. */
|
/* Don't point to any TD yet, just terminate. */
|
||||||
td->next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
td->next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
/* Set alternate pointer. When short packet occurs, alternate TD
|
/* Set alternate pointer. When short packet occurs, alternate TD
|
||||||
* will not be really fetched because it is not active. But don't
|
* will not be really fetched because it is not active. But don't
|
||||||
* forget, EHCI will try to fetch alternate TD every scan of AL
|
* forget, EHCI will try to fetch alternate TD every scan of AL
|
||||||
@@ -1325,9 +1325,9 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
/* Fill whole alternate TD by zeros (= inactive) and set
|
/* Fill whole alternate TD by zeros (= inactive) and set
|
||||||
* Terminate bits and Halt bit */
|
* Terminate bits and Halt bit */
|
||||||
grub_memset ((void *) cdata->td_alt_virt, 0, sizeof (struct grub_ehci_td));
|
grub_memset ((void *) cdata->td_alt_virt, 0, sizeof (struct grub_ehci_td));
|
||||||
cdata->td_alt_virt->next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
cdata->td_alt_virt->next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
cdata->td_alt_virt->alt_next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
cdata->td_alt_virt->alt_next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
cdata->td_alt_virt->token = grub_cpu_to_le32 (GRUB_EHCI_STATUS_HALTED);
|
cdata->td_alt_virt->token = grub_cpu_to_le32_compile_time (GRUB_EHCI_STATUS_HALTED);
|
||||||
|
|
||||||
/* Allocate appropriate number of TDs and set */
|
/* Allocate appropriate number of TDs and set */
|
||||||
for (i = 0; i < transfer->transcnt; i++)
|
for (i = 0; i < transfer->transcnt; i++)
|
||||||
@@ -1364,7 +1364,7 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
cdata->td_last_virt = td;
|
cdata->td_last_virt = td;
|
||||||
cdata->td_last_phys = grub_dma_virt2phys (td, e->td_chunk);
|
cdata->td_last_phys = grub_dma_virt2phys (td, e->td_chunk);
|
||||||
/* Last TD should not have set alternate TD */
|
/* Last TD should not have set alternate TD */
|
||||||
cdata->td_last_virt->alt_next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
cdata->td_last_virt->alt_next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
|
|
||||||
grub_dprintf ("ehci", "setup_transfer: cdata=%p, qh=%p\n",
|
grub_dprintf ("ehci", "setup_transfer: cdata=%p, qh=%p\n",
|
||||||
cdata,cdata->qh_virt);
|
cdata,cdata->qh_virt);
|
||||||
@@ -1377,14 +1377,14 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
/* Start transfer: */
|
/* Start transfer: */
|
||||||
/* Unlink possible alternate pointer in QH */
|
/* Unlink possible alternate pointer in QH */
|
||||||
cdata->qh_virt->td_overlay.alt_next_td =
|
cdata->qh_virt->td_overlay.alt_next_td =
|
||||||
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE);
|
grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
|
||||||
/* Link new TDs with QH via next_td */
|
/* Link new TDs with QH via next_td */
|
||||||
cdata->qh_virt->td_overlay.next_td =
|
cdata->qh_virt->td_overlay.next_td =
|
||||||
grub_cpu_to_le32 (grub_dma_virt2phys
|
grub_cpu_to_le32 (grub_dma_virt2phys
|
||||||
(cdata->td_first_virt, e->td_chunk));
|
(cdata->td_first_virt, e->td_chunk));
|
||||||
/* Reset Active and Halted bits in QH to activate Advance Queue,
|
/* Reset Active and Halted bits in QH to activate Advance Queue,
|
||||||
* i.e. reset token */
|
* i.e. reset token */
|
||||||
cdata->qh_virt->td_overlay.token = grub_cpu_to_le32 (0);
|
cdata->qh_virt->td_overlay.token = grub_cpu_to_le32_compile_time (0);
|
||||||
|
|
||||||
/* Finito */
|
/* Finito */
|
||||||
transfer->controller_data = cdata;
|
transfer->controller_data = cdata;
|
||||||
@@ -1408,9 +1408,9 @@ grub_ehci_pre_finish_transfer (grub_usb_transfer_t transfer)
|
|||||||
* safely manipulate with QH TD part. */
|
* safely manipulate with QH TD part. */
|
||||||
cdata->qh_virt->td_overlay.token = (cdata->qh_virt->td_overlay.token
|
cdata->qh_virt->td_overlay.token = (cdata->qh_virt->td_overlay.token
|
||||||
|
|
|
|
||||||
grub_cpu_to_le32
|
grub_cpu_to_le32_compile_time
|
||||||
(GRUB_EHCI_STATUS_HALTED)) &
|
(GRUB_EHCI_STATUS_HALTED)) &
|
||||||
grub_cpu_to_le32 (~GRUB_EHCI_STATUS_ACTIVE);
|
grub_cpu_to_le32_compile_time (~GRUB_EHCI_STATUS_ACTIVE);
|
||||||
|
|
||||||
/* Print debug data here if necessary */
|
/* Print debug data here if necessary */
|
||||||
|
|
||||||
|
|||||||
@@ -314,7 +314,7 @@ grub_ohci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
grub_memset ((void *) o->ed_ctrl, 0, sizeof (struct grub_ohci_ed)
|
grub_memset ((void *) o->ed_ctrl, 0, sizeof (struct grub_ohci_ed)
|
||||||
* 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 (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);
|
||||||
@@ -329,7 +329,7 @@ grub_ohci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
/* Preset EDs */
|
/* Preset EDs */
|
||||||
grub_memset ((void*)o->ed_bulk, 0, sizeof(struct grub_ohci_ed) * GRUB_OHCI_BULK_EDS);
|
grub_memset ((void*)o->ed_bulk, 0, sizeof(struct grub_ohci_ed) * GRUB_OHCI_BULK_EDS);
|
||||||
for (j=0; j < GRUB_OHCI_BULK_EDS; j++)
|
for (j=0; j < GRUB_OHCI_BULK_EDS; j++)
|
||||||
o->ed_bulk[j].target = grub_cpu_to_le32 (1 << 14); /* skip */
|
o->ed_bulk[j].target = grub_cpu_to_le32_compile_time (1 << 14); /* skip */
|
||||||
|
|
||||||
grub_dprintf ("ohci", "EDs-B: chunk=%p, virt=%p, phys=0x%02x\n",
|
grub_dprintf ("ohci", "EDs-B: chunk=%p, virt=%p, phys=0x%02x\n",
|
||||||
o->ed_bulk_chunk, o->ed_bulk, o->ed_bulk_addr);
|
o->ed_bulk_chunk, o->ed_bulk, o->ed_bulk_addr);
|
||||||
@@ -1349,10 +1349,10 @@ grub_ohci_fini_hw (int noreturn __attribute__ ((unused)))
|
|||||||
/* Set skip in all EDs */
|
/* Set skip in all EDs */
|
||||||
if (o->ed_bulk)
|
if (o->ed_bulk)
|
||||||
for (i=0; i < GRUB_OHCI_BULK_EDS; i++)
|
for (i=0; i < GRUB_OHCI_BULK_EDS; i++)
|
||||||
o->ed_bulk[i].target |= grub_cpu_to_le32 (1 << 14); /* skip */
|
o->ed_bulk[i].target |= grub_cpu_to_le32_compile_time (1 << 14); /* skip */
|
||||||
if (o->ed_ctrl)
|
if (o->ed_ctrl)
|
||||||
for (i=0; i < GRUB_OHCI_CTRL_EDS; i++)
|
for (i=0; i < GRUB_OHCI_CTRL_EDS; i++)
|
||||||
o->ed_ctrl[i].target |= grub_cpu_to_le32 (1 << 14); /* skip */
|
o->ed_ctrl[i].target |= grub_cpu_to_le32_compile_time (1 << 14); /* skip */
|
||||||
|
|
||||||
/* We should wait for next SOF to be sure that all EDs are
|
/* We should wait for next SOF to be sure that all EDs are
|
||||||
* unaccessed by OHCI. But OHCI can be non-functional, so
|
* unaccessed by OHCI. But OHCI can be non-functional, so
|
||||||
|
|||||||
@@ -625,9 +625,7 @@ grub_uhci_check_transfer (grub_usb_controller_t dev,
|
|||||||
return GRUB_USB_ERR_NONE;
|
return GRUB_USB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_dprintf ("uhci", "t status=0x%02x\n", errtd->ctrl_status);
|
if (errtd && !(errtd->ctrl_status & (1 << 23)))
|
||||||
|
|
||||||
if (!(errtd->ctrl_status & (1 << 23)))
|
|
||||||
{
|
{
|
||||||
grub_usb_err_t err = GRUB_USB_ERR_NONE;
|
grub_usb_err_t err = GRUB_USB_ERR_NONE;
|
||||||
|
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ grub_usb_bulk_maxpacket (grub_usb_device_t dev,
|
|||||||
struct grub_usb_desc_endp *endpoint)
|
struct grub_usb_desc_endp *endpoint)
|
||||||
{
|
{
|
||||||
/* Use the maximum packet size given in the endpoint descriptor. */
|
/* Use the maximum packet size given in the endpoint descriptor. */
|
||||||
if (dev->initialized && endpoint)
|
if (dev->initialized && endpoint && (unsigned int) endpoint->maxpacket)
|
||||||
return endpoint->maxpacket;
|
return endpoint->maxpacket;
|
||||||
|
|
||||||
return 64;
|
return 64;
|
||||||
|
|||||||
@@ -131,6 +131,8 @@ grub_acpi_get_rsdpv1 (void)
|
|||||||
return grub_machine_acpi_get_rsdpv1 ();
|
return grub_machine_acpi_get_rsdpv1 ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined (__i386__) || defined (__x86_64__)
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
iszero (grub_uint8_t *reg, int size)
|
iszero (grub_uint8_t *reg, int size)
|
||||||
{
|
{
|
||||||
@@ -141,7 +143,6 @@ iszero (grub_uint8_t *reg, int size)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (__i386__) || defined (__x86_64__)
|
|
||||||
/* Context for grub_acpi_create_ebda. */
|
/* Context for grub_acpi_create_ebda. */
|
||||||
struct grub_acpi_create_ebda_ctx {
|
struct grub_acpi_create_ebda_ctx {
|
||||||
int ebda_len;
|
int ebda_len;
|
||||||
@@ -227,7 +228,7 @@ grub_acpi_create_ebda (void)
|
|||||||
grub_dprintf ("acpi", "Copying rsdpv2 to %p\n", target);
|
grub_dprintf ("acpi", "Copying rsdpv2 to %p\n", target);
|
||||||
v2inebda = target;
|
v2inebda = target;
|
||||||
target += v2->length;
|
target += v2->length;
|
||||||
target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1);
|
target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16);
|
||||||
v2 = 0;
|
v2 = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -246,7 +247,7 @@ grub_acpi_create_ebda (void)
|
|||||||
grub_dprintf ("acpi", "Copying rsdpv1 to %p\n", target);
|
grub_dprintf ("acpi", "Copying rsdpv1 to %p\n", target);
|
||||||
v1inebda = target;
|
v1inebda = target;
|
||||||
target += sizeof (struct grub_acpi_rsdp_v10);
|
target += sizeof (struct grub_acpi_rsdp_v10);
|
||||||
target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1);
|
target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16);
|
||||||
v1 = 0;
|
v1 = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -265,7 +266,7 @@ grub_acpi_create_ebda (void)
|
|||||||
grub_memcpy (target, v2, v2->length);
|
grub_memcpy (target, v2, v2->length);
|
||||||
v2inebda = target;
|
v2inebda = target;
|
||||||
target += v2->length;
|
target += v2->length;
|
||||||
target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1);
|
target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16);
|
||||||
v2 = 0;
|
v2 = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -282,7 +283,7 @@ grub_acpi_create_ebda (void)
|
|||||||
grub_memcpy (target, v1, sizeof (struct grub_acpi_rsdp_v10));
|
grub_memcpy (target, v1, sizeof (struct grub_acpi_rsdp_v10));
|
||||||
v1inebda = target;
|
v1inebda = target;
|
||||||
target += sizeof (struct grub_acpi_rsdp_v10);
|
target += sizeof (struct grub_acpi_rsdp_v10);
|
||||||
target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1);
|
target = (grub_uint8_t *) ALIGN_UP((grub_addr_t) target, 16);
|
||||||
v1 = 0;
|
v1 = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -135,6 +135,49 @@ skip_data_ref_object (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline grub_uint32_t
|
||||||
|
skip_term (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
||||||
|
{
|
||||||
|
grub_uint32_t add;
|
||||||
|
const grub_uint8_t *ptr0 = ptr;
|
||||||
|
|
||||||
|
switch(*ptr)
|
||||||
|
{
|
||||||
|
case GRUB_ACPI_OPCODE_ADD:
|
||||||
|
case GRUB_ACPI_OPCODE_AND:
|
||||||
|
case GRUB_ACPI_OPCODE_CONCAT:
|
||||||
|
case GRUB_ACPI_OPCODE_CONCATRES:
|
||||||
|
case GRUB_ACPI_OPCODE_DIVIDE:
|
||||||
|
case GRUB_ACPI_OPCODE_INDEX:
|
||||||
|
case GRUB_ACPI_OPCODE_LSHIFT:
|
||||||
|
case GRUB_ACPI_OPCODE_MOD:
|
||||||
|
case GRUB_ACPI_OPCODE_MULTIPLY:
|
||||||
|
case GRUB_ACPI_OPCODE_NAND:
|
||||||
|
case GRUB_ACPI_OPCODE_NOR:
|
||||||
|
case GRUB_ACPI_OPCODE_OR:
|
||||||
|
case GRUB_ACPI_OPCODE_RSHIFT:
|
||||||
|
case GRUB_ACPI_OPCODE_SUBTRACT:
|
||||||
|
case GRUB_ACPI_OPCODE_TOSTRING:
|
||||||
|
case GRUB_ACPI_OPCODE_XOR:
|
||||||
|
/*
|
||||||
|
* Parameters for these opcodes: TermArg, TermArg Target, see ACPI
|
||||||
|
* spec r5.0, page 828f.
|
||||||
|
*/
|
||||||
|
ptr++;
|
||||||
|
ptr += add = skip_term (ptr, end);
|
||||||
|
if (!add)
|
||||||
|
return 0;
|
||||||
|
ptr += add = skip_term (ptr, end);
|
||||||
|
if (!add)
|
||||||
|
return 0;
|
||||||
|
ptr += skip_name_string (ptr, end);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return skip_data_ref_object (ptr, end);
|
||||||
|
}
|
||||||
|
return ptr - ptr0;
|
||||||
|
}
|
||||||
|
|
||||||
static inline grub_uint32_t
|
static inline grub_uint32_t
|
||||||
skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
||||||
{
|
{
|
||||||
@@ -156,10 +199,10 @@ skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
|||||||
ptr++;
|
ptr++;
|
||||||
ptr += skip_name_string (ptr, end);
|
ptr += skip_name_string (ptr, end);
|
||||||
ptr++;
|
ptr++;
|
||||||
ptr += add = skip_data_ref_object (ptr, end);
|
ptr += add = skip_term (ptr, end);
|
||||||
if (!add)
|
if (!add)
|
||||||
return 0;
|
return 0;
|
||||||
ptr += add = skip_data_ref_object (ptr, end);
|
ptr += add = skip_term (ptr, end);
|
||||||
if (!add)
|
if (!add)
|
||||||
return 0;
|
return 0;
|
||||||
break;
|
break;
|
||||||
@@ -180,6 +223,7 @@ skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end)
|
|||||||
return ptr - ptr0;
|
return ptr - ptr0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
|
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)
|
||||||
@@ -214,8 +258,8 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
|
|||||||
}
|
}
|
||||||
case GRUB_ACPI_OPCODE_NAME:
|
case GRUB_ACPI_OPCODE_NAME:
|
||||||
ptr++;
|
ptr++;
|
||||||
if ((!scope || memcmp (scope, "\\", scope_len) == 0) &&
|
if ((!scope || grub_memcmp (scope, "\\", scope_len) == 0) &&
|
||||||
(memcmp (ptr, "_S5_", 4) == 0 || memcmp (ptr, "\\_S5_", 4) == 0))
|
(grub_memcmp (ptr, "_S5_", 4) == 0 || grub_memcmp (ptr, "\\_S5_", 4) == 0))
|
||||||
{
|
{
|
||||||
int ll;
|
int ll;
|
||||||
grub_uint8_t *ptr2 = ptr;
|
grub_uint8_t *ptr2 = ptr;
|
||||||
@@ -250,6 +294,17 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
|
|||||||
if (!add)
|
if (!add)
|
||||||
return -1;
|
return -1;
|
||||||
break;
|
break;
|
||||||
|
case GRUB_ACPI_OPCODE_ALIAS:
|
||||||
|
ptr++;
|
||||||
|
/* We need to skip two name strings */
|
||||||
|
ptr += add = skip_name_string (ptr, end);
|
||||||
|
if (!add)
|
||||||
|
return -1;
|
||||||
|
ptr += add = skip_name_string (ptr, end);
|
||||||
|
if (!add)
|
||||||
|
return -1;
|
||||||
|
break;
|
||||||
|
|
||||||
case GRUB_ACPI_OPCODE_SCOPE:
|
case GRUB_ACPI_OPCODE_SCOPE:
|
||||||
{
|
{
|
||||||
int scope_sleep_type;
|
int scope_sleep_type;
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ GRUB_MOD_INIT(boottime)
|
|||||||
{
|
{
|
||||||
cmd_boottime =
|
cmd_boottime =
|
||||||
grub_register_command ("boottime", grub_cmd_boottime,
|
grub_register_command ("boottime", grub_cmd_boottime,
|
||||||
0, N_("Get boot time statistics."));
|
0, N_("Show boot time statistics."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(boottime)
|
GRUB_MOD_FINI(boottime)
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ grub_cmd_lsefisystab (struct grub_command *cmd __attribute__ ((unused)),
|
|||||||
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 ("Signature: %016" PRIxGRUB_UINT64_T " revision: %08x\n",
|
grub_printf ("Signature: %016" PRIxGRUB_UINT64_T " revision: %08x\n",
|
||||||
st->hdr.signature, st->hdr.revision);
|
st->hdr.signature, st->hdr.revision);
|
||||||
{
|
{
|
||||||
|
|||||||
+67
-29
@@ -36,62 +36,66 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
|
|
||||||
static const struct grub_arg_option options[] = {
|
static const struct grub_arg_option options[] = {
|
||||||
{"is-i386-xen-pae-domu", 0, 0,
|
{"is-i386-xen-pae-domu", 0, 0,
|
||||||
N_("Check if FILE can be booted as i386 PAE xen unprivilegied guest"),
|
N_("Check if FILE can be booted as i386 PAE Xen unprivileged guest kernel"),
|
||||||
0, 0},
|
0, 0},
|
||||||
{"is-x86_64-xen-domu", 0, 0,
|
{"is-x86_64-xen-domu", 0, 0,
|
||||||
N_("Check if FILE can be booted as x86_64 xen unprivilegied guest"), 0, 0},
|
N_("Check if FILE can be booted as x86_64 Xen unprivileged guest kernel"), 0, 0},
|
||||||
{"is-x86-xen-dom0", 0, 0,
|
{"is-x86-xen-dom0", 0, 0,
|
||||||
N_("Check if FILE can be used as xen x86 privilegied guest kernel"), 0, 0},
|
N_("Check if FILE can be used as Xen x86 privileged guest kernel"), 0, 0},
|
||||||
{"is-x86-multiboot", 0, 0,
|
{"is-x86-multiboot", 0, 0,
|
||||||
N_("Check if FILE can be used as x86 multiboot kernel"), 0, 0},
|
N_("Check if FILE can be used as x86 multiboot kernel"), 0, 0},
|
||||||
{"is-x86-multiboot2", 0, 0,
|
{"is-x86-multiboot2", 0, 0,
|
||||||
N_("Check if FILE can be used as x86 multiboot2 kernel"), 0, 0},
|
N_("Check if FILE can be used as x86 multiboot2 kernel"), 0, 0},
|
||||||
{"is-arm-linux", 0, 0,
|
{"is-arm-linux", 0, 0,
|
||||||
N_("Check if FILE is ARM linux"), 0, 0},
|
N_("Check if FILE is ARM Linux"), 0, 0},
|
||||||
|
{"is-arm64-linux", 0, 0,
|
||||||
|
N_("Check if FILE is ARM64 Linux"), 0, 0},
|
||||||
{"is-ia64-linux", 0, 0,
|
{"is-ia64-linux", 0, 0,
|
||||||
N_("Check if FILE is IA64 linux"), 0, 0},
|
N_("Check if FILE is IA64 Linux"), 0, 0},
|
||||||
{"is-mips-linux", 0, 0,
|
{"is-mips-linux", 0, 0,
|
||||||
N_("Check if FILE is MIPS linux"), 0, 0},
|
N_("Check if FILE is MIPS Linux"), 0, 0},
|
||||||
{"is-mipsel-linux", 0, 0,
|
{"is-mipsel-linux", 0, 0,
|
||||||
N_("Check if FILE is MIPSEL linux"), 0, 0},
|
N_("Check if FILE is MIPSEL Linux"), 0, 0},
|
||||||
{"is-sparc64-linux", 0, 0,
|
{"is-sparc64-linux", 0, 0,
|
||||||
N_("Check if FILE is SPARC64 linux"), 0, 0},
|
N_("Check if FILE is SPARC64 Linux"), 0, 0},
|
||||||
{"is-powerpc-linux", 0, 0,
|
{"is-powerpc-linux", 0, 0,
|
||||||
N_("Check if FILE is POWERPC linux"), 0, 0},
|
N_("Check if FILE is POWERPC Linux"), 0, 0},
|
||||||
{"is-x86-linux", 0, 0,
|
{"is-x86-linux", 0, 0,
|
||||||
N_("Check if FILE is x86 linux"), 0, 0},
|
N_("Check if FILE is x86 Linux"), 0, 0},
|
||||||
{"is-x86-linux32", 0, 0,
|
{"is-x86-linux32", 0, 0,
|
||||||
N_("Check if FILE is x86 linux supporting 32-bit protocol"), 0, 0},
|
N_("Check if FILE is x86 Linux supporting 32-bit protocol"), 0, 0},
|
||||||
{"is-x86-kfreebsd", 0, 0,
|
{"is-x86-kfreebsd", 0, 0,
|
||||||
N_("Check if FILE is x86 kfreebsd"), 0, 0},
|
N_("Check if FILE is x86 kFreeBSD"), 0, 0},
|
||||||
{"is-i386-kfreebsd", 0, 0,
|
{"is-i386-kfreebsd", 0, 0,
|
||||||
N_("Check if FILE is i386 kfreebsd"), 0, 0},
|
N_("Check if FILE is i386 kFreeBSD"), 0, 0},
|
||||||
{"is-x86_64-kfreebsd", 0, 0,
|
{"is-x86_64-kfreebsd", 0, 0,
|
||||||
N_("Check if FILE is x86_64 kfreebsd"), 0, 0},
|
N_("Check if FILE is x86_64 kFreeBSD"), 0, 0},
|
||||||
|
|
||||||
{"is-x86-knetbsd", 0, 0,
|
{"is-x86-knetbsd", 0, 0,
|
||||||
N_("Check if FILE is x86 knetbsd"), 0, 0},
|
N_("Check if FILE is x86 kNetBSD"), 0, 0},
|
||||||
{"is-i386-knetbsd", 0, 0,
|
{"is-i386-knetbsd", 0, 0,
|
||||||
N_("Check if FILE is i386 knetbsd"), 0, 0},
|
N_("Check if FILE is i386 kNetBSD"), 0, 0},
|
||||||
{"is-x86_64-knetbsd", 0, 0,
|
{"is-x86_64-knetbsd", 0, 0,
|
||||||
N_("Check if FILE is x86_64 knetbsd"), 0, 0},
|
N_("Check if FILE is x86_64 kNetBSD"), 0, 0},
|
||||||
|
|
||||||
{"is-i386-efi", 0, 0,
|
{"is-i386-efi", 0, 0,
|
||||||
N_("Check if FILE is i386 EFI file"), 0, 0},
|
N_("Check if FILE is i386 EFI file"), 0, 0},
|
||||||
{"is-x86_64-efi", 0, 0,
|
{"is-x86_64-efi", 0, 0,
|
||||||
N_("Check if FILE is x86-64 EFI file"), 0, 0},
|
N_("Check if FILE is x86_64 EFI file"), 0, 0},
|
||||||
{"is-ia64-efi", 0, 0,
|
{"is-ia64-efi", 0, 0,
|
||||||
N_("Check if FILE is IA64 EFI file"), 0, 0},
|
N_("Check if FILE is IA64 EFI file"), 0, 0},
|
||||||
|
{"is-arm64-efi", 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-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,
|
||||||
N_("Check if FILE is x86_64 xnu (Mac OS X kernel)"), 0, 0},
|
N_("Check if FILE is x86_64 XNU (Mac OS X kernel)"), 0, 0},
|
||||||
{"is-i386-xnu", 0, 0,
|
{"is-i386-xnu", 0, 0,
|
||||||
N_("Check if FILE is i386 xnu (Mac OS X kernel)"), 0, 0},
|
N_("Check if FILE is i386 XNU (Mac OS X kernel)"), 0, 0},
|
||||||
{"is-xnu-hibr", 0, 0,
|
{"is-xnu-hibr", 0, 0,
|
||||||
N_("Check if FILE is xnu (Mac OS X kernel) hibernated image"), 0, 0},
|
N_("Check if FILE is XNU (Mac OS X kernel) hibernated image"), 0, 0},
|
||||||
{"is-x86-bios-bootsector", 0, 0,
|
{"is-x86-bios-bootsector", 0, 0,
|
||||||
N_("Check if FILE is BIOS bootsector"), 0, 0},
|
N_("Check if FILE is BIOS bootsector"), 0, 0},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
@@ -105,6 +109,7 @@ enum
|
|||||||
IS_MULTIBOOT,
|
IS_MULTIBOOT,
|
||||||
IS_MULTIBOOT2,
|
IS_MULTIBOOT2,
|
||||||
IS_ARM_LINUX,
|
IS_ARM_LINUX,
|
||||||
|
IS_ARM64_LINUX,
|
||||||
IS_IA64_LINUX,
|
IS_IA64_LINUX,
|
||||||
IS_MIPS_LINUX,
|
IS_MIPS_LINUX,
|
||||||
IS_MIPSEL_LINUX,
|
IS_MIPSEL_LINUX,
|
||||||
@@ -121,6 +126,7 @@ enum
|
|||||||
IS_32_EFI,
|
IS_32_EFI,
|
||||||
IS_64_EFI,
|
IS_64_EFI,
|
||||||
IS_IA_EFI,
|
IS_IA_EFI,
|
||||||
|
IS_ARM64_EFI,
|
||||||
IS_ARM_EFI,
|
IS_ARM_EFI,
|
||||||
IS_HIBERNATED,
|
IS_HIBERNATED,
|
||||||
IS_XNU64,
|
IS_XNU64,
|
||||||
@@ -377,16 +383,42 @@ grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
}
|
}
|
||||||
case IS_ARM_LINUX:
|
case IS_ARM_LINUX:
|
||||||
{
|
{
|
||||||
grub_uint32_t sig;
|
grub_uint32_t sig, sig_pi;
|
||||||
|
if (grub_file_read (file, &sig_pi, 4) != 4)
|
||||||
|
break;
|
||||||
|
/* Raspberry pi. */
|
||||||
|
if (sig_pi == grub_cpu_to_le32_compile_time (0xea000006))
|
||||||
|
{
|
||||||
|
ret = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
if (grub_file_seek (file, 0x24) == (grub_size_t) -1)
|
if (grub_file_seek (file, 0x24) == (grub_size_t) -1)
|
||||||
break;
|
break;
|
||||||
if (grub_file_read (file, &sig, 4) != 4)
|
if (grub_file_read (file, &sig, 4) != 4)
|
||||||
break;
|
break;
|
||||||
if (sig != grub_cpu_to_le32_compile_time (0x016f2818))
|
if (sig == grub_cpu_to_le32_compile_time (0x016f2818))
|
||||||
break;
|
{
|
||||||
ret = 1;
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case IS_ARM64_LINUX:
|
||||||
|
{
|
||||||
|
grub_uint32_t sig;
|
||||||
|
|
||||||
|
if (grub_file_seek (file, 0x38) == (grub_size_t) -1)
|
||||||
|
break;
|
||||||
|
if (grub_file_read (file, &sig, 4) != 4)
|
||||||
|
break;
|
||||||
|
if (sig == grub_cpu_to_le32_compile_time (0x644d5241))
|
||||||
|
{
|
||||||
|
ret = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
case IS_PAE_DOMU ... IS_DOM0:
|
case IS_PAE_DOMU ... IS_DOM0:
|
||||||
{
|
{
|
||||||
struct grub_xen_file_info xen_inf;
|
struct grub_xen_file_info xen_inf;
|
||||||
@@ -444,8 +476,8 @@ grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
be at least 12 bytes and aligned on a 4-byte boundary. */
|
be at least 12 bytes and aligned on a 4-byte boundary. */
|
||||||
for (header = buffer;
|
for (header = buffer;
|
||||||
((char *) header <=
|
((char *) header <=
|
||||||
(char *) buffer + len - (type == IS_MULTIBOOT2 ? 16 : 12))
|
(char *) buffer + len - (type == IS_MULTIBOOT2 ? 16 : 12));
|
||||||
|| (header = 0); header += step)
|
header += step)
|
||||||
{
|
{
|
||||||
if (header[0] == magic
|
if (header[0] == magic
|
||||||
&& !(grub_le_to_cpu32 (header[0])
|
&& !(grub_le_to_cpu32 (header[0])
|
||||||
@@ -453,11 +485,12 @@ grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
+ grub_le_to_cpu32 (header[2])
|
+ grub_le_to_cpu32 (header[2])
|
||||||
+ (type == IS_MULTIBOOT2
|
+ (type == IS_MULTIBOOT2
|
||||||
? grub_le_to_cpu32 (header[3]) : 0)))
|
? grub_le_to_cpu32 (header[3]) : 0)))
|
||||||
|
{
|
||||||
|
ret = 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (header != 0)
|
|
||||||
ret = 1;
|
|
||||||
grub_free (buffer);
|
grub_free (buffer);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -535,6 +568,7 @@ grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
case IS_32_EFI:
|
case IS_32_EFI:
|
||||||
case IS_64_EFI:
|
case IS_64_EFI:
|
||||||
case IS_IA_EFI:
|
case IS_IA_EFI:
|
||||||
|
case IS_ARM64_EFI:
|
||||||
case IS_ARM_EFI:
|
case IS_ARM_EFI:
|
||||||
{
|
{
|
||||||
char signature[4];
|
char signature[4];
|
||||||
@@ -573,11 +607,15 @@ 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_IA64))
|
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_IA64))
|
||||||
break;
|
break;
|
||||||
|
if (type == IS_ARM64_EFI
|
||||||
|
&& coff_head.machine !=
|
||||||
|
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_ARM64))
|
||||||
|
break;
|
||||||
if (type == IS_ARM_EFI
|
if (type == IS_ARM_EFI
|
||||||
&& 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_64_EFI || type == IS_64_EFI)
|
if (type == IS_IA_EFI || type == IS_64_EFI || type == IS_ARM64_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))
|
||||||
|
|||||||
@@ -18,6 +18,7 @@
|
|||||||
|
|
||||||
#include <grub/fileid.h>
|
#include <grub/fileid.h>
|
||||||
#include <grub/elfload.h>
|
#include <grub/elfload.h>
|
||||||
|
#include <grub/misc.h>
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wcast-align"
|
#pragma GCC diagnostic ignored "-Wcast-align"
|
||||||
|
|
||||||
@@ -39,10 +40,10 @@ grub_file_check_netbsdXX (grub_elf_t elf)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (grub_file_seek (elf->file, elf->ehdr.ehdrXX.e_shoff) == (grub_off_t) -1)
|
if (grub_file_seek (elf->file, elf->ehdr.ehdrXX.e_shoff) == (grub_off_t) -1)
|
||||||
return 0;
|
goto fail;
|
||||||
|
|
||||||
if (grub_file_read (elf->file, s0, shsize) != (grub_ssize_t) shsize)
|
if (grub_file_read (elf->file, s0, shsize) != (grub_ssize_t) shsize)
|
||||||
return 0;
|
goto fail;
|
||||||
|
|
||||||
s = (Elf_Shdr *) ((char *) s0 + elf->ehdr.ehdrXX.e_shstrndx * shentsize);
|
s = (Elf_Shdr *) ((char *) s0 + elf->ehdr.ehdrXX.e_shstrndx * shentsize);
|
||||||
stroff = s->sh_offset;
|
stroff = s->sh_offset;
|
||||||
@@ -53,18 +54,21 @@ grub_file_check_netbsdXX (grub_elf_t elf)
|
|||||||
char name[sizeof(".note.netbsd.ident")];
|
char name[sizeof(".note.netbsd.ident")];
|
||||||
grub_memset (name, 0, sizeof (name));
|
grub_memset (name, 0, sizeof (name));
|
||||||
if (grub_file_seek (elf->file, stroff + s->sh_name) == (grub_off_t) -1)
|
if (grub_file_seek (elf->file, stroff + s->sh_name) == (grub_off_t) -1)
|
||||||
return grub_errno;
|
goto fail;
|
||||||
|
|
||||||
if (grub_file_read (elf->file, name, sizeof (name)) != (grub_ssize_t) sizeof (name))
|
if (grub_file_read (elf->file, name, sizeof (name)) != (grub_ssize_t) sizeof (name))
|
||||||
{
|
{
|
||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
return grub_errno;
|
goto fail;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (grub_memcmp (name, ".note.netbsd.ident",
|
if (grub_memcmp (name, ".note.netbsd.ident",
|
||||||
sizeof(".note.netbsd.ident")) != 0)
|
sizeof(".note.netbsd.ident")) != 0)
|
||||||
continue;
|
continue;
|
||||||
|
grub_free (s0);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
fail:
|
||||||
|
grub_free (s0);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,7 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Check if it is valid. */
|
/* Check if it is valid. */
|
||||||
if (mbr.signature != grub_cpu_to_le16 (GRUB_PC_PARTITION_SIGNATURE))
|
if (mbr.signature != grub_cpu_to_le16_compile_time (GRUB_PC_PARTITION_SIGNATURE))
|
||||||
{
|
{
|
||||||
grub_device_close (dev);
|
grub_device_close (dev);
|
||||||
return grub_error (GRUB_ERR_BAD_PART_TABLE, "no signature");
|
return grub_error (GRUB_ERR_BAD_PART_TABLE, "no signature");
|
||||||
@@ -216,7 +216,7 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
first_sector--;
|
first_sector--;
|
||||||
mbr.entries[0].flag = 0;
|
mbr.entries[0].flag = 0;
|
||||||
mbr.entries[0].type = GRUB_PC_PARTITION_TYPE_GPT_DISK;
|
mbr.entries[0].type = GRUB_PC_PARTITION_TYPE_GPT_DISK;
|
||||||
mbr.entries[0].start = grub_cpu_to_le32 (1);
|
mbr.entries[0].start = grub_cpu_to_le32_compile_time (1);
|
||||||
lba_to_chs (1,
|
lba_to_chs (1,
|
||||||
&(mbr.entries[0].start_sector),
|
&(mbr.entries[0].start_sector),
|
||||||
&(mbr.entries[0].start_cylinder),
|
&(mbr.entries[0].start_cylinder),
|
||||||
@@ -227,7 +227,7 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
&(mbr.entries[0].end_head));
|
&(mbr.entries[0].end_head));
|
||||||
mbr.entries[0].length = grub_cpu_to_le32 (first_sector);
|
mbr.entries[0].length = grub_cpu_to_le32 (first_sector);
|
||||||
|
|
||||||
mbr.signature = grub_cpu_to_le16 (GRUB_PC_PARTITION_SIGNATURE);
|
mbr.signature = grub_cpu_to_le16_compile_time (GRUB_PC_PARTITION_SIGNATURE);
|
||||||
|
|
||||||
if (grub_disk_write (dev->disk, 0, 0, sizeof (mbr), &mbr))
|
if (grub_disk_write (dev->disk, 0, 0, sizeof (mbr), &mbr))
|
||||||
{
|
{
|
||||||
@@ -235,6 +235,8 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_device_close (dev);
|
||||||
|
|
||||||
grub_printf_ (N_("New MBR is written to `%s'\n"), args[0]);
|
grub_printf_ (N_("New MBR is written to `%s'\n"), args[0]);
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
|
|||||||
@@ -329,6 +329,7 @@ grub_cmd_hdparm (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
grub_disk_close (disk);
|
||||||
return grub_error (GRUB_ERR_IO, "not an ATA device");
|
return grub_error (GRUB_ERR_IO, "not an ATA device");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,7 @@ GRUB_MOD_INIT(cmosdump)
|
|||||||
{
|
{
|
||||||
cmd = grub_register_command ("cmosdump", grub_cmd_cmosdump,
|
cmd = grub_register_command ("cmosdump", grub_cmd_cmosdump,
|
||||||
0,
|
0,
|
||||||
N_("Dump CMOS contents."));
|
N_("Show raw dump of the CMOS contents."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(cmosdump)
|
GRUB_MOD_FINI(cmosdump)
|
||||||
|
|||||||
@@ -109,9 +109,10 @@ GRUB_MOD_INIT(cmostest)
|
|||||||
N_("Test bit at BYTE:BIT in CMOS."));
|
N_("Test bit at BYTE:BIT in CMOS."));
|
||||||
cmd_clean = grub_register_command ("cmosclean", grub_cmd_cmosclean,
|
cmd_clean = grub_register_command ("cmosclean", grub_cmd_cmosclean,
|
||||||
N_("BYTE:BIT"),
|
N_("BYTE:BIT"),
|
||||||
N_("Clean bit at BYTE:BIT in CMOS."));
|
N_("Clear bit at BYTE:BIT in CMOS."));
|
||||||
cmd_set = grub_register_command ("cmosset", grub_cmd_cmosset,
|
cmd_set = grub_register_command ("cmosset", grub_cmd_cmosset,
|
||||||
N_("BYTE:BIT"),
|
N_("BYTE:BIT"),
|
||||||
|
/* TRANSLATORS: A bit may be either set (1) or clear (0). */
|
||||||
N_("Set bit at BYTE:BIT in CMOS."));
|
N_("Set bit at BYTE:BIT in CMOS."));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -109,7 +109,7 @@ GRUB_MOD_INIT(cbtime)
|
|||||||
{
|
{
|
||||||
cmd_boottime =
|
cmd_boottime =
|
||||||
grub_register_command ("coreboot_boottime", grub_cmd_coreboot_boottime,
|
grub_register_command ("coreboot_boottime", grub_cmd_coreboot_boottime,
|
||||||
0, N_("Get coreboot boot time statistics."));
|
0, N_("Show coreboot boot time statistics."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(cbtime)
|
GRUB_MOD_FINI(cbtime)
|
||||||
|
|||||||
@@ -107,6 +107,14 @@ grub_cmd_play (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!tempo)
|
||||||
|
{
|
||||||
|
grub_file_close (file);
|
||||||
|
grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid tempo in %s"),
|
||||||
|
args[0]);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
tempo = grub_le_to_cpu32 (tempo);
|
tempo = grub_le_to_cpu32 (tempo);
|
||||||
grub_dprintf ("play","tempo = %d\n", tempo);
|
grub_dprintf ("play","tempo = %d\n", tempo);
|
||||||
|
|
||||||
@@ -131,6 +139,13 @@ grub_cmd_play (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
tempo = grub_strtoul (args[0], &end, 0);
|
tempo = grub_strtoul (args[0], &end, 0);
|
||||||
|
|
||||||
|
if (!tempo)
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid tempo in %s"),
|
||||||
|
args[0]);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
if (*end)
|
if (*end)
|
||||||
/* Was not a number either, assume it was supposed to be a file name. */
|
/* Was not a number either, assume it was supposed to be a file name. */
|
||||||
return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), args[0]);
|
return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), args[0]);
|
||||||
|
|||||||
@@ -292,7 +292,7 @@ find_key_code (char *key)
|
|||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); 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)
|
||||||
@@ -311,7 +311,7 @@ find_ascii_code (char *key)
|
|||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); 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)
|
||||||
@@ -352,15 +352,13 @@ grub_cmd_sendkey (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
|
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
for (i = 0; i < sizeof (simple_flag_offsets)
|
for (i = 0; i < ARRAY_SIZE(simple_flag_offsets); i++)
|
||||||
/ sizeof (simple_flag_offsets[0]); 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]));
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Set noled. */
|
/* Set noled. */
|
||||||
noled = (state[sizeof (simple_flag_offsets)
|
noled = (state[ARRAY_SIZE(simple_flag_offsets)].set);
|
||||||
/ sizeof (simple_flag_offsets[0])].set);
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -173,8 +173,10 @@ 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;
|
||||||
|
}
|
||||||
|
|
||||||
if (status & GRUB_TERM_STATUS_CAPS)
|
if (status & GRUB_TERM_STATUS_CAPS)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -57,14 +57,20 @@ legacy_file (const char *filename)
|
|||||||
|
|
||||||
file = grub_file_open (filename);
|
file = grub_file_open (filename);
|
||||||
if (! file)
|
if (! file)
|
||||||
|
{
|
||||||
|
grub_free (suffix);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
menu = grub_env_get_menu ();
|
menu = grub_env_get_menu ();
|
||||||
if (! menu)
|
if (! menu)
|
||||||
{
|
{
|
||||||
menu = grub_zalloc (sizeof (*menu));
|
menu = grub_zalloc (sizeof (*menu));
|
||||||
if (! menu)
|
if (! menu)
|
||||||
|
{
|
||||||
|
grub_free (suffix);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
grub_env_set_menu (menu);
|
grub_env_set_menu (menu);
|
||||||
}
|
}
|
||||||
@@ -77,6 +83,7 @@ legacy_file (const char *filename)
|
|||||||
if (!buf && grub_errno)
|
if (!buf && grub_errno)
|
||||||
{
|
{
|
||||||
grub_file_close (file);
|
grub_file_close (file);
|
||||||
|
grub_free (suffix);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -173,6 +180,8 @@ legacy_file (const char *filename)
|
|||||||
if (!args)
|
if (!args)
|
||||||
{
|
{
|
||||||
grub_file_close (file);
|
grub_file_close (file);
|
||||||
|
grub_free (suffix);
|
||||||
|
grub_free (entrysrc);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
args[0] = entryname;
|
args[0] = entryname;
|
||||||
@@ -376,6 +385,8 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (part && grub_strcmp (part->partmap->name, "msdos") == 0)
|
if (part && grub_strcmp (part->partmap->name, "msdos") == 0)
|
||||||
bsd_slice = part->number;
|
bsd_slice = part->number;
|
||||||
}
|
}
|
||||||
|
if (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. */
|
||||||
@@ -580,7 +591,7 @@ check_password_md5_real (const char *entered,
|
|||||||
GRUB_MD_MD5->write (ctx, entered, enteredlen);
|
GRUB_MD_MD5->write (ctx, entered, enteredlen);
|
||||||
digest = GRUB_MD_MD5->read (ctx);
|
digest = GRUB_MD_MD5->read (ctx);
|
||||||
GRUB_MD_MD5->final (ctx);
|
GRUB_MD_MD5->final (ctx);
|
||||||
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);
|
||||||
@@ -596,7 +607,7 @@ check_password_md5_real (const char *entered,
|
|||||||
|
|
||||||
for (i = 0; i < 1000; i++)
|
for (i = 0; i < 1000; i++)
|
||||||
{
|
{
|
||||||
memcpy (alt_result, digest, 16);
|
grub_memcpy (alt_result, digest, 16);
|
||||||
|
|
||||||
GRUB_MD_MD5->init (ctx);
|
GRUB_MD_MD5->init (ctx);
|
||||||
if ((i & 1) != 0)
|
if ((i & 1) != 0)
|
||||||
|
|||||||
@@ -263,7 +263,7 @@ check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
|
|||||||
for (q = p->next; q; q = q->next)
|
for (q = p->next; q; q = q->next)
|
||||||
{
|
{
|
||||||
grub_disk_addr_t s1, s2;
|
grub_disk_addr_t s1, s2;
|
||||||
grub_disk_addr_t e1, e2, t;
|
grub_disk_addr_t e1, e2;
|
||||||
|
|
||||||
s1 = p->sector;
|
s1 = p->sector;
|
||||||
e1 = s1 + ((p->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS);
|
e1 = s1 + ((p->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS);
|
||||||
@@ -271,16 +271,7 @@ check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
|
|||||||
s2 = q->sector;
|
s2 = q->sector;
|
||||||
e2 = s2 + ((q->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS);
|
e2 = s2 + ((q->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS);
|
||||||
|
|
||||||
if (s2 > s1)
|
if (s1 < e2 && s2 < e1)
|
||||||
{
|
|
||||||
t = s2;
|
|
||||||
s2 = s1;
|
|
||||||
s1 = t;
|
|
||||||
t = e2;
|
|
||||||
e2 = e1;
|
|
||||||
e1 = t;
|
|
||||||
}
|
|
||||||
if (e1 > s2)
|
|
||||||
{
|
{
|
||||||
/* This might be actually valid, but it is unbelievable that
|
/* This might be actually valid, but it is unbelievable that
|
||||||
any filesystem makes such a silly allocation. */
|
any filesystem makes such a silly allocation. */
|
||||||
@@ -455,7 +446,7 @@ GRUB_MOD_INIT(loadenv)
|
|||||||
{
|
{
|
||||||
cmd_load =
|
cmd_load =
|
||||||
grub_register_extcmd ("load_env", grub_cmd_load_env, 0,
|
grub_register_extcmd ("load_env", grub_cmd_load_env, 0,
|
||||||
N_("[-f FILE] [-s|--skip-sig] [whitelisted_variable_name] [...]"),
|
N_("[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]"),
|
||||||
N_("Load variables from environment block file."),
|
N_("Load variables from environment block file."),
|
||||||
options);
|
options);
|
||||||
cmd_list =
|
cmd_list =
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ struct find_node_context
|
|||||||
grub_uint64_t inode_found;
|
grub_uint64_t inode_found;
|
||||||
char *dirname;
|
char *dirname;
|
||||||
enum
|
enum
|
||||||
{ NONE, FILE, DIR } found;
|
{ FOUND_NONE, FOUND_FILE, FOUND_DIR } found;
|
||||||
};
|
};
|
||||||
|
|
||||||
static int
|
static int
|
||||||
@@ -53,13 +53,13 @@ find_inode (const char *filename,
|
|||||||
&& grub_strcasecmp (ctx->dirname, filename) == 0)))
|
&& grub_strcasecmp (ctx->dirname, filename) == 0)))
|
||||||
{
|
{
|
||||||
ctx->inode_found = info->inode;
|
ctx->inode_found = info->inode;
|
||||||
ctx->found = info->dir ? DIR : FILE;
|
ctx->found = info->dir ? FOUND_DIR : FOUND_FILE;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_err_t
|
grub_err_t
|
||||||
grub_mac_bless_inode (grub_device_t dev, grub_uint64_t inode, int is_dir,
|
grub_mac_bless_inode (grub_device_t dev, grub_uint32_t inode, int is_dir,
|
||||||
int intel)
|
int intel)
|
||||||
{
|
{
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
@@ -106,7 +106,7 @@ grub_mac_bless_inode (grub_device_t dev, grub_uint64_t inode, int is_dir,
|
|||||||
ablk_size = grub_be_to_cpu32 (volheader.hfs.blksz);
|
ablk_size = grub_be_to_cpu32 (volheader.hfs.blksz);
|
||||||
ablk_start = grub_be_to_cpu16 (volheader.hfs.first_block);
|
ablk_start = grub_be_to_cpu16 (volheader.hfs.first_block);
|
||||||
embedded_offset = (ablk_start
|
embedded_offset = (ablk_start
|
||||||
+ extent_start
|
+ ((grub_uint64_t) extent_start)
|
||||||
* (ablk_size >> GRUB_DISK_SECTOR_BITS));
|
* (ablk_size >> GRUB_DISK_SECTOR_BITS));
|
||||||
|
|
||||||
err =
|
err =
|
||||||
@@ -174,8 +174,8 @@ grub_mac_bless_file (grub_device_t dev, const char *path_in, int intel)
|
|||||||
}
|
}
|
||||||
grub_free (path);
|
grub_free (path);
|
||||||
|
|
||||||
return grub_mac_bless_inode (dev, ctx.inode_found, (ctx.found == DIR),
|
return grub_mac_bless_inode (dev, (grub_uint32_t) ctx.inode_found,
|
||||||
intel);
|
(ctx.found == FOUND_DIR), intel);
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
@@ -183,7 +183,7 @@ grub_cmd_macbless (grub_command_t cmd, int argc, char **args)
|
|||||||
{
|
{
|
||||||
char *device_name;
|
char *device_name;
|
||||||
char *path = 0;
|
char *path = 0;
|
||||||
grub_device_t dev;
|
grub_device_t dev = 0;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
|
|
||||||
if (argc != 1)
|
if (argc != 1)
|
||||||
@@ -197,13 +197,12 @@ grub_cmd_macbless (grub_command_t cmd, int argc, char **args)
|
|||||||
else
|
else
|
||||||
path = path + 1;
|
path = path + 1;
|
||||||
|
|
||||||
if (!path || *path == 0 || !device_name)
|
if (!path || *path == 0 || !dev)
|
||||||
{
|
{
|
||||||
if (dev)
|
if (dev)
|
||||||
grub_device_close (dev);
|
grub_device_close (dev);
|
||||||
|
|
||||||
grub_free (device_name);
|
grub_free (device_name);
|
||||||
grub_free (path);
|
|
||||||
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid argument");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid argument");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -57,6 +57,7 @@ get_uuid (const char *name, char **uuid, int getnative)
|
|||||||
if (!dev->disk)
|
if (!dev->disk)
|
||||||
{
|
{
|
||||||
grub_dprintf ("nativedisk", "Skipping non-disk\n");
|
grub_dprintf ("nativedisk", "Skipping non-disk\n");
|
||||||
|
grub_device_close (dev);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,6 +91,7 @@ get_uuid (const char *name, char **uuid, int getnative)
|
|||||||
case GRUB_DISK_DEVICE_MEMDISK_ID:
|
case GRUB_DISK_DEVICE_MEMDISK_ID:
|
||||||
grub_dprintf ("nativedisk", "Skipping native disk %s\n",
|
grub_dprintf ("nativedisk", "Skipping native disk %s\n",
|
||||||
dev->disk->name);
|
dev->disk->name);
|
||||||
|
grub_device_close (dev);
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* FIXME: those probably need special handling. */
|
/* FIXME: those probably need special handling. */
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ show_help (grub_device_t dev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (! found)
|
if (! found)
|
||||||
grub_printf_ (N_("Sorry no parttool is available for %s\n"),
|
grub_printf_ (N_("Sorry, no parttool is available for %s\n"),
|
||||||
dev->disk->partition->partmap->name);
|
dev->disk->partition->partmap->name);
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
@@ -243,11 +243,19 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (argc == 1)
|
if (argc == 1)
|
||||||
return show_help (dev);
|
{
|
||||||
|
err = show_help (dev);
|
||||||
|
grub_device_close (dev);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 1; i < argc; i++)
|
for (i = 1; i < argc; i++)
|
||||||
if (grub_strcmp (args[i], "help") == 0)
|
if (grub_strcmp (args[i], "help") == 0)
|
||||||
return show_help (dev);
|
{
|
||||||
|
err = show_help (dev);
|
||||||
|
grub_device_close (dev);
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
parsed = (int *) grub_zalloc (argc * sizeof (int));
|
parsed = (int *) grub_zalloc (argc * sizeof (int));
|
||||||
|
|
||||||
@@ -274,8 +282,11 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
if (! cur)
|
if (! cur)
|
||||||
|
{
|
||||||
|
grub_device_close (dev);
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("unknown argument `%s'"),
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("unknown argument `%s'"),
|
||||||
args[i]);
|
args[i]);
|
||||||
|
}
|
||||||
ptool = cur;
|
ptool = cur;
|
||||||
pargs = (struct grub_parttool_args *)
|
pargs = (struct grub_parttool_args *)
|
||||||
grub_zalloc (ptool->nargs * sizeof (struct grub_parttool_args));
|
grub_zalloc (ptool->nargs * sizeof (struct grub_parttool_args));
|
||||||
|
|||||||
@@ -166,7 +166,7 @@ GRUB_MOD_INIT(pcidump)
|
|||||||
{
|
{
|
||||||
cmd = grub_register_extcmd ("pcidump", grub_cmd_pcidump, 0,
|
cmd = grub_register_extcmd ("pcidump", grub_cmd_pcidump, 0,
|
||||||
N_("[-s POSITION] [-d DEVICE]"),
|
N_("[-s POSITION] [-d DEVICE]"),
|
||||||
N_("Dump PCI configuration space."), options);
|
N_("Show raw dump of the PCI configuration space."), options);
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(pcidump)
|
GRUB_MOD_FINI(pcidump)
|
||||||
|
|||||||
@@ -47,14 +47,14 @@ syslinux_file_getline (char **line, int cont __attribute__ ((unused)),
|
|||||||
static const struct grub_arg_option options[] =
|
static const struct grub_arg_option options[] =
|
||||||
{
|
{
|
||||||
{"root", 'r', 0,
|
{"root", 'r', 0,
|
||||||
N_("root directory of the syslinux disk (default /)."),
|
N_("root directory of the syslinux disk [default=/]."),
|
||||||
N_("DIR"), ARG_TYPE_STRING},
|
N_("DIR"), ARG_TYPE_STRING},
|
||||||
{"cwd", 'c', 0,
|
{"cwd", 'c', 0,
|
||||||
N_("home directory of the syslinux config (default directory of configfile)."),
|
N_("current directory of syslinux [default is parent directory of input file]."),
|
||||||
N_("DIR"), ARG_TYPE_STRING},
|
N_("DIR"), ARG_TYPE_STRING},
|
||||||
{"isolinux", 'i', 0, N_("assume isolinux."), 0, 0},
|
{"isolinux", 'i', 0, N_("assume input is an isolinux configuration file."), 0, 0},
|
||||||
{"pxelinux", 'p', 0, N_("assume pxelinux."), 0, 0},
|
{"pxelinux", 'p', 0, N_("assume input is a pxelinux configuration file."), 0, 0},
|
||||||
{"syslinux", 's', 0, N_("assume syslinux."), 0, 0},
|
{"syslinux", 's', 0, N_("assume input is a syslinux configuration file."), 0, 0},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -119,7 +119,10 @@ syslinux_file (grub_extcmd_context_t ctxt, const char *filename)
|
|||||||
{
|
{
|
||||||
menu = grub_zalloc (sizeof (*menu));
|
menu = grub_zalloc (sizeof (*menu));
|
||||||
if (! menu)
|
if (! menu)
|
||||||
|
{
|
||||||
|
grub_free (result);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
grub_env_set_menu (menu);
|
grub_env_set_menu (menu);
|
||||||
}
|
}
|
||||||
@@ -183,25 +186,25 @@ GRUB_MOD_INIT(syslinuxcfg)
|
|||||||
N_("FILE"),
|
N_("FILE"),
|
||||||
/* TRANSLATORS: "syslinux config" means
|
/* TRANSLATORS: "syslinux config" means
|
||||||
"config as used by syslinux". */
|
"config as used by syslinux". */
|
||||||
N_("Parse syslinux config in same context"),
|
N_("Execute syslinux config in same context"),
|
||||||
options);
|
options);
|
||||||
cmd_configfile
|
cmd_configfile
|
||||||
= grub_register_extcmd ("syslinux_configfile",
|
= grub_register_extcmd ("syslinux_configfile",
|
||||||
grub_cmd_syslinux_source, 0,
|
grub_cmd_syslinux_source, 0,
|
||||||
N_("FILE"),
|
N_("FILE"),
|
||||||
N_("Parse syslinux config in new context"),
|
N_("Execute syslinux config in new context"),
|
||||||
options);
|
options);
|
||||||
cmd_source_extract
|
cmd_source_extract
|
||||||
= grub_register_extcmd ("extract_syslinux_entries_source",
|
= grub_register_extcmd ("extract_syslinux_entries_source",
|
||||||
grub_cmd_syslinux_source, 0,
|
grub_cmd_syslinux_source, 0,
|
||||||
N_("FILE"),
|
N_("FILE"),
|
||||||
N_("Parse syslinux config in same context taking only menu entries"),
|
N_("Execute syslinux config in same context taking only menu entries"),
|
||||||
options);
|
options);
|
||||||
cmd_configfile_extract
|
cmd_configfile_extract
|
||||||
= grub_register_extcmd ("extract_syslinux_entries_configfile",
|
= grub_register_extcmd ("extract_syslinux_entries_configfile",
|
||||||
grub_cmd_syslinux_source, 0,
|
grub_cmd_syslinux_source, 0,
|
||||||
N_("FILE"),
|
N_("FILE"),
|
||||||
N_("Parse syslinux config in new context taking only menu entries"),
|
N_("Execute syslinux config in new context taking only menu entries"),
|
||||||
options);
|
options);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -332,7 +332,7 @@ test_parse (char **args, int *argn, int argc)
|
|||||||
get_fileinfo (args[*argn + 1], &ctx);
|
get_fileinfo (args[*argn + 1], &ctx);
|
||||||
update_val (ctx.file_exists && ctx.file_info.dir, &ctx);
|
update_val (ctx.file_exists && ctx.file_info.dir, &ctx);
|
||||||
(*argn) += 2;
|
(*argn) += 2;
|
||||||
return ctx.or || ctx.and;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grub_strcmp (args[*argn], "-e") == 0)
|
if (grub_strcmp (args[*argn], "-e") == 0)
|
||||||
@@ -340,7 +340,7 @@ test_parse (char **args, int *argn, int argc)
|
|||||||
get_fileinfo (args[*argn + 1], &ctx);
|
get_fileinfo (args[*argn + 1], &ctx);
|
||||||
update_val (ctx.file_exists, &ctx);
|
update_val (ctx.file_exists, &ctx);
|
||||||
(*argn) += 2;
|
(*argn) += 2;
|
||||||
return ctx.or || ctx.and;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grub_strcmp (args[*argn], "-f") == 0)
|
if (grub_strcmp (args[*argn], "-f") == 0)
|
||||||
@@ -349,7 +349,7 @@ test_parse (char **args, int *argn, int argc)
|
|||||||
/* FIXME: check for other types. */
|
/* FIXME: check for other types. */
|
||||||
update_val (ctx.file_exists && ! ctx.file_info.dir, &ctx);
|
update_val (ctx.file_exists && ! ctx.file_info.dir, &ctx);
|
||||||
(*argn) += 2;
|
(*argn) += 2;
|
||||||
return ctx.or || ctx.and;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (grub_strcmp (args[*argn], "-s") == 0)
|
if (grub_strcmp (args[*argn], "-s") == 0)
|
||||||
@@ -362,7 +362,7 @@ test_parse (char **args, int *argn, int argc)
|
|||||||
grub_file_close (file);
|
grub_file_close (file);
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
(*argn) += 2;
|
(*argn) += 2;
|
||||||
return ctx.or || ctx.and;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* String tests. */
|
/* String tests. */
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ grub_cmd_tr (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
} else if (argc > 3)
|
} else if (argc > 3)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "too many parameters");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "too many parameters");
|
||||||
|
|
||||||
if (argc <= 0 && (!s1 || !s2 || !input))
|
if (!s1 || !s2 || !input)
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, "missing parameters");
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, "missing parameters");
|
||||||
|
|
||||||
if (grub_strlen (s1) != grub_strlen (s2))
|
if (grub_strlen (s1) != grub_strlen (s2))
|
||||||
|
|||||||
+69
-19
@@ -33,6 +33,13 @@
|
|||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
|
struct grub_verified
|
||||||
|
{
|
||||||
|
grub_file_t file;
|
||||||
|
void *buf;
|
||||||
|
};
|
||||||
|
typedef struct grub_verified *grub_verified_t;
|
||||||
|
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
OPTION_SKIP_SIG = 0
|
OPTION_SKIP_SIG = 0
|
||||||
@@ -41,7 +48,7 @@ enum
|
|||||||
static const struct grub_arg_option options[] =
|
static const struct grub_arg_option options[] =
|
||||||
{
|
{
|
||||||
{"skip-sig", 's', 0,
|
{"skip-sig", 's', 0,
|
||||||
N_("Skip signature-checking of the signature file."), 0, ARG_TYPE_NONE},
|
N_("Skip signature-checking of the public key file."), 0, ARG_TYPE_NONE},
|
||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -301,7 +308,7 @@ grub_load_public_key (grub_file_t f)
|
|||||||
if (!sk)
|
if (!sk)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
grub_memset (fingerprint_context, 0, sizeof (fingerprint_context));
|
grub_memset (fingerprint_context, 0, GRUB_MD_SHA1->contextsize);
|
||||||
GRUB_MD_SHA1->init (fingerprint_context);
|
GRUB_MD_SHA1->init (fingerprint_context);
|
||||||
GRUB_MD_SHA1->write (fingerprint_context, "\x99", 1);
|
GRUB_MD_SHA1->write (fingerprint_context, "\x99", 1);
|
||||||
len_be = grub_cpu_to_be16 (len);
|
len_be = grub_cpu_to_be16 (len);
|
||||||
@@ -802,19 +809,39 @@ grub_cmd_verify_signature (grub_extcmd_context_t ctxt,
|
|||||||
|
|
||||||
static int sec = 0;
|
static int sec = 0;
|
||||||
|
|
||||||
|
static void
|
||||||
|
verified_free (grub_verified_t verified)
|
||||||
|
{
|
||||||
|
if (verified)
|
||||||
|
{
|
||||||
|
grub_free (verified->buf);
|
||||||
|
grub_free (verified);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static grub_ssize_t
|
static grub_ssize_t
|
||||||
verified_read (struct grub_file *file, char *buf, grub_size_t len)
|
verified_read (struct grub_file *file, char *buf, grub_size_t len)
|
||||||
{
|
{
|
||||||
grub_memcpy (buf, (char *) file->data + file->offset, len);
|
grub_verified_t verified = file->data;
|
||||||
|
|
||||||
|
grub_memcpy (buf, (char *) verified->buf + file->offset, len);
|
||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
verified_close (struct grub_file *file)
|
verified_close (struct grub_file *file)
|
||||||
{
|
{
|
||||||
grub_free (file->data);
|
grub_verified_t verified = file->data;
|
||||||
|
|
||||||
|
grub_file_close (verified->file);
|
||||||
|
verified_free (verified);
|
||||||
file->data = 0;
|
file->data = 0;
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
|
/* device and name are freed by parent */
|
||||||
|
file->device = 0;
|
||||||
|
file->name = 0;
|
||||||
|
|
||||||
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct grub_fs verified_fs =
|
struct grub_fs verified_fs =
|
||||||
@@ -832,10 +859,13 @@ grub_pubkey_open (grub_file_t io, const char *filename)
|
|||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_file_filter_t curfilt[GRUB_FILE_FILTER_MAX];
|
grub_file_filter_t curfilt[GRUB_FILE_FILTER_MAX];
|
||||||
grub_file_t ret;
|
grub_file_t ret;
|
||||||
|
grub_verified_t verified;
|
||||||
|
|
||||||
if (!sec)
|
if (!sec)
|
||||||
return io;
|
return io;
|
||||||
if (io->device->disk && io->device->disk->id == GRUB_DISK_DEVICE_MEMDISK_ID)
|
if (io->device->disk &&
|
||||||
|
(io->device->disk->dev->id == GRUB_DISK_DEVICE_MEMDISK_ID
|
||||||
|
|| io->device->disk->dev->id == GRUB_DISK_DEVICE_PROCFS_ID))
|
||||||
return io;
|
return io;
|
||||||
fsuf = grub_malloc (grub_strlen (filename) + sizeof (".sig"));
|
fsuf = grub_malloc (grub_strlen (filename) + sizeof (".sig"));
|
||||||
if (!fsuf)
|
if (!fsuf)
|
||||||
@@ -855,7 +885,10 @@ grub_pubkey_open (grub_file_t io, const char *filename)
|
|||||||
|
|
||||||
ret = grub_malloc (sizeof (*ret));
|
ret = grub_malloc (sizeof (*ret));
|
||||||
if (!ret)
|
if (!ret)
|
||||||
|
{
|
||||||
|
grub_file_close (sig);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
*ret = *io;
|
*ret = *io;
|
||||||
|
|
||||||
ret->fs = &verified_fs;
|
ret->fs = &verified_fs;
|
||||||
@@ -864,29 +897,46 @@ grub_pubkey_open (grub_file_t io, const char *filename)
|
|||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
"big file signature isn't implemented yet");
|
"big file signature isn't implemented yet");
|
||||||
return NULL;
|
grub_file_close (sig);
|
||||||
}
|
|
||||||
ret->data = grub_malloc (ret->size);
|
|
||||||
if (!ret->data)
|
|
||||||
{
|
|
||||||
grub_free (ret);
|
grub_free (ret);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (grub_file_read (io, ret->data, ret->size) != (grub_ssize_t) ret->size)
|
verified = grub_malloc (sizeof (*verified));
|
||||||
|
if (!verified)
|
||||||
|
{
|
||||||
|
grub_file_close (sig);
|
||||||
|
grub_free (ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
verified->buf = grub_malloc (ret->size);
|
||||||
|
if (!verified->buf)
|
||||||
|
{
|
||||||
|
grub_file_close (sig);
|
||||||
|
grub_free (verified);
|
||||||
|
grub_free (ret);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
if (grub_file_read (io, verified->buf, ret->size) != (grub_ssize_t) ret->size)
|
||||||
{
|
{
|
||||||
if (!grub_errno)
|
if (!grub_errno)
|
||||||
grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"),
|
grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"),
|
||||||
filename);
|
filename);
|
||||||
|
grub_file_close (sig);
|
||||||
|
verified_free (verified);
|
||||||
|
grub_free (ret);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = grub_verify_signature_real (ret->data, ret->size, 0, sig, NULL);
|
err = grub_verify_signature_real (verified->buf, ret->size, 0, sig, NULL);
|
||||||
grub_file_close (sig);
|
grub_file_close (sig);
|
||||||
if (err)
|
if (err)
|
||||||
|
{
|
||||||
|
verified_free (verified);
|
||||||
|
grub_free (ret);
|
||||||
return NULL;
|
return NULL;
|
||||||
io->device = 0;
|
}
|
||||||
io->name = 0;
|
verified->file = io;
|
||||||
grub_file_close (io);
|
ret->data = verified;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -966,14 +1016,14 @@ GRUB_MOD_INIT(verify)
|
|||||||
options);
|
options);
|
||||||
cmd_trust = grub_register_extcmd ("trust", grub_cmd_trust, 0,
|
cmd_trust = grub_register_extcmd ("trust", grub_cmd_trust, 0,
|
||||||
N_("[-s|--skip-sig] PUBKEY_FILE"),
|
N_("[-s|--skip-sig] PUBKEY_FILE"),
|
||||||
N_("Add PKFILE to trusted keys."),
|
N_("Add PUBKEY_FILE to trusted keys."),
|
||||||
options);
|
options);
|
||||||
cmd_list = grub_register_command ("list_trusted", grub_cmd_list,
|
cmd_list = grub_register_command ("list_trusted", grub_cmd_list,
|
||||||
0,
|
0,
|
||||||
N_("List trusted keys."));
|
N_("Show the list of trusted keys."));
|
||||||
cmd_distrust = grub_register_command ("distrust", grub_cmd_distrust,
|
cmd_distrust = grub_register_command ("distrust", grub_cmd_distrust,
|
||||||
N_("PUBKEY_ID"),
|
N_("PUBKEY_ID"),
|
||||||
N_("Remove KEYID from trusted keys."));
|
N_("Remove PUBKEY_ID from trusted keys."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI(verify)
|
GRUB_MOD_FINI(verify)
|
||||||
|
|||||||
@@ -245,7 +245,10 @@ match_devices_iter (const char *name, void *data)
|
|||||||
|
|
||||||
t = grub_realloc (ctx->devs, sizeof (char*) * (ctx->ndev + 2));
|
t = grub_realloc (ctx->devs, sizeof (char*) * (ctx->ndev + 2));
|
||||||
if (! t)
|
if (! t)
|
||||||
|
{
|
||||||
|
grub_free (buffer);
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
ctx->devs = t;
|
ctx->devs = t;
|
||||||
ctx->devs[ctx->ndev++] = buffer;
|
ctx->devs[ctx->ndev++] = buffer;
|
||||||
@@ -290,7 +293,8 @@ struct match_files_ctx
|
|||||||
|
|
||||||
/* Helper for match_files. */
|
/* Helper for match_files. */
|
||||||
static int
|
static int
|
||||||
match_files_iter (const char *name, const struct grub_dirhook_info *info,
|
match_files_iter (const char *name,
|
||||||
|
const struct grub_dirhook_info *info __attribute__((unused)),
|
||||||
void *data)
|
void *data)
|
||||||
{
|
{
|
||||||
struct match_files_ctx *ctx = data;
|
struct match_files_ctx *ctx = data;
|
||||||
|
|||||||
@@ -78,9 +78,9 @@ static grub_command_t cmd_ls, cmd_cat;
|
|||||||
GRUB_MOD_INIT (lsxen)
|
GRUB_MOD_INIT (lsxen)
|
||||||
{
|
{
|
||||||
cmd_ls = grub_register_command ("xen_ls", grub_cmd_lsxen, N_("[DIR]"),
|
cmd_ls = grub_register_command ("xen_ls", grub_cmd_lsxen, N_("[DIR]"),
|
||||||
N_("List XEN storage."));
|
N_("List Xen storage."));
|
||||||
cmd_cat = grub_register_command ("xen_cat", grub_cmd_catxen, N_("[DIR]"),
|
cmd_cat = grub_register_command ("xen_cat", grub_cmd_catxen, N_("[DIR]"),
|
||||||
N_("List XEN storage."));
|
N_("List Xen storage."));
|
||||||
}
|
}
|
||||||
|
|
||||||
GRUB_MOD_FINI (lsxen)
|
GRUB_MOD_FINI (lsxen)
|
||||||
|
|||||||
@@ -72,13 +72,13 @@ AF_merge (const gcry_md_spec_t * hash, grub_uint8_t * src, grub_uint8_t * dst,
|
|||||||
grub_size_t i;
|
grub_size_t i;
|
||||||
grub_uint8_t *bufblock;
|
grub_uint8_t *bufblock;
|
||||||
|
|
||||||
|
if (hash->mdlen > GRUB_CRYPTO_MAX_MDLEN || hash->mdlen == 0)
|
||||||
|
return GPG_ERR_INV_ARG;
|
||||||
|
|
||||||
bufblock = grub_zalloc (blocksize);
|
bufblock = grub_zalloc (blocksize);
|
||||||
if (bufblock == NULL)
|
if (bufblock == NULL)
|
||||||
return GPG_ERR_OUT_OF_MEMORY;
|
return GPG_ERR_OUT_OF_MEMORY;
|
||||||
|
|
||||||
if (hash->mdlen > GRUB_CRYPTO_MAX_MDLEN)
|
|
||||||
return GPG_ERR_INV_ARG;
|
|
||||||
|
|
||||||
grub_memset (bufblock, 0, blocksize);
|
grub_memset (bufblock, 0, blocksize);
|
||||||
for (i = 0; i < blocknumbers - 1; i++)
|
for (i = 0; i < blocknumbers - 1; i++)
|
||||||
{
|
{
|
||||||
|
|||||||
+30
-9
@@ -194,13 +194,11 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
|
||||||
grub_pci_write_word (addr, grub_pci_read_word (addr) |
|
grub_pci_write_word (addr, grub_pci_read_word (addr)
|
||||||
GRUB_PCI_COMMAND_IO_ENABLED
|
| GRUB_PCI_COMMAND_MEM_ENABLED);
|
||||||
| GRUB_PCI_COMMAND_MEM_ENABLED
|
|
||||||
| GRUB_PCI_COMMAND_BUS_MASTER);
|
|
||||||
|
|
||||||
hba = grub_pci_device_map_range (dev, bar & GRUB_PCI_ADDR_MEM_MASK,
|
hba = grub_pci_device_map_range (dev, bar & GRUB_PCI_ADDR_MEM_MASK,
|
||||||
sizeof (hba));
|
sizeof (*hba));
|
||||||
grub_dprintf ("ahci", "dev: %x:%x.%x\n", dev.bus, dev.device, dev.function);
|
grub_dprintf ("ahci", "dev: %x:%x.%x\n", dev.bus, dev.device, dev.function);
|
||||||
|
|
||||||
grub_dprintf ("ahci", "tfd[0]: %x\n",
|
grub_dprintf ("ahci", "tfd[0]: %x\n",
|
||||||
@@ -324,7 +322,7 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
|
|
||||||
grub_dprintf ("ahci", "GLC:%x\n", hba->global_control);
|
grub_dprintf ("ahci", "GLC:%x\n", hba->global_control);
|
||||||
|
|
||||||
nports = (hba->cap & GRUB_AHCI_HBA_CAP_NPORTS_MASK) + 1;
|
nports = (GRUB_AHCI_HBA_CAP_NPORTS_MASK) + 1;
|
||||||
|
|
||||||
grub_dprintf ("ahci", "%d AHCI ports, PI = 0x%x\n", nports,
|
grub_dprintf ("ahci", "%d AHCI ports, PI = 0x%x\n", nports,
|
||||||
hba->ports_implemented);
|
hba->ports_implemented);
|
||||||
@@ -360,7 +358,7 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
grub_dprintf ("ahci", "err: %x\n",
|
grub_dprintf ("ahci", "err: %x\n",
|
||||||
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
adevs[i]->hba->ports[adevs[i]->port].sata_error);
|
||||||
|
|
||||||
adevs[i]->command_list_chunk = grub_memalign_dma32 (1024, sizeof (struct grub_ahci_cmd_head));
|
adevs[i]->command_list_chunk = grub_memalign_dma32 (1024, sizeof (struct grub_ahci_cmd_head) * 32);
|
||||||
if (!adevs[i]->command_list_chunk)
|
if (!adevs[i]->command_list_chunk)
|
||||||
{
|
{
|
||||||
adevs[i] = 0;
|
adevs[i] = 0;
|
||||||
@@ -378,6 +376,12 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
|
|
||||||
adevs[i]->command_list = grub_dma_get_virt (adevs[i]->command_list_chunk);
|
adevs[i]->command_list = grub_dma_get_virt (adevs[i]->command_list_chunk);
|
||||||
adevs[i]->command_table = grub_dma_get_virt (adevs[i]->command_table_chunk);
|
adevs[i]->command_table = grub_dma_get_virt (adevs[i]->command_table_chunk);
|
||||||
|
|
||||||
|
grub_memset ((void *) adevs[i]->command_list, 0,
|
||||||
|
sizeof (struct grub_ahci_cmd_table));
|
||||||
|
grub_memset ((void *) adevs[i]->command_table, 0,
|
||||||
|
sizeof (struct grub_ahci_cmd_head) * 32);
|
||||||
|
|
||||||
adevs[i]->command_list->command_table_base
|
adevs[i]->command_list->command_table_base
|
||||||
= grub_dma_get_phys (adevs[i]->command_table_chunk);
|
= grub_dma_get_phys (adevs[i]->command_table_chunk);
|
||||||
|
|
||||||
@@ -450,6 +454,7 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
adevs[i]->hba->ports[adevs[i]->port].fis_base = grub_dma_get_phys (adevs[i]->rfis);
|
adevs[i]->hba->ports[adevs[i]->port].fis_base = grub_dma_get_phys (adevs[i]->rfis);
|
||||||
adevs[i]->hba->ports[adevs[i]->port].command_list_base
|
adevs[i]->hba->ports[adevs[i]->port].command_list_base
|
||||||
= grub_dma_get_phys (adevs[i]->command_list_chunk);
|
= grub_dma_get_phys (adevs[i]->command_list_chunk);
|
||||||
|
adevs[i]->hba->ports[adevs[i]->port].command_issue = 0;
|
||||||
adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_FRE;
|
adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_FRE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -596,6 +601,9 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
failed_adevs[i] = adevs[i];
|
failed_adevs[i] = adevs[i];
|
||||||
adevs[i] = 0;
|
adevs[i] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_dprintf ("ahci", "cleaning up failed devs\n");
|
||||||
|
|
||||||
for (i = 0; i < nports; i++)
|
for (i = 0; i < nports; i++)
|
||||||
if (failed_adevs[i] && (fr_running & (1 << i)))
|
if (failed_adevs[i] && (fr_running & (1 << i)))
|
||||||
failed_adevs[i]->hba->ports[failed_adevs[i]->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_FRE;
|
failed_adevs[i]->hba->ports[failed_adevs[i]->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_FRE;
|
||||||
@@ -621,6 +629,10 @@ grub_ahci_pciinit (grub_pci_device_t dev,
|
|||||||
if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].sig >> 16) == 0xeb14)
|
if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].sig >> 16) == 0xeb14)
|
||||||
adevs[i]->atapi = 1;
|
adevs[i]->atapi = 1;
|
||||||
|
|
||||||
|
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
|
||||||
|
grub_pci_write_word (addr, grub_pci_read_word (addr)
|
||||||
|
| GRUB_PCI_COMMAND_BUS_MASTER);
|
||||||
|
|
||||||
for (i = 0; i < nports; i++)
|
for (i = 0; i < nports; i++)
|
||||||
if (adevs[i])
|
if (adevs[i])
|
||||||
{
|
{
|
||||||
@@ -847,6 +859,12 @@ grub_ahci_reset_port (struct grub_ahci_device *dev, int force)
|
|||||||
{
|
{
|
||||||
struct grub_disk_ata_pass_through_parms parms2;
|
struct grub_disk_ata_pass_through_parms parms2;
|
||||||
dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_ST;
|
dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_ST;
|
||||||
|
dev->hba->ports[dev->port].command_issue = 0;
|
||||||
|
dev->command_list[0].config = 0;
|
||||||
|
dev->command_table[0].prdt[0].unused = 0;
|
||||||
|
dev->command_table[0].prdt[0].size = 0;
|
||||||
|
dev->command_table[0].prdt[0].data_base = 0;
|
||||||
|
|
||||||
endtime = grub_get_time_ms () + 1000;
|
endtime = grub_get_time_ms () + 1000;
|
||||||
while ((dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_CR))
|
while ((dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_CR))
|
||||||
if (grub_get_time_ms () > endtime)
|
if (grub_get_time_ms () > endtime)
|
||||||
@@ -914,7 +932,10 @@ grub_ahci_readwrite_real (struct grub_ahci_device *dev,
|
|||||||
if (parms->size > GRUB_AHCI_PRDT_MAX_CHUNK_LENGTH)
|
if (parms->size > GRUB_AHCI_PRDT_MAX_CHUNK_LENGTH)
|
||||||
return grub_error (GRUB_ERR_BUG, "too big data buffer");
|
return grub_error (GRUB_ERR_BUG, "too big data buffer");
|
||||||
|
|
||||||
|
if (parms->size)
|
||||||
bufc = grub_memalign_dma32 (1024, parms->size + (parms->size & 1));
|
bufc = grub_memalign_dma32 (1024, parms->size + (parms->size & 1));
|
||||||
|
else
|
||||||
|
bufc = grub_memalign_dma32 (1024, 512);
|
||||||
|
|
||||||
grub_dprintf ("ahci", "AHCI tfd = %x, CL=%p\n",
|
grub_dprintf ("ahci", "AHCI tfd = %x, CL=%p\n",
|
||||||
dev->hba->ports[dev->port].task_file_data,
|
dev->hba->ports[dev->port].task_file_data,
|
||||||
@@ -924,7 +945,7 @@ grub_ahci_readwrite_real (struct grub_ahci_device *dev,
|
|||||||
= (5 << GRUB_AHCI_CONFIG_CFIS_LENGTH_SHIFT)
|
= (5 << GRUB_AHCI_CONFIG_CFIS_LENGTH_SHIFT)
|
||||||
// | GRUB_AHCI_CONFIG_CLEAR_R_OK
|
// | GRUB_AHCI_CONFIG_CLEAR_R_OK
|
||||||
| (0 << GRUB_AHCI_CONFIG_PMP_SHIFT)
|
| (0 << GRUB_AHCI_CONFIG_PMP_SHIFT)
|
||||||
| (1 << GRUB_AHCI_CONFIG_PRDT_LENGTH_SHIFT)
|
| ((parms->size ? 1 : 0) << GRUB_AHCI_CONFIG_PRDT_LENGTH_SHIFT)
|
||||||
| (parms->cmdsize ? GRUB_AHCI_CONFIG_ATAPI : 0)
|
| (parms->cmdsize ? GRUB_AHCI_CONFIG_ATAPI : 0)
|
||||||
| (parms->write ? GRUB_AHCI_CONFIG_WRITE : GRUB_AHCI_CONFIG_READ)
|
| (parms->write ? GRUB_AHCI_CONFIG_WRITE : GRUB_AHCI_CONFIG_READ)
|
||||||
| (parms->taskfile.cmd == 8 ? (1 << 8) : 0);
|
| (parms->taskfile.cmd == 8 ? (1 << 8) : 0);
|
||||||
@@ -1001,7 +1022,7 @@ grub_ahci_readwrite_real (struct grub_ahci_device *dev,
|
|||||||
grub_dprintf ("ahci", "AHCI tfd = %x\n",
|
grub_dprintf ("ahci", "AHCI tfd = %x\n",
|
||||||
dev->hba->ports[dev->port].task_file_data);
|
dev->hba->ports[dev->port].task_file_data);
|
||||||
|
|
||||||
endtime = grub_get_time_ms () + (spinup ? 10000 : 5000);
|
endtime = grub_get_time_ms () + (spinup ? 20000 : 20000);
|
||||||
while ((dev->hba->ports[dev->port].command_issue & 1))
|
while ((dev->hba->ports[dev->port].command_issue & 1))
|
||||||
if (grub_get_time_ms () > endtime)
|
if (grub_get_time_ms () > endtime)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -216,6 +216,12 @@ grub_ata_setaddress (struct grub_ata *dev,
|
|||||||
unsigned int head;
|
unsigned int head;
|
||||||
unsigned int sect;
|
unsigned int sect;
|
||||||
|
|
||||||
|
if (dev->sectors_per_track == 0
|
||||||
|
|| dev->heads == 0)
|
||||||
|
return grub_error (GRUB_ERR_OUT_OF_RANGE,
|
||||||
|
"sector %d cannot be addressed "
|
||||||
|
"using CHS addressing", sector);
|
||||||
|
|
||||||
/* Calculate the sector, cylinder and head to use. */
|
/* Calculate the sector, cylinder and head to use. */
|
||||||
sect = ((grub_uint32_t) sector % dev->sectors_per_track) + 1;
|
sect = ((grub_uint32_t) sector % dev->sectors_per_track) + 1;
|
||||||
cylinder = (((grub_uint32_t) sector / dev->sectors_per_track)
|
cylinder = (((grub_uint32_t) sector / dev->sectors_per_track)
|
||||||
|
|||||||
+35
-26
@@ -110,20 +110,23 @@ grub_crypto_pcbc_decrypt (grub_crypto_cipher_handle_t cipher,
|
|||||||
{
|
{
|
||||||
grub_uint8_t *inptr, *outptr, *end;
|
grub_uint8_t *inptr, *outptr, *end;
|
||||||
grub_uint8_t ivt[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE];
|
grub_uint8_t ivt[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE];
|
||||||
if (cipher->cipher->blocksize > GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE)
|
grub_size_t blocksize;
|
||||||
return GPG_ERR_INV_ARG;
|
|
||||||
if (!cipher->cipher->decrypt)
|
if (!cipher->cipher->decrypt)
|
||||||
return GPG_ERR_NOT_SUPPORTED;
|
return GPG_ERR_NOT_SUPPORTED;
|
||||||
if (size % cipher->cipher->blocksize != 0)
|
blocksize = cipher->cipher->blocksize;
|
||||||
|
if (blocksize == 0 || (((blocksize - 1) & blocksize) != 0)
|
||||||
|
|| ((size & (blocksize - 1)) != 0))
|
||||||
|
return GPG_ERR_INV_ARG;
|
||||||
|
if (blocksize > GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE)
|
||||||
return GPG_ERR_INV_ARG;
|
return GPG_ERR_INV_ARG;
|
||||||
end = (grub_uint8_t *) in + size;
|
end = (grub_uint8_t *) in + size;
|
||||||
for (inptr = in, outptr = out; inptr < end;
|
for (inptr = in, outptr = out; inptr < end;
|
||||||
inptr += cipher->cipher->blocksize, outptr += cipher->cipher->blocksize)
|
inptr += blocksize, outptr += blocksize)
|
||||||
{
|
{
|
||||||
grub_memcpy (ivt, inptr, cipher->cipher->blocksize);
|
grub_memcpy (ivt, inptr, blocksize);
|
||||||
cipher->cipher->decrypt (cipher->ctx, outptr, inptr);
|
cipher->cipher->decrypt (cipher->ctx, outptr, inptr);
|
||||||
grub_crypto_xor (outptr, outptr, iv, cipher->cipher->blocksize);
|
grub_crypto_xor (outptr, outptr, iv, blocksize);
|
||||||
grub_crypto_xor (iv, ivt, outptr, cipher->cipher->blocksize);
|
grub_crypto_xor (iv, ivt, outptr, blocksize);
|
||||||
}
|
}
|
||||||
return GPG_ERR_NO_ERROR;
|
return GPG_ERR_NO_ERROR;
|
||||||
}
|
}
|
||||||
@@ -135,20 +138,23 @@ grub_crypto_pcbc_encrypt (grub_crypto_cipher_handle_t cipher,
|
|||||||
{
|
{
|
||||||
grub_uint8_t *inptr, *outptr, *end;
|
grub_uint8_t *inptr, *outptr, *end;
|
||||||
grub_uint8_t ivt[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE];
|
grub_uint8_t ivt[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE];
|
||||||
if (cipher->cipher->blocksize > GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE)
|
grub_size_t blocksize;
|
||||||
return GPG_ERR_INV_ARG;
|
if (!cipher->cipher->encrypt)
|
||||||
if (!cipher->cipher->decrypt)
|
|
||||||
return GPG_ERR_NOT_SUPPORTED;
|
return GPG_ERR_NOT_SUPPORTED;
|
||||||
if (size % cipher->cipher->blocksize != 0)
|
blocksize = cipher->cipher->blocksize;
|
||||||
|
if (blocksize > GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE)
|
||||||
|
return GPG_ERR_INV_ARG;
|
||||||
|
if (blocksize == 0 || (((blocksize - 1) & blocksize) != 0)
|
||||||
|
|| ((size & (blocksize - 1)) != 0))
|
||||||
return GPG_ERR_INV_ARG;
|
return GPG_ERR_INV_ARG;
|
||||||
end = (grub_uint8_t *) in + size;
|
end = (grub_uint8_t *) in + size;
|
||||||
for (inptr = in, outptr = out; inptr < end;
|
for (inptr = in, outptr = out; inptr < end;
|
||||||
inptr += cipher->cipher->blocksize, outptr += cipher->cipher->blocksize)
|
inptr += blocksize, outptr += blocksize)
|
||||||
{
|
{
|
||||||
grub_memcpy (ivt, inptr, cipher->cipher->blocksize);
|
grub_memcpy (ivt, inptr, blocksize);
|
||||||
grub_crypto_xor (outptr, outptr, iv, cipher->cipher->blocksize);
|
grub_crypto_xor (outptr, outptr, iv, blocksize);
|
||||||
cipher->cipher->encrypt (cipher->ctx, outptr, inptr);
|
cipher->cipher->encrypt (cipher->ctx, outptr, inptr);
|
||||||
grub_crypto_xor (iv, ivt, outptr, cipher->cipher->blocksize);
|
grub_crypto_xor (iv, ivt, outptr, blocksize);
|
||||||
}
|
}
|
||||||
return GPG_ERR_NO_ERROR;
|
return GPG_ERR_NO_ERROR;
|
||||||
}
|
}
|
||||||
@@ -372,11 +378,13 @@ grub_cryptodisk_endecrypt (struct grub_cryptodisk *dev,
|
|||||||
break;
|
break;
|
||||||
case GRUB_CRYPTODISK_MODE_ECB:
|
case GRUB_CRYPTODISK_MODE_ECB:
|
||||||
if (do_encrypt)
|
if (do_encrypt)
|
||||||
grub_crypto_ecb_encrypt (dev->cipher, data + i, data + i,
|
err = grub_crypto_ecb_encrypt (dev->cipher, data + i, data + i,
|
||||||
(1U << dev->log_sector_size));
|
(1U << dev->log_sector_size));
|
||||||
else
|
else
|
||||||
grub_crypto_ecb_decrypt (dev->cipher, data + i, data + i,
|
err = grub_crypto_ecb_decrypt (dev->cipher, data + i, data + i,
|
||||||
(1U << dev->log_sector_size));
|
(1U << dev->log_sector_size));
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return GPG_ERR_NOT_IMPLEMENTED;
|
return GPG_ERR_NOT_IMPLEMENTED;
|
||||||
@@ -762,25 +770,26 @@ grub_cryptodisk_cheat_insert (grub_cryptodisk_t newdev, const char *name,
|
|||||||
|
|
||||||
void
|
void
|
||||||
grub_util_cryptodisk_get_abstraction (grub_disk_t disk,
|
grub_util_cryptodisk_get_abstraction (grub_disk_t disk,
|
||||||
void (*cb) (const char *val))
|
void (*cb) (const char *val, void *data),
|
||||||
|
void *data)
|
||||||
{
|
{
|
||||||
grub_cryptodisk_t dev = (grub_cryptodisk_t) disk->data;
|
grub_cryptodisk_t dev = (grub_cryptodisk_t) disk->data;
|
||||||
|
|
||||||
cb ("cryptodisk");
|
cb ("cryptodisk", data);
|
||||||
cb (dev->modname);
|
cb (dev->modname, data);
|
||||||
|
|
||||||
if (dev->cipher)
|
if (dev->cipher)
|
||||||
cb (dev->cipher->cipher->modname);
|
cb (dev->cipher->cipher->modname, data);
|
||||||
if (dev->secondary_cipher)
|
if (dev->secondary_cipher)
|
||||||
cb (dev->secondary_cipher->cipher->modname);
|
cb (dev->secondary_cipher->cipher->modname, data);
|
||||||
if (dev->essiv_cipher)
|
if (dev->essiv_cipher)
|
||||||
cb (dev->essiv_cipher->cipher->modname);
|
cb (dev->essiv_cipher->cipher->modname, data);
|
||||||
if (dev->hash)
|
if (dev->hash)
|
||||||
cb (dev->hash->modname);
|
cb (dev->hash->modname, data);
|
||||||
if (dev->essiv_hash)
|
if (dev->essiv_hash)
|
||||||
cb (dev->essiv_hash->modname);
|
cb (dev->essiv_hash->modname, data);
|
||||||
if (dev->iv_hash)
|
if (dev->iv_hash)
|
||||||
cb (dev->iv_hash->modname);
|
cb (dev->iv_hash->modname, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *
|
const char *
|
||||||
|
|||||||
+147
-13
@@ -71,10 +71,12 @@ is_lv_readable (struct grub_diskfilter_lv *lv, int easily)
|
|||||||
case GRUB_DISKFILTER_RAID6:
|
case GRUB_DISKFILTER_RAID6:
|
||||||
if (!easily)
|
if (!easily)
|
||||||
need--;
|
need--;
|
||||||
|
/* Fallthrough. */
|
||||||
case GRUB_DISKFILTER_RAID4:
|
case GRUB_DISKFILTER_RAID4:
|
||||||
case GRUB_DISKFILTER_RAID5:
|
case GRUB_DISKFILTER_RAID5:
|
||||||
if (!easily)
|
if (!easily)
|
||||||
need--;
|
need--;
|
||||||
|
/* Fallthrough. */
|
||||||
case GRUB_DISKFILTER_STRIPED:
|
case GRUB_DISKFILTER_STRIPED:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@@ -354,7 +356,8 @@ grub_diskfilter_memberlist (grub_disk_t disk)
|
|||||||
|
|
||||||
void
|
void
|
||||||
grub_diskfilter_get_partmap (grub_disk_t disk,
|
grub_diskfilter_get_partmap (grub_disk_t disk,
|
||||||
void (*cb) (const char *pm))
|
void (*cb) (const char *pm, void *data),
|
||||||
|
void *data)
|
||||||
{
|
{
|
||||||
struct grub_diskfilter_lv *lv = disk->data;
|
struct grub_diskfilter_lv *lv = disk->data;
|
||||||
struct grub_diskfilter_pv *pv;
|
struct grub_diskfilter_pv *pv;
|
||||||
@@ -376,7 +379,7 @@ grub_diskfilter_get_partmap (grub_disk_t disk,
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
for (s = 0; pv->partmaps[s]; s++)
|
for (s = 0; pv->partmaps[s]; s++)
|
||||||
cb (pv->partmaps[s]);
|
cb (pv->partmaps[s], data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -482,6 +485,96 @@ grub_diskfilter_read_node (const struct grub_diskfilter_node *node,
|
|||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown node '%s'", node->name);
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown node '%s'", node->name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
validate_segment (struct grub_diskfilter_segment *seg);
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
validate_lv (struct grub_diskfilter_lv *lv)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
if (!lv)
|
||||||
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown volume");
|
||||||
|
|
||||||
|
if (!lv->vg || lv->vg->extent_size == 0)
|
||||||
|
return grub_error (GRUB_ERR_READ_ERROR, "invalid volume");
|
||||||
|
|
||||||
|
for (i = 0; i < lv->segment_count; i++)
|
||||||
|
{
|
||||||
|
grub_err_t err;
|
||||||
|
err = validate_segment (&lv->segments[i]);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
validate_node (const struct grub_diskfilter_node *node)
|
||||||
|
{
|
||||||
|
/* Check whether we actually know the physical volume we want to
|
||||||
|
read from. */
|
||||||
|
if (node->pv)
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
if (node->lv)
|
||||||
|
return validate_lv (node->lv);
|
||||||
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown node '%s'", node->name);
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_err_t
|
||||||
|
validate_segment (struct grub_diskfilter_segment *seg)
|
||||||
|
{
|
||||||
|
grub_err_t err;
|
||||||
|
|
||||||
|
if (seg->stripe_size == 0 || seg->node_count == 0)
|
||||||
|
return grub_error(GRUB_ERR_BAD_FS, "invalid segment");
|
||||||
|
|
||||||
|
switch (seg->type)
|
||||||
|
{
|
||||||
|
case GRUB_DISKFILTER_RAID10:
|
||||||
|
{
|
||||||
|
grub_uint8_t near, far;
|
||||||
|
near = seg->layout & 0xFF;
|
||||||
|
far = (seg->layout >> 8) & 0xFF;
|
||||||
|
if ((seg->layout >> 16) == 0 && far == 0)
|
||||||
|
return grub_error(GRUB_ERR_BAD_FS, "invalid segment");
|
||||||
|
if (near > seg->node_count)
|
||||||
|
return grub_error(GRUB_ERR_BAD_FS, "invalid segment");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
case GRUB_DISKFILTER_STRIPED:
|
||||||
|
case GRUB_DISKFILTER_MIRROR:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GRUB_DISKFILTER_RAID4:
|
||||||
|
case GRUB_DISKFILTER_RAID5:
|
||||||
|
if (seg->node_count <= 1)
|
||||||
|
return grub_error(GRUB_ERR_BAD_FS, "invalid segment");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case GRUB_DISKFILTER_RAID6:
|
||||||
|
if (seg->node_count <= 2)
|
||||||
|
return grub_error(GRUB_ERR_BAD_FS, "invalid segment");
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
|
"unsupported RAID level %d", seg->type);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned i;
|
||||||
|
for (i = 0; i < seg->node_count; i++)
|
||||||
|
{
|
||||||
|
err = validate_node (&seg->nodes[i]);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
read_segment (struct grub_diskfilter_segment *seg, grub_disk_addr_t sector,
|
read_segment (struct grub_diskfilter_segment *seg, grub_disk_addr_t sector,
|
||||||
grub_size_t size, char *buf)
|
grub_size_t size, char *buf)
|
||||||
@@ -493,6 +586,7 @@ read_segment (struct grub_diskfilter_segment *seg, grub_disk_addr_t sector,
|
|||||||
if (seg->node_count == 1)
|
if (seg->node_count == 1)
|
||||||
return grub_diskfilter_read_node (&seg->nodes[0],
|
return grub_diskfilter_read_node (&seg->nodes[0],
|
||||||
sector, size, buf);
|
sector, size, buf);
|
||||||
|
/* Fallthrough. */
|
||||||
case GRUB_DISKFILTER_MIRROR:
|
case GRUB_DISKFILTER_MIRROR:
|
||||||
case GRUB_DISKFILTER_RAID10:
|
case GRUB_DISKFILTER_RAID10:
|
||||||
{
|
{
|
||||||
@@ -847,6 +941,23 @@ grub_diskfilter_vg_register (struct grub_diskfilter_vg *vg)
|
|||||||
|
|
||||||
for (lv = vg->lvs; lv; lv = lv->next)
|
for (lv = vg->lvs; lv; lv = lv->next)
|
||||||
{
|
{
|
||||||
|
grub_err_t err;
|
||||||
|
|
||||||
|
/* RAID 1 and single-disk RAID 0 don't use a chunksize but code
|
||||||
|
assumes one so set one. */
|
||||||
|
for (i = 0; i < lv->segment_count; i++)
|
||||||
|
{
|
||||||
|
if (lv->segments[i].type == 1)
|
||||||
|
lv->segments[i].stripe_size = 64;
|
||||||
|
if (lv->segments[i].type == GRUB_DISKFILTER_STRIPED
|
||||||
|
&& lv->segments[i].node_count == 1
|
||||||
|
&& lv->segments[i].stripe_size == 0)
|
||||||
|
lv->segments[i].stripe_size = 64;
|
||||||
|
}
|
||||||
|
|
||||||
|
err = validate_lv(lv);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
lv->number = lv_num++;
|
lv->number = lv_num++;
|
||||||
|
|
||||||
if (lv->fullname)
|
if (lv->fullname)
|
||||||
@@ -887,12 +998,6 @@ grub_diskfilter_vg_register (struct grub_diskfilter_vg *vg)
|
|||||||
lv->fullname = tmp;
|
lv->fullname = tmp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* RAID 1 doesn't use a chunksize but code assumes one so set
|
|
||||||
one. */
|
|
||||||
for (i = 0; i < lv->segment_count; i++)
|
|
||||||
if (lv->segments[i].type == 1)
|
|
||||||
lv->segments[i].stripe_size = 64;
|
|
||||||
lv->vg = vg;
|
|
||||||
}
|
}
|
||||||
/* Add our new array to the list. */
|
/* Add our new array to the list. */
|
||||||
vg->next = array_list;
|
vg->next = array_list;
|
||||||
@@ -925,6 +1030,11 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
|
|||||||
n = layout & 0xFF;
|
n = layout & 0xFF;
|
||||||
if (n == 1)
|
if (n == 1)
|
||||||
n = (layout >> 8) & 0xFF;
|
n = (layout >> 8) & 0xFF;
|
||||||
|
if (n == 0)
|
||||||
|
{
|
||||||
|
grub_free (uuid);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
totsize = grub_divmod64 (nmemb * disk_size, n, 0);
|
totsize = grub_divmod64 (nmemb * disk_size, n, 0);
|
||||||
}
|
}
|
||||||
@@ -938,6 +1048,7 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
grub_free (uuid);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -951,7 +1062,7 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
|
|||||||
array->lvs->segments->extent_count = totsize;
|
array->lvs->segments->extent_count = totsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (array->lvs->segments
|
if (array->lvs && array->lvs->segments
|
||||||
&& array->lvs->segments->raid_member_size > disk_size)
|
&& array->lvs->segments->raid_member_size > disk_size)
|
||||||
array->lvs->segments->raid_member_size = disk_size;
|
array->lvs->segments->raid_member_size = disk_size;
|
||||||
|
|
||||||
@@ -960,7 +1071,10 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
|
|||||||
}
|
}
|
||||||
array = grub_zalloc (sizeof (*array));
|
array = grub_zalloc (sizeof (*array));
|
||||||
if (!array)
|
if (!array)
|
||||||
|
{
|
||||||
|
grub_free (uuid);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
array->uuid = uuid;
|
array->uuid = uuid;
|
||||||
array->uuid_len = uuidlen;
|
array->uuid_len = uuidlen;
|
||||||
if (name)
|
if (name)
|
||||||
@@ -982,8 +1096,16 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
|
|||||||
goto fail;
|
goto fail;
|
||||||
array->lvs->segment_count = 1;
|
array->lvs->segment_count = 1;
|
||||||
array->lvs->visible = 1;
|
array->lvs->visible = 1;
|
||||||
array->lvs->name = array->name;
|
if (array->name)
|
||||||
array->lvs->fullname = array->name;
|
{
|
||||||
|
array->lvs->name = grub_strdup (array->name);
|
||||||
|
if (!array->lvs->name)
|
||||||
|
goto fail;
|
||||||
|
array->lvs->fullname = grub_strdup (array->name);
|
||||||
|
if (!array->lvs->fullname)
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
array->lvs->vg = array;
|
||||||
|
|
||||||
array->lvs->idname = grub_malloc (sizeof ("mduuid/") + 2 * uuidlen);
|
array->lvs->idname = grub_malloc (sizeof ("mduuid/") + 2 * uuidlen);
|
||||||
if (!array->lvs->idname)
|
if (!array->lvs->idname)
|
||||||
@@ -1033,13 +1155,26 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
|
|||||||
return array;
|
return array;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
|
if (array->lvs)
|
||||||
|
{
|
||||||
|
grub_free (array->lvs->name);
|
||||||
|
grub_free (array->lvs->fullname);
|
||||||
|
grub_free (array->lvs->idname);
|
||||||
|
if (array->lvs->segments)
|
||||||
|
{
|
||||||
|
grub_free (array->lvs->segments->nodes);
|
||||||
|
grub_free (array->lvs->segments);
|
||||||
|
}
|
||||||
grub_free (array->lvs);
|
grub_free (array->lvs);
|
||||||
|
}
|
||||||
while (array->pvs)
|
while (array->pvs)
|
||||||
{
|
{
|
||||||
pv = array->pvs->next;
|
pv = array->pvs->next;
|
||||||
grub_free (array->pvs);
|
grub_free (array->pvs);
|
||||||
array->pvs = pv;
|
array->pvs = pv;
|
||||||
}
|
}
|
||||||
|
grub_free (array->name);
|
||||||
|
grub_free (array->uuid);
|
||||||
grub_free (array);
|
grub_free (array);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@@ -1142,10 +1277,9 @@ free_array (void)
|
|||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
vg->lvs = lv->next;
|
vg->lvs = lv->next;
|
||||||
if (lv->name != lv->fullname)
|
|
||||||
grub_free (lv->fullname);
|
grub_free (lv->fullname);
|
||||||
if (lv->name != vg->name)
|
|
||||||
grub_free (lv->name);
|
grub_free (lv->name);
|
||||||
|
grub_free (lv->idname);
|
||||||
for (i = 0; i < lv->segment_count; i++)
|
for (i = 0; i < lv->segment_count; i++)
|
||||||
grub_free (lv->segments[i].nodes);
|
grub_free (lv->segments[i].nodes);
|
||||||
grub_free (lv->segments);
|
grub_free (lv->segments);
|
||||||
|
|||||||
@@ -99,6 +99,8 @@ grub_dmraid_nv_detect (grub_disk_t disk,
|
|||||||
struct grub_nv_super sb;
|
struct grub_nv_super sb;
|
||||||
int level;
|
int level;
|
||||||
grub_uint64_t disk_size;
|
grub_uint64_t disk_size;
|
||||||
|
grub_uint32_t capacity;
|
||||||
|
grub_uint8_t total_volumes;
|
||||||
char *uuid;
|
char *uuid;
|
||||||
|
|
||||||
if (disk->partition)
|
if (disk->partition)
|
||||||
@@ -124,11 +126,17 @@ grub_dmraid_nv_detect (grub_disk_t disk,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
capacity = grub_le_to_cpu32 (sb.capacity);
|
||||||
|
total_volumes = sb.array.total_volumes;
|
||||||
|
|
||||||
switch (sb.array.raid_level)
|
switch (sb.array.raid_level)
|
||||||
{
|
{
|
||||||
case NV_LEVEL_0:
|
case NV_LEVEL_0:
|
||||||
level = 0;
|
level = 0;
|
||||||
disk_size = sb.capacity / sb.array.total_volumes;
|
if (total_volumes == 0)
|
||||||
|
/* Not RAID. */
|
||||||
|
return NULL;
|
||||||
|
disk_size = capacity / total_volumes;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NV_LEVEL_1:
|
case NV_LEVEL_1:
|
||||||
@@ -138,7 +146,10 @@ grub_dmraid_nv_detect (grub_disk_t disk,
|
|||||||
|
|
||||||
case NV_LEVEL_5:
|
case NV_LEVEL_5:
|
||||||
level = 5;
|
level = 5;
|
||||||
disk_size = sb.capacity / (sb.array.total_volumes - 1);
|
if (total_volumes == 0 || total_volumes == 1)
|
||||||
|
/* Not RAID. */
|
||||||
|
return NULL;
|
||||||
|
disk_size = capacity / (total_volumes - 1);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -333,6 +333,21 @@ name_devices (struct grub_efidisk_data *devices)
|
|||||||
if (! dp)
|
if (! dp)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/* Ghosts proudly presented by Apple. */
|
||||||
|
if (GRUB_EFI_DEVICE_PATH_TYPE (dp) == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE
|
||||||
|
&& GRUB_EFI_DEVICE_PATH_SUBTYPE (dp)
|
||||||
|
== GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE)
|
||||||
|
{
|
||||||
|
grub_efi_vendor_device_path_t *vendor = (grub_efi_vendor_device_path_t *) dp;
|
||||||
|
const struct grub_efi_guid apple = GRUB_EFI_VENDOR_APPLE_GUID;
|
||||||
|
|
||||||
|
if (vendor->header.length == sizeof (*vendor)
|
||||||
|
&& grub_memcmp (&vendor->vendor_guid, &apple,
|
||||||
|
sizeof (vendor->vendor_guid)) == 0
|
||||||
|
&& find_parent_device (devices, d))
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
m = d->block_io->media;
|
m = d->block_io->media;
|
||||||
if (GRUB_EFI_DEVICE_PATH_TYPE (dp) == GRUB_EFI_ACPI_DEVICE_PATH_TYPE
|
if (GRUB_EFI_DEVICE_PATH_TYPE (dp) == GRUB_EFI_ACPI_DEVICE_PATH_TYPE
|
||||||
&& GRUB_EFI_DEVICE_PATH_SUBTYPE (dp)
|
&& GRUB_EFI_DEVICE_PATH_SUBTYPE (dp)
|
||||||
@@ -788,7 +803,6 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
|
|||||||
&& (GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE
|
&& (GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE
|
||||||
|| GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE))
|
|| GRUB_EFI_DEVICE_PATH_SUBTYPE (ldp) == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE))
|
||||||
{
|
{
|
||||||
int is_cdrom = 0;
|
|
||||||
struct grub_efidisk_get_device_name_ctx ctx;
|
struct grub_efidisk_get_device_name_ctx ctx;
|
||||||
char *dev_name;
|
char *dev_name;
|
||||||
grub_efi_device_path_t *dup_dp;
|
grub_efi_device_path_t *dup_dp;
|
||||||
@@ -809,9 +823,6 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
|
|||||||
|| GRUB_EFI_DEVICE_PATH_SUBTYPE (dup_ldp) == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE)))
|
|| GRUB_EFI_DEVICE_PATH_SUBTYPE (dup_ldp) == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE)))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (GRUB_EFI_DEVICE_PATH_SUBTYPE (dup_ldp) == GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE)
|
|
||||||
is_cdrom = 1;
|
|
||||||
|
|
||||||
dup_ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
|
dup_ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
|
||||||
dup_ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
|
dup_ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
|
||||||
dup_ldp->length = sizeof (*dup_ldp);
|
dup_ldp->length = sizeof (*dup_ldp);
|
||||||
@@ -846,10 +857,13 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
|
|||||||
|
|
||||||
if (! ctx.partition_name)
|
if (! ctx.partition_name)
|
||||||
{
|
{
|
||||||
|
/* No partition found. In most cases partition is embed in
|
||||||
|
the root path anyway, so this is not critical.
|
||||||
|
This happens only if partition is on partmap that GRUB
|
||||||
|
doesn't need to access root.
|
||||||
|
*/
|
||||||
grub_disk_close (parent);
|
grub_disk_close (parent);
|
||||||
if (is_cdrom)
|
|
||||||
return grub_strdup (device_name);
|
return grub_strdup (device_name);
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_name = grub_xasprintf ("%s,%s", parent->name,
|
dev_name = grub_xasprintf ("%s,%s", parent->name,
|
||||||
|
|||||||
+35
-7
@@ -212,7 +212,8 @@ grub_util_get_geli_uuid (const char *dev)
|
|||||||
|
|
||||||
s = grub_util_get_fd_size (fd, dev, &log_secsize);
|
s = grub_util_get_fd_size (fd, dev, &log_secsize);
|
||||||
s >>= log_secsize;
|
s >>= log_secsize;
|
||||||
grub_util_fd_seek (fd, (s << log_secsize) - 512);
|
if (grub_util_fd_seek (fd, (s << log_secsize) - 512) < 0)
|
||||||
|
grub_util_error ("%s", _("couldn't read ELI metadata"));
|
||||||
|
|
||||||
uuid = xmalloc (GRUB_MD_SHA256->mdlen * 2 + 1);
|
uuid = xmalloc (GRUB_MD_SHA256->mdlen * 2 + 1);
|
||||||
if (grub_util_fd_read (fd, (void *) &hdr, 512) < 0)
|
if (grub_util_fd_read (fd, (void *) &hdr, 512) < 0)
|
||||||
@@ -225,13 +226,16 @@ grub_util_get_geli_uuid (const char *dev)
|
|||||||
|
|
||||||
/* Look for GELI magic sequence. */
|
/* Look for GELI magic sequence. */
|
||||||
if (grub_memcmp (header->magic, GELI_MAGIC, sizeof (GELI_MAGIC))
|
if (grub_memcmp (header->magic, GELI_MAGIC, sizeof (GELI_MAGIC))
|
||||||
|| grub_le_to_cpu32 (header->version) > 5
|
|| grub_le_to_cpu32 (header->version) > 7
|
||||||
|| grub_le_to_cpu32 (header->version) < 1)
|
|| grub_le_to_cpu32 (header->version) < 1)
|
||||||
grub_util_error ("%s", _("wrong ELI magic or version"));
|
grub_util_error ("%s", _("wrong ELI magic or version"));
|
||||||
|
|
||||||
err = make_uuid ((void *) &hdr, uuid);
|
err = make_uuid ((void *) &hdr, uuid);
|
||||||
if (err)
|
if (err)
|
||||||
|
{
|
||||||
|
grub_free (uuid);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
return uuid;
|
return uuid;
|
||||||
}
|
}
|
||||||
@@ -265,7 +269,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
|
|
||||||
/* Look for GELI magic sequence. */
|
/* Look for GELI magic sequence. */
|
||||||
if (grub_memcmp (header.magic, GELI_MAGIC, sizeof (GELI_MAGIC))
|
if (grub_memcmp (header.magic, GELI_MAGIC, sizeof (GELI_MAGIC))
|
||||||
|| grub_le_to_cpu32 (header.version) > 5
|
|| grub_le_to_cpu32 (header.version) > 7
|
||||||
|| grub_le_to_cpu32 (header.version) < 1)
|
|| grub_le_to_cpu32 (header.version) < 1)
|
||||||
{
|
{
|
||||||
grub_dprintf ("geli", "wrong magic %02x\n", header.magic[0]);
|
grub_dprintf ("geli", "wrong magic %02x\n", header.magic[0]);
|
||||||
@@ -332,19 +336,29 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
{
|
{
|
||||||
secondary_cipher = grub_crypto_cipher_open (ciph);
|
secondary_cipher = grub_crypto_cipher_open (ciph);
|
||||||
if (!secondary_cipher)
|
if (!secondary_cipher)
|
||||||
|
{
|
||||||
|
grub_crypto_cipher_close (cipher);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
if (grub_le_to_cpu16 (header.keylen) > 1024)
|
if (grub_le_to_cpu16 (header.keylen) > 1024)
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d",
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d",
|
||||||
grub_le_to_cpu16 (header.keylen));
|
grub_le_to_cpu16 (header.keylen));
|
||||||
|
grub_crypto_cipher_close (cipher);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
newdev = grub_zalloc (sizeof (struct grub_cryptodisk));
|
newdev = grub_zalloc (sizeof (struct grub_cryptodisk));
|
||||||
if (!newdev)
|
if (!newdev)
|
||||||
|
{
|
||||||
|
grub_crypto_cipher_close (cipher);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
newdev->cipher = cipher;
|
newdev->cipher = cipher;
|
||||||
newdev->secondary_cipher = secondary_cipher;
|
newdev->secondary_cipher = secondary_cipher;
|
||||||
newdev->offset = 0;
|
newdev->offset = 0;
|
||||||
@@ -391,6 +405,7 @@ recover_key (grub_disk_t source, grub_cryptodisk_t dev)
|
|||||||
grub_uint8_t geomkey[GRUB_CRYPTO_MAX_MDLEN];
|
grub_uint8_t geomkey[GRUB_CRYPTO_MAX_MDLEN];
|
||||||
grub_uint8_t verify_key[GRUB_CRYPTO_MAX_MDLEN];
|
grub_uint8_t verify_key[GRUB_CRYPTO_MAX_MDLEN];
|
||||||
grub_uint8_t zero[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE];
|
grub_uint8_t zero[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE];
|
||||||
|
grub_uint8_t geli_cipher_key[64];
|
||||||
char passphrase[MAX_PASSPHRASE] = "";
|
char passphrase[MAX_PASSPHRASE] = "";
|
||||||
unsigned i;
|
unsigned i;
|
||||||
gcry_err_code_t gcry_err;
|
gcry_err_code_t gcry_err;
|
||||||
@@ -514,6 +529,19 @@ recover_key (grub_disk_t source, grub_cryptodisk_t dev)
|
|||||||
continue;
|
continue;
|
||||||
grub_printf_ (N_("Slot %d opened\n"), i);
|
grub_printf_ (N_("Slot %d opened\n"), i);
|
||||||
|
|
||||||
|
if (grub_le_to_cpu32 (header.version) >= 7)
|
||||||
|
{
|
||||||
|
/* GELI >=7 uses the cipher_key */
|
||||||
|
grub_memcpy (geli_cipher_key, candidate_key.cipher_key,
|
||||||
|
sizeof (candidate_key.cipher_key));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* GELI <=6 uses the iv_key */
|
||||||
|
grub_memcpy (geli_cipher_key, candidate_key.iv_key,
|
||||||
|
sizeof (candidate_key.iv_key));
|
||||||
|
}
|
||||||
|
|
||||||
/* Set the master key. */
|
/* Set the master key. */
|
||||||
if (!dev->rekey)
|
if (!dev->rekey)
|
||||||
{
|
{
|
||||||
@@ -530,13 +558,13 @@ recover_key (grub_disk_t source, grub_cryptodisk_t dev)
|
|||||||
grub_size_t real_keysize = keysize;
|
grub_size_t real_keysize = keysize;
|
||||||
if (grub_le_to_cpu16 (header.alg) == 0x16)
|
if (grub_le_to_cpu16 (header.alg) == 0x16)
|
||||||
real_keysize *= 2;
|
real_keysize *= 2;
|
||||||
/* For a reason I don't know, the IV key is used in rekeying. */
|
|
||||||
grub_memcpy (dev->rekey_key, candidate_key.iv_key,
|
grub_memcpy (dev->rekey_key, geli_cipher_key,
|
||||||
sizeof (candidate_key.iv_key));
|
sizeof (geli_cipher_key));
|
||||||
dev->rekey_derived_size = real_keysize;
|
dev->rekey_derived_size = real_keysize;
|
||||||
dev->last_rekey = -1;
|
dev->last_rekey = -1;
|
||||||
COMPILE_TIME_ASSERT (sizeof (dev->rekey_key)
|
COMPILE_TIME_ASSERT (sizeof (dev->rekey_key)
|
||||||
>= sizeof (candidate_key.iv_key));
|
>= sizeof (geli_cipher_key));
|
||||||
}
|
}
|
||||||
|
|
||||||
dev->iv_prefix_len = sizeof (candidate_key.iv_key);
|
dev->iv_prefix_len = sizeof (candidate_key.iv_key);
|
||||||
|
|||||||
@@ -382,7 +382,8 @@ grub_biosdisk_open (const char *name, grub_disk_t disk)
|
|||||||
/* Some buggy BIOSes doesn't return the total sectors
|
/* Some buggy BIOSes doesn't return the total sectors
|
||||||
correctly but returns zero. So if it is zero, compute
|
correctly but returns zero. So if it is zero, compute
|
||||||
it by C/H/S returned by the LBA BIOS call. */
|
it by C/H/S returned by the LBA BIOS call. */
|
||||||
total_sectors = drp->cylinders * drp->heads * drp->sectors;
|
total_sectors = ((grub_uint64_t) drp->cylinders)
|
||||||
|
* drp->heads * drp->sectors;
|
||||||
if (drp->bytes_per_sector
|
if (drp->bytes_per_sector
|
||||||
&& !(drp->bytes_per_sector & (drp->bytes_per_sector - 1))
|
&& !(drp->bytes_per_sector & (drp->bytes_per_sector - 1))
|
||||||
&& drp->bytes_per_sector >= 512
|
&& drp->bytes_per_sector >= 512
|
||||||
@@ -419,8 +420,14 @@ grub_biosdisk_open (const char *name, grub_disk_t disk)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (data->sectors == 0)
|
||||||
|
data->sectors = 63;
|
||||||
|
if (data->heads == 0)
|
||||||
|
data->heads = 255;
|
||||||
|
|
||||||
if (! total_sectors)
|
if (! total_sectors)
|
||||||
total_sectors = data->cylinders * data->heads * data->sectors;
|
total_sectors = ((grub_uint64_t) data->cylinders)
|
||||||
|
* data->heads * data->sectors;
|
||||||
}
|
}
|
||||||
|
|
||||||
disk->total_sectors = total_sectors;
|
disk->total_sectors = total_sectors;
|
||||||
@@ -455,6 +462,14 @@ grub_biosdisk_rw (int cmd, grub_disk_t disk,
|
|||||||
{
|
{
|
||||||
struct grub_biosdisk_data *data = disk->data;
|
struct grub_biosdisk_data *data = disk->data;
|
||||||
|
|
||||||
|
/* VirtualBox fails with sectors above 2T on CDs.
|
||||||
|
Since even BD-ROMS are never that big anyway, return error. */
|
||||||
|
if ((data->flags & GRUB_BIOSDISK_FLAG_CDROM)
|
||||||
|
&& (sector >> 32))
|
||||||
|
return grub_error (GRUB_ERR_OUT_OF_RANGE,
|
||||||
|
N_("attempt to read or write outside of disk `%s'"),
|
||||||
|
disk->name);
|
||||||
|
|
||||||
if (data->flags & GRUB_BIOSDISK_FLAG_LBA)
|
if (data->flags & GRUB_BIOSDISK_FLAG_LBA)
|
||||||
{
|
{
|
||||||
struct grub_biosdisk_dap *dap;
|
struct grub_biosdisk_dap *dap;
|
||||||
|
|||||||
@@ -113,6 +113,11 @@ grub_nand_open (const char *name, grub_disk_t disk)
|
|||||||
}
|
}
|
||||||
|
|
||||||
data->block_size = (args.size1 >> GRUB_DISK_SECTOR_BITS);
|
data->block_size = (args.size1 >> GRUB_DISK_SECTOR_BITS);
|
||||||
|
if (!data->block_size)
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "invalid block size");
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
INIT_IEEE1275_COMMON (&args.common, "call-method", 2, 3);
|
INIT_IEEE1275_COMMON (&args.common, "call-method", 2, 3);
|
||||||
args.method = (grub_ieee1275_cell_t) "size";
|
args.method = (grub_ieee1275_cell_t) "size";
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ struct ofdisk_hash_ent
|
|||||||
char *open_path;
|
char *open_path;
|
||||||
char *grub_devpath;
|
char *grub_devpath;
|
||||||
int is_boot;
|
int is_boot;
|
||||||
int is_cdrom;
|
int is_removable;
|
||||||
/* Pointer to shortest available name on nodes representing canonical names,
|
/* Pointer to shortest available name on nodes representing canonical names,
|
||||||
otherwise NULL. */
|
otherwise NULL. */
|
||||||
const char *shortest;
|
const char *shortest;
|
||||||
@@ -123,7 +123,7 @@ ofdisk_hash_add_real (char *devpath)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
check_string_cdrom (const char *str)
|
check_string_removable (const char *str)
|
||||||
{
|
{
|
||||||
const char *ptr = grub_strrchr (str, '/');
|
const char *ptr = grub_strrchr (str, '/');
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@ check_string_cdrom (const char *str)
|
|||||||
ptr++;
|
ptr++;
|
||||||
else
|
else
|
||||||
ptr = str;
|
ptr = str;
|
||||||
return (grub_strncmp (ptr, "cdrom", 5) == 0);
|
return (grub_strncmp (ptr, "cdrom", 5) == 0 || grub_strncmp (ptr, "fd", 2) == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct ofdisk_hash_ent *
|
static struct ofdisk_hash_ent *
|
||||||
@@ -147,8 +147,8 @@ ofdisk_hash_add (char *devpath, char *curcan)
|
|||||||
{
|
{
|
||||||
p->shortest = p->devpath;
|
p->shortest = p->devpath;
|
||||||
p->grub_shortest = p->grub_devpath;
|
p->grub_shortest = p->grub_devpath;
|
||||||
if (check_string_cdrom (devpath))
|
if (check_string_removable (devpath))
|
||||||
p->is_cdrom = 1;
|
p->is_removable = 1;
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -158,8 +158,8 @@ ofdisk_hash_add (char *devpath, char *curcan)
|
|||||||
else
|
else
|
||||||
grub_free (curcan);
|
grub_free (curcan);
|
||||||
|
|
||||||
if (check_string_cdrom (devpath) || check_string_cdrom (curcan))
|
if (check_string_removable (devpath) || check_string_removable (curcan))
|
||||||
pcan->is_cdrom = 1;
|
pcan->is_removable = 1;
|
||||||
|
|
||||||
if (!pcan)
|
if (!pcan)
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
@@ -330,7 +330,7 @@ grub_ofdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ent->is_boot && ent->is_cdrom)
|
if (!ent->is_boot && ent->is_removable)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (hook (ent->grub_shortest, hook_data))
|
if (hook (ent->grub_shortest, hook_data))
|
||||||
|
|||||||
@@ -1012,7 +1012,7 @@ grub_util_ldm_embed (struct grub_disk *disk, unsigned int *nsectors,
|
|||||||
usable for bootloaders (called generically
|
usable for bootloaders (called generically
|
||||||
"embedding zone") and this operation is
|
"embedding zone") and this operation is
|
||||||
called "embedding". */
|
called "embedding". */
|
||||||
N_("your LDM embedding Partition is too small;"
|
N_("your LDM Embedding Partition is too small;"
|
||||||
" embedding won't be possible"));
|
" embedding won't be possible"));
|
||||||
*nsectors = lv->size;
|
*nsectors = lv->size;
|
||||||
if (*nsectors > max_nsectors)
|
if (*nsectors > max_nsectors)
|
||||||
|
|||||||
+15
-2
@@ -143,6 +143,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d",
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d",
|
||||||
grub_be_to_cpu32 (header.keyBytes));
|
grub_be_to_cpu32 (header.keyBytes));
|
||||||
|
grub_crypto_cipher_close (cipher);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -181,9 +182,10 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
}
|
}
|
||||||
if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
|
if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
|
||||||
{
|
{
|
||||||
grub_crypto_cipher_close (cipher);
|
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d",
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d",
|
||||||
cipher->cipher->blocksize);
|
cipher->cipher->blocksize);
|
||||||
|
grub_crypto_cipher_close (cipher);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
if (secondary_cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
|
if (secondary_cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
|
||||||
@@ -191,6 +193,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
grub_crypto_cipher_close (cipher);
|
grub_crypto_cipher_close (cipher);
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d",
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d",
|
||||||
secondary_cipher->cipher->blocksize);
|
secondary_cipher->cipher->blocksize);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -200,9 +203,9 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
cipheriv = ciphermode + sizeof ("lrw-") - 1;
|
cipheriv = ciphermode + sizeof ("lrw-") - 1;
|
||||||
if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
|
if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
|
||||||
{
|
{
|
||||||
grub_crypto_cipher_close (cipher);
|
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported LRW block size: %d",
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported LRW block size: %d",
|
||||||
cipher->cipher->blocksize);
|
cipher->cipher->blocksize);
|
||||||
|
grub_crypto_cipher_close (cipher);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -225,6 +228,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
|| cipher->cipher->blocksize == 0)
|
|| cipher->cipher->blocksize == 0)
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported benbi blocksize: %d",
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported benbi blocksize: %d",
|
||||||
cipher->cipher->blocksize);
|
cipher->cipher->blocksize);
|
||||||
|
/* FIXME should we return an error here? */
|
||||||
for (benbi_log = 0;
|
for (benbi_log = 0;
|
||||||
(cipher->cipher->blocksize << benbi_log) < GRUB_DISK_SECTOR_SIZE;
|
(cipher->cipher->blocksize << benbi_log) < GRUB_DISK_SECTOR_SIZE;
|
||||||
benbi_log++);
|
benbi_log++);
|
||||||
@@ -243,6 +247,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
if (!essiv_hash)
|
if (!essiv_hash)
|
||||||
{
|
{
|
||||||
grub_crypto_cipher_close (cipher);
|
grub_crypto_cipher_close (cipher);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
grub_error (GRUB_ERR_FILE_NOT_FOUND,
|
grub_error (GRUB_ERR_FILE_NOT_FOUND,
|
||||||
"Couldn't load %s hash", hash_str);
|
"Couldn't load %s hash", hash_str);
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -251,12 +256,14 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
if (!essiv_cipher)
|
if (!essiv_cipher)
|
||||||
{
|
{
|
||||||
grub_crypto_cipher_close (cipher);
|
grub_crypto_cipher_close (cipher);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
grub_crypto_cipher_close (cipher);
|
grub_crypto_cipher_close (cipher);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown IV mode: %s",
|
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown IV mode: %s",
|
||||||
cipheriv);
|
cipheriv);
|
||||||
return NULL;
|
return NULL;
|
||||||
@@ -276,7 +283,12 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|
|||||||
|
|
||||||
newdev = grub_zalloc (sizeof (struct grub_cryptodisk));
|
newdev = grub_zalloc (sizeof (struct grub_cryptodisk));
|
||||||
if (!newdev)
|
if (!newdev)
|
||||||
|
{
|
||||||
|
grub_crypto_cipher_close (cipher);
|
||||||
|
grub_crypto_cipher_close (essiv_cipher);
|
||||||
|
grub_crypto_cipher_close (secondary_cipher);
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
newdev->cipher = cipher;
|
newdev->cipher = cipher;
|
||||||
newdev->offset = grub_be_to_cpu32 (header.payloadOffset);
|
newdev->offset = grub_be_to_cpu32 (header.payloadOffset);
|
||||||
newdev->source_disk = NULL;
|
newdev->source_disk = NULL;
|
||||||
@@ -451,6 +463,7 @@ luks_recover_key (grub_disk_t source,
|
|||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
grub_free (split_key);
|
||||||
return GRUB_ACCESS_DENIED;
|
return GRUB_ACCESS_DENIED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ grub_lvm_checkvalue (char **p, char *str, char *tmpl)
|
|||||||
static int
|
static int
|
||||||
grub_lvm_check_flag (char *p, const char *str, const char *flag)
|
grub_lvm_check_flag (char *p, const char *str, const char *flag)
|
||||||
{
|
{
|
||||||
int len_str = grub_strlen (str), len_flag = grub_strlen (flag);
|
grub_size_t len_str = grub_strlen (str), len_flag = grub_strlen (flag);
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
char *q;
|
char *q;
|
||||||
@@ -111,7 +111,8 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
struct grub_lvm_disk_locn *dlocn;
|
struct grub_lvm_disk_locn *dlocn;
|
||||||
struct grub_lvm_mda_header *mdah;
|
struct grub_lvm_mda_header *mdah;
|
||||||
struct grub_lvm_raw_locn *rlocn;
|
struct grub_lvm_raw_locn *rlocn;
|
||||||
unsigned int i, j, vgname_len;
|
unsigned int i, j;
|
||||||
|
grub_size_t vgname_len;
|
||||||
struct grub_diskfilter_vg *vg;
|
struct grub_diskfilter_vg *vg;
|
||||||
struct grub_diskfilter_pv *pv;
|
struct grub_diskfilter_pv *pv;
|
||||||
|
|
||||||
@@ -273,7 +274,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
/* Add all the pvs to the volume group. */
|
/* Add all the pvs to the volume group. */
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
int s;
|
grub_ssize_t s;
|
||||||
while (grub_isspace (*p))
|
while (grub_isspace (*p))
|
||||||
p++;
|
p++;
|
||||||
|
|
||||||
@@ -332,15 +333,15 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
p = grub_strstr (p, "logical_volumes");
|
p = grub_strstr (p, "logical_volumes {");
|
||||||
if (p)
|
if (p)
|
||||||
{
|
{
|
||||||
p += sizeof ("logical_volumes = ") - 1;
|
p += sizeof ("logical_volumes {") - 1;
|
||||||
|
|
||||||
/* And add all the lvs to the volume group. */
|
/* And add all the lvs to the volume group. */
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
int s;
|
grub_ssize_t s;
|
||||||
int skip_lv = 0;
|
int skip_lv = 0;
|
||||||
struct grub_diskfilter_lv *lv;
|
struct grub_diskfilter_lv *lv;
|
||||||
struct grub_diskfilter_segment *seg;
|
struct grub_diskfilter_segment *seg;
|
||||||
@@ -425,7 +426,7 @@ grub_lvm_detect (grub_disk_t disk,
|
|||||||
#endif
|
#endif
|
||||||
goto lvs_fail;
|
goto lvs_fail;
|
||||||
}
|
}
|
||||||
lv->segments = grub_malloc (sizeof (*seg) * lv->segment_count);
|
lv->segments = grub_zalloc (sizeof (*seg) * lv->segment_count);
|
||||||
seg = lv->segments;
|
seg = lv->segments;
|
||||||
|
|
||||||
for (i = 0; i < lv->segment_count; i++)
|
for (i = 0; i < lv->segment_count; i++)
|
||||||
|
|||||||
@@ -33,16 +33,16 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
#define grub_md_to_cpu64 grub_be_to_cpu64
|
#define grub_md_to_cpu64 grub_be_to_cpu64
|
||||||
#define grub_md_to_cpu32 grub_be_to_cpu32
|
#define grub_md_to_cpu32 grub_be_to_cpu32
|
||||||
#define grub_md_to_cpu16 grub_be_to_cpu16
|
#define grub_md_to_cpu16 grub_be_to_cpu16
|
||||||
#define grub_cpu_to_md64_compile_time grub_cpu_to_be64
|
#define grub_cpu_to_md64_compile_time grub_cpu_to_be64_compile_time
|
||||||
#define grub_cpu_to_md32_compile_time grub_cpu_to_be32
|
#define grub_cpu_to_md32_compile_time grub_cpu_to_be32_compile_time
|
||||||
#define grub_cpu_to_md16_compile_time grub_cpu_to_be16
|
#define grub_cpu_to_md16_compile_time grub_cpu_to_be16_compile_time
|
||||||
#else
|
#else
|
||||||
#define grub_md_to_cpu64 grub_le_to_cpu64
|
#define grub_md_to_cpu64 grub_le_to_cpu64
|
||||||
#define grub_md_to_cpu32 grub_le_to_cpu32
|
#define grub_md_to_cpu32 grub_le_to_cpu32
|
||||||
#define grub_md_to_cpu16 grub_le_to_cpu16
|
#define grub_md_to_cpu16 grub_le_to_cpu16
|
||||||
#define grub_cpu_to_md64_compile_time grub_cpu_to_le64
|
#define grub_cpu_to_md64_compile_time grub_cpu_to_le64_compile_time
|
||||||
#define grub_cpu_to_md32_compile_time grub_cpu_to_le32
|
#define grub_cpu_to_md32_compile_time grub_cpu_to_le32_compile_time
|
||||||
#define grub_cpu_to_md16_compile_time grub_cpu_to_le16
|
#define grub_cpu_to_md16_compile_time grub_cpu_to_le16_compile_time
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define RESERVED_BYTES (64 * 1024)
|
#define RESERVED_BYTES (64 * 1024)
|
||||||
|
|||||||
@@ -34,9 +34,9 @@ static unsigned powx_inv[256];
|
|||||||
static const grub_uint8_t poly = 0x1d;
|
static const grub_uint8_t poly = 0x1d;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
grub_raid_block_mulx (unsigned mul, char *buf, int size)
|
grub_raid_block_mulx (unsigned mul, char *buf, grub_size_t size)
|
||||||
{
|
{
|
||||||
int i;
|
grub_size_t i;
|
||||||
grub_uint8_t *p;
|
grub_uint8_t *p;
|
||||||
|
|
||||||
p = (grub_uint8_t *) buf;
|
p = (grub_uint8_t *) buf;
|
||||||
@@ -63,6 +63,16 @@ grub_raid6_init_table (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static unsigned
|
||||||
|
mod_255 (unsigned x)
|
||||||
|
{
|
||||||
|
while (x > 0xff)
|
||||||
|
x = (x >> 8) + (x & 0xff);
|
||||||
|
if (x == 0xff)
|
||||||
|
return 0;
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_raid6_recover (struct grub_diskfilter_segment *array, int disknr, int p,
|
grub_raid6_recover (struct grub_diskfilter_segment *array, int disknr, int p,
|
||||||
char *buf, grub_disk_addr_t sector, grub_size_t size)
|
char *buf, grub_disk_addr_t sector, grub_size_t size)
|
||||||
@@ -162,11 +172,11 @@ grub_raid6_recover (struct grub_diskfilter_segment *array, int disknr, int p,
|
|||||||
|
|
||||||
grub_crypto_xor (qbuf, qbuf, buf, size);
|
grub_crypto_xor (qbuf, qbuf, buf, size);
|
||||||
|
|
||||||
c = ((255 ^ bad1)
|
c = mod_255((255 ^ bad1)
|
||||||
+ (255 ^ powx_inv[(powx[bad2 + (bad1 ^ 255)] ^ 1)])) % 255;
|
+ (255 ^ powx_inv[(powx[bad2 + (bad1 ^ 255)] ^ 1)]));
|
||||||
grub_raid_block_mulx (c, qbuf, size);
|
grub_raid_block_mulx (c, qbuf, size);
|
||||||
|
|
||||||
c = ((unsigned) bad2 + c) % 255;
|
c = mod_255((unsigned) bad2 + c);
|
||||||
grub_raid_block_mulx (c, pbuf, size);
|
grub_raid_block_mulx (c, pbuf, size);
|
||||||
|
|
||||||
grub_crypto_xor (pbuf, pbuf, qbuf, size);
|
grub_crypto_xor (pbuf, pbuf, qbuf, size);
|
||||||
|
|||||||
@@ -201,7 +201,7 @@ grub_scsi_read_capacity16 (grub_scsi_t scsi)
|
|||||||
rc.opcode = grub_scsi_cmd_read_capacity16;
|
rc.opcode = grub_scsi_cmd_read_capacity16;
|
||||||
rc.lun = (scsi->lun << GRUB_SCSI_LUN_SHIFT) | 0x10;
|
rc.lun = (scsi->lun << GRUB_SCSI_LUN_SHIFT) | 0x10;
|
||||||
rc.logical_block_addr = 0;
|
rc.logical_block_addr = 0;
|
||||||
rc.alloc_len = grub_cpu_to_be32 (sizeof (rcd));
|
rc.alloc_len = grub_cpu_to_be32_compile_time (sizeof (rcd));
|
||||||
rc.PMI = 0;
|
rc.PMI = 0;
|
||||||
rc.control = 0;
|
rc.control = 0;
|
||||||
|
|
||||||
|
|||||||
@@ -307,7 +307,7 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
|
|||||||
|
|
||||||
/* Setup the request. */
|
/* Setup the request. */
|
||||||
grub_memset (&cbw, 0, sizeof (cbw));
|
grub_memset (&cbw, 0, sizeof (cbw));
|
||||||
cbw.signature = grub_cpu_to_le32 (0x43425355);
|
cbw.signature = grub_cpu_to_le32_compile_time (0x43425355);
|
||||||
cbw.tag = tag;
|
cbw.tag = tag;
|
||||||
cbw.transfer_length = grub_cpu_to_le32 (size);
|
cbw.transfer_length = grub_cpu_to_le32 (size);
|
||||||
cbw.flags = (!read_write) << GRUB_USBMS_DIRECTION_BIT;
|
cbw.flags = (!read_write) << GRUB_USBMS_DIRECTION_BIT;
|
||||||
@@ -414,7 +414,7 @@ CheckCSW:
|
|||||||
|
|
||||||
/* If phase error or not valid signature, do bulk-only reset device. */
|
/* If phase error or not valid signature, do bulk-only reset device. */
|
||||||
if ((status.status == 2) ||
|
if ((status.status == 2) ||
|
||||||
(status.signature != grub_cpu_to_le32(0x53425355)))
|
(status.signature != grub_cpu_to_le32_compile_time(0x53425355)))
|
||||||
{ /* Bulk-only reset device. */
|
{ /* Bulk-only reset device. */
|
||||||
grub_dprintf ("usb", "Bulk-only reset device - bad status\n");
|
grub_dprintf ("usb", "Bulk-only reset device - bad status\n");
|
||||||
grub_usbms_reset (dev);
|
grub_usbms_reset (dev);
|
||||||
|
|||||||
@@ -40,6 +40,7 @@ struct virtdisk
|
|||||||
grub_xen_evtchn_t evtchn;
|
grub_xen_evtchn_t evtchn;
|
||||||
void *dma_page;
|
void *dma_page;
|
||||||
grub_xen_grant_t dma_grant;
|
grub_xen_grant_t dma_grant;
|
||||||
|
struct virtdisk *compat_next;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define xen_wmb() mb()
|
#define xen_wmb() mb()
|
||||||
@@ -47,6 +48,7 @@ struct virtdisk
|
|||||||
|
|
||||||
static struct virtdisk *virtdisks;
|
static struct virtdisk *virtdisks;
|
||||||
static grub_size_t vdiskcnt;
|
static grub_size_t vdiskcnt;
|
||||||
|
struct virtdisk *compat_head;
|
||||||
|
|
||||||
static int
|
static int
|
||||||
grub_virtdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data,
|
grub_virtdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data,
|
||||||
@@ -66,20 +68,32 @@ grub_virtdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data,
|
|||||||
static grub_err_t
|
static grub_err_t
|
||||||
grub_virtdisk_open (const char *name, grub_disk_t disk)
|
grub_virtdisk_open (const char *name, grub_disk_t disk)
|
||||||
{
|
{
|
||||||
grub_size_t i;
|
int i;
|
||||||
grub_uint32_t secsize;
|
grub_uint32_t secsize;
|
||||||
char fdir[200];
|
char fdir[200];
|
||||||
char *buf;
|
char *buf;
|
||||||
|
int num = -1;
|
||||||
|
struct virtdisk *vd;
|
||||||
|
|
||||||
for (i = 0; i < vdiskcnt; i++)
|
/* For compatibility with pv-grub legacy menu.lst accept hdX as disk name */
|
||||||
if (grub_strcmp (name, virtdisks[i].fullname) == 0)
|
if (name[0] == 'h' && name[1] == 'd' && name[2])
|
||||||
|
{
|
||||||
|
num = grub_strtoul (name + 2, 0, 10);
|
||||||
|
if (grub_errno)
|
||||||
|
{
|
||||||
|
grub_errno = 0;
|
||||||
|
num = -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (i = 0, vd = compat_head; vd; vd = vd->compat_next, i++)
|
||||||
|
if (i == num || grub_strcmp (name, vd->fullname) == 0)
|
||||||
break;
|
break;
|
||||||
if (i == vdiskcnt)
|
if (!vd)
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a virtdisk");
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a virtdisk");
|
||||||
disk->data = &virtdisks[i];
|
disk->data = vd;
|
||||||
disk->id = i;
|
disk->id = vd - virtdisks;
|
||||||
|
|
||||||
grub_snprintf (fdir, sizeof (fdir), "%s/sectors", virtdisks[i].backend_dir);
|
grub_snprintf (fdir, sizeof (fdir), "%s/sectors", vd->backend_dir);
|
||||||
buf = grub_xenstore_get_file (fdir, NULL);
|
buf = grub_xenstore_get_file (fdir, NULL);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
@@ -87,8 +101,7 @@ grub_virtdisk_open (const char *name, grub_disk_t disk)
|
|||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
grub_snprintf (fdir, sizeof (fdir), "%s/sector-size",
|
grub_snprintf (fdir, sizeof (fdir), "%s/sector-size", vd->backend_dir);
|
||||||
virtdisks[i].backend_dir);
|
|
||||||
buf = grub_xenstore_get_file (fdir, NULL);
|
buf = grub_xenstore_get_file (fdir, NULL);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
@@ -264,6 +277,7 @@ fill (const char *dir, void *data)
|
|||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
void *buf;
|
void *buf;
|
||||||
struct evtchn_alloc_unbound alloc_unbound;
|
struct evtchn_alloc_unbound alloc_unbound;
|
||||||
|
struct virtdisk **prev = &compat_head, *vd = compat_head;
|
||||||
|
|
||||||
/* Shouldn't happen unles some hotplug happened. */
|
/* Shouldn't happen unles some hotplug happened. */
|
||||||
if (vdiskcnt >= *ctr)
|
if (vdiskcnt >= *ctr)
|
||||||
@@ -374,6 +388,19 @@ fill (const char *dir, void *data)
|
|||||||
|
|
||||||
virtdisks[vdiskcnt].frontend_dir = grub_strdup (fdir);
|
virtdisks[vdiskcnt].frontend_dir = grub_strdup (fdir);
|
||||||
|
|
||||||
|
/* For compatibility with pv-grub maintain linked list sorted by handle
|
||||||
|
value in increasing order. This allows mapping of (hdX) disk names
|
||||||
|
from legacy menu.lst */
|
||||||
|
while (vd)
|
||||||
|
{
|
||||||
|
if (vd->handle > virtdisks[vdiskcnt].handle)
|
||||||
|
break;
|
||||||
|
prev = &vd->compat_next;
|
||||||
|
vd = vd->compat_next;
|
||||||
|
}
|
||||||
|
virtdisks[vdiskcnt].compat_next = vd;
|
||||||
|
*prev = &virtdisks[vdiskcnt];
|
||||||
|
|
||||||
vdiskcnt++;
|
vdiskcnt++;
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,7 @@
|
|||||||
#include <grub/err.h>
|
#include <grub/err.h>
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/types.h>
|
#include <grub/types.h>
|
||||||
|
#include <grub/misc.h>
|
||||||
#include <grub/efiemu/efiemu.h>
|
#include <grub/efiemu/efiemu.h>
|
||||||
#include <grub/crypto.h>
|
#include <grub/crypto.h>
|
||||||
|
|
||||||
|
|||||||
@@ -777,6 +777,7 @@ grub_font_get_glyph_internal (grub_font_t font, grub_uint32_t code)
|
|||||||
if (grub_file_read (font->file, glyph->bitmap, len) != len)
|
if (grub_file_read (font->file, glyph->bitmap, len) != len)
|
||||||
{
|
{
|
||||||
remove_font (font);
|
remove_font (font);
|
||||||
|
grub_free (glyph);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1285,7 +1286,7 @@ blit_comb (const struct grub_unicode_glyph *glyph_id,
|
|||||||
- grub_font_get_xheight (combining_glyphs[i]->font) - 1;
|
- grub_font_get_xheight (combining_glyphs[i]->font) - 1;
|
||||||
if (space <= 0)
|
if (space <= 0)
|
||||||
space = 1 + (grub_font_get_xheight (main_glyph->font)) / 8;
|
space = 1 + (grub_font_get_xheight (main_glyph->font)) / 8;
|
||||||
|
/* Fallthrough. */
|
||||||
case GRUB_UNICODE_STACK_ATTACHED_ABOVE:
|
case GRUB_UNICODE_STACK_ATTACHED_ABOVE:
|
||||||
do_blit (combining_glyphs[i], targetx,
|
do_blit (combining_glyphs[i], targetx,
|
||||||
-(ctx.bounds.height + ctx.bounds.y + space
|
-(ctx.bounds.height + ctx.bounds.y + space
|
||||||
@@ -1326,6 +1327,7 @@ blit_comb (const struct grub_unicode_glyph *glyph_id,
|
|||||||
+ combining_glyphs[i]->height);
|
+ combining_glyphs[i]->height);
|
||||||
if (space <= 0)
|
if (space <= 0)
|
||||||
space = 1 + (grub_font_get_xheight (main_glyph->font)) / 8;
|
space = 1 + (grub_font_get_xheight (main_glyph->font)) / 8;
|
||||||
|
/* Fallthrough. */
|
||||||
|
|
||||||
case GRUB_UNICODE_STACK_ATTACHED_BELOW:
|
case GRUB_UNICODE_STACK_ATTACHED_BELOW:
|
||||||
do_blit (combining_glyphs[i], targetx, -(ctx.bounds.y - space),
|
do_blit (combining_glyphs[i], targetx, -(ctx.bounds.y - space),
|
||||||
|
|||||||
+23
-16
@@ -680,6 +680,8 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr,
|
|||||||
grub_uint64_t stripen;
|
grub_uint64_t stripen;
|
||||||
grub_uint64_t stripe_offset;
|
grub_uint64_t stripe_offset;
|
||||||
grub_uint64_t off = addr - grub_le_to_cpu64 (key->offset);
|
grub_uint64_t off = addr - grub_le_to_cpu64 (key->offset);
|
||||||
|
grub_uint64_t chunk_stripe_length;
|
||||||
|
grub_uint16_t nstripes;
|
||||||
unsigned redundancy = 1;
|
unsigned redundancy = 1;
|
||||||
unsigned i, j;
|
unsigned i, j;
|
||||||
|
|
||||||
@@ -690,15 +692,17 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr,
|
|||||||
"couldn't find the chunk descriptor");
|
"couldn't find the chunk descriptor");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nstripes = grub_le_to_cpu16 (chunk->nstripes) ? : 1;
|
||||||
|
chunk_stripe_length = grub_le_to_cpu64 (chunk->stripe_length) ? : 512;
|
||||||
grub_dprintf ("btrfs", "chunk 0x%" PRIxGRUB_UINT64_T
|
grub_dprintf ("btrfs", "chunk 0x%" PRIxGRUB_UINT64_T
|
||||||
"+0x%" PRIxGRUB_UINT64_T
|
"+0x%" PRIxGRUB_UINT64_T
|
||||||
" (%d stripes (%d substripes) of %"
|
" (%d stripes (%d substripes) of %"
|
||||||
PRIxGRUB_UINT64_T ")\n",
|
PRIxGRUB_UINT64_T ")\n",
|
||||||
grub_le_to_cpu64 (key->offset),
|
grub_le_to_cpu64 (key->offset),
|
||||||
grub_le_to_cpu64 (chunk->size),
|
grub_le_to_cpu64 (chunk->size),
|
||||||
grub_le_to_cpu16 (chunk->nstripes),
|
nstripes,
|
||||||
grub_le_to_cpu16 (chunk->nsubstripes),
|
grub_le_to_cpu16 (chunk->nsubstripes),
|
||||||
grub_le_to_cpu64 (chunk->stripe_length));
|
chunk_stripe_length);
|
||||||
|
|
||||||
switch (grub_le_to_cpu64 (chunk->type)
|
switch (grub_le_to_cpu64 (chunk->type)
|
||||||
& ~GRUB_BTRFS_CHUNK_TYPE_BITS_DONTCARE)
|
& ~GRUB_BTRFS_CHUNK_TYPE_BITS_DONTCARE)
|
||||||
@@ -708,8 +712,10 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr,
|
|||||||
grub_uint64_t stripe_length;
|
grub_uint64_t stripe_length;
|
||||||
grub_dprintf ("btrfs", "single\n");
|
grub_dprintf ("btrfs", "single\n");
|
||||||
stripe_length = grub_divmod64 (grub_le_to_cpu64 (chunk->size),
|
stripe_length = grub_divmod64 (grub_le_to_cpu64 (chunk->size),
|
||||||
grub_le_to_cpu16 (chunk->nstripes),
|
nstripes,
|
||||||
NULL);
|
NULL);
|
||||||
|
if (stripe_length == 0)
|
||||||
|
stripe_length = 512;
|
||||||
stripen = grub_divmod64 (off, stripe_length, &stripe_offset);
|
stripen = grub_divmod64 (off, stripe_length, &stripe_offset);
|
||||||
csize = (stripen + 1) * stripe_length - off;
|
csize = (stripen + 1) * stripe_length - off;
|
||||||
break;
|
break;
|
||||||
@@ -730,33 +736,34 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr,
|
|||||||
grub_uint64_t low;
|
grub_uint64_t low;
|
||||||
grub_dprintf ("btrfs", "RAID0\n");
|
grub_dprintf ("btrfs", "RAID0\n");
|
||||||
middle = grub_divmod64 (off,
|
middle = grub_divmod64 (off,
|
||||||
grub_le_to_cpu64 (chunk->stripe_length),
|
chunk_stripe_length,
|
||||||
&low);
|
&low);
|
||||||
|
|
||||||
high = grub_divmod64 (middle, grub_le_to_cpu16 (chunk->nstripes),
|
high = grub_divmod64 (middle, nstripes,
|
||||||
&stripen);
|
&stripen);
|
||||||
stripe_offset =
|
stripe_offset =
|
||||||
low + grub_le_to_cpu64 (chunk->stripe_length) * high;
|
low + chunk_stripe_length * high;
|
||||||
csize = grub_le_to_cpu64 (chunk->stripe_length) - low;
|
csize = chunk_stripe_length - low;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case GRUB_BTRFS_CHUNK_TYPE_RAID10:
|
case GRUB_BTRFS_CHUNK_TYPE_RAID10:
|
||||||
{
|
{
|
||||||
grub_uint64_t middle, high;
|
grub_uint64_t middle, high;
|
||||||
grub_uint64_t low;
|
grub_uint64_t low;
|
||||||
|
grub_uint16_t nsubstripes;
|
||||||
|
nsubstripes = grub_le_to_cpu16 (chunk->nsubstripes) ? : 1;
|
||||||
middle = grub_divmod64 (off,
|
middle = grub_divmod64 (off,
|
||||||
grub_le_to_cpu64 (chunk->stripe_length),
|
chunk_stripe_length,
|
||||||
&low);
|
&low);
|
||||||
|
|
||||||
high = grub_divmod64 (middle,
|
high = grub_divmod64 (middle,
|
||||||
grub_le_to_cpu16 (chunk->nstripes)
|
nstripes / nsubstripes ? : 1,
|
||||||
/ grub_le_to_cpu16 (chunk->nsubstripes),
|
|
||||||
&stripen);
|
&stripen);
|
||||||
stripen *= grub_le_to_cpu16 (chunk->nsubstripes);
|
stripen *= nsubstripes;
|
||||||
redundancy = grub_le_to_cpu16 (chunk->nsubstripes);
|
redundancy = nsubstripes;
|
||||||
stripe_offset = low + grub_le_to_cpu64 (chunk->stripe_length)
|
stripe_offset = low + chunk_stripe_length
|
||||||
* high;
|
* high;
|
||||||
csize = grub_le_to_cpu64 (chunk->stripe_length) - low;
|
csize = chunk_stripe_length - low;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
@@ -1051,7 +1058,7 @@ grub_btrfs_extent_read (struct grub_btrfs_data *data,
|
|||||||
|
|
||||||
data->extend = data->extstart + grub_le_to_cpu64 (data->extent->size);
|
data->extend = data->extstart + grub_le_to_cpu64 (data->extent->size);
|
||||||
if (data->extent->type == GRUB_BTRFS_EXTENT_REGULAR
|
if (data->extent->type == GRUB_BTRFS_EXTENT_REGULAR
|
||||||
&& (char *) &data->extent + elemsize
|
&& (char *) data->extent + elemsize
|
||||||
>= (char *) &data->extent->filled + sizeof (data->extent->filled))
|
>= (char *) &data->extent->filled + sizeof (data->extent->filled))
|
||||||
data->extend =
|
data->extend =
|
||||||
data->extstart + grub_le_to_cpu64 (data->extent->filled);
|
data->extstart + grub_le_to_cpu64 (data->extent->filled);
|
||||||
@@ -1201,7 +1208,7 @@ get_root (struct grub_btrfs_data *data, struct grub_btrfs_key *key,
|
|||||||
struct grub_btrfs_key key_out, key_in;
|
struct grub_btrfs_key key_out, key_in;
|
||||||
struct grub_btrfs_root_item ri;
|
struct grub_btrfs_root_item ri;
|
||||||
|
|
||||||
key_in.object_id = GRUB_BTRFS_ROOT_VOL_OBJECTID;
|
key_in.object_id = grub_cpu_to_le64_compile_time (GRUB_BTRFS_ROOT_VOL_OBJECTID);
|
||||||
key_in.offset = 0;
|
key_in.offset = 0;
|
||||||
key_in.type = GRUB_BTRFS_ITEM_TYPE_ROOT_ITEM;
|
key_in.type = GRUB_BTRFS_ITEM_TYPE_ROOT_ITEM;
|
||||||
err = lower_bound (data, &key_in, &key_out,
|
err = lower_bound (data, &key_in, &key_out,
|
||||||
|
|||||||
+5
-2
@@ -74,7 +74,6 @@ grub_cbfs_find_file (struct grub_archelp_data *data, char **name,
|
|||||||
(void) mtime;
|
(void) mtime;
|
||||||
offset = grub_be_to_cpu32 (hd.offset);
|
offset = grub_be_to_cpu32 (hd.offset);
|
||||||
|
|
||||||
if (mode)
|
|
||||||
*mode = GRUB_ARCHELP_ATTR_FILE | GRUB_ARCHELP_ATTR_NOTIME;
|
*mode = GRUB_ARCHELP_ATTR_FILE | GRUB_ARCHELP_ATTR_NOTIME;
|
||||||
|
|
||||||
namesize = offset;
|
namesize = offset;
|
||||||
@@ -144,11 +143,14 @@ static struct grub_archelp_data *
|
|||||||
grub_cbfs_mount (grub_disk_t disk)
|
grub_cbfs_mount (grub_disk_t disk)
|
||||||
{
|
{
|
||||||
struct cbfs_file hd;
|
struct cbfs_file hd;
|
||||||
struct grub_archelp_data *data;
|
struct grub_archelp_data *data = NULL;
|
||||||
grub_uint32_t ptr;
|
grub_uint32_t ptr;
|
||||||
grub_off_t header_off;
|
grub_off_t header_off;
|
||||||
struct cbfs_header head;
|
struct cbfs_header head;
|
||||||
|
|
||||||
|
if (grub_disk_get_size (disk) == GRUB_DISK_SIZE_UNKNOWN)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
if (grub_disk_read (disk, grub_disk_get_size (disk) - 1,
|
if (grub_disk_read (disk, grub_disk_get_size (disk) - 1,
|
||||||
GRUB_DISK_SECTOR_SIZE - sizeof (ptr),
|
GRUB_DISK_SECTOR_SIZE - sizeof (ptr),
|
||||||
sizeof (ptr), &ptr))
|
sizeof (ptr), &ptr))
|
||||||
@@ -193,6 +195,7 @@ grub_cbfs_mount (grub_disk_t disk)
|
|||||||
return data;
|
return data;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
|
grub_free (data);
|
||||||
grub_error (GRUB_ERR_BAD_FS, "not a cbfs filesystem");
|
grub_error (GRUB_ERR_BAD_FS, "not a cbfs filesystem");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -61,7 +61,14 @@ grub_cpio_find_file (struct grub_archelp_data *data, char **name,
|
|||||||
modeval = read_number (hd.mode, ARRAY_SIZE (hd.mode));
|
modeval = read_number (hd.mode, ARRAY_SIZE (hd.mode));
|
||||||
namesize = read_number (hd.namesize, ARRAY_SIZE (hd.namesize));
|
namesize = read_number (hd.namesize, ARRAY_SIZE (hd.namesize));
|
||||||
|
|
||||||
if (mode)
|
/* Don't allow negative numbers. */
|
||||||
|
if (namesize >= 0x80000000)
|
||||||
|
{
|
||||||
|
/* Probably a corruption, don't attempt to recover. */
|
||||||
|
*mode = GRUB_ARCHELP_ATTR_END;
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
*mode = modeval;
|
*mode = modeval;
|
||||||
|
|
||||||
*name = grub_malloc (namesize + 1);
|
*name = grub_malloc (namesize + 1);
|
||||||
|
|||||||
+75
-7
@@ -100,6 +100,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
#define EXT2_FEATURE_INCOMPAT_META_BG 0x0010
|
#define EXT2_FEATURE_INCOMPAT_META_BG 0x0010
|
||||||
#define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 /* Extents used */
|
#define EXT4_FEATURE_INCOMPAT_EXTENTS 0x0040 /* Extents used */
|
||||||
#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
|
#define EXT4_FEATURE_INCOMPAT_64BIT 0x0080
|
||||||
|
#define EXT4_FEATURE_INCOMPAT_MMP 0x0100
|
||||||
#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
|
#define EXT4_FEATURE_INCOMPAT_FLEX_BG 0x0200
|
||||||
|
|
||||||
/* The set of back-incompatible features this driver DOES support. Add (OR)
|
/* The set of back-incompatible features this driver DOES support. Add (OR)
|
||||||
@@ -107,6 +108,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
#define EXT2_DRIVER_SUPPORTED_INCOMPAT ( EXT2_FEATURE_INCOMPAT_FILETYPE \
|
#define EXT2_DRIVER_SUPPORTED_INCOMPAT ( EXT2_FEATURE_INCOMPAT_FILETYPE \
|
||||||
| EXT4_FEATURE_INCOMPAT_EXTENTS \
|
| EXT4_FEATURE_INCOMPAT_EXTENTS \
|
||||||
| EXT4_FEATURE_INCOMPAT_FLEX_BG \
|
| EXT4_FEATURE_INCOMPAT_FLEX_BG \
|
||||||
|
| EXT2_FEATURE_INCOMPAT_META_BG \
|
||||||
| EXT4_FEATURE_INCOMPAT_64BIT)
|
| EXT4_FEATURE_INCOMPAT_64BIT)
|
||||||
/* List of rationales for the ignored "incompatible" features:
|
/* List of rationales for the ignored "incompatible" features:
|
||||||
* needs_recovery: Not really back-incompatible - was added as such to forbid
|
* needs_recovery: Not really back-incompatible - was added as such to forbid
|
||||||
@@ -114,8 +116,13 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
* journal because they will ignore the journal, but the next
|
* journal because they will ignore the journal, but the next
|
||||||
* ext3 driver to mount the volume will find the journal and
|
* ext3 driver to mount the volume will find the journal and
|
||||||
* replay it, potentially corrupting the metadata written by
|
* replay it, potentially corrupting the metadata written by
|
||||||
* the ext2 drivers. Safe to ignore for this RO driver. */
|
* the ext2 drivers. Safe to ignore for this RO driver.
|
||||||
#define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER )
|
* mmp: Not really back-incompatible - was added as such to
|
||||||
|
* avoid multiple read-write mounts. Safe to ignore for this
|
||||||
|
* RO driver.
|
||||||
|
*/
|
||||||
|
#define EXT2_DRIVER_IGNORED_INCOMPAT ( EXT3_FEATURE_INCOMPAT_RECOVER \
|
||||||
|
| EXT4_FEATURE_INCOMPAT_MMP)
|
||||||
|
|
||||||
|
|
||||||
#define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U
|
#define EXT3_JOURNAL_MAGIC_NUMBER 0xc03b3998U
|
||||||
@@ -331,16 +338,68 @@ static grub_dl_t my_mod;
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Check is a = b^x for some x. */
|
||||||
|
static inline int
|
||||||
|
is_power_of (grub_uint64_t a, grub_uint32_t b)
|
||||||
|
{
|
||||||
|
grub_uint64_t c;
|
||||||
|
/* Prevent overflow assuming b < 8. */
|
||||||
|
if (a >= (1LL << 60))
|
||||||
|
return 0;
|
||||||
|
for (c = 1; c <= a; c *= b);
|
||||||
|
return (c == a);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static inline int
|
||||||
|
group_has_super_block (struct grub_ext2_data *data, grub_uint64_t group)
|
||||||
|
{
|
||||||
|
if (!(data->sblock.feature_ro_compat
|
||||||
|
& grub_cpu_to_le32_compile_time(EXT2_FEATURE_RO_COMPAT_SPARSE_SUPER)))
|
||||||
|
return 1;
|
||||||
|
/* Algorithm looked up in Linux source. */
|
||||||
|
if (group <= 1)
|
||||||
|
return 1;
|
||||||
|
/* Even number is never a power of odd number. */
|
||||||
|
if (!(group & 1))
|
||||||
|
return 0;
|
||||||
|
return (is_power_of(group, 7) || is_power_of(group, 5) ||
|
||||||
|
is_power_of(group, 3));
|
||||||
|
}
|
||||||
|
|
||||||
/* Read into BLKGRP the blockgroup descriptor of blockgroup GROUP of
|
/* Read into BLKGRP the blockgroup descriptor of blockgroup GROUP of
|
||||||
the mounted filesystem DATA. */
|
the mounted filesystem DATA. */
|
||||||
inline static grub_err_t
|
inline static grub_err_t
|
||||||
grub_ext2_blockgroup (struct grub_ext2_data *data, int group,
|
grub_ext2_blockgroup (struct grub_ext2_data *data, grub_uint64_t group,
|
||||||
struct grub_ext2_block_group *blkgrp)
|
struct grub_ext2_block_group *blkgrp)
|
||||||
{
|
{
|
||||||
|
grub_uint64_t full_offset = (group << data->log_group_desc_size);
|
||||||
|
grub_uint64_t block, offset;
|
||||||
|
block = (full_offset >> LOG2_BLOCK_SIZE (data));
|
||||||
|
offset = (full_offset & ((1 << LOG2_BLOCK_SIZE (data)) - 1));
|
||||||
|
if ((data->sblock.feature_incompat
|
||||||
|
& grub_cpu_to_le32_compile_time (EXT2_FEATURE_INCOMPAT_META_BG))
|
||||||
|
&& block >= grub_le_to_cpu32(data->sblock.first_meta_bg))
|
||||||
|
{
|
||||||
|
grub_uint64_t first_block_group;
|
||||||
|
/* Find the first block group for which a descriptor
|
||||||
|
is stored in given block. */
|
||||||
|
first_block_group = (block << (LOG2_BLOCK_SIZE (data)
|
||||||
|
- data->log_group_desc_size));
|
||||||
|
|
||||||
|
block = (first_block_group
|
||||||
|
* grub_le_to_cpu32(data->sblock.blocks_per_group));
|
||||||
|
|
||||||
|
if (group_has_super_block (data, first_block_group))
|
||||||
|
block++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
/* Superblock. */
|
||||||
|
block++;
|
||||||
return grub_disk_read (data->disk,
|
return grub_disk_read (data->disk,
|
||||||
((grub_le_to_cpu32 (data->sblock.first_data_block) + 1)
|
((grub_le_to_cpu32 (data->sblock.first_data_block)
|
||||||
<< LOG2_EXT2_BLOCK_SIZE (data)),
|
+ block)
|
||||||
group << data->log_group_desc_size,
|
<< LOG2_EXT2_BLOCK_SIZE (data)), offset,
|
||||||
sizeof (struct grub_ext2_block_group), blkgrp);
|
sizeof (struct grub_ext2_block_group), blkgrp);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -484,6 +543,10 @@ grub_ext2_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
|
|||||||
|
|
||||||
indirect:
|
indirect:
|
||||||
do {
|
do {
|
||||||
|
/* If the indirect block is zero, all child blocks are absent
|
||||||
|
(i.e. filled with zeros.) */
|
||||||
|
if (indir == 0)
|
||||||
|
return 0;
|
||||||
if (grub_disk_read (data->disk,
|
if (grub_disk_read (data->disk,
|
||||||
((grub_disk_addr_t) grub_le_to_cpu32 (indir))
|
((grub_disk_addr_t) grub_le_to_cpu32 (indir))
|
||||||
<< log2_blksz,
|
<< log2_blksz,
|
||||||
@@ -573,7 +636,12 @@ grub_ext2_mount (grub_disk_t disk)
|
|||||||
|
|
||||||
/* Make sure this is an ext2 filesystem. */
|
/* Make sure this is an ext2 filesystem. */
|
||||||
if (data->sblock.magic != grub_cpu_to_le16_compile_time (EXT2_MAGIC)
|
if (data->sblock.magic != grub_cpu_to_le16_compile_time (EXT2_MAGIC)
|
||||||
|| grub_le_to_cpu32 (data->sblock.log2_block_size) >= 16)
|
|| grub_le_to_cpu32 (data->sblock.log2_block_size) >= 16
|
||||||
|
|| data->sblock.inodes_per_group == 0
|
||||||
|
/* 20 already means 1GiB blocks. We don't want to deal with blocks overflowing int32. */
|
||||||
|
|| grub_le_to_cpu32 (data->sblock.log2_block_size) > 20
|
||||||
|
|| EXT2_INODE_SIZE (data) == 0
|
||||||
|
|| EXT2_BLOCK_SIZE (data) / EXT2_INODE_SIZE (data) == 0)
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_FS, "not an ext2 filesystem");
|
grub_error (GRUB_ERR_BAD_FS, "not an ext2 filesystem");
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|||||||
+1
-1
@@ -1136,7 +1136,7 @@ grub_fat_label (grub_device_t device, char **label)
|
|||||||
if (! (data->attr & GRUB_FAT_ATTR_DIRECTORY))
|
if (! (data->attr & GRUB_FAT_ATTR_DIRECTORY))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory"));
|
grub_error (GRUB_ERR_BAD_FILE_TYPE, N_("not a directory"));
|
||||||
return 0;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = grub_fat_iterate_init (&ctxt);
|
err = grub_fat_iterate_init (&ctxt);
|
||||||
|
|||||||
@@ -252,6 +252,13 @@ grub_fshelp_read_file (grub_disk_t disk, grub_fshelp_node_t node,
|
|||||||
grub_disk_addr_t i, blockcnt;
|
grub_disk_addr_t i, blockcnt;
|
||||||
int blocksize = 1 << (log2blocksize + GRUB_DISK_SECTOR_BITS);
|
int blocksize = 1 << (log2blocksize + GRUB_DISK_SECTOR_BITS);
|
||||||
|
|
||||||
|
if (pos > filesize)
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_OUT_OF_RANGE,
|
||||||
|
N_("attempt to read past the end of file"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Adjust LEN so it we can't read past the end of the file. */
|
/* Adjust LEN so it we can't read past the end of the file. */
|
||||||
if (pos + len > filesize)
|
if (pos + len > filesize)
|
||||||
len = filesize - pos;
|
len = filesize - pos;
|
||||||
|
|||||||
+26
-6
@@ -330,6 +330,7 @@ grub_hfs_mount (grub_disk_t disk)
|
|||||||
|
|
||||||
/* Check if this is a HFS filesystem. */
|
/* Check if this is a HFS filesystem. */
|
||||||
if (grub_be_to_cpu16 (data->sblock.magic) != GRUB_HFS_MAGIC
|
if (grub_be_to_cpu16 (data->sblock.magic) != GRUB_HFS_MAGIC
|
||||||
|
|| data->sblock.blksz == 0
|
||||||
|| (data->sblock.blksz & grub_cpu_to_be32_compile_time (0xc00001ff)))
|
|| (data->sblock.blksz & grub_cpu_to_be32_compile_time (0xc00001ff)))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_FS, "not an HFS filesystem");
|
grub_error (GRUB_ERR_BAD_FS, "not an HFS filesystem");
|
||||||
@@ -367,9 +368,14 @@ grub_hfs_mount (grub_disk_t disk)
|
|||||||
data->cat_root = grub_be_to_cpu32 (treehead.head.root_node);
|
data->cat_root = grub_be_to_cpu32 (treehead.head.root_node);
|
||||||
data->cat_size = grub_be_to_cpu16 (treehead.head.node_size);
|
data->cat_size = grub_be_to_cpu16 (treehead.head.node_size);
|
||||||
|
|
||||||
|
if (data->cat_size == 0
|
||||||
|
|| data->blksz < data->cat_size
|
||||||
|
|| data->blksz < data->ext_size)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
/* Lookup the root directory node in the catalog tree using the
|
/* Lookup the root directory node in the catalog tree using the
|
||||||
volume name. */
|
volume name. */
|
||||||
key.parent_dir = grub_cpu_to_be32 (1);
|
key.parent_dir = grub_cpu_to_be32_compile_time (1);
|
||||||
key.strlen = data->sblock.volname[0];
|
key.strlen = data->sblock.volname[0];
|
||||||
grub_strcpy ((char *) key.str, (char *) (data->sblock.volname + 1));
|
grub_strcpy ((char *) key.str, (char *) (data->sblock.volname + 1));
|
||||||
|
|
||||||
@@ -686,6 +692,7 @@ grub_hfs_iterate_records (struct grub_hfs_data *data, int type, int idx,
|
|||||||
int i;
|
int i;
|
||||||
struct grub_hfs_extent *dat;
|
struct grub_hfs_extent *dat;
|
||||||
int blk;
|
int blk;
|
||||||
|
grub_uint16_t reccnt;
|
||||||
|
|
||||||
dat = (struct grub_hfs_extent *) (type == 0
|
dat = (struct grub_hfs_extent *) (type == 0
|
||||||
? (&data->sblock.catalog_recs)
|
? (&data->sblock.catalog_recs)
|
||||||
@@ -704,8 +711,12 @@ grub_hfs_iterate_records (struct grub_hfs_data *data, int type, int idx,
|
|||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reccnt = grub_be_to_cpu16 (node->node.reccnt);
|
||||||
|
if (reccnt > (nodesize >> 1))
|
||||||
|
reccnt = (nodesize >> 1);
|
||||||
|
|
||||||
/* Iterate over all records in this node. */
|
/* Iterate over all records in this node. */
|
||||||
for (i = 0; i < grub_be_to_cpu16 (node->node.reccnt); i++)
|
for (i = 0; i < reccnt; i++)
|
||||||
{
|
{
|
||||||
int pos = (nodesize >> 1) - 1 - i;
|
int pos = (nodesize >> 1) - 1 - i;
|
||||||
struct pointer
|
struct pointer
|
||||||
@@ -713,16 +724,19 @@ grub_hfs_iterate_records (struct grub_hfs_data *data, int type, int idx,
|
|||||||
grub_uint8_t keylen;
|
grub_uint8_t keylen;
|
||||||
grub_uint8_t key;
|
grub_uint8_t key;
|
||||||
} GRUB_PACKED *pnt;
|
} GRUB_PACKED *pnt;
|
||||||
pnt = (struct pointer *) (grub_be_to_cpu16 (node->offsets[pos])
|
grub_uint16_t off = grub_be_to_cpu16 (node->offsets[pos]);
|
||||||
+ node->rawnode);
|
if (off > nodesize - sizeof(*pnt))
|
||||||
|
continue;
|
||||||
|
pnt = (struct pointer *) (off + node->rawnode);
|
||||||
|
if (nodesize < (grub_size_t) off + pnt->keylen + 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
struct grub_hfs_record rec =
|
struct grub_hfs_record rec =
|
||||||
{
|
{
|
||||||
&pnt->key,
|
&pnt->key,
|
||||||
pnt->keylen,
|
pnt->keylen,
|
||||||
&pnt->key + pnt->keylen +(pnt->keylen + 1) % 2,
|
&pnt->key + pnt->keylen +(pnt->keylen + 1) % 2,
|
||||||
nodesize - grub_be_to_cpu16 (node->offsets[pos])
|
nodesize - off - pnt->keylen - 1
|
||||||
- pnt->keylen - 1
|
|
||||||
};
|
};
|
||||||
|
|
||||||
if (node_hook (&node->node, &rec, hook_arg))
|
if (node_hook (&node->node, &rec, hook_arg))
|
||||||
@@ -1300,6 +1314,12 @@ grub_hfs_open (struct grub_file *file, const char *name)
|
|||||||
|
|
||||||
data = grub_hfs_mount (file->device->disk);
|
data = grub_hfs_mount (file->device->disk);
|
||||||
|
|
||||||
|
if (!data)
|
||||||
|
{
|
||||||
|
grub_dl_unref (my_mod);
|
||||||
|
return grub_errno;
|
||||||
|
}
|
||||||
|
|
||||||
if (grub_hfs_find_dir (data, name, &frec, 0))
|
if (grub_hfs_find_dir (data, name, &frec, 0))
|
||||||
{
|
{
|
||||||
grub_free (data);
|
grub_free (data);
|
||||||
|
|||||||
@@ -723,8 +723,11 @@ list_nodes (void *record, void *hook_arg)
|
|||||||
|
|
||||||
/* If the name is obviously invalid, skip this node. */
|
/* If the name is obviously invalid, skip this node. */
|
||||||
if (catkey->name[i] == 0)
|
if (catkey->name[i] == 0)
|
||||||
|
{
|
||||||
|
grub_free (filename);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
*grub_utf16_to_utf8 ((grub_uint8_t *) filename, catkey->name,
|
*grub_utf16_to_utf8 ((grub_uint8_t *) filename, catkey->name,
|
||||||
grub_be_to_cpu16 (catkey->namelen)) = '\0';
|
grub_be_to_cpu16 (catkey->namelen)) = '\0';
|
||||||
@@ -745,7 +748,10 @@ list_nodes (void *record, void *hook_arg)
|
|||||||
callback function. */
|
callback function. */
|
||||||
node = grub_malloc (sizeof (*node));
|
node = grub_malloc (sizeof (*node));
|
||||||
if (!node)
|
if (!node)
|
||||||
|
{
|
||||||
|
grub_free (filename);
|
||||||
return 1;
|
return 1;
|
||||||
|
}
|
||||||
node->data = ctx->dir->data;
|
node->data = ctx->dir->data;
|
||||||
node->compressed = 0;
|
node->compressed = 0;
|
||||||
node->cbuf = 0;
|
node->cbuf = 0;
|
||||||
|
|||||||
@@ -959,14 +959,15 @@ grub_iso9660_read (grub_file_t file, char *buf, grub_size_t len)
|
|||||||
{
|
{
|
||||||
struct grub_iso9660_data *data =
|
struct grub_iso9660_data *data =
|
||||||
(struct grub_iso9660_data *) file->data;
|
(struct grub_iso9660_data *) file->data;
|
||||||
|
grub_err_t err;
|
||||||
|
|
||||||
/* XXX: The file is stored in as a single extent. */
|
/* XXX: The file is stored in as a single extent. */
|
||||||
data->disk->read_hook = file->read_hook;
|
data->disk->read_hook = file->read_hook;
|
||||||
data->disk->read_hook_data = file->read_hook_data;
|
data->disk->read_hook_data = file->read_hook_data;
|
||||||
read_node (data->node, file->offset, len, buf);
|
err = read_node (data->node, file->offset, len, buf);
|
||||||
data->disk->read_hook = NULL;
|
data->disk->read_hook = NULL;
|
||||||
|
|
||||||
if (grub_errno)
|
if (err || grub_errno)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
return len;
|
return len;
|
||||||
|
|||||||
+47
-31
@@ -65,7 +65,6 @@ typedef grub_uint16_t grub_minix_uintn_t;
|
|||||||
#define grub_minix_to_cpu_n grub_minix_to_cpu16
|
#define grub_minix_to_cpu_n grub_minix_to_cpu16
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define GRUB_MINIX_INODE_BLKSZ(data) sizeof (grub_minix_uintn_t)
|
|
||||||
#ifdef MODE_MINIX3
|
#ifdef MODE_MINIX3
|
||||||
typedef grub_uint32_t grub_minix_ino_t;
|
typedef grub_uint32_t grub_minix_ino_t;
|
||||||
#define grub_minix_to_cpu_ino grub_minix_to_cpu32
|
#define grub_minix_to_cpu_ino grub_minix_to_cpu32
|
||||||
@@ -83,19 +82,6 @@ typedef grub_uint16_t grub_minix_ino_t;
|
|||||||
#define GRUB_MINIX_INODE_DINDIR_ZONE(data) (grub_minix_to_cpu_n \
|
#define GRUB_MINIX_INODE_DINDIR_ZONE(data) (grub_minix_to_cpu_n \
|
||||||
(data->inode.double_indir_zone))
|
(data->inode.double_indir_zone))
|
||||||
|
|
||||||
#ifndef MODE_MINIX3
|
|
||||||
#define GRUB_MINIX_LOG2_ZONESZ (GRUB_MINIX_LOG2_BSIZE \
|
|
||||||
+ grub_minix_to_cpu16 (data->sblock.log2_zone_size))
|
|
||||||
#endif
|
|
||||||
#define GRUB_MINIX_ZONESZ ((grub_uint64_t) data->block_size << \
|
|
||||||
(GRUB_DISK_SECTOR_BITS + grub_minix_to_cpu16 (data->sblock.log2_zone_size)))
|
|
||||||
|
|
||||||
#ifdef MODE_MINIX3
|
|
||||||
#define GRUB_MINIX_ZONE2SECT(zone) ((zone) * data->block_size)
|
|
||||||
#else
|
|
||||||
#define GRUB_MINIX_ZONE2SECT(zone) ((zone) << GRUB_MINIX_LOG2_ZONESZ)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef MODE_MINIX3
|
#ifdef MODE_MINIX3
|
||||||
struct grub_minix_sblock
|
struct grub_minix_sblock
|
||||||
@@ -172,6 +158,7 @@ struct grub_minix_data
|
|||||||
{
|
{
|
||||||
struct grub_minix_sblock sblock;
|
struct grub_minix_sblock sblock;
|
||||||
struct grub_minix_inode inode;
|
struct grub_minix_inode inode;
|
||||||
|
grub_uint32_t block_per_zone;
|
||||||
grub_minix_ino_t ino;
|
grub_minix_ino_t ino;
|
||||||
int linknest;
|
int linknest;
|
||||||
grub_disk_t disk;
|
grub_disk_t disk;
|
||||||
@@ -184,6 +171,23 @@ static grub_dl_t my_mod;
|
|||||||
static grub_err_t grub_minix_find_file (struct grub_minix_data *data,
|
static grub_err_t grub_minix_find_file (struct grub_minix_data *data,
|
||||||
const char *path);
|
const char *path);
|
||||||
|
|
||||||
|
#ifdef MODE_MINIX3
|
||||||
|
static inline grub_disk_addr_t
|
||||||
|
grub_minix_zone2sect (struct grub_minix_data *data, grub_minix_uintn_t zone)
|
||||||
|
{
|
||||||
|
return ((grub_disk_addr_t) zone) * data->block_size;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline grub_disk_addr_t
|
||||||
|
grub_minix_zone2sect (struct grub_minix_data *data, grub_minix_uintn_t zone)
|
||||||
|
{
|
||||||
|
int log2_zonesz = (GRUB_MINIX_LOG2_BSIZE
|
||||||
|
+ grub_minix_to_cpu16 (data->sblock.log2_zone_size));
|
||||||
|
return (((grub_disk_addr_t) zone) << log2_zonesz);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/* Read the block pointer in ZONE, on the offset NUM. */
|
/* Read the block pointer in ZONE, on the offset NUM. */
|
||||||
static grub_minix_uintn_t
|
static grub_minix_uintn_t
|
||||||
grub_get_indir (struct grub_minix_data *data,
|
grub_get_indir (struct grub_minix_data *data,
|
||||||
@@ -192,7 +196,7 @@ grub_get_indir (struct grub_minix_data *data,
|
|||||||
{
|
{
|
||||||
grub_minix_uintn_t indirn;
|
grub_minix_uintn_t indirn;
|
||||||
grub_disk_read (data->disk,
|
grub_disk_read (data->disk,
|
||||||
GRUB_MINIX_ZONE2SECT(zone),
|
grub_minix_zone2sect(data, zone),
|
||||||
sizeof (grub_minix_uintn_t) * num,
|
sizeof (grub_minix_uintn_t) * num,
|
||||||
sizeof (grub_minix_uintn_t), (char *) &indirn);
|
sizeof (grub_minix_uintn_t), (char *) &indirn);
|
||||||
return grub_minix_to_cpu_n (indirn);
|
return grub_minix_to_cpu_n (indirn);
|
||||||
@@ -202,8 +206,6 @@ static grub_minix_uintn_t
|
|||||||
grub_minix_get_file_block (struct grub_minix_data *data, unsigned int blk)
|
grub_minix_get_file_block (struct grub_minix_data *data, unsigned int blk)
|
||||||
{
|
{
|
||||||
grub_minix_uintn_t indir;
|
grub_minix_uintn_t indir;
|
||||||
const grub_uint32_t block_per_zone = (GRUB_MINIX_ZONESZ
|
|
||||||
/ GRUB_MINIX_INODE_BLKSZ (data));
|
|
||||||
|
|
||||||
/* Direct block. */
|
/* Direct block. */
|
||||||
if (blk < GRUB_MINIX_INODE_DIR_BLOCKS)
|
if (blk < GRUB_MINIX_INODE_DIR_BLOCKS)
|
||||||
@@ -211,33 +213,33 @@ grub_minix_get_file_block (struct grub_minix_data *data, unsigned int blk)
|
|||||||
|
|
||||||
/* Indirect block. */
|
/* Indirect block. */
|
||||||
blk -= GRUB_MINIX_INODE_DIR_BLOCKS;
|
blk -= GRUB_MINIX_INODE_DIR_BLOCKS;
|
||||||
if (blk < block_per_zone)
|
if (blk < data->block_per_zone)
|
||||||
{
|
{
|
||||||
indir = grub_get_indir (data, GRUB_MINIX_INODE_INDIR_ZONE (data), blk);
|
indir = grub_get_indir (data, GRUB_MINIX_INODE_INDIR_ZONE (data), blk);
|
||||||
return indir;
|
return indir;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Double indirect block. */
|
/* Double indirect block. */
|
||||||
blk -= block_per_zone;
|
blk -= data->block_per_zone;
|
||||||
if (blk < block_per_zone * block_per_zone)
|
if (blk < (grub_uint64_t) data->block_per_zone * (grub_uint64_t) data->block_per_zone)
|
||||||
{
|
{
|
||||||
indir = grub_get_indir (data, GRUB_MINIX_INODE_DINDIR_ZONE (data),
|
indir = grub_get_indir (data, GRUB_MINIX_INODE_DINDIR_ZONE (data),
|
||||||
blk / block_per_zone);
|
blk / data->block_per_zone);
|
||||||
|
|
||||||
indir = grub_get_indir (data, indir, blk % block_per_zone);
|
indir = grub_get_indir (data, indir, blk % data->block_per_zone);
|
||||||
|
|
||||||
return indir;
|
return indir;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (MODE_MINIX3) || defined (MODE_MINIX2)
|
#if defined (MODE_MINIX3) || defined (MODE_MINIX2)
|
||||||
blk -= block_per_zone * block_per_zone;
|
blk -= data->block_per_zone * data->block_per_zone;
|
||||||
if (blk < ((grub_uint64_t) block_per_zone * (grub_uint64_t) block_per_zone
|
if (blk < ((grub_uint64_t) data->block_per_zone * (grub_uint64_t) data->block_per_zone
|
||||||
* (grub_uint64_t) block_per_zone))
|
* (grub_uint64_t) data->block_per_zone))
|
||||||
{
|
{
|
||||||
indir = grub_get_indir (data, grub_minix_to_cpu_n (data->inode.triple_indir_zone),
|
indir = grub_get_indir (data, grub_minix_to_cpu_n (data->inode.triple_indir_zone),
|
||||||
(blk / block_per_zone) / block_per_zone);
|
(blk / data->block_per_zone) / data->block_per_zone);
|
||||||
indir = grub_get_indir (data, indir, (blk / block_per_zone) % block_per_zone);
|
indir = grub_get_indir (data, indir, (blk / data->block_per_zone) % data->block_per_zone);
|
||||||
indir = grub_get_indir (data, indir, blk % block_per_zone);
|
indir = grub_get_indir (data, indir, blk % data->block_per_zone);
|
||||||
|
|
||||||
return indir;
|
return indir;
|
||||||
}
|
}
|
||||||
@@ -262,6 +264,13 @@ grub_minix_read_file (struct grub_minix_data *data,
|
|||||||
grub_uint32_t posblock;
|
grub_uint32_t posblock;
|
||||||
grub_uint32_t blockoff;
|
grub_uint32_t blockoff;
|
||||||
|
|
||||||
|
if (pos > GRUB_MINIX_INODE_SIZE (data))
|
||||||
|
{
|
||||||
|
grub_error (GRUB_ERR_OUT_OF_RANGE,
|
||||||
|
N_("attempt to read past the end of file"));
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Adjust len so it we can't read past the end of the file. */
|
/* Adjust len so it we can't read past the end of the file. */
|
||||||
if (len + pos > GRUB_MINIX_INODE_SIZE (data))
|
if (len + pos > GRUB_MINIX_INODE_SIZE (data))
|
||||||
len = GRUB_MINIX_INODE_SIZE (data) - pos;
|
len = GRUB_MINIX_INODE_SIZE (data) - pos;
|
||||||
@@ -278,7 +287,7 @@ grub_minix_read_file (struct grub_minix_data *data,
|
|||||||
|
|
||||||
for (i = posblock; i < blockcnt; i++)
|
for (i = posblock; i < blockcnt; i++)
|
||||||
{
|
{
|
||||||
grub_disk_addr_t blknr;
|
grub_minix_uintn_t blknr;
|
||||||
grub_uint64_t blockend = data->block_size << GRUB_DISK_SECTOR_BITS;
|
grub_uint64_t blockend = data->block_size << GRUB_DISK_SECTOR_BITS;
|
||||||
grub_off_t skipfirst = 0;
|
grub_off_t skipfirst = 0;
|
||||||
|
|
||||||
@@ -307,7 +316,7 @@ grub_minix_read_file (struct grub_minix_data *data,
|
|||||||
data->disk->read_hook = read_hook;
|
data->disk->read_hook = read_hook;
|
||||||
data->disk->read_hook_data = read_hook_data;
|
data->disk->read_hook_data = read_hook_data;
|
||||||
grub_disk_read (data->disk,
|
grub_disk_read (data->disk,
|
||||||
GRUB_MINIX_ZONE2SECT(blknr),
|
grub_minix_zone2sect(data, blknr),
|
||||||
skipfirst, blockend, buf);
|
skipfirst, blockend, buf);
|
||||||
data->disk->read_hook = 0;
|
data->disk->read_hook = 0;
|
||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
@@ -333,7 +342,8 @@ grub_minix_read_inode (struct grub_minix_data *data, grub_minix_ino_t ino)
|
|||||||
|
|
||||||
/* The first inode in minix is inode 1. */
|
/* The first inode in minix is inode 1. */
|
||||||
ino--;
|
ino--;
|
||||||
block = GRUB_MINIX_ZONE2SECT (2 + grub_minix_to_cpu16 (sblock->inode_bmap_size)
|
block = grub_minix_zone2sect (data,
|
||||||
|
2 + grub_minix_to_cpu16 (sblock->inode_bmap_size)
|
||||||
+ grub_minix_to_cpu16 (sblock->zone_bmap_size));
|
+ grub_minix_to_cpu16 (sblock->zone_bmap_size));
|
||||||
block += ino / (GRUB_DISK_SECTOR_SIZE / sizeof (struct grub_minix_inode));
|
block += ino / (GRUB_DISK_SECTOR_SIZE / sizeof (struct grub_minix_inode));
|
||||||
int offs = (ino % (GRUB_DISK_SECTOR_SIZE
|
int offs = (ino % (GRUB_DISK_SECTOR_SIZE
|
||||||
@@ -508,6 +518,12 @@ grub_minix_mount (grub_disk_t disk)
|
|||||||
data->block_size = 2;
|
data->block_size = 2;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
data->block_per_zone = (((grub_uint64_t) data->block_size << \
|
||||||
|
(GRUB_DISK_SECTOR_BITS + grub_minix_to_cpu16 (data->sblock.log2_zone_size)))
|
||||||
|
/ sizeof (grub_minix_uintn_t));
|
||||||
|
if (!data->block_per_zone)
|
||||||
|
goto fail;
|
||||||
|
|
||||||
return data;
|
return data;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
|
|||||||
@@ -724,6 +724,10 @@ grub_nilfs2_valid_sb (struct grub_nilfs2_super_block *sbp)
|
|||||||
if (grub_le_to_cpu32 (sbp->s_rev_level) != NILFS_SUPORT_REV)
|
if (grub_le_to_cpu32 (sbp->s_rev_level) != NILFS_SUPORT_REV)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
/* 20 already means 1GiB blocks. We don't want to deal with blocks overflowing int32. */
|
||||||
|
if (grub_le_to_cpu32 (sbp->s_log_block_size) > 20)
|
||||||
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -618,7 +618,10 @@ list_file (struct grub_ntfs_file *diro, grub_uint8_t *pos,
|
|||||||
|
|
||||||
ustr = get_utf8 (np, ns);
|
ustr = get_utf8 (np, ns);
|
||||||
if (ustr == NULL)
|
if (ustr == NULL)
|
||||||
|
{
|
||||||
|
grub_free (fdiro);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
if (namespace)
|
if (namespace)
|
||||||
type |= GRUB_FSHELP_CASE_INSENSITIVE;
|
type |= GRUB_FSHELP_CASE_INSENSITIVE;
|
||||||
|
|
||||||
@@ -917,12 +920,16 @@ grub_ntfs_mount (grub_disk_t disk)
|
|||||||
|
|
||||||
if (bpb.clusters_per_mft > 0)
|
if (bpb.clusters_per_mft > 0)
|
||||||
data->mft_size = ((grub_disk_addr_t) bpb.clusters_per_mft) << data->log_spc;
|
data->mft_size = ((grub_disk_addr_t) bpb.clusters_per_mft) << data->log_spc;
|
||||||
|
else if (-bpb.clusters_per_mft < GRUB_NTFS_BLK_SHR || -bpb.clusters_per_mft >= 31)
|
||||||
|
goto fail;
|
||||||
else
|
else
|
||||||
data->mft_size = 1ULL << (-bpb.clusters_per_mft - GRUB_NTFS_BLK_SHR);
|
data->mft_size = 1ULL << (-bpb.clusters_per_mft - GRUB_NTFS_BLK_SHR);
|
||||||
|
|
||||||
if (bpb.clusters_per_index > 0)
|
if (bpb.clusters_per_index > 0)
|
||||||
data->idx_size = (((grub_disk_addr_t) bpb.clusters_per_index)
|
data->idx_size = (((grub_disk_addr_t) bpb.clusters_per_index)
|
||||||
<< data->log_spc);
|
<< data->log_spc);
|
||||||
|
else if (-bpb.clusters_per_index < GRUB_NTFS_BLK_SHR || -bpb.clusters_per_index >= 31)
|
||||||
|
goto fail;
|
||||||
else
|
else
|
||||||
data->idx_size = 1ULL << (-bpb.clusters_per_index - GRUB_NTFS_BLK_SHR);
|
data->idx_size = 1ULL << (-bpb.clusters_per_index - GRUB_NTFS_BLK_SHR);
|
||||||
|
|
||||||
|
|||||||
@@ -365,7 +365,7 @@ grub_reiserfs_set_key_offset (struct grub_reiserfs_key *key,
|
|||||||
key->u.v1.offset = grub_cpu_to_le32 (value);
|
key->u.v1.offset = grub_cpu_to_le32 (value);
|
||||||
else
|
else
|
||||||
key->u.v2.offset_type \
|
key->u.v2.offset_type \
|
||||||
= ((key->u.v2.offset_type & grub_cpu_to_le64 (15ULL << 60))
|
= ((key->u.v2.offset_type & grub_cpu_to_le64_compile_time (15ULL << 60))
|
||||||
| grub_cpu_to_le64 (value & (~0ULL >> 4)));
|
| grub_cpu_to_le64 (value & (~0ULL >> 4)));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -412,7 +412,7 @@ grub_reiserfs_set_key_type (struct grub_reiserfs_key *key,
|
|||||||
key->u.v1.type = grub_cpu_to_le32 (type);
|
key->u.v1.type = grub_cpu_to_le32 (type);
|
||||||
else
|
else
|
||||||
key->u.v2.offset_type
|
key->u.v2.offset_type
|
||||||
= ((key->u.v2.offset_type & grub_cpu_to_le64 (~0ULL >> 4))
|
= ((key->u.v2.offset_type & grub_cpu_to_le64_compile_time (~0ULL >> 4))
|
||||||
| grub_cpu_to_le64 ((grub_uint64_t) type << 60));
|
| grub_cpu_to_le64 ((grub_uint64_t) type << 60));
|
||||||
|
|
||||||
assert (grub_reiserfs_get_key_type (key) == grub_type);
|
assert (grub_reiserfs_get_key_type (key) == grub_type);
|
||||||
@@ -997,8 +997,8 @@ grub_reiserfs_open (struct grub_file *file, const char *name)
|
|||||||
data = grub_reiserfs_mount (file->device->disk);
|
data = grub_reiserfs_mount (file->device->disk);
|
||||||
if (! data)
|
if (! data)
|
||||||
goto fail;
|
goto fail;
|
||||||
key.directory_id = grub_cpu_to_le32 (1);
|
key.directory_id = grub_cpu_to_le32_compile_time (1);
|
||||||
key.object_id = grub_cpu_to_le32 (2);
|
key.object_id = grub_cpu_to_le32_compile_time (2);
|
||||||
key.u.v2.offset_type = 0;
|
key.u.v2.offset_type = 0;
|
||||||
grub_reiserfs_set_key_type (&key, GRUB_REISERFS_DIRECTORY, 2);
|
grub_reiserfs_set_key_type (&key, GRUB_REISERFS_DIRECTORY, 2);
|
||||||
grub_reiserfs_set_key_offset (&key, 1);
|
grub_reiserfs_set_key_offset (&key, 1);
|
||||||
@@ -1090,7 +1090,7 @@ grub_reiserfs_read_real (struct grub_fshelp_node *node,
|
|||||||
switch (found.type)
|
switch (found.type)
|
||||||
{
|
{
|
||||||
case GRUB_REISERFS_DIRECT:
|
case GRUB_REISERFS_DIRECT:
|
||||||
block = found.block_number * (block_size >> GRUB_DISK_SECTOR_BITS);
|
block = ((grub_disk_addr_t) found.block_number) * (block_size >> GRUB_DISK_SECTOR_BITS);
|
||||||
grub_dprintf ("reiserfs_blocktype", "D: %u\n", (unsigned) block);
|
grub_dprintf ("reiserfs_blocktype", "D: %u\n", (unsigned) block);
|
||||||
if (initial_position < current_position + item_size)
|
if (initial_position < current_position + item_size)
|
||||||
{
|
{
|
||||||
@@ -1289,8 +1289,8 @@ grub_reiserfs_dir (grub_device_t device, const char *path,
|
|||||||
data = grub_reiserfs_mount (device->disk);
|
data = grub_reiserfs_mount (device->disk);
|
||||||
if (! data)
|
if (! data)
|
||||||
goto fail;
|
goto fail;
|
||||||
root_key.directory_id = grub_cpu_to_le32 (1);
|
root_key.directory_id = grub_cpu_to_le32_compile_time (1);
|
||||||
root_key.object_id = grub_cpu_to_le32 (2);
|
root_key.object_id = grub_cpu_to_le32_compile_time (2);
|
||||||
root_key.u.v2.offset_type = 0;
|
root_key.u.v2.offset_type = 0;
|
||||||
grub_reiserfs_set_key_type (&root_key, GRUB_REISERFS_DIRECTORY, 2);
|
grub_reiserfs_set_key_type (&root_key, GRUB_REISERFS_DIRECTORY, 2);
|
||||||
grub_reiserfs_set_key_offset (&root_key, 1);
|
grub_reiserfs_set_key_offset (&root_key, 1);
|
||||||
|
|||||||
+11
-6
@@ -173,10 +173,11 @@ grub_sfs_read_extent (struct grub_sfs_data *data, unsigned int block,
|
|||||||
struct grub_sfs_btree *tree;
|
struct grub_sfs_btree *tree;
|
||||||
int i;
|
int i;
|
||||||
grub_uint32_t next;
|
grub_uint32_t next;
|
||||||
|
grub_size_t blocksize = GRUB_DISK_SECTOR_SIZE << data->log_blocksize;
|
||||||
|
|
||||||
treeblock = grub_malloc (GRUB_DISK_SECTOR_SIZE << data->log_blocksize);
|
treeblock = grub_malloc (blocksize);
|
||||||
if (!block)
|
if (!treeblock)
|
||||||
return 0;
|
return grub_errno;
|
||||||
|
|
||||||
next = grub_be_to_cpu32 (data->rblock.btree);
|
next = grub_be_to_cpu32 (data->rblock.btree);
|
||||||
tree = (struct grub_sfs_btree *) treeblock;
|
tree = (struct grub_sfs_btree *) treeblock;
|
||||||
@@ -184,17 +185,21 @@ grub_sfs_read_extent (struct grub_sfs_data *data, unsigned int block,
|
|||||||
/* Handle this level in the btree. */
|
/* Handle this level in the btree. */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
grub_uint16_t nnodes;
|
||||||
grub_disk_read (data->disk,
|
grub_disk_read (data->disk,
|
||||||
((grub_disk_addr_t) next) << data->log_blocksize,
|
((grub_disk_addr_t) next) << data->log_blocksize,
|
||||||
0, GRUB_DISK_SECTOR_SIZE << data->log_blocksize,
|
0, blocksize, treeblock);
|
||||||
treeblock);
|
|
||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
{
|
{
|
||||||
grub_free (treeblock);
|
grub_free (treeblock);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = grub_be_to_cpu16 (tree->nodes) - 1; i >= 0; i--)
|
nnodes = grub_be_to_cpu16 (tree->nodes);
|
||||||
|
if (nnodes * (grub_uint32_t) (tree)->nodesize > blocksize)
|
||||||
|
break;
|
||||||
|
|
||||||
|
for (i = (int) nnodes - 1; i >= 0; i--)
|
||||||
{
|
{
|
||||||
|
|
||||||
#define EXTNODE(tree, index) \
|
#define EXTNODE(tree, index) \
|
||||||
|
|||||||
@@ -986,6 +986,7 @@ grub_udf_read_symlink (grub_fshelp_node_t node)
|
|||||||
case 1:
|
case 1:
|
||||||
if (ptr[1])
|
if (ptr[1])
|
||||||
goto fail;
|
goto fail;
|
||||||
|
/* Fallthrough. */
|
||||||
case 2:
|
case 2:
|
||||||
/* in 4 bytes. out: 1 byte. */
|
/* in 4 bytes. out: 1 byte. */
|
||||||
optr = out;
|
optr = out;
|
||||||
|
|||||||
Loaded 100 of 355 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user