mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-29 18:49:22 +00:00
Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
206676601e |
No files matched your search
@@ -246,4 +246,3 @@ build-aux/test-driver
|
|||||||
/garbage-gen
|
/garbage-gen
|
||||||
/garbage-gen.exe
|
/garbage-gen.exe
|
||||||
/grub-fs-tester
|
/grub-fs-tester
|
||||||
grub-core/build-grub-module-verifier
|
|
||||||
@@ -15,14 +15,15 @@ configuring the GRUB.
|
|||||||
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)
|
Experimental support for clang 3.3 or later (results in much bigger binaries)
|
||||||
for i386, x86_64, arm (including thumb), arm64, mips(el), powerpc, sparc64
|
for i386, x86_64, arm (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
|
||||||
Note: clang 3.2 or later works for arm
|
Note: clang 3.2 or later works for arm
|
||||||
|
None of tested clang versions generated usable thumb code
|
||||||
earlier versions not tested
|
earlier versions not tested
|
||||||
Note: clang on arm64 is not supported due to
|
Note: clang 3.3 or later works for arm64
|
||||||
https://llvm.org/bugs/show_bug.cgi?id=26030
|
earlier versions have no arm64 support
|
||||||
Note: clang 3.3 or later works for mips(el)
|
Note: clang 3.3 or later works for mips(el)
|
||||||
earlier versions fail to generate .reginfo and hence gprel relocations
|
earlier versions fail to generate .reginfo and hence gprel relocations
|
||||||
fail.
|
fail.
|
||||||
|
|||||||
+67
-88
@@ -89,21 +89,16 @@ 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)
|
||||||
dejavu_10.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
dejavu_10.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -s 10 -o $@ $(DJVU_FONT_SOURCE)
|
./build-grub-mkfont -s 10 -o $@ $(DJVU_FONT_SOURCE)
|
||||||
CLEANFILES += dejavu_10.pf2
|
dejavu_12.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
|
||||||
dejavu_12.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
./build-grub-mkfont -s 12 -o $@ $(DJVU_FONT_SOURCE)
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -s 12 -o $@ $(DJVU_FONT_SOURCE)
|
dejavu_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
|
||||||
CLEANFILES += dejavu_12.pf2
|
./build-grub-mkfont -s 14 -o $@ $(DJVU_FONT_SOURCE)
|
||||||
dejavu_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
dejavu_bold_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -s 14 -o $@ $(DJVU_FONT_SOURCE)
|
./build-grub-mkfont -b -s 14 -o $@ $(DJVU_FONT_SOURCE)
|
||||||
CLEANFILES += dejavu_14.pf2
|
dejavu_16.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont
|
||||||
dejavu_bold_14.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
./build-grub-mkfont -s 16 -o $@ $(DJVU_FONT_SOURCE)
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -b -s 14 -o $@ $(DJVU_FONT_SOURCE)
|
|
||||||
CLEANFILES += dejavu_bold_14.pf2
|
|
||||||
dejavu_16.pf2: $(DJVU_FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -s 16 -o $@ $(DJVU_FONT_SOURCE)
|
|
||||||
CLEANFILES += dejavu_16.pf2
|
|
||||||
else
|
else
|
||||||
starfield_DATA =
|
starfield_DATA =
|
||||||
endif
|
endif
|
||||||
@@ -111,28 +106,28 @@ endif
|
|||||||
EXTRA_DIST += $(starfield_theme_files)
|
EXTRA_DIST += $(starfield_theme_files)
|
||||||
EXTRA_DIST += $(srcdir)/themes/starfield/src/slider_s.xcf $(srcdir)/themes/starfield/src/slider_n.xcf $(srcdir)/themes/starfield/src/slider_c.xcf $(srcdir)/themes/starfield/src/blob_nw.xcf $(srcdir)/themes/starfield/src/bootmenu/center.xcf $(srcdir)/themes/starfield/src/bootmenu/corner.xcf $(srcdir)/themes/starfield/src/bootmenu/side.xcf $(srcdir)/themes/starfield/src/terminalbox/side.xcf $(srcdir)/themes/starfield/src/terminalbox/corner.xcf $(srcdir)/themes/starfield/src/terminalbox/center.xcf
|
EXTRA_DIST += $(srcdir)/themes/starfield/src/slider_s.xcf $(srcdir)/themes/starfield/src/slider_n.xcf $(srcdir)/themes/starfield/src/slider_c.xcf $(srcdir)/themes/starfield/src/blob_nw.xcf $(srcdir)/themes/starfield/src/bootmenu/center.xcf $(srcdir)/themes/starfield/src/bootmenu/corner.xcf $(srcdir)/themes/starfield/src/bootmenu/side.xcf $(srcdir)/themes/starfield/src/terminalbox/side.xcf $(srcdir)/themes/starfield/src/terminalbox/corner.xcf $(srcdir)/themes/starfield/src/terminalbox/center.xcf
|
||||||
|
|
||||||
unicode.pf2: $(FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
unicode.pf2: $(FONT_SOURCE) build-grub-mkfont
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -o $@ $(FONT_SOURCE) || (rm -f $@; exit 1)
|
./build-grub-mkfont -o $@ $(FONT_SOURCE) || (rm -f $@; exit 1)
|
||||||
CLEANFILES += unicode.pf2
|
CLEANFILES += unicode.pf2
|
||||||
|
|
||||||
# Arrows and lines are needed to draw the menu, so always include them
|
# Arrows and lines are needed to draw the menu, so always include them
|
||||||
UNICODE_ARROWS=0x2190-0x2193
|
UNICODE_ARROWS=0x2190-0x2193
|
||||||
UNICODE_LINES=0x2501-0x251B
|
UNICODE_LINES=0x2501-0x251B
|
||||||
|
|
||||||
ascii.pf2: $(FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
ascii.pf2: $(FONT_SOURCE) build-grub-mkfont
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1)
|
./build-grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1)
|
||||||
CLEANFILES += ascii.pf2
|
CLEANFILES += ascii.pf2
|
||||||
|
|
||||||
euro.pf2: $(FONT_SOURCE) build-grub-mkfont$(BUILD_EXEEXT)
|
euro.pf2: $(FONT_SOURCE) build-grub-mkfont
|
||||||
./build-grub-mkfont$(BUILD_EXEEXT) -o $@ $(FONT_SOURCE) -r 0x0-0x4ff,0x1e00-0x1fff,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1)
|
./build-grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x4ff,0x1e00-0x1fff,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1)
|
||||||
CLEANFILES += euro.pf2
|
CLEANFILES += euro.pf2
|
||||||
|
|
||||||
ascii.h: $(FONT_SOURCE) build-grub-gen-asciih$(BUILD_EXEEXT)
|
ascii.h: $(FONT_SOURCE) build-grub-gen-asciih
|
||||||
./build-grub-gen-asciih$(BUILD_EXEEXT) $(FONT_SOURCE) $@ || (rm -f $@; exit 1)
|
./build-grub-gen-asciih $(FONT_SOURCE) $@ || (rm -f $@; exit 1)
|
||||||
CLEANFILES += ascii.h
|
CLEANFILES += ascii.h
|
||||||
|
|
||||||
widthspec.h: $(FONT_SOURCE) build-grub-gen-widthspec$(BUILD_EXEEXT)
|
widthspec.h: $(FONT_SOURCE) build-grub-gen-widthspec
|
||||||
./build-grub-gen-widthspec$(BUILD_EXEEXT) $(FONT_SOURCE) $@ || (rm -f $@; exit 1)
|
./build-grub-gen-widthspec $(FONT_SOURCE) $@ || (rm -f $@; exit 1)
|
||||||
CLEANFILES += widthspec.h
|
CLEANFILES += widthspec.h
|
||||||
|
|
||||||
# Install config.h into platformdir
|
# Install config.h into platformdir
|
||||||
@@ -145,116 +140,109 @@ if COND_real_platform
|
|||||||
|
|
||||||
if COND_i386_coreboot
|
if COND_i386_coreboot
|
||||||
QEMU32=qemu-system-i386
|
QEMU32=qemu-system-i386
|
||||||
MINIMUM_CPU_LINUX=pentium2
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_multiboot
|
if COND_i386_multiboot
|
||||||
QEMU32=qemu-system-i386
|
QEMU32=qemu-system-i386
|
||||||
MINIMUM_CPU_LINUX=pentium2
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_ieee1275
|
if COND_i386_ieee1275
|
||||||
QEMU32=qemu-system-i386
|
QEMU32=qemu-system-i386
|
||||||
MINIMUM_CPU_LINUX=pentium2
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_qemu
|
if COND_i386_qemu
|
||||||
QEMU32=qemu-system-i386
|
QEMU32=qemu-system-i386
|
||||||
MINIMUM_CPU_LINUX=pentium2
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_pc
|
if COND_i386_pc
|
||||||
QEMU32=qemu-system-i386
|
QEMU32=qemu-system-i386
|
||||||
MINIMUM_CPU_LINUX=pentium2
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_efi
|
if COND_i386_efi
|
||||||
QEMU32=qemu-system-i386
|
QEMU32=qemu-system-i386
|
||||||
MINIMUM_CPU_LINUX=pentium2
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_x86_64_efi
|
if COND_x86_64_efi
|
||||||
QEMU32=qemu-system-x86_64
|
QEMU32=qemu-system-x86_64
|
||||||
MINIMUM_CPU_LINUX=core2duo
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
linux.init.x86_64: $(srcdir)/grub-core/tests/boot/linux.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
linux.init.x86_64: $(srcdir)/grub-core/tests/boot/linux.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -static -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux.init.i386: $(srcdir)/grub-core/tests/boot/linux.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
linux.init.i386: $(srcdir)/grub-core/tests/boot/linux.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -static -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux.init.mips: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
linux.init.mips: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
||||||
$(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux.init.ppc: $(srcdir)/grub-core/tests/boot/linux.init-ppc.S
|
linux.init.ppc: $(srcdir)/grub-core/tests/boot/linux.init-ppc.S
|
||||||
$(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux.init.mipsel: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
linux.init.mipsel: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
||||||
$(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux.init.loongson: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
linux.init.loongson: $(srcdir)/grub-core/tests/boot/linux.init-mips.S
|
||||||
$(TARGET_CC) -o $@ $< -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -DREBOOT=1
|
$(TARGET_CC) -o $@ $< -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -DREBOOT=1
|
||||||
|
|
||||||
multiboot.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
multiboot.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -static -ffreestanding -nostdlib -nostdinc -DTARGET_MULTIBOOT=1 -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include
|
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -DTARGET_MULTIBOOT=1 -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include
|
||||||
|
|
||||||
kfreebsd.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
kfreebsd.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -static -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include
|
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include
|
||||||
|
|
||||||
kfreebsd.aout: kfreebsd.elf
|
kfreebsd.aout: kfreebsd.elf
|
||||||
$(TARGET_OBJCOPY) -O a.out-i386-linux $< $@ -j .text
|
$(TARGET_OBJCOPY) -O a.out-i386-linux $< $@ -R .note.gnu.build-id -R .note.gnu.gold-version
|
||||||
|
|
||||||
pc-chainloader.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
pc-chainloader.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -static -DTARGET_CHAINLOADER=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x7c00 -m32
|
$(TARGET_CC) -o $@ $< -DTARGET_CHAINLOADER=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x7c00 -m32
|
||||||
|
|
||||||
pc-chainloader.bin: pc-chainloader.elf
|
pc-chainloader.bin: pc-chainloader.elf
|
||||||
$(TARGET_OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn -R .note.gnu.gold-version $< $@;
|
$(TARGET_OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn -R .note.gnu.gold-version $< $@;
|
||||||
|
|
||||||
ntldr.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
ntldr.elf: $(srcdir)/grub-core/tests/boot/kernel-8086.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -DTARGET_NTLDR=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -static -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0 -m32
|
$(TARGET_CC) -o $@ $< -DTARGET_NTLDR=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0 -m32
|
||||||
|
|
||||||
ntldr.bin: ntldr.elf
|
ntldr.bin: ntldr.elf
|
||||||
$(TARGET_OBJCOPY) -O binary --strip-unneeded -j .text $< $@;
|
$(TARGET_OBJCOPY) -O binary --strip-unneeded -R .note -R .comment -R .note.gnu.build-id -R .reginfo -R .rel.dyn -R .note.gnu.gold-version $< $@;
|
||||||
|
|
||||||
multiboot2.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
multiboot2.elf: $(srcdir)/grub-core/tests/boot/kernel-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -static -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -DTARGET_MULTIBOOT2=1
|
$(TARGET_CC) -o $@ $< -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" -ffreestanding -nostdlib -nostdinc -Wl,--build-id=none -Wl,-N -Wl,-Ttext,0x100000 -m32 -I$(srcdir)/include -DTARGET_MULTIBOOT2=1
|
||||||
|
|
||||||
kfreebsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kfreebsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
kfreebsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kfreebsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m64 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@
|
$(TARGET_CC) -o $@ $< -m64 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@
|
||||||
|
|
||||||
kfreebsd.init.i386: $(srcdir)/grub-core/tests/boot/kfreebsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
kfreebsd.init.i386: $(srcdir)/grub-core/tests/boot/kfreebsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m32 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@
|
$(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\" && freebsd-brandelf -t FreeBSD $@
|
||||||
|
|
||||||
knetbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
knetbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m32 -static -nostdlib -nostdinc -DTARGET_NETBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DTARGET_NETBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
kopenbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
kopenbsd.init.i386: $(srcdir)/grub-core/tests/boot/kbsd.init-i386.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m32 -static -nostdlib -nostdinc -DTARGET_OPENBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m32 -nostdlib -nostdinc -DTARGET_OPENBSD=1 -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
knetbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
knetbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m64 -DTARGET_NETBSD=1 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m64 -DTARGET_NETBSD=1 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
kopenbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
kopenbsd.init.x86_64: $(srcdir)/grub-core/tests/boot/kbsd.init-x86_64.S $(srcdir)/grub-core/tests/boot/qemu-shutdown-x86.S
|
||||||
$(TARGET_CC) -o $@ $< -m64 -DTARGET_OPENBSD=1 -static -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
$(TARGET_CC) -o $@ $< -m64 -DTARGET_OPENBSD=1 -nostdlib -nostdinc -DSUCCESSFUL_BOOT_STRING=\"$(SUCCESSFUL_BOOT_STRING)\"
|
||||||
|
|
||||||
linux-initramfs.mips: linux.init.mips Makefile
|
linux-initramfs.mips: linux.init.mips Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
linux-initramfs.ppc: linux.init.ppc Makefile
|
linux-initramfs.ppc: linux.init.ppc Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
linux-initramfs.mipsel: linux.init.mipsel Makefile
|
linux-initramfs.mipsel: linux.init.mipsel Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
linux-initramfs.loongson: linux.init.loongson Makefile
|
linux-initramfs.loongson: linux.init.loongson Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
linux-initramfs.i386: linux.init.i386 Makefile
|
linux-initramfs.i386: linux.init.i386 Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
linux-initramfs.x86_64: linux.init.x86_64 Makefile
|
linux-initramfs.x86_64: linux.init.x86_64 Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio -R 0:0 --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && cp $< $$TDIR/init && (cd $$TDIR && echo ./init | cpio --quiet --dereference -o -H newc) | gzip > $@ && rm -rf $$TDIR
|
||||||
|
|
||||||
kfreebsd-mfsroot.i386.img: kfreebsd.init.i386 Makefile
|
kfreebsd-mfsroot.i386.img: kfreebsd.init.i386 Makefile
|
||||||
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR
|
TDIR=`mktemp -d "$${TMPDIR:-/tmp}/tmp.XXXXXXXXXX"` && mkdir $$TDIR/dev && mkdir $$TDIR/sbin && cp $< $$TDIR/sbin/init && makefs -t ffs -s 30m -f 1000 -o minfree=0,version=1 $@ $$TDIR && rm -rf $$TDIR
|
||||||
@@ -313,7 +301,7 @@ bootcheck-knetbsd-x86_64: knetbsd.miniroot-image.x86_64.gz $(GRUB_PAYLOADS_DIR)/
|
|||||||
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/miniroot.gz=knetbsd.miniroot-image.x86_64.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/miniroot.gz=knetbsd.miniroot-image.x86_64.gz --files=/knetbsd=$(GRUB_PAYLOADS_DIR)/knetbsd.x86_64 $(srcdir)/grub-core/tests/boot/knetbsd.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
||||||
|
|
||||||
bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell
|
bootcheck-linux-i386: linux-initramfs.i386 $(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell
|
||||||
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg --qemu-opts="-cpu $(MINIMUM_CPU_LINUX)" | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/initrd=linux-initramfs.i386 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.i386 $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
||||||
|
|
||||||
bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell
|
bootcheck-linux-x86_64: linux-initramfs.x86_64 $(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg grub-shell
|
||||||
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=qemu-system-x86_64 --files=/initrd=linux-initramfs.x86_64 --files=/linux=$(GRUB_PAYLOADS_DIR)/linux.x86_64 $(srcdir)/grub-core/tests/boot/linux.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
||||||
@@ -352,41 +340,33 @@ bootcheck-ntldr: ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg grub-shell
|
|||||||
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/ntldr.bin=ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
./grub-shell --timeout=$(BOOTCHECK_TIMEOUT) --qemu=$(QEMU32) --files=/ntldr.bin=ntldr.bin $(srcdir)/grub-core/tests/boot/ntldr.cfg | grep $(SUCCESSFUL_BOOT_STRING) > /dev/null
|
||||||
|
|
||||||
if COND_i386_efi
|
if COND_i386_efi
|
||||||
# NetBSD has no support for finding ACPI on EFI
|
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386
|
|
||||||
endif
|
|
||||||
|
|
||||||
if COND_x86_64_efi
|
|
||||||
# NetBSD has no support for finding ACPI on EFI
|
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386
|
|
||||||
endif
|
|
||||||
|
|
||||||
if COND_i386_multiboot
|
|
||||||
# *BSD requires ACPI
|
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64
|
|
||||||
endif
|
|
||||||
|
|
||||||
|
|
||||||
if COND_i386_qemu
|
|
||||||
# *BSD requires ACPI
|
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64
|
|
||||||
endif
|
|
||||||
|
|
||||||
if COND_i386_coreboot
|
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386
|
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_ieee1275
|
if COND_x86_64_efi
|
||||||
# *BSD requires ACPI
|
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386
|
||||||
#legacy protocol (linux16) makes early BIOS calls.
|
endif
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64
|
|
||||||
|
if COND_i386_multiboot
|
||||||
|
# FreeBSD requires ACPI
|
||||||
|
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64
|
||||||
|
endif
|
||||||
|
|
||||||
|
if COND_i386_coreboot
|
||||||
|
# Freebsd requires ACPI
|
||||||
|
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64
|
||||||
|
endif
|
||||||
|
|
||||||
|
if COND_i386_qemu
|
||||||
|
# FreeBSD requires ACPI
|
||||||
|
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_pc
|
if COND_i386_pc
|
||||||
#pc chainloader by definition is only for i386-pc
|
#pc chainloader by definition is only for i386-pc
|
||||||
#ntldr and bootmgr require BIOS.
|
#ntldr and bootmgr require BIOS.
|
||||||
#legacy protocol (linux16) makes early BIOS calls.
|
#legacy protocol makes early BIOS calls.
|
||||||
# 32-bit NetBSD crashes early on non-BIOS
|
# NetBSD crashes early on non-BIOS
|
||||||
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386 bootcheck-pc-chainloader bootcheck-ntldr bootcheck-linux16-i386 bootcheck-linux16-x86_64 bootcheck-knetbsd-i386
|
BOOTCHECKS = bootcheck-kfreebsd-aout bootcheck-kopenbsd-i386 bootcheck-kopenbsd-x86_64 bootcheck-multiboot bootcheck-multiboot2 bootcheck-linux-i386 bootcheck-linux-x86_64 bootcheck-knetbsd-x86_64 bootcheck-kfreebsd-x86_64 bootcheck-kfreebsd-i386 bootcheck-pc-chainloader bootcheck-ntldr bootcheck-linux16-i386 bootcheck-linux16-x86_64 bootcheck-knetbsd-i386
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -422,9 +402,8 @@ BOOTCHECK_TIMEOUT=180
|
|||||||
bootcheck: $(BOOTCHECKS)
|
bootcheck: $(BOOTCHECKS)
|
||||||
|
|
||||||
if COND_i386_coreboot
|
if COND_i386_coreboot
|
||||||
default_payload.elf: grub-mkstandalone grub-mkimage FORCE
|
default_payload.elf: grub-mkstandalone grub-mkimage
|
||||||
test -f $@ && rm $@ || true
|
pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos 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
|
||||||
pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial multiboot cbmemc linux16 gzio echo help syslinuxcfg xnu $(shell cat grub-core/fs.lst) password_pbkdf2 $(EXTRA_PAYLOAD_MODULES)' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|||||||
+1
-11
@@ -172,8 +172,6 @@ program = {
|
|||||||
|
|
||||||
common = util/grub-mkimage.c;
|
common = util/grub-mkimage.c;
|
||||||
common = util/mkimage.c;
|
common = util/mkimage.c;
|
||||||
common = util/grub-mkimage32.c;
|
|
||||||
common = util/grub-mkimage64.c;
|
|
||||||
common = util/resolve.c;
|
common = util/resolve.c;
|
||||||
common = grub-core/kern/emu/argp_common.c;
|
common = grub-core/kern/emu/argp_common.c;
|
||||||
common = grub-core/osdep/init.c;
|
common = grub-core/osdep/init.c;
|
||||||
@@ -416,7 +414,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) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
|
||||||
};
|
};
|
||||||
|
|
||||||
data = {
|
data = {
|
||||||
@@ -512,8 +510,6 @@ program = {
|
|||||||
common = util/render-label.c;
|
common = util/render-label.c;
|
||||||
common = util/glue-efi.c;
|
common = util/glue-efi.c;
|
||||||
common = util/mkimage.c;
|
common = util/mkimage.c;
|
||||||
common = util/grub-mkimage32.c;
|
|
||||||
common = util/grub-mkimage64.c;
|
|
||||||
common = util/grub-install-common.c;
|
common = util/grub-install-common.c;
|
||||||
common = util/setup_bios.c;
|
common = util/setup_bios.c;
|
||||||
common = util/setup_sparc.c;
|
common = util/setup_sparc.c;
|
||||||
@@ -556,8 +552,6 @@ program = {
|
|||||||
common = util/render-label.c;
|
common = util/render-label.c;
|
||||||
common = util/glue-efi.c;
|
common = util/glue-efi.c;
|
||||||
common = util/mkimage.c;
|
common = util/mkimage.c;
|
||||||
common = util/grub-mkimage32.c;
|
|
||||||
common = util/grub-mkimage64.c;
|
|
||||||
common = util/grub-install-common.c;
|
common = util/grub-install-common.c;
|
||||||
common = util/setup_bios.c;
|
common = util/setup_bios.c;
|
||||||
common = util/setup_sparc.c;
|
common = util/setup_sparc.c;
|
||||||
@@ -601,8 +595,6 @@ program = {
|
|||||||
common = util/grub-install.c;
|
common = util/grub-install.c;
|
||||||
common = util/probe.c;
|
common = util/probe.c;
|
||||||
common = util/mkimage.c;
|
common = util/mkimage.c;
|
||||||
common = util/grub-mkimage32.c;
|
|
||||||
common = util/grub-mkimage64.c;
|
|
||||||
common = util/grub-install-common.c;
|
common = util/grub-install-common.c;
|
||||||
common = util/setup_bios.c;
|
common = util/setup_bios.c;
|
||||||
common = util/setup_sparc.c;
|
common = util/setup_sparc.c;
|
||||||
@@ -640,8 +632,6 @@ program = {
|
|||||||
common = util/grub-mknetdir.c;
|
common = util/grub-mknetdir.c;
|
||||||
|
|
||||||
common = util/mkimage.c;
|
common = util/mkimage.c;
|
||||||
common = util/grub-mkimage32.c;
|
|
||||||
common = util/grub-mkimage64.c;
|
|
||||||
common = util/grub-install-common.c;
|
common = util/grub-install-common.c;
|
||||||
common = util/setup_bios.c;
|
common = util/setup_bios.c;
|
||||||
common = util/setup_sparc.c;
|
common = util/setup_sparc.c;
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ New in 2.02:
|
|||||||
* ZFS features support.
|
* ZFS features support.
|
||||||
* ZFS LZ4 support.
|
* ZFS LZ4 support.
|
||||||
* XFS V5 format support.
|
* XFS V5 format support.
|
||||||
* LVM RAID1 support.
|
|
||||||
|
|
||||||
* New/improved terminal and video support:
|
* New/improved terminal and video support:
|
||||||
* Monochrome text (matching `hercules' in GRUB Legacy).
|
* Monochrome text (matching `hercules' in GRUB Legacy).
|
||||||
@@ -50,9 +49,6 @@ New in 2.02:
|
|||||||
* Improve TFTP robustness.
|
* Improve TFTP robustness.
|
||||||
* Parse `nd' disk names in GRUB Legacy configuration files.
|
* Parse `nd' disk names in GRUB Legacy configuration files.
|
||||||
* Issue separate DNS queries for IPv4 and IPv6.
|
* Issue separate DNS queries for IPv4 and IPv6.
|
||||||
* Support IPv6 Router Advertisement to configure default router.
|
|
||||||
* New variable net_<interface>_next_server containing next server
|
|
||||||
from BOOTP reply.
|
|
||||||
|
|
||||||
* Coreboot improvements:
|
* Coreboot improvements:
|
||||||
* CBFS support both in on-disk images (loopback) and flash.
|
* CBFS support both in on-disk images (loopback) and flash.
|
||||||
@@ -63,7 +59,6 @@ New in 2.02:
|
|||||||
* Command for inspecting coreboot tables (`lscoreboot').
|
* Command for inspecting coreboot tables (`lscoreboot').
|
||||||
* New target default_payload.elf.
|
* New target default_payload.elf.
|
||||||
* Increased maximal core size.
|
* Increased maximal core size.
|
||||||
* Prefer pmtimer for TSC calibration.
|
|
||||||
|
|
||||||
* New/improved platform support:
|
* New/improved platform support:
|
||||||
* New `efifwsetup' and `lsefi' commands on EFI platforms.
|
* New `efifwsetup' and `lsefi' commands on EFI platforms.
|
||||||
@@ -94,14 +89,6 @@ New in 2.02:
|
|||||||
* New platform `none' which builds only user level utilities. This is now
|
* New platform `none' which builds only user level utilities. This is now
|
||||||
default if target CPU is not supported.
|
default if target CPU is not supported.
|
||||||
* Support for booting little-endian Linux kernel on powerpc.
|
* Support for booting little-endian Linux kernel on powerpc.
|
||||||
* Support network boot with Oracle sun4v vnet devices.
|
|
||||||
* Added SAS disks to the IEEE 1275 Open Firmware device list.
|
|
||||||
* Try multiple methods for TSC (timestamp counter) calibration - PIT, pmtimer,
|
|
||||||
EFI Stall. If everything fails, use hardcoded frequency 800MHz.
|
|
||||||
* Support Hyper-V Gen2 platforms which lack PIT for TSC calibration.
|
|
||||||
* Map UEFI Persistent Memory to E820 persistent memory.
|
|
||||||
* New Xen loader on ARM64.
|
|
||||||
* Respect alignment requirement for block device IO buffers on EFI.
|
|
||||||
|
|
||||||
* Security:
|
* Security:
|
||||||
* Add optional facility to enforce that all files read by the core image
|
* Add optional facility to enforce that all files read by the core image
|
||||||
@@ -140,11 +127,6 @@ New in 2.02:
|
|||||||
menu entry immediately.
|
menu entry immediately.
|
||||||
* New `file' command and grub-file utility to check file types.
|
* New `file' command and grub-file utility to check file types.
|
||||||
* New syslinux configuration file parser.
|
* New syslinux configuration file parser.
|
||||||
* Set menu entry class to primary OS name returned by os-prober to display
|
|
||||||
OS specific icon.
|
|
||||||
* On Linux x86 detect EFI word size in grub-install and automatically select
|
|
||||||
correct platform (x86_64-efi or i386-efi) to install. Requires Linux kernel
|
|
||||||
4.0 or higher.
|
|
||||||
|
|
||||||
* Build system:
|
* Build system:
|
||||||
* Remove all uses of nested functions; GRUB no longer requires an
|
* Remove all uses of nested functions; GRUB no longer requires an
|
||||||
@@ -170,10 +152,6 @@ New in 2.02:
|
|||||||
system.
|
system.
|
||||||
* emu libusb support removed (was broken and unmaintained).
|
* emu libusb support removed (was broken and unmaintained).
|
||||||
* powerpc64le compile support.
|
* powerpc64le compile support.
|
||||||
* Use fixed timestamp when generating GRUB image for reproducible builds.
|
|
||||||
* Verify at build time that modules contain only supported relocations and their
|
|
||||||
structure matches what boot-time module loader expects.
|
|
||||||
* Do not require fonts on powerpc-ieee1275.
|
|
||||||
|
|
||||||
* Revision control moved to git.
|
* Revision control moved to git.
|
||||||
|
|
||||||
|
|||||||
@@ -17,4 +17,4 @@ There are a number of important user-visible differences from the
|
|||||||
first version of GRUB, now known as GRUB Legacy. For a summary, please
|
first version of GRUB, now known as GRUB Legacy. For a summary, please
|
||||||
see:
|
see:
|
||||||
|
|
||||||
info grub Introduction 'Changes from GRUB Legacy'
|
info grub Introduction 'Changes from GRUB Legacy'
|
||||||
@@ -7,3 +7,7 @@ glance. So write to <grub-devel@gnu.org> first.
|
|||||||
For bug tracking, refer to:
|
For bug tracking, refer to:
|
||||||
|
|
||||||
http://savannah.gnu.org/bugs/?group=grub
|
http://savannah.gnu.org/bugs/?group=grub
|
||||||
|
|
||||||
|
Our wiki also lists some areas that need work:
|
||||||
|
|
||||||
|
http://grub.enbug.org/
|
||||||
@@ -390,58 +390,6 @@ else
|
|||||||
[fi]
|
[fi]
|
||||||
])
|
])
|
||||||
|
|
||||||
AC_DEFUN([grub_CHECK_LINK_PIE],[
|
|
||||||
[# Position independent executable.
|
|
||||||
link_nopie_needed=no]
|
|
||||||
AC_MSG_CHECKING([whether linker needs disabling of PIE to work])
|
|
||||||
AC_LANG_CONFTEST([AC_LANG_SOURCE([[]])])
|
|
||||||
|
|
||||||
[if eval "$ac_compile -Wl,-r,-d -nostdlib -Werror -o conftest.o" 2> /dev/null; then]
|
|
||||||
AC_MSG_RESULT([no])
|
|
||||||
[# Should we clear up other files as well, having called `AC_LANG_CONFTEST'?
|
|
||||||
rm -f conftest.o
|
|
||||||
else
|
|
||||||
link_nopie_needed=yes]
|
|
||||||
AC_MSG_RESULT([yes])
|
|
||||||
[fi]
|
|
||||||
])
|
|
||||||
|
|
||||||
|
|
||||||
dnl Check if the Linker supports `-no-pie'.
|
|
||||||
AC_DEFUN([grub_CHECK_NO_PIE],
|
|
||||||
[AC_MSG_CHECKING([whether linker accepts -no-pie])
|
|
||||||
AC_CACHE_VAL(grub_cv_cc_ld_no_pie,
|
|
||||||
[save_LDFLAGS="$LDFLAGS"
|
|
||||||
LDFLAGS="$LDFLAGS -no-pie -nostdlib -Werror"
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
|
||||||
[grub_cv_cc_ld_no_pie=yes],
|
|
||||||
[grub_cv_cc_ld_no_pie=no])
|
|
||||||
LDFLAGS="$save_LDFLAGS"
|
|
||||||
])
|
|
||||||
AC_MSG_RESULT([$grub_cv_cc_ld_no_pie])
|
|
||||||
nopie_possible=no
|
|
||||||
if test "x$grub_cv_cc_ld_no_pie" = xyes ; then
|
|
||||||
nopie_possible=yes
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
AC_DEFUN([grub_CHECK_NO_PIE_ONEWORD],
|
|
||||||
[AC_MSG_CHECKING([whether linker accepts -nopie])
|
|
||||||
AC_CACHE_VAL(grub_cv_cc_ld_no_pie_oneword,
|
|
||||||
[save_LDFLAGS="$LDFLAGS"
|
|
||||||
LDFLAGS="$LDFLAGS -nopie -nostdlib -Werror"
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
|
||||||
[grub_cv_cc_ld_no_pie_oneword=yes],
|
|
||||||
[grub_cv_cc_ld_no_pie_oneword=no])
|
|
||||||
LDFLAGS="$save_LDFLAGS"
|
|
||||||
])
|
|
||||||
AC_MSG_RESULT([$grub_cv_cc_ld_no_pie_oneword])
|
|
||||||
nopie_oneword_possible=no
|
|
||||||
if test "x$grub_cv_cc_ld_no_pie_oneword" = xyes ; then
|
|
||||||
nopie_oneword_possible=yes
|
|
||||||
fi
|
|
||||||
])
|
|
||||||
|
|
||||||
dnl Check if the C compiler supports `-fPIC'.
|
dnl Check if the C compiler supports `-fPIC'.
|
||||||
AC_DEFUN([grub_CHECK_PIC],[
|
AC_DEFUN([grub_CHECK_PIC],[
|
||||||
[# Position independent executable.
|
[# Position independent executable.
|
||||||
|
|||||||
+2
-10
@@ -1,18 +1,10 @@
|
|||||||
/* on x86 old clang doesn't support .code16
|
/* on x86 old clang doesn't support .code16
|
||||||
newer clang supports it but creates 6-byte jumps instead of 3-byte ones
|
newer clang supports it but creates 6-byte jumps instead of 3-byte ones
|
||||||
which makes us go over boot sector size.
|
which makes us go over boot sector size. */
|
||||||
Starting with 3.9 clang emits 3-byte jumps but still creates 8-bytes movl
|
|
||||||
instead of 5-bytes, so code overflows into data. */
|
|
||||||
|
|
||||||
.code16
|
.code16
|
||||||
jmp far
|
jmp far
|
||||||
.org 4
|
.org 4
|
||||||
jmp nearer
|
.space 300
|
||||||
.org 6
|
|
||||||
movl nearer, %ebx
|
|
||||||
.org 11
|
|
||||||
.space 100
|
|
||||||
nearer:
|
|
||||||
.space 200
|
|
||||||
far:
|
far:
|
||||||
.byte 0
|
.byte 0
|
||||||
+2
-2
@@ -23,14 +23,14 @@ fi
|
|||||||
if [ -d grub-core/lib/libgcrypt-grub/mpi/generic ]; then
|
if [ -d grub-core/lib/libgcrypt-grub/mpi/generic ]; then
|
||||||
rm -rf grub-core/lib/libgcrypt-grub/mpi/generic
|
rm -rf grub-core/lib/libgcrypt-grub/mpi/generic
|
||||||
fi
|
fi
|
||||||
cp grub-core/lib/libgcrypt-grub/src/g10lib.h include/grub/gcrypt/g10lib.h
|
ln -s ../../../grub-core/lib/libgcrypt-grub/src/g10lib.h include/grub/gcrypt/g10lib.h
|
||||||
cp -R grub-core/lib/libgcrypt/mpi/generic grub-core/lib/libgcrypt-grub/mpi/generic
|
cp -R grub-core/lib/libgcrypt/mpi/generic grub-core/lib/libgcrypt-grub/mpi/generic
|
||||||
|
|
||||||
for x in mpi-asm-defs.h mpih-add1.c mpih-sub1.c mpih-mul1.c mpih-mul2.c mpih-mul3.c mpih-lshift.c mpih-rshift.c; do
|
for x in mpi-asm-defs.h mpih-add1.c mpih-sub1.c mpih-mul1.c mpih-mul2.c mpih-mul3.c mpih-lshift.c mpih-rshift.c; do
|
||||||
if [ -h grub-core/lib/libgcrypt-grub/mpi/"$x" ] || [ -f grub-core/lib/libgcrypt-grub/mpi/"$x" ]; then
|
if [ -h grub-core/lib/libgcrypt-grub/mpi/"$x" ] || [ -f grub-core/lib/libgcrypt-grub/mpi/"$x" ]; then
|
||||||
rm grub-core/lib/libgcrypt-grub/mpi/"$x"
|
rm grub-core/lib/libgcrypt-grub/mpi/"$x"
|
||||||
fi
|
fi
|
||||||
cp grub-core/lib/libgcrypt-grub/mpi/generic/"$x" grub-core/lib/libgcrypt-grub/mpi/"$x"
|
ln -s generic/"$x" grub-core/lib/libgcrypt-grub/mpi/"$x"
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "Generating Automake input..."
|
echo "Generating Automake input..."
|
||||||
|
|||||||
@@ -21,6 +21,9 @@ if COND_powerpc_ieee1275
|
|||||||
CFLAGS_PLATFORM += -mcpu=powerpc
|
CFLAGS_PLATFORM += -mcpu=powerpc
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
#FIXME: discover and check XEN headers
|
||||||
|
CPPFLAGS_XEN = -I/usr/include
|
||||||
|
|
||||||
# Other options
|
# Other options
|
||||||
|
|
||||||
CPPFLAGS_DEFAULT = -DGRUB_FILE=\"$(subst $(srcdir)/,,$<)\"
|
CPPFLAGS_DEFAULT = -DGRUB_FILE=\"$(subst $(srcdir)/,,$<)\"
|
||||||
@@ -38,10 +41,10 @@ CFLAGS_KERNEL = $(CFLAGS_PLATFORM) -ffreestanding
|
|||||||
LDFLAGS_KERNEL = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC)
|
LDFLAGS_KERNEL = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC)
|
||||||
CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1
|
CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1
|
||||||
CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
|
||||||
STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version -R .MIPS.abiflags -R .ARM.exidx
|
STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version -R .MIPS.abiflags
|
||||||
|
|
||||||
CFLAGS_MODULE = $(CFLAGS_PLATFORM) -ffreestanding
|
CFLAGS_MODULE = $(CFLAGS_PLATFORM) -ffreestanding
|
||||||
LDFLAGS_MODULE = $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) $(TARGET_INCREMENTAL_LINK)
|
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)
|
||||||
|
|
||||||
|
|||||||
@@ -37,6 +37,7 @@ EXTRA_DIST += grub-core/lib/libgcrypt
|
|||||||
EXTRA_DIST += grub-core/lib/libgcrypt-grub/mpi/generic
|
EXTRA_DIST += grub-core/lib/libgcrypt-grub/mpi/generic
|
||||||
EXTRA_DIST += $(shell find $(top_srcdir)/include -name '*.h')
|
EXTRA_DIST += $(shell find $(top_srcdir)/include -name '*.h')
|
||||||
EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/lib -name '*.h')
|
EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/lib -name '*.h')
|
||||||
|
EXTRA_DIST += $(shell find $(top_srcdir)/grub-core/gnulib -name '*.h')
|
||||||
EXTRA_DIST += grub-core/efiemu/runtime/config.h
|
EXTRA_DIST += grub-core/efiemu/runtime/config.h
|
||||||
|
|
||||||
EXTRA_DIST += grub-core/lib/LzmaDec.c
|
EXTRA_DIST += grub-core/lib/LzmaDec.c
|
||||||
@@ -50,13 +51,8 @@ EXTRA_DIST += util/import_gcrypth.sed
|
|||||||
EXTRA_DIST += util/bin2h.c
|
EXTRA_DIST += util/bin2h.c
|
||||||
EXTRA_DIST += util/grub-gen-asciih.c
|
EXTRA_DIST += util/grub-gen-asciih.c
|
||||||
EXTRA_DIST += util/grub-gen-widthspec.c
|
EXTRA_DIST += util/grub-gen-widthspec.c
|
||||||
EXTRA_DIST += util/grub-module-verifier.c
|
|
||||||
EXTRA_DIST += util/grub-module-verifier32.c
|
|
||||||
EXTRA_DIST += util/grub-module-verifier64.c
|
|
||||||
EXTRA_DIST += util/grub-module-verifierXX.c
|
|
||||||
EXTRA_DIST += util/grub-pe2elf.c
|
EXTRA_DIST += util/grub-pe2elf.c
|
||||||
|
|
||||||
|
|
||||||
EXTRA_DIST += m4/gnulib-cache.m4
|
EXTRA_DIST += m4/gnulib-cache.m4
|
||||||
EXTRA_DIST += m4/glibc2.m4
|
EXTRA_DIST += m4/glibc2.m4
|
||||||
EXTRA_DIST += m4/gnulib-tool.m4
|
EXTRA_DIST += m4/gnulib-tool.m4
|
||||||
|
|||||||
+81
-175
@@ -31,7 +31,7 @@ dnl (such as BUILD_CC, BUILD_CFLAGS, etc.) for the build type and variables
|
|||||||
dnl with the prefix "TARGET_" (such as TARGET_CC, TARGET_CFLAGS, etc.) are
|
dnl with the prefix "TARGET_" (such as TARGET_CC, TARGET_CFLAGS, etc.) are
|
||||||
dnl used for the target type. See INSTALL for full list of variables.
|
dnl used for the target type. See INSTALL for full list of variables.
|
||||||
|
|
||||||
AC_INIT([GRUB],[2.03],[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])
|
||||||
|
|
||||||
@@ -315,7 +315,7 @@ AC_PROG_LN_S
|
|||||||
if test "x$LEX" = "x:"; then
|
if test "x$LEX" = "x:"; then
|
||||||
AC_MSG_ERROR([flex is not found])
|
AC_MSG_ERROR([flex is not found])
|
||||||
else
|
else
|
||||||
version=`$LEX --version | $AWK '{ split($2,x,"."); print x[[1]]*10000+x[[2]]*100+x[[3]]; }'`
|
version=`$LEX --version | $AWK '{ split($NF,x,"."); print x[[1]]*10000+x[[2]]*100+x[[3]]; }'`
|
||||||
if test -n "$version" -a "$version" -ge 20535; then
|
if test -n "$version" -a "$version" -ge 20535; then
|
||||||
:
|
:
|
||||||
else
|
else
|
||||||
@@ -373,10 +373,7 @@ case "$host_os" in
|
|||||||
;;
|
;;
|
||||||
*)
|
*)
|
||||||
AC_CHECK_SIZEOF(off_t)
|
AC_CHECK_SIZEOF(off_t)
|
||||||
if test x"$ac_cv_sizeof_off_t" != x8 ; then
|
test x"$ac_cv_sizeof_off_t" = x8 || AC_MSG_ERROR([Large file support is required]);;
|
||||||
AC_CHECK_SIZEOF(off64_t)
|
|
||||||
test x"$ac_cv_sizeof_off64_t" = x8 || AC_MSG_ERROR([Large file support is required])
|
|
||||||
fi;;
|
|
||||||
esac
|
esac
|
||||||
|
|
||||||
if test x$USE_NLS = xno; then
|
if test x$USE_NLS = xno; then
|
||||||
@@ -391,15 +388,7 @@ fi
|
|||||||
|
|
||||||
# Check for functions and headers.
|
# Check for functions and headers.
|
||||||
AC_CHECK_FUNCS(posix_memalign memalign getextmntent)
|
AC_CHECK_FUNCS(posix_memalign memalign getextmntent)
|
||||||
AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h limits.h)
|
AC_CHECK_HEADERS(sys/param.h sys/mount.h sys/mnttab.h sys/mkdev.h limits.h)
|
||||||
|
|
||||||
# glibc 2.25 still includes sys/sysmacros.h in sys/types.h but emits deprecation
|
|
||||||
# warning which causes compilation failure later with -Werror. So use -Werror here
|
|
||||||
# as well to force proper sys/sysmacros.h detection.
|
|
||||||
SAVED_CFLAGS="$CFLAGS"
|
|
||||||
CFLAGS="$HOST_CFLAGS -Werror"
|
|
||||||
AC_HEADER_MAJOR
|
|
||||||
CFLAGS="$SAVED_CFLAGS"
|
|
||||||
|
|
||||||
AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,[$ac_includes_default
|
AC_CHECK_MEMBERS([struct statfs.f_fstypename],,,[$ac_includes_default
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
@@ -459,16 +448,6 @@ case "$build_os" in
|
|||||||
esac
|
esac
|
||||||
AC_SUBST(BUILD_EXEEXT)
|
AC_SUBST(BUILD_EXEEXT)
|
||||||
|
|
||||||
# In some build environments like termux /bin/sh is not a valid
|
|
||||||
# shebang. Use $SHELL instead if it's executable and /bin/sh isn't
|
|
||||||
BUILD_SHEBANG=/bin/sh
|
|
||||||
for she in /bin/sh "$SHELL"; do
|
|
||||||
if test -x "$she" ; then
|
|
||||||
BUILD_SHEBANG="$she"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
AC_SUBST(BUILD_SHEBANG)
|
|
||||||
|
|
||||||
# For gnulib.
|
# For gnulib.
|
||||||
gl_INIT
|
gl_INIT
|
||||||
|
|
||||||
@@ -804,7 +783,7 @@ fi
|
|||||||
if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ) && test "x$platform" != xemu; then
|
if ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 ) && test "x$platform" != xemu; then
|
||||||
# Some toolchains enable these features by default, but they need
|
# Some toolchains enable these features by default, but they need
|
||||||
# registers that aren't set up properly in GRUB.
|
# registers that aren't set up properly in GRUB.
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -mno-mmx -mno-sse -mno-sse2 -mno-sse3 -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
|
# GRUB doesn't use float or doubles at all. Yet some toolchains may decide
|
||||||
@@ -903,25 +882,6 @@ if test x"$target_cpu" = xsparc64 ; then
|
|||||||
TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_mno_relax"
|
TARGET_LDFLAGS="$TARGET_LDFLAGS $grub_cv_target_cc_mno_relax"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_CACHE_CHECK([for incremental link options], grub_cv_target_cc_incremental_link, [
|
|
||||||
grub_cv_target_cc_incremental_link=no
|
|
||||||
for cand in "-Wl,-r,-d" "-static -Wl,-r,-d"; do
|
|
||||||
#AC_LINK_IFELSE doesn't handle non-executable output correctly
|
|
||||||
echo > conftest_inclink.c
|
|
||||||
if $TARGET_CC -o /dev/null $TARGET_CFLAGS $TARGET_CPPFLAGS $TARGET_LDFLAGS -nostdlib -Werror $cand conftest_inclink.c >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD; then
|
|
||||||
grub_cv_target_cc_incremental_link="$cand"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
])
|
|
||||||
|
|
||||||
if test x"$grub_cv_target_cc_incremental_link" = xno ; then
|
|
||||||
AC_MSG_ERROR([could not find incremental link options])
|
|
||||||
fi
|
|
||||||
|
|
||||||
TARGET_INCREMENTAL_LINK="$grub_cv_target_cc_incremental_link"
|
|
||||||
AC_SUBST(TARGET_INCREMENTAL_LINK)
|
|
||||||
|
|
||||||
# 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
|
||||||
@@ -950,24 +910,12 @@ if test x"$target_os" = xcygwin && test "x$grub_cv_cc_no_reorder_functions" = xy
|
|||||||
TARGET_CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
|
TARGET_CFLAGS="$TARGET_CFLAGS -fno-reorder-functions"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_CACHE_CHECK([whether -mno-stack-arg-probe works], [grub_cv_cc_mno_stack_arg_probe], [
|
|
||||||
CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
|
||||||
[grub_cv_cc_mno_stack_arg_probe=yes],
|
|
||||||
[grub_cv_cc_mno_stack_arg_probe=no])
|
|
||||||
])
|
|
||||||
|
|
||||||
if test "x$grub_cv_cc_mno_stack_arg_probe" = xyes; then
|
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -mno-stack-arg-probe"
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
# By default, GCC 4.6 generates .eh_frame sections containing unwind
|
# By default, GCC 4.6 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
|
||||||
# behaviour.
|
# behaviour.
|
||||||
AC_CACHE_CHECK([whether -fno-asynchronous-unwind-tables works], [grub_cv_cc_fno_asynchronous_unwind_tables], [
|
AC_CACHE_CHECK([whether -fno-asynchronous-unwind-tables works], [grub_cv_cc_fno_asynchronous_unwind_tables], [
|
||||||
CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
|
CFLAGS="$TARGET_CFLAGS -fno-dwarf2-cfi-asm"
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
[grub_cv_cc_fno_asynchronous_unwind_tables=yes],
|
[grub_cv_cc_fno_asynchronous_unwind_tables=yes],
|
||||||
[grub_cv_cc_fno_asynchronous_unwind_tables=no])
|
[grub_cv_cc_fno_asynchronous_unwind_tables=no])
|
||||||
@@ -977,17 +925,66 @@ if test "x$grub_cv_cc_fno_asynchronous_unwind_tables" = xyes; then
|
|||||||
TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
|
TARGET_CFLAGS="$TARGET_CFLAGS -fno-asynchronous-unwind-tables"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AC_CACHE_CHECK([whether -fno-unwind-tables works], [grub_cv_cc_fno_unwind_tables], [
|
AC_ARG_ENABLE([efiemu],
|
||||||
CFLAGS="$TARGET_CFLAGS -fno-unwind-tables"
|
[AS_HELP_STRING([--enable-efiemu],
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
[build and install the efiemu runtimes (default=guessed)])])
|
||||||
[grub_cv_cc_fno_unwind_tables=yes],
|
if test x"$enable_efiemu" = xno ; then
|
||||||
[grub_cv_cc_fno_unwind_tables=no])
|
efiemu_excuse="explicitly disabled"
|
||||||
])
|
|
||||||
|
|
||||||
if test "x$grub_cv_cc_fno_unwind_tables" = xyes; then
|
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -fno-unwind-tables"
|
|
||||||
fi
|
fi
|
||||||
|
if test x"$grub_cv_target_cc_link_format" = x-mi386pe || test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
|
||||||
|
efiemu_excuse="not available on cygwin"
|
||||||
|
fi
|
||||||
|
if test x"$target_cpu" != xi386 ; then
|
||||||
|
efiemu_excuse="only available on i386"
|
||||||
|
fi
|
||||||
|
if test x"$platform" = xefi ; then
|
||||||
|
efiemu_excuse="not available on efi"
|
||||||
|
fi
|
||||||
|
if test x"$efiemu_excuse" = x ; then
|
||||||
|
AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [
|
||||||
|
CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
|
[grub_cv_cc_efiemu=yes],
|
||||||
|
[grub_cv_cc_efiemu=no])
|
||||||
|
])
|
||||||
|
if test x$grub_cv_cc_efiemu = xno; then
|
||||||
|
efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
if test x"$efiemu_excuse" = x ; then
|
||||||
|
AC_CACHE_CHECK([for efiemu64 linking format], [grub_cv_target_cc_efiemu64_link_format], [
|
||||||
|
grub_cv_target_cc_efiemu64_link_format=unknown
|
||||||
|
for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd -melf_x86_64_haiku -arch,x86_64; do
|
||||||
|
CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
|
||||||
|
LDFLAGS="-m64 -Wl,$format -nostdlib -static"
|
||||||
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||||
|
asm (".globl start; start:");
|
||||||
|
asm (".globl _start; _start:");
|
||||||
|
asm (".globl __start; __start:");
|
||||||
|
void __main (void);
|
||||||
|
void __main (void) {}
|
||||||
|
]], [[]])], [flag=1], [flag=0])
|
||||||
|
if test x"$flag" = x1; then
|
||||||
|
grub_cv_target_cc_efiemu64_link_format="$format"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done])
|
||||||
|
if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then
|
||||||
|
efiemu_excuse="no suitable link format for efiemu64 found"
|
||||||
|
else
|
||||||
|
EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
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 ($efiemu_excuse)])
|
||||||
|
fi
|
||||||
|
if test x"$efiemu_excuse" = x ; then
|
||||||
|
enable_efiemu=yes
|
||||||
|
else
|
||||||
|
enable_efiemu=no
|
||||||
|
fi
|
||||||
|
AC_SUBST([enable_efiemu])
|
||||||
|
AC_SUBST([EFIEMU64_LINK_FORMAT])
|
||||||
|
|
||||||
CFLAGS="$TARGET_CFLAGS"
|
CFLAGS="$TARGET_CFLAGS"
|
||||||
|
|
||||||
@@ -1081,73 +1078,6 @@ else
|
|||||||
TARGET_IMG_CFLAGS=
|
TARGET_IMG_CFLAGS=
|
||||||
fi
|
fi
|
||||||
|
|
||||||
CFLAGS="$TARGET_CFLAGS"
|
|
||||||
|
|
||||||
AC_ARG_ENABLE([efiemu],
|
|
||||||
[AS_HELP_STRING([--enable-efiemu],
|
|
||||||
[build and install the efiemu runtimes (default=guessed)])])
|
|
||||||
if test x"$enable_efiemu" = xno ; then
|
|
||||||
efiemu_excuse="explicitly disabled"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test x"$grub_cv_target_cc_link_format" = x-mi386pe || test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
|
|
||||||
efiemu_excuse="not available on cygwin"
|
|
||||||
fi
|
|
||||||
if test x"$target_cpu" != xi386 ; then
|
|
||||||
efiemu_excuse="only available on i386"
|
|
||||||
fi
|
|
||||||
if test x"$platform" = xefi ; then
|
|
||||||
efiemu_excuse="not available on efi"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if test x"$efiemu_excuse" = x ; then
|
|
||||||
AC_CACHE_CHECK([whether options required for efiemu work], grub_cv_cc_efiemu, [
|
|
||||||
CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
|
||||||
[grub_cv_cc_efiemu=yes],
|
|
||||||
[grub_cv_cc_efiemu=no])
|
|
||||||
])
|
|
||||||
if test x$grub_cv_cc_efiemu = xno; then
|
|
||||||
efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
if test x"$efiemu_excuse" = x ; then
|
|
||||||
AC_CACHE_CHECK([for efiemu64 linking format], [grub_cv_target_cc_efiemu64_link_format], [
|
|
||||||
grub_cv_target_cc_efiemu64_link_format=unknown
|
|
||||||
for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd -melf_x86_64_haiku -arch,x86_64; do
|
|
||||||
CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
|
|
||||||
LDFLAGS="-m64 -Wl,$format -nostdlib -static"
|
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
|
||||||
asm (".globl start; start:");
|
|
||||||
asm (".globl _start; _start:");
|
|
||||||
asm (".globl __start; __start:");
|
|
||||||
void __main (void);
|
|
||||||
void __main (void) {}
|
|
||||||
]], [[]])], [flag=1], [flag=0])
|
|
||||||
if test x"$flag" = x1; then
|
|
||||||
grub_cv_target_cc_efiemu64_link_format="$format"
|
|
||||||
break
|
|
||||||
fi
|
|
||||||
done])
|
|
||||||
if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then
|
|
||||||
efiemu_excuse="no suitable link format for efiemu64 found"
|
|
||||||
else
|
|
||||||
EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
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 ($efiemu_excuse)])
|
|
||||||
fi
|
|
||||||
if test x"$efiemu_excuse" = x ; then
|
|
||||||
enable_efiemu=yes
|
|
||||||
else
|
|
||||||
enable_efiemu=no
|
|
||||||
fi
|
|
||||||
AC_SUBST([enable_efiemu])
|
|
||||||
AC_SUBST([EFIEMU64_LINK_FORMAT])
|
|
||||||
|
|
||||||
CFLAGS="$TARGET_CFLAGS"
|
|
||||||
|
|
||||||
AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)
|
AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)
|
||||||
|
|
||||||
|
|
||||||
@@ -1184,23 +1114,14 @@ if test "$target_cpu"-"$platform" = x86_64-efi; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$target_cpu" = xarm; then
|
if test "x$target_cpu" = xarm; then
|
||||||
AC_CACHE_CHECK([for options to disable movt and movw], grub_cv_target_cc_mno_movt, [
|
AC_CACHE_CHECK([whether option -mlong-calls works], grub_cv_cc_mlong_calls, [
|
||||||
grub_cv_target_cc_mno_movt=no
|
CFLAGS="$TARGET_CFLAGS -mlong-calls -Werror"
|
||||||
for cand in "-mno-movt" \
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
"-mllvm -arm-use-movt=0"; do
|
[grub_cv_cc_mlong_calls=yes],
|
||||||
if test x"$grub_cv_target_cc_mno_movt" != xno ; then
|
[grub_cv_cc_mlong_calls=no])
|
||||||
break
|
|
||||||
fi
|
|
||||||
CFLAGS="$TARGET_CFLAGS $cand -Werror"
|
|
||||||
CPPFLAGS="$TARGET_CPPFLAGS"
|
|
||||||
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
|
||||||
[grub_cv_target_cc_mno_movt="$cand"], [])
|
|
||||||
done
|
|
||||||
])
|
])
|
||||||
|
if test "x$grub_cv_cc_mlong_calls" = xyes; then
|
||||||
if test x"$grub_cv_target_cc_mno_movt" != xno ; then
|
TARGET_CFLAGS="$TARGET_CFLAGS -mlong-calls"
|
||||||
# A trick so that clang doesn't see it on link stage
|
|
||||||
TARGET_CPPFLAGS="$TARGET_CPPFLAGS $grub_cv_target_cc_mno_movt"
|
|
||||||
fi
|
fi
|
||||||
AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
|
AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
|
||||||
CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror"
|
CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror"
|
||||||
@@ -1233,25 +1154,13 @@ CFLAGS="$TARGET_CFLAGS"
|
|||||||
|
|
||||||
# Position independent executable.
|
# Position independent executable.
|
||||||
grub_CHECK_PIE
|
grub_CHECK_PIE
|
||||||
grub_CHECK_NO_PIE
|
|
||||||
grub_CHECK_NO_PIE_ONEWORD
|
|
||||||
[# Need that, because some distributions ship compilers that include
|
[# Need that, because some distributions ship compilers that include
|
||||||
# `-fPIE' or '-fpie' and '-pie' in the default specs.
|
# `-fPIE' in the default specs.
|
||||||
if [ x"$pie_possible" = xyes ]; then
|
if [ x"$pie_possible" = xyes ]; then
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE -fno-pie"
|
TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIE"
|
||||||
fi
|
|
||||||
|
|
||||||
if [ x"$link_nopie_needed" = xyes ] || [ x"$pie_possible" = xyes ]; then
|
|
||||||
if [ x"$nopie_possible" = xyes ]; then
|
|
||||||
TARGET_LDFLAGS="$TARGET_LDFLAGS -no-pie"
|
|
||||||
fi
|
|
||||||
if [ x"$nopie_oneword_possible" = xyes ]; then
|
|
||||||
TARGET_LDFLAGS="$TARGET_LDFLAGS -nopie"
|
|
||||||
fi
|
|
||||||
fi]
|
fi]
|
||||||
|
|
||||||
CFLAGS="$TARGET_CFLAGS"
|
CFLAGS="$TARGET_CFLAGS"
|
||||||
LDFLAGS="$TARGET_LDFLAGS"
|
|
||||||
|
|
||||||
# Position independent executable.
|
# Position independent executable.
|
||||||
grub_CHECK_PIC
|
grub_CHECK_PIC
|
||||||
@@ -1260,12 +1169,9 @@ grub_CHECK_PIC
|
|||||||
# and reload $gp in every function.
|
# and reload $gp in every function.
|
||||||
# GCC implements it using symbol __gnu_local_gp in non-PIC as well.
|
# GCC implements it using symbol __gnu_local_gp in non-PIC as well.
|
||||||
# However with clang we need PIC for this reloading to happen.
|
# However with clang we need PIC for this reloading to happen.
|
||||||
# With arm64 we need relocations that are in some way representable in
|
|
||||||
# PE as we need to support arm64-efi. Without -fPIC clang generates
|
|
||||||
# movk's which aren't representable.
|
|
||||||
# Since default varies across dictributions use either -fPIC or -fno-PIC
|
# Since default varies across dictributions use either -fPIC or -fno-PIC
|
||||||
# explicitly.
|
# explicitly.
|
||||||
if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel || test x$target_cpu = xarm64 ) && test "x$grub_cv_cc_target_clang" = xyes ; then
|
if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel ) && test "x$grub_cv_cc_target_clang" = xyes ; then
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -fPIC"
|
TARGET_CFLAGS="$TARGET_CFLAGS -fPIC"
|
||||||
elif [ x"$pic_possible" = xyes ]; then
|
elif [ x"$pic_possible" = xyes ]; then
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
|
TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
|
||||||
@@ -1618,11 +1524,11 @@ if test x"$grub_build_mkfont_excuse" = x ; then
|
|||||||
else
|
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$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
|
if test x"$grub_build_mkfont_excuse" = x ; then
|
||||||
AC_MSG_ERROR([qemu, coreboot and loongson ports need build-time grub-mkfont])
|
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont])
|
||||||
else
|
else
|
||||||
AC_MSG_ERROR([qemu, coreboot and loongson ports need build-time grub-mkfont ($grub_build_mkfont_excuse)])
|
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont ($grub_build_mkfont_excuse)])
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -1692,11 +1598,11 @@ if test x"$enable_build_grub_mkfont" = xno ; then
|
|||||||
FONT_SOURCE=
|
FONT_SOURCE=
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || 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
|
if test x"$grub_build_mkfont_excuse" = x ; then
|
||||||
AC_MSG_ERROR([qemu, coreboot and loongson ports need unifont])
|
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont])
|
||||||
else
|
else
|
||||||
AC_MSG_ERROR([qemu, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)])
|
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)])
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
+33
-124
@@ -2446,10 +2446,6 @@ The boot file name provided by DHCP. Read-only.
|
|||||||
The name of the DHCP server responsible for these boot parameters.
|
The name of the DHCP server responsible for these boot parameters.
|
||||||
Read-only.
|
Read-only.
|
||||||
|
|
||||||
@item net_@var{<interface>}_next_server
|
|
||||||
The IP address of the next (usually, TFTP) server provided by DHCP.
|
|
||||||
Read-only.
|
|
||||||
|
|
||||||
@item net_default_interface
|
@item net_default_interface
|
||||||
Initially set to name of network interface that was used to load grub.
|
Initially set to name of network interface that was used to load grub.
|
||||||
Read-write, although setting it affects only interpretation of
|
Read-write, although setting it affects only interpretation of
|
||||||
@@ -2542,8 +2538,6 @@ team are:
|
|||||||
85:3
|
85:3
|
||||||
@item Asus EeePC 1005PE
|
@item Asus EeePC 1005PE
|
||||||
84:1 (unconfirmed)
|
84:1 (unconfirmed)
|
||||||
@item LENOVO ThinkPad T410s (2912W1C)
|
|
||||||
101:3
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
To take full advantage of this function, install GRUB into the MBR
|
To take full advantage of this function, install GRUB into the MBR
|
||||||
@@ -3044,8 +3038,6 @@ These variables have special meaning to GRUB.
|
|||||||
* cmdpath::
|
* cmdpath::
|
||||||
* color_highlight::
|
* color_highlight::
|
||||||
* color_normal::
|
* color_normal::
|
||||||
* config_directory::
|
|
||||||
* config_file::
|
|
||||||
* debug::
|
* debug::
|
||||||
* default::
|
* default::
|
||||||
* fallback::
|
* fallback::
|
||||||
@@ -3066,7 +3058,6 @@ These variables have special meaning to GRUB.
|
|||||||
* net_@var{<interface>}_hostname::
|
* net_@var{<interface>}_hostname::
|
||||||
* net_@var{<interface>}_ip::
|
* net_@var{<interface>}_ip::
|
||||||
* net_@var{<interface>}_mac::
|
* net_@var{<interface>}_mac::
|
||||||
* net_@var{<interface>}_next_server::
|
|
||||||
* net_@var{<interface>}_rootpath::
|
* net_@var{<interface>}_rootpath::
|
||||||
* net_default_interface::
|
* net_default_interface::
|
||||||
* net_default_ip::
|
* net_default_ip::
|
||||||
@@ -3189,22 +3180,6 @@ matching colors of first half.
|
|||||||
to support whole rgb24 palette but currently there is no compelling reason
|
to support whole rgb24 palette but currently there is no compelling reason
|
||||||
to go beyond the current 16 colors.
|
to go beyond the current 16 colors.
|
||||||
|
|
||||||
|
|
||||||
@node config_directory
|
|
||||||
@subsection config_directory
|
|
||||||
|
|
||||||
This variable is automatically set by GRUB to the directory part of
|
|
||||||
current configuration file name (@pxref{config_file}).
|
|
||||||
|
|
||||||
|
|
||||||
@node config_file
|
|
||||||
@subsection config_file
|
|
||||||
|
|
||||||
This variable is automatically set by GRUB to the name of configuration file that is being
|
|
||||||
processed by commands @command{configfile} (@pxref{configfile}) or @command{normal}
|
|
||||||
(@pxref{normal}). It is restored to the previous value when command completes.
|
|
||||||
|
|
||||||
|
|
||||||
@node debug
|
@node debug
|
||||||
@subsection debug
|
@subsection debug
|
||||||
|
|
||||||
@@ -3218,10 +3193,9 @@ source for more details.
|
|||||||
@node default
|
@node default
|
||||||
@subsection default
|
@subsection default
|
||||||
|
|
||||||
If this variable is set, it identifies a menu entry that should be
|
If this variable is set, it identifies a menu entry that should be selected
|
||||||
selected by default, possibly after a timeout (@pxref{timeout}). The
|
by default, possibly after a timeout (@pxref{timeout}). The entry may be
|
||||||
entry may be identified by number (starting from 0 at each level of
|
identified by number or by id.
|
||||||
the hierarchy), by title, or by id.
|
|
||||||
|
|
||||||
For example, if you have:
|
For example, if you have:
|
||||||
|
|
||||||
@@ -3237,26 +3211,24 @@ then you can make this the default using:
|
|||||||
default=example-gnu-linux
|
default=example-gnu-linux
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
If the entry is in a submenu, then it must be identified using the
|
If the entry is in a submenu, then it must be identified using the titles of
|
||||||
number, title, or id of each of the submenus starting from the top
|
each of the submenus starting from the top level followed by the number or
|
||||||
level, followed by the number, title, or id of the menu entry itself,
|
title of the menu entry itself, separated by @samp{>}. For example, take
|
||||||
with each element separated by @samp{>}. For example, take the
|
the following menu structure:
|
||||||
following menu structure:
|
|
||||||
|
|
||||||
@example
|
@example
|
||||||
GNU/Hurd --id gnu-hurd
|
Submenu 1
|
||||||
Standard Boot --id=gnu-hurd-std
|
Menu Entry 1
|
||||||
Rescue shell --id=gnu-hurd-rescue
|
Menu Entry 2
|
||||||
Other platforms --id=other
|
Submenu 2
|
||||||
Minix --id=minix
|
Submenu 3
|
||||||
Version 3.4.0 --id=minix-3.4.0
|
Menu Entry 3
|
||||||
Version 3.3.0 --id=minix-3.3.0
|
Menu Entry 4
|
||||||
GRUB Invaders --id=grub-invaders
|
Menu Entry 5
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
The more recent release of Minix would then be identified as
|
``Menu Entry 3'' would then be identified as
|
||||||
@samp{Other platforms>Minix>Version 3.4.0}, or as @samp{1>0>0}, or as
|
@samp{Submenu 2>Submenu 3>Menu Entry 3}.
|
||||||
@samp{other>minix>minix-3.4.0}.
|
|
||||||
|
|
||||||
This variable is often set by @samp{GRUB_DEFAULT} (@pxref{Simple
|
This variable is often set by @samp{GRUB_DEFAULT} (@pxref{Simple
|
||||||
configuration}), @command{grub-set-default}, or @command{grub-reboot}.
|
configuration}), @command{grub-set-default}, or @command{grub-reboot}.
|
||||||
@@ -3430,12 +3402,6 @@ The default is the value of @samp{color_normal} (@pxref{color_normal}).
|
|||||||
@xref{Network}.
|
@xref{Network}.
|
||||||
|
|
||||||
|
|
||||||
@node net_@var{<interface>}_next_server
|
|
||||||
@subsection net_@var{<interface>}_next_server
|
|
||||||
|
|
||||||
@xref{Network}.
|
|
||||||
|
|
||||||
|
|
||||||
@node net_@var{<interface>}_rootpath
|
@node net_@var{<interface>}_rootpath
|
||||||
@subsection net_@var{<interface>}_rootpath
|
@subsection net_@var{<interface>}_rootpath
|
||||||
|
|
||||||
@@ -3873,11 +3839,6 @@ you forget a command, you can run the command @command{help}
|
|||||||
@comment * vbeinfo:: List available video modes
|
@comment * vbeinfo:: List available video modes
|
||||||
* verify_detached:: Verify detached digital signature
|
* verify_detached:: Verify detached digital signature
|
||||||
* videoinfo:: List available video modes
|
* videoinfo:: List available video modes
|
||||||
@comment * xen_*:: Xen boot commands
|
|
||||||
* xen_hypervisor:: Load xen hypervisor binary
|
|
||||||
* xen_linux:: Load dom0 kernel for xen hypervisor
|
|
||||||
* xen_initrd:: Load dom0 initrd for dom0 kernel
|
|
||||||
* xen_xsm:: Load xen security module for xen hypervisor
|
|
||||||
@end menu
|
@end menu
|
||||||
|
|
||||||
|
|
||||||
@@ -4089,15 +4050,12 @@ after @command{configfile} returns.
|
|||||||
@node cpuid
|
@node cpuid
|
||||||
@subsection cpuid
|
@subsection cpuid
|
||||||
|
|
||||||
@deffn Command cpuid [-l] [-p]
|
@deffn Command cpuid [-l]
|
||||||
Check for CPU features. This command is only available on x86 systems.
|
Check for CPU features. This command is only available on x86 systems.
|
||||||
|
|
||||||
With the @option{-l} option, return true if the CPU supports long mode
|
With the @option{-l} option, return true if the CPU supports long mode
|
||||||
(64-bit).
|
(64-bit).
|
||||||
|
|
||||||
With the @option{-p} option, return true if the CPU supports Physical
|
|
||||||
Address Extension (PAE).
|
|
||||||
|
|
||||||
If invoked without options, this command currently behaves as if it had been
|
If invoked without options, this command currently behaves as if it had been
|
||||||
invoked with @option{-l}. This may change in the future.
|
invoked with @option{-l}. This may change in the future.
|
||||||
@end deffn
|
@end deffn
|
||||||
@@ -5061,8 +5019,6 @@ the length of @var{string} is zero
|
|||||||
@var{expression} is false
|
@var{expression} is false
|
||||||
@item @var{expression1} @code{-a} @var{expression2}
|
@item @var{expression1} @code{-a} @var{expression2}
|
||||||
both @var{expression1} and @var{expression2} are true
|
both @var{expression1} and @var{expression2} are true
|
||||||
@item @var{expression1} @var{expression2}
|
|
||||||
both @var{expression1} and @var{expression2} are true. This syntax is not POSIX-compliant and is not recommended.
|
|
||||||
@item @var{expression1} @code{-o} @var{expression2}
|
@item @var{expression1} @code{-o} @var{expression2}
|
||||||
either @var{expression1} or @var{expression2} is true
|
either @var{expression1} or @var{expression2} is true
|
||||||
@end table
|
@end table
|
||||||
@@ -5146,39 +5102,6 @@ successfully. If validation fails, it is set to a non-zero value.
|
|||||||
List available video modes. If resolution is given, show only matching modes.
|
List available video modes. If resolution is given, show only matching modes.
|
||||||
@end deffn
|
@end deffn
|
||||||
|
|
||||||
@node xen_hypervisor
|
|
||||||
@subsection xen_hypervisor
|
|
||||||
|
|
||||||
@deffn Command xen_hypervisor file [arguments] @dots{}
|
|
||||||
Load a Xen hypervisor binary from @var{file}. The rest of the line is passed
|
|
||||||
verbatim as the @dfn{kernel command-line}. Any other binaries must be
|
|
||||||
reloaded after using this command.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@node xen_linux
|
|
||||||
@subsection xen_linux
|
|
||||||
|
|
||||||
@deffn Command xen_linux file [arguments]
|
|
||||||
Load a dom0 kernel image for xen hypervisor at the booting process of xen.
|
|
||||||
The rest of the line is passed verbatim as the module command line.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@node xen_initrd
|
|
||||||
@subsection xen_initrd
|
|
||||||
|
|
||||||
@deffn Command xen_initrd file
|
|
||||||
Load a initrd image for dom0 kernel at the booting process of xen.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
@node xen_xsm
|
|
||||||
@subsection xen_xsm
|
|
||||||
|
|
||||||
@deffn Command xen_xsm file
|
|
||||||
Load a xen security module for xen hypervisor at the booting process of xen.
|
|
||||||
See @uref{http://wiki.xen.org/wiki/XSM} for more detail.
|
|
||||||
@end deffn
|
|
||||||
|
|
||||||
|
|
||||||
@node Networking commands
|
@node Networking commands
|
||||||
@section The list of networking commands
|
@section The list of networking commands
|
||||||
|
|
||||||
@@ -5690,16 +5613,6 @@ BadRAM is the ability to mark some of the RAM as ``bad''. Note: due to protocol
|
|||||||
limitations mips-loongson (with Linux protocol)
|
limitations mips-loongson (with Linux protocol)
|
||||||
and mips-qemu_mips can use only memory up to first hole.
|
and mips-qemu_mips can use only memory up to first hole.
|
||||||
|
|
||||||
Bootlocation is ability of GRUB to automatically detect where it boots from.
|
|
||||||
``disk'' means the detection is limited to detecting the disk with partition
|
|
||||||
being discovered on install time. ``partition'' means that disk and partiton
|
|
||||||
can be automatically discovered. ``file'' means that boot image file name as
|
|
||||||
well as disk and partition can be discovered. For consistency default install ignores
|
|
||||||
partition and relies solely on disk detection. If no bootlocation discovery is available
|
|
||||||
or boot and grub-root disks are different, UUID is used instead. On ARC if no device
|
|
||||||
to install to is specified, UUID is used instead as well.
|
|
||||||
|
|
||||||
|
|
||||||
@multitable @columnfractions .20 .20 .20 .20 .20
|
@multitable @columnfractions .20 .20 .20 .20 .20
|
||||||
@item @tab BIOS @tab Coreboot @tab Multiboot @tab Qemu
|
@item @tab BIOS @tab Coreboot @tab Multiboot @tab Qemu
|
||||||
@item video @tab yes @tab yes @tab yes @tab yes
|
@item video @tab yes @tab yes @tab yes @tab yes
|
||||||
@@ -5716,7 +5629,6 @@ to install to is specified, UUID is used instead as well.
|
|||||||
@item badram @tab yes @tab yes @tab yes @tab yes
|
@item badram @tab yes @tab yes @tab yes @tab yes
|
||||||
@item compression @tab always @tab pointless @tab no @tab no
|
@item compression @tab always @tab pointless @tab no @tab no
|
||||||
@item exit @tab yes @tab no @tab no @tab no
|
@item exit @tab yes @tab no @tab no @tab no
|
||||||
@item bootlocation @tab disk @tab no @tab no @tab no
|
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
@multitable @columnfractions .20 .20 .20 .20 .20
|
@multitable @columnfractions .20 .20 .20 .20 .20
|
||||||
@@ -5735,7 +5647,6 @@ to install to is specified, UUID is used instead as well.
|
|||||||
@item badram @tab yes @tab yes @tab no @tab yes
|
@item badram @tab yes @tab yes @tab no @tab yes
|
||||||
@item compression @tab no @tab no @tab no @tab no
|
@item compression @tab no @tab no @tab no @tab no
|
||||||
@item exit @tab yes @tab yes @tab yes @tab yes
|
@item exit @tab yes @tab yes @tab yes @tab yes
|
||||||
@item bootlocation @tab file @tab file @tab file, ignored @tab file
|
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
@multitable @columnfractions .20 .20 .20 .20 .20
|
@multitable @columnfractions .20 .20 .20 .20 .20
|
||||||
@@ -5754,26 +5665,24 @@ to install to is specified, UUID is used instead as well.
|
|||||||
@item badram @tab yes (*) @tab no @tab no @tab no
|
@item badram @tab yes (*) @tab no @tab no @tab no
|
||||||
@item compression @tab configurable @tab no @tab no @tab configurable
|
@item compression @tab configurable @tab no @tab no @tab configurable
|
||||||
@item exit @tab no @tab yes @tab yes @tab yes
|
@item exit @tab no @tab yes @tab yes @tab yes
|
||||||
@item bootlocation @tab no @tab partition @tab file @tab file (*)
|
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
@multitable @columnfractions .20 .20 .20 .20 .20
|
@multitable @columnfractions .20 .20 .20 .20 .20
|
||||||
@item @tab MIPS qemu @tab emu @tab xen
|
@item @tab MIPS qemu @tab emu
|
||||||
@item video @tab no @tab yes @tab no
|
@item video @tab no @tab yes
|
||||||
@item console charset @tab CP437 @tab Unicode (*) @tab ASCII
|
@item console charset @tab CP437 @tab Unicode (*)
|
||||||
@item network @tab no @tab yes @tab no
|
@item network @tab no @tab yes
|
||||||
@item ATA/AHCI @tab yes @tab no @tab no
|
@item ATA/AHCI @tab yes @tab no
|
||||||
@item AT keyboard @tab yes @tab no @tab no
|
@item AT keyboard @tab yes @tab no
|
||||||
@item Speaker @tab no @tab no @tab no
|
@item Speaker @tab no @tab no
|
||||||
@item USB @tab N/A @tab yes @tab no
|
@item USB @tab N/A @tab yes
|
||||||
@item chainloader @tab yes @tab no @tab yes
|
@item chainloader @tab yes @tab no
|
||||||
@item cpuid @tab no @tab no @tab yes
|
@item cpuid @tab no @tab no
|
||||||
@item hints @tab guess @tab no @tab no
|
@item hints @tab guess @tab no
|
||||||
@item PCI @tab no @tab no @tab no
|
@item PCI @tab no @tab no
|
||||||
@item badram @tab yes (*) @tab no @tab no
|
@item badram @tab yes (*) @tab no
|
||||||
@item compression @tab configurable @tab no @tab no
|
@item compression @tab configurable @tab no
|
||||||
@item exit @tab no @tab yes @tab no
|
@item exit @tab no @tab yes
|
||||||
@item bootlocation @tab no @tab file @tab no
|
|
||||||
@end multitable
|
@end multitable
|
||||||
|
|
||||||
@node Platform-specific operations
|
@node Platform-specific operations
|
||||||
|
|||||||
@@ -729,11 +729,9 @@ def kernel(defn, platform):
|
|||||||
"""if test x$(TARGET_APPLE_LINKER) = x1; then \
|
"""if test x$(TARGET_APPLE_LINKER) = x1; then \
|
||||||
$(TARGET_STRIP) -S -x $(""" + cname(defn) + """) -o $@.bin $<; \
|
$(TARGET_STRIP) -S -x $(""" + cname(defn) + """) -o $@.bin $<; \
|
||||||
$(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; \
|
$(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; \
|
||||||
rm -f $@.bin; \
|
|
||||||
elif test ! -z '$(TARGET_OBJ2ELF)'; then \
|
elif test ! -z '$(TARGET_OBJ2ELF)'; then \
|
||||||
""" + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@.bin $< && \
|
""" + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@.bin $< && \
|
||||||
$(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); \
|
$(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); \
|
||||||
rm -f $@.bin; \
|
|
||||||
else """ + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@ $<; \
|
else """ + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@ $<; \
|
||||||
fi"""))
|
fi"""))
|
||||||
|
|
||||||
@@ -761,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 .MIPS.abiflags -R .reginfo -R .rel.dyn -R .note.gnu.gold-version -R .ARM.exidx $< $@; \
|
$(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
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
|||||||
+2
-15
@@ -39,10 +39,6 @@ gentrigtables$(BUILD_EXEEXT): gentrigtables.c
|
|||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $< $(BUILD_LIBM)
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $< $(BUILD_LIBM)
|
||||||
CLEANFILES += gentrigtables$(BUILD_EXEEXT)
|
CLEANFILES += gentrigtables$(BUILD_EXEEXT)
|
||||||
|
|
||||||
build-grub-module-verifier$(BUILD_EXEEXT): $(top_srcdir)/util/grub-module-verifier.c $(top_srcdir)/util/grub-module-verifier32.c $(top_srcdir)/util/grub-module-verifier64.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) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-module-verifier\" $^
|
|
||||||
CLEANFILES += build-grub-module-verifier$(BUILD_EXEEXT)
|
|
||||||
|
|
||||||
# trigtables.c
|
# trigtables.c
|
||||||
trigtables.c: gentrigtables$(BUILD_EXEEXT) gentrigtables.c $(top_srcdir)/configure.ac
|
trigtables.c: gentrigtables$(BUILD_EXEEXT) gentrigtables.c $(top_srcdir)/configure.ac
|
||||||
./gentrigtables$(BUILD_EXEEXT) > $@
|
./gentrigtables$(BUILD_EXEEXT) > $@
|
||||||
@@ -105,9 +101,7 @@ if COND_i386_efi
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pmtimer.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_coreboot
|
if COND_i386_coreboot
|
||||||
@@ -118,12 +112,10 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/font.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/bufio.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_multiboot
|
if COND_i386_multiboot
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_i386_qemu
|
if COND_i386_qemu
|
||||||
@@ -162,14 +154,11 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/pci.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/pmtimer.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_ia64_efi
|
if COND_ia64_efi
|
||||||
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/acpi.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_mips
|
if COND_mips
|
||||||
@@ -244,13 +233,11 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/efi/loader.h
|
|||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h
|
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h
|
||||||
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/acpi.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_arm64_efi
|
if COND_arm64_efi
|
||||||
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/acpi.h
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if COND_emu
|
if COND_emu
|
||||||
@@ -278,7 +265,7 @@ BUILT_SOURCES += symlist.h
|
|||||||
|
|
||||||
symlist.c: symlist.h gensymlist.sh
|
symlist.c: symlist.h gensymlist.sh
|
||||||
$(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) -DGRUB_SYMBOL_GENERATOR=1 symlist.h > symlist.p || (rm -f symlist.p; exit 1)
|
$(TARGET_CPP) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS_KERNEL) $(CPPFLAGS) -DGRUB_SYMBOL_GENERATOR=1 symlist.h > symlist.p || (rm -f symlist.p; exit 1)
|
||||||
cat symlist.p | $(SHELL) $(srcdir)/gensymlist.sh $(top_builddir)/config.h $(KERNEL_HEADER_FILES) >$@ || (rm -f $@; exit 1)
|
cat symlist.p | /bin/sh $(srcdir)/gensymlist.sh $(top_builddir)/config.h $(KERNEL_HEADER_FILES) >$@ || (rm -f $@; exit 1)
|
||||||
rm -f symlist.p
|
rm -f symlist.p
|
||||||
CLEANFILES += symlist.c
|
CLEANFILES += symlist.c
|
||||||
BUILT_SOURCES += symlist.c
|
BUILT_SOURCES += symlist.c
|
||||||
@@ -396,7 +383,7 @@ moddep.lst: syminfo.lst genmoddep.awk video.lst
|
|||||||
platform_DATA += moddep.lst
|
platform_DATA += moddep.lst
|
||||||
CLEANFILES += config.log syminfo.lst moddep.lst
|
CLEANFILES += config.log syminfo.lst moddep.lst
|
||||||
|
|
||||||
$(MOD_FILES): %.mod : genmod.sh moddep.lst %.module$(EXEEXT) build-grub-module-verifier$(BUILD_EXEEXT)
|
$(MOD_FILES): %.mod : genmod.sh moddep.lst %.module$(EXEEXT)
|
||||||
TARGET_OBJ2ELF=@TARGET_OBJ2ELF@ sh $^ $@
|
TARGET_OBJ2ELF=@TARGET_OBJ2ELF@ sh $^ $@
|
||||||
platform_DATA += $(MOD_FILES)
|
platform_DATA += $(MOD_FILES)
|
||||||
platform_DATA += modinfo.sh
|
platform_DATA += modinfo.sh
|
||||||
|
|||||||
+24
-59
@@ -49,20 +49,23 @@ kernel = {
|
|||||||
|
|
||||||
nostrip = emu;
|
nostrip = emu;
|
||||||
|
|
||||||
emu_ldflags = '$(TARGET_INCREMENTAL_LINK)';
|
emu_ldflags = '-Wl,-r,-d';
|
||||||
i386_efi_ldflags = '$(TARGET_INCREMENTAL_LINK)';
|
i386_efi_ldflags = '-Wl,-r,-d';
|
||||||
i386_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
i386_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
x86_64_efi_ldflags = '$(TARGET_INCREMENTAL_LINK)';
|
x86_64_efi_ldflags = '-Wl,-r,-d';
|
||||||
x86_64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
x86_64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
|
|
||||||
ia64_efi_cflags = '-fno-builtin -fpic -minline-int-divide-max-throughput';
|
ia64_efi_cflags = '-fno-builtin -fpic -minline-int-divide-max-throughput';
|
||||||
ia64_efi_ldflags = '$(TARGET_INCREMENTAL_LINK)';
|
ia64_efi_ldflags = '-Wl,-r,-d';
|
||||||
ia64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
ia64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
|
|
||||||
arm_efi_ldflags = '$(TARGET_INCREMENTAL_LINK)';
|
x86_64_xen_cppflags = '$(CPPFLAGS_XEN)';
|
||||||
|
i386_xen_cppflags = '$(CPPFLAGS_XEN)';
|
||||||
|
|
||||||
|
arm_efi_ldflags = '-Wl,-r,-d';
|
||||||
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 = '$(TARGET_INCREMENTAL_LINK)';
|
arm64_efi_ldflags = '-Wl,-r,-d';
|
||||||
arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame';
|
arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame';
|
||||||
|
|
||||||
i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
|
||||||
@@ -90,7 +93,7 @@ kernel = {
|
|||||||
i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
|
||||||
emu_cflags = '$(CFLAGS_GNULIB)';
|
emu_cflags = '$(CFLAGS_GNULIB)';
|
||||||
emu_cppflags = '$(CPPFLAGS_GNULIB)';
|
emu_cppflags = '$(CPPFLAGS_GNULIB)';
|
||||||
arm_uboot_ldflags = '$(TARGET_INCREMENTAL_LINK)';
|
arm_uboot_ldflags = '-Wl,-Ttext=0x08000000';
|
||||||
arm_uboot_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
arm_uboot_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
|
||||||
|
|
||||||
i386_pc_startup = kern/i386/pc/startup.S;
|
i386_pc_startup = kern/i386/pc/startup.S;
|
||||||
@@ -171,20 +174,8 @@ kernel = {
|
|||||||
efi = kern/efi/init.c;
|
efi = kern/efi/init.c;
|
||||||
efi = kern/efi/mm.c;
|
efi = kern/efi/mm.c;
|
||||||
efi = term/efi/console.c;
|
efi = term/efi/console.c;
|
||||||
efi = kern/acpi.c;
|
|
||||||
efi = kern/efi/acpi.c;
|
|
||||||
i386_coreboot = kern/i386/pc/acpi.c;
|
|
||||||
i386_multiboot = kern/i386/pc/acpi.c;
|
|
||||||
i386_coreboot = kern/acpi.c;
|
|
||||||
i386_multiboot = kern/acpi.c;
|
|
||||||
|
|
||||||
x86 = kern/i386/tsc.c;
|
x86 = kern/i386/tsc.c;
|
||||||
x86 = kern/i386/tsc_pit.c;
|
|
||||||
i386_efi = kern/i386/efi/tsc.c;
|
|
||||||
x86_64_efi = kern/i386/efi/tsc.c;
|
|
||||||
i386_efi = kern/i386/tsc_pmtimer.c;
|
|
||||||
i386_coreboot = kern/i386/tsc_pmtimer.c;
|
|
||||||
x86_64_efi = kern/i386/tsc_pmtimer.c;
|
|
||||||
|
|
||||||
i386_efi = kern/i386/efi/init.c;
|
i386_efi = kern/i386/efi/init.c;
|
||||||
i386_efi = bus/pci.c;
|
i386_efi = bus/pci.c;
|
||||||
@@ -196,7 +187,6 @@ kernel = {
|
|||||||
x86_64_efi = bus/pci.c;
|
x86_64_efi = bus/pci.c;
|
||||||
|
|
||||||
xen = kern/i386/tsc.c;
|
xen = kern/i386/tsc.c;
|
||||||
xen = kern/i386/xen/tsc.c;
|
|
||||||
x86_64_xen = kern/x86_64/xen/hypercall.S;
|
x86_64_xen = kern/x86_64/xen/hypercall.S;
|
||||||
i386_xen = kern/i386/xen/hypercall.S;
|
i386_xen = kern/i386/xen/hypercall.S;
|
||||||
xen = kern/xen/init.c;
|
xen = kern/xen/init.c;
|
||||||
@@ -212,10 +202,8 @@ kernel = {
|
|||||||
|
|
||||||
arm_efi = kern/arm/efi/init.c;
|
arm_efi = kern/arm/efi/init.c;
|
||||||
arm_efi = kern/arm/efi/misc.c;
|
arm_efi = kern/arm/efi/misc.c;
|
||||||
arm_efi = kern/efi/fdt.c;
|
|
||||||
|
|
||||||
arm64_efi = kern/arm64/efi/init.c;
|
arm64_efi = kern/arm/efi/init.c;
|
||||||
arm64_efi = kern/efi/fdt.c;
|
|
||||||
|
|
||||||
i386_pc = kern/i386/pc/init.c;
|
i386_pc = kern/i386/pc/init.c;
|
||||||
i386_pc = kern/i386/pc/mmap.c;
|
i386_pc = kern/i386/pc/mmap.c;
|
||||||
@@ -616,6 +604,7 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = lsxen;
|
name = lsxen;
|
||||||
common = commands/xen/lsxen.c;
|
common = commands/xen/lsxen.c;
|
||||||
|
cppflags = '$(CPPFLAGS_XEN)';
|
||||||
|
|
||||||
enable = xen;
|
enable = xen;
|
||||||
};
|
};
|
||||||
@@ -680,8 +669,10 @@ module = {
|
|||||||
name = acpi;
|
name = acpi;
|
||||||
|
|
||||||
common = commands/acpi.c;
|
common = commands/acpi.c;
|
||||||
i386_pc = kern/acpi.c;
|
efi = commands/efi/acpi.c;
|
||||||
i386_pc = kern/i386/pc/acpi.c;
|
i386_pc = commands/i386/pc/acpi.c;
|
||||||
|
i386_coreboot = commands/i386/pc/acpi.c;
|
||||||
|
i386_multiboot = commands/i386/pc/acpi.c;
|
||||||
|
|
||||||
enable = efi;
|
enable = efi;
|
||||||
enable = i386_pc;
|
enable = i386_pc;
|
||||||
@@ -834,6 +825,7 @@ module = {
|
|||||||
i386_coreboot = lib/i386/halt.c;
|
i386_coreboot = lib/i386/halt.c;
|
||||||
i386_qemu = lib/i386/halt.c;
|
i386_qemu = lib/i386/halt.c;
|
||||||
xen = lib/xen/halt.c;
|
xen = lib/xen/halt.c;
|
||||||
|
xen_cppflags = '$(CPPFLAGS_XEN)';
|
||||||
efi = lib/efi/halt.c;
|
efi = lib/efi/halt.c;
|
||||||
ieee1275 = lib/ieee1275/halt.c;
|
ieee1275 = lib/ieee1275/halt.c;
|
||||||
emu = lib/emu/halt.c;
|
emu = lib/emu/halt.c;
|
||||||
@@ -854,6 +846,7 @@ module = {
|
|||||||
mips_loongson = lib/mips/loongson/reboot.c;
|
mips_loongson = lib/mips/loongson/reboot.c;
|
||||||
mips_qemu_mips = lib/mips/qemu_mips/reboot.c;
|
mips_qemu_mips = lib/mips/qemu_mips/reboot.c;
|
||||||
xen = lib/xen/reboot.c;
|
xen = lib/xen/reboot.c;
|
||||||
|
xen_cppflags = '$(CPPFLAGS_XEN)';
|
||||||
uboot = lib/uboot/reboot.c;
|
uboot = lib/uboot/reboot.c;
|
||||||
common = commands/reboot.c;
|
common = commands/reboot.c;
|
||||||
};
|
};
|
||||||
@@ -1533,7 +1526,7 @@ module = {
|
|||||||
i386_xen = lib/i386/xen/relocator.S;
|
i386_xen = lib/i386/xen/relocator.S;
|
||||||
x86_64_xen = lib/x86_64/xen/relocator.S;
|
x86_64_xen = lib/x86_64/xen/relocator.S;
|
||||||
xen = lib/i386/relocator_common_c.c;
|
xen = lib/i386/relocator_common_c.c;
|
||||||
x86_64_efi = lib/x86_64/efi/relocator.c;
|
xen_cppflags = '$(CPPFLAGS_XEN)';
|
||||||
|
|
||||||
extra_dist = lib/i386/relocator_common.S;
|
extra_dist = lib/i386/relocator_common.S;
|
||||||
extra_dist = kern/powerpc/cache_flush.S;
|
extra_dist = kern/powerpc/cache_flush.S;
|
||||||
@@ -1554,6 +1547,7 @@ module = {
|
|||||||
sparc64_ieee1275 = lib/ieee1275/cmos.c;
|
sparc64_ieee1275 = lib/ieee1275/cmos.c;
|
||||||
powerpc_ieee1275 = lib/ieee1275/cmos.c;
|
powerpc_ieee1275 = lib/ieee1275/cmos.c;
|
||||||
xen = lib/xen/datetime.c;
|
xen = lib/xen/datetime.c;
|
||||||
|
xen_cppflags = '$(CPPFLAGS_XEN)';
|
||||||
|
|
||||||
mips_arc = lib/arc/datetime.c;
|
mips_arc = lib/arc/datetime.c;
|
||||||
enable = noemu;
|
enable = noemu;
|
||||||
@@ -1663,6 +1657,7 @@ module = {
|
|||||||
name = linux;
|
name = linux;
|
||||||
x86 = loader/i386/linux.c;
|
x86 = loader/i386/linux.c;
|
||||||
xen = loader/i386/xen.c;
|
xen = loader/i386/xen.c;
|
||||||
|
xen_cppflags = '$(CPPFLAGS_XEN)';
|
||||||
i386_pc = lib/i386/pc/vesa_modes_table.c;
|
i386_pc = lib/i386/pc/vesa_modes_table.c;
|
||||||
mips = loader/mips/linux.c;
|
mips = loader/mips/linux.c;
|
||||||
powerpc_ieee1275 = loader/powerpc/ieee1275/linux.c;
|
powerpc_ieee1275 = loader/powerpc/ieee1275/linux.c;
|
||||||
@@ -1670,6 +1665,7 @@ module = {
|
|||||||
ia64_efi = loader/ia64/efi/linux.c;
|
ia64_efi = loader/ia64/efi/linux.c;
|
||||||
arm = loader/arm/linux.c;
|
arm = loader/arm/linux.c;
|
||||||
arm64 = loader/arm64/linux.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;
|
||||||
@@ -1678,8 +1674,7 @@ module = {
|
|||||||
module = {
|
module = {
|
||||||
name = fdt;
|
name = fdt;
|
||||||
arm64 = loader/arm64/fdt.c;
|
arm64 = loader/arm64/fdt.c;
|
||||||
common = lib/fdt.c;
|
enable = arm64;
|
||||||
enable = fdt;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
@@ -1688,32 +1683,7 @@ module = {
|
|||||||
x86 = loader/i386/xnu.c;
|
x86 = loader/i386/xnu.c;
|
||||||
x86 = loader/xnu.c;
|
x86 = loader/xnu.c;
|
||||||
|
|
||||||
/* Code is pretty generic but relies on RNG which
|
enable = x86;
|
||||||
is available only on few platforms. It's not a
|
|
||||||
big deal as xnu needs ACPI anyway and we have
|
|
||||||
RNG on all platforms with ACPI.
|
|
||||||
*/
|
|
||||||
enable = i386_multiboot;
|
|
||||||
enable = i386_coreboot;
|
|
||||||
enable = i386_pc;
|
|
||||||
enable = i386_efi;
|
|
||||||
enable = x86_64_efi;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
|
||||||
name = random;
|
|
||||||
x86 = lib/i386/random.c;
|
|
||||||
common = lib/random.c;
|
|
||||||
|
|
||||||
i386_multiboot = kern/i386/tsc_pmtimer.c;
|
|
||||||
i386_coreboot = kern/i386/tsc_pmtimer.c;
|
|
||||||
i386_pc = kern/i386/tsc_pmtimer.c;
|
|
||||||
|
|
||||||
enable = i386_multiboot;
|
|
||||||
enable = i386_coreboot;
|
|
||||||
enable = i386_pc;
|
|
||||||
enable = i386_efi;
|
|
||||||
enable = x86_64_efi;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
@@ -1961,11 +1931,6 @@ module = {
|
|||||||
common = tests/example_functional_test.c;
|
common = tests/example_functional_test.c;
|
||||||
};
|
};
|
||||||
|
|
||||||
module = {
|
|
||||||
name = strtoull_test;
|
|
||||||
common = tests/strtoull_test.c;
|
|
||||||
};
|
|
||||||
|
|
||||||
module = {
|
module = {
|
||||||
name = setjmp_test;
|
name = setjmp_test;
|
||||||
common = tests/setjmp_test.c;
|
common = tests/setjmp_test.c;
|
||||||
|
|||||||
+11
-60
@@ -29,7 +29,6 @@
|
|||||||
#include <grub/loader.h>
|
#include <grub/loader.h>
|
||||||
#include <grub/cs5536.h>
|
#include <grub/cs5536.h>
|
||||||
#include <grub/disk.h>
|
#include <grub/disk.h>
|
||||||
#include <grub/cache.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
@@ -338,21 +337,6 @@ struct grub_ehci
|
|||||||
|
|
||||||
static struct grub_ehci *ehci;
|
static struct grub_ehci *ehci;
|
||||||
|
|
||||||
static void
|
|
||||||
sync_all_caches (struct grub_ehci *e)
|
|
||||||
{
|
|
||||||
if (!e)
|
|
||||||
return;
|
|
||||||
if (e->td_virt)
|
|
||||||
grub_arch_sync_dma_caches (e->td_virt, sizeof (struct grub_ehci_td) *
|
|
||||||
GRUB_EHCI_N_TD);
|
|
||||||
if (e->qh_virt)
|
|
||||||
grub_arch_sync_dma_caches (e->qh_virt, sizeof (struct grub_ehci_qh) *
|
|
||||||
GRUB_EHCI_N_QH);
|
|
||||||
if (e->framelist_virt)
|
|
||||||
grub_arch_sync_dma_caches (e->framelist_virt, 4096);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* EHCC registers access functions */
|
/* EHCC registers access functions */
|
||||||
static inline grub_uint32_t
|
static inline grub_uint32_t
|
||||||
grub_ehci_ehcc_read32 (struct grub_ehci *e, grub_uint32_t addr)
|
grub_ehci_ehcc_read32 (struct grub_ehci *e, grub_uint32_t addr)
|
||||||
@@ -453,8 +437,6 @@ grub_ehci_reset (struct grub_ehci *e)
|
|||||||
{
|
{
|
||||||
grub_uint64_t maxtime;
|
grub_uint64_t maxtime;
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND,
|
grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND,
|
||||||
GRUB_EHCI_CMD_HC_RESET
|
GRUB_EHCI_CMD_HC_RESET
|
||||||
| grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND));
|
| grub_ehci_oper_read32 (e, GRUB_EHCI_COMMAND));
|
||||||
@@ -858,8 +840,6 @@ grub_ehci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
|
|||||||
e->next = ehci;
|
e->next = ehci;
|
||||||
ehci = e;
|
ehci = e;
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: OK at all\n");
|
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: OK at all\n");
|
||||||
|
|
||||||
grub_dprintf ("ehci",
|
grub_dprintf ("ehci",
|
||||||
@@ -1040,7 +1020,6 @@ grub_ehci_find_qh (struct grub_ehci *e, grub_usb_transfer_t transfer)
|
|||||||
/* Found proper existing (and linked) QH, do setup of QH */
|
/* Found proper existing (and linked) QH, do setup of QH */
|
||||||
grub_dprintf ("ehci", "find_qh: found, QH=%p\n", qh_iter);
|
grub_dprintf ("ehci", "find_qh: found, QH=%p\n", qh_iter);
|
||||||
grub_ehci_setup_qh (qh_iter, transfer);
|
grub_ehci_setup_qh (qh_iter, transfer);
|
||||||
sync_all_caches (e);
|
|
||||||
return qh_iter;
|
return qh_iter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1142,7 +1121,7 @@ grub_ehci_free_tds (struct grub_ehci *e, grub_ehci_td_t td,
|
|||||||
token = grub_le_to_cpu32 (td->token);
|
token = grub_le_to_cpu32 (td->token);
|
||||||
to_transfer = (token & GRUB_EHCI_TOTAL_MASK) >> GRUB_EHCI_TOTAL_OFF;
|
to_transfer = (token & GRUB_EHCI_TOTAL_MASK) >> GRUB_EHCI_TOTAL_OFF;
|
||||||
|
|
||||||
/* Check state of TD - if it did not transfer
|
/* Check state of TD - if it did not transfered
|
||||||
* whole data then set last_trans - it should be last executed TD
|
* whole data then set last_trans - it should be last executed TD
|
||||||
* in case when something went wrong. */
|
* in case when something went wrong. */
|
||||||
if (transfer && (td->size != to_transfer))
|
if (transfer && (td->size != to_transfer))
|
||||||
@@ -1310,28 +1289,16 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
grub_ehci_td_t td_prev = NULL;
|
grub_ehci_td_t td_prev = NULL;
|
||||||
int i;
|
int i;
|
||||||
struct grub_ehci_transfer_controller_data *cdata;
|
struct grub_ehci_transfer_controller_data *cdata;
|
||||||
grub_uint32_t status;
|
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
/* Check if EHCI is running and AL is enabled */
|
/* Check if EHCI is running and AL is enabled */
|
||||||
status = grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS);
|
if ((grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS)
|
||||||
if ((status & GRUB_EHCI_ST_HC_HALTED) != 0)
|
& GRUB_EHCI_ST_HC_HALTED) != 0)
|
||||||
/* XXX: Fix it: Currently we don't do anything to restart EHCI */
|
/* XXX: Fix it: Currently we don't do anything to restart EHCI */
|
||||||
{
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
grub_dprintf ("ehci", "setup_transfer: halted, status = 0x%x\n",
|
if ((grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS)
|
||||||
status);
|
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
|
||||||
}
|
|
||||||
status = grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS);
|
|
||||||
if ((status
|
|
||||||
& (GRUB_EHCI_ST_AS_STATUS | GRUB_EHCI_ST_PS_STATUS)) == 0)
|
& (GRUB_EHCI_ST_AS_STATUS | GRUB_EHCI_ST_PS_STATUS)) == 0)
|
||||||
/* XXX: Fix it: Currently we don't do anything to restart EHCI */
|
/* XXX: Fix it: Currently we don't do anything to restart EHCI */
|
||||||
{
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
grub_dprintf ("ehci", "setup_transfer: no AS/PS, status = 0x%x\n",
|
|
||||||
status);
|
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Allocate memory for controller transfer data. */
|
/* Allocate memory for controller transfer data. */
|
||||||
cdata = grub_malloc (sizeof (*cdata));
|
cdata = grub_malloc (sizeof (*cdata));
|
||||||
@@ -1343,7 +1310,6 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
cdata->qh_virt = grub_ehci_find_qh (e, transfer);
|
cdata->qh_virt = grub_ehci_find_qh (e, transfer);
|
||||||
if (!cdata->qh_virt)
|
if (!cdata->qh_virt)
|
||||||
{
|
{
|
||||||
grub_dprintf ("ehci", "setup_transfer: no QH\n");
|
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
}
|
}
|
||||||
@@ -1353,7 +1319,6 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
cdata->td_alt_virt = grub_ehci_alloc_td (e);
|
cdata->td_alt_virt = grub_ehci_alloc_td (e);
|
||||||
if (!cdata->td_alt_virt)
|
if (!cdata->td_alt_virt)
|
||||||
{
|
{
|
||||||
grub_dprintf ("ehci", "setup_transfer: no TDs\n");
|
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
}
|
}
|
||||||
@@ -1380,7 +1345,6 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
grub_ehci_free_tds (e, cdata->td_first_virt, NULL, &actual);
|
grub_ehci_free_tds (e, cdata->td_first_virt, NULL, &actual);
|
||||||
|
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
grub_dprintf ("ehci", "setup_transfer: no TD\n");
|
|
||||||
return GRUB_USB_ERR_INTERNAL;
|
return GRUB_USB_ERR_INTERNAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1422,8 +1386,6 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
|
|||||||
* i.e. reset token */
|
* i.e. reset token */
|
||||||
cdata->qh_virt->td_overlay.token = grub_cpu_to_le32_compile_time (0);
|
cdata->qh_virt->td_overlay.token = grub_cpu_to_le32_compile_time (0);
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
/* Finito */
|
/* Finito */
|
||||||
transfer->controller_data = cdata;
|
transfer->controller_data = cdata;
|
||||||
|
|
||||||
@@ -1472,8 +1434,6 @@ grub_ehci_parse_notrun (grub_usb_controller_t dev,
|
|||||||
grub_ehci_free_td (e, cdata->td_alt_virt);
|
grub_ehci_free_td (e, cdata->td_alt_virt);
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
/* Additionally, do something with EHCI to make it running (what?) */
|
/* Additionally, do something with EHCI to make it running (what?) */
|
||||||
/* Try enable EHCI and AL */
|
/* Try enable EHCI and AL */
|
||||||
grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND,
|
grub_ehci_oper_write32 (e, GRUB_EHCI_COMMAND,
|
||||||
@@ -1509,8 +1469,6 @@ grub_ehci_parse_halt (grub_usb_controller_t dev,
|
|||||||
grub_ehci_free_td (e, cdata->td_alt_virt);
|
grub_ehci_free_td (e, cdata->td_alt_virt);
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
/* Evaluation of error code - currently we don't have GRUB USB error
|
/* Evaluation of error code - currently we don't have GRUB USB error
|
||||||
* codes for some EHCI states, GRUB_USB_ERR_DATA is used for them.
|
* codes for some EHCI states, GRUB_USB_ERR_DATA is used for them.
|
||||||
* Order of evaluation is critical, specially bubble/stall. */
|
* Order of evaluation is critical, specially bubble/stall. */
|
||||||
@@ -1544,8 +1502,6 @@ grub_ehci_parse_success (grub_usb_controller_t dev,
|
|||||||
grub_ehci_free_td (e, cdata->td_alt_virt);
|
grub_ehci_free_td (e, cdata->td_alt_virt);
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
return GRUB_USB_ERR_NONE;
|
return GRUB_USB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1559,8 +1515,6 @@ grub_ehci_check_transfer (grub_usb_controller_t dev,
|
|||||||
transfer->controller_data;
|
transfer->controller_data;
|
||||||
grub_uint32_t token, token_ftd;
|
grub_uint32_t token, token_ftd;
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
grub_dprintf ("ehci",
|
grub_dprintf ("ehci",
|
||||||
"check_transfer: EHCI STATUS=%08x, cdata=%p, qh=%p\n",
|
"check_transfer: EHCI STATUS=%08x, cdata=%p, qh=%p\n",
|
||||||
grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS),
|
grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS),
|
||||||
@@ -1627,9 +1581,6 @@ grub_ehci_cancel_transfer (grub_usb_controller_t dev,
|
|||||||
int i;
|
int i;
|
||||||
grub_uint64_t maxtime;
|
grub_uint64_t maxtime;
|
||||||
grub_uint32_t qh_phys;
|
grub_uint32_t qh_phys;
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
grub_uint32_t interrupt =
|
grub_uint32_t interrupt =
|
||||||
cdata->qh_virt->ep_cap & GRUB_EHCI_SMASK_MASK;
|
cdata->qh_virt->ep_cap & GRUB_EHCI_SMASK_MASK;
|
||||||
|
|
||||||
@@ -1649,7 +1600,6 @@ grub_ehci_cancel_transfer (grub_usb_controller_t dev,
|
|||||||
grub_ehci_free_tds (e, cdata->td_first_virt, transfer, &actual);
|
grub_ehci_free_tds (e, cdata->td_first_virt, transfer, &actual);
|
||||||
grub_ehci_free_td (e, cdata->td_alt_virt);
|
grub_ehci_free_td (e, cdata->td_alt_virt);
|
||||||
grub_free (cdata);
|
grub_free (cdata);
|
||||||
sync_all_caches (e);
|
|
||||||
grub_dprintf ("ehci", "cancel_transfer: end - EHCI not running\n");
|
grub_dprintf ("ehci", "cancel_transfer: end - EHCI not running\n");
|
||||||
return GRUB_USB_ERR_NONE;
|
return GRUB_USB_ERR_NONE;
|
||||||
}
|
}
|
||||||
@@ -1672,8 +1622,6 @@ grub_ehci_cancel_transfer (grub_usb_controller_t dev,
|
|||||||
/* Unlink QH from AL */
|
/* Unlink QH from AL */
|
||||||
e->qh_virt[i].qh_hptr = cdata->qh_virt->qh_hptr;
|
e->qh_virt[i].qh_hptr = cdata->qh_virt->qh_hptr;
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
/* If this is an interrupt transfer, we just wait for the periodic
|
/* If this is an interrupt transfer, we just wait for the periodic
|
||||||
* schedule to advance a few times and then assume that the EHCI
|
* schedule to advance a few times and then assume that the EHCI
|
||||||
* controller has read the updated QH. */
|
* controller has read the updated QH. */
|
||||||
@@ -1728,8 +1676,6 @@ grub_ehci_cancel_transfer (grub_usb_controller_t dev,
|
|||||||
|
|
||||||
grub_dprintf ("ehci", "cancel_transfer: end\n");
|
grub_dprintf ("ehci", "cancel_transfer: end\n");
|
||||||
|
|
||||||
sync_all_caches (e);
|
|
||||||
|
|
||||||
return GRUB_USB_ERR_NONE;
|
return GRUB_USB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1831,6 +1777,11 @@ grub_ehci_detect_dev (grub_usb_controller_t dev, int port, int *changed)
|
|||||||
|
|
||||||
status = grub_ehci_port_read (e, port);
|
status = grub_ehci_port_read (e, port);
|
||||||
|
|
||||||
|
grub_dprintf ("ehci", "detect_dev: EHCI STATUS: %08x\n",
|
||||||
|
grub_ehci_oper_read32 (e, GRUB_EHCI_STATUS));
|
||||||
|
grub_dprintf ("ehci", "detect_dev: iobase=%p, port=%d, status=0x%02x\n",
|
||||||
|
e->iobase, port, status);
|
||||||
|
|
||||||
/* Connect Status Change bit - it detects change of connection */
|
/* Connect Status Change bit - it detects change of connection */
|
||||||
if (status & GRUB_EHCI_PORT_CONNECT_CH)
|
if (status & GRUB_EHCI_PORT_CONNECT_CH)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -24,7 +24,6 @@
|
|||||||
#include <grub/usb.h>
|
#include <grub/usb.h>
|
||||||
#include <grub/usbtrans.h>
|
#include <grub/usbtrans.h>
|
||||||
#include <grub/time.h>
|
#include <grub/time.h>
|
||||||
#include <grub/cache.h>
|
|
||||||
|
|
||||||
|
|
||||||
static inline unsigned int
|
static inline unsigned int
|
||||||
@@ -102,8 +101,6 @@ grub_usb_control_msg (grub_usb_device_t dev,
|
|||||||
data_addr = grub_dma_get_phys (data_chunk);
|
data_addr = grub_dma_get_phys (data_chunk);
|
||||||
grub_memcpy ((char *) data, data_in, size);
|
grub_memcpy ((char *) data, data_in, size);
|
||||||
|
|
||||||
grub_arch_sync_dma_caches (data, size);
|
|
||||||
|
|
||||||
grub_dprintf ("usb",
|
grub_dprintf ("usb",
|
||||||
"control: reqtype=0x%02x req=0x%02x val=0x%02x idx=0x%02x size=%lu\n",
|
"control: reqtype=0x%02x req=0x%02x val=0x%02x idx=0x%02x size=%lu\n",
|
||||||
reqtype, request, value, index, (unsigned long)size);
|
reqtype, request, value, index, (unsigned long)size);
|
||||||
@@ -164,8 +161,6 @@ grub_usb_control_msg (grub_usb_device_t dev,
|
|||||||
setupdata->value = value;
|
setupdata->value = value;
|
||||||
setupdata->index = index;
|
setupdata->index = index;
|
||||||
setupdata->length = size;
|
setupdata->length = size;
|
||||||
grub_arch_sync_dma_caches (setupdata, sizeof (*setupdata));
|
|
||||||
|
|
||||||
transfer->transactions[0].size = sizeof (*setupdata);
|
transfer->transactions[0].size = sizeof (*setupdata);
|
||||||
transfer->transactions[0].pid = GRUB_USB_TRANSFER_TYPE_SETUP;
|
transfer->transactions[0].pid = GRUB_USB_TRANSFER_TYPE_SETUP;
|
||||||
transfer->transactions[0].data = setupdata_addr;
|
transfer->transactions[0].data = setupdata_addr;
|
||||||
@@ -207,13 +202,11 @@ grub_usb_control_msg (grub_usb_device_t dev,
|
|||||||
grub_free (transfer->transactions);
|
grub_free (transfer->transactions);
|
||||||
|
|
||||||
grub_free (transfer);
|
grub_free (transfer);
|
||||||
|
grub_dma_free (data_chunk);
|
||||||
grub_dma_free (setupdata_chunk);
|
grub_dma_free (setupdata_chunk);
|
||||||
|
|
||||||
grub_arch_sync_dma_caches (data, size0);
|
|
||||||
grub_memcpy (data_in, (char *) data, size0);
|
grub_memcpy (data_in, (char *) data, size0);
|
||||||
|
|
||||||
grub_dma_free (data_chunk);
|
|
||||||
|
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -243,10 +236,7 @@ grub_usb_bulk_setup_readwrite (grub_usb_device_t dev,
|
|||||||
data = grub_dma_get_virt (data_chunk);
|
data = grub_dma_get_virt (data_chunk);
|
||||||
data_addr = grub_dma_get_phys (data_chunk);
|
data_addr = grub_dma_get_phys (data_chunk);
|
||||||
if (type == GRUB_USB_TRANSFER_TYPE_OUT)
|
if (type == GRUB_USB_TRANSFER_TYPE_OUT)
|
||||||
{
|
grub_memcpy ((char *) data, data_in, size);
|
||||||
grub_memcpy ((char *) data, data_in, size);
|
|
||||||
grub_arch_sync_dma_caches (data, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Create a transfer. */
|
/* Create a transfer. */
|
||||||
transfer = grub_malloc (sizeof (struct grub_usb_transfer));
|
transfer = grub_malloc (sizeof (struct grub_usb_transfer));
|
||||||
@@ -316,13 +306,9 @@ grub_usb_bulk_finish_readwrite (grub_usb_transfer_t transfer)
|
|||||||
dev->toggle[transfer->endpoint] = toggle;
|
dev->toggle[transfer->endpoint] = toggle;
|
||||||
|
|
||||||
if (transfer->dir == GRUB_USB_TRANSFER_TYPE_IN)
|
if (transfer->dir == GRUB_USB_TRANSFER_TYPE_IN)
|
||||||
{
|
grub_memcpy (transfer->data, (void *)
|
||||||
grub_arch_sync_dma_caches (grub_dma_get_virt (transfer->data_chunk),
|
grub_dma_get_virt (transfer->data_chunk),
|
||||||
transfer->size + 1);
|
transfer->size + 1);
|
||||||
grub_memcpy (transfer->data, (void *)
|
|
||||||
grub_dma_get_virt (transfer->data_chunk),
|
|
||||||
transfer->size + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_free (transfer->transactions);
|
grub_free (transfer->transactions);
|
||||||
grub_dma_free (transfer->data_chunk);
|
grub_dma_free (transfer->data_chunk);
|
||||||
|
|||||||
@@ -61,6 +61,18 @@ static const struct grub_arg_option options[] = {
|
|||||||
{0, 0, 0, 0, 0, 0}
|
{0, 0, 0, 0, 0, 0}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* Simple checksum by summing all bytes. Used by ACPI and SMBIOS. */
|
||||||
|
grub_uint8_t
|
||||||
|
grub_byte_checksum (void *base, grub_size_t size)
|
||||||
|
{
|
||||||
|
grub_uint8_t *ptr;
|
||||||
|
grub_uint8_t ret = 0;
|
||||||
|
for (ptr = (grub_uint8_t *) base; ptr < ((grub_uint8_t *) base) + size;
|
||||||
|
ptr++)
|
||||||
|
ret += *ptr;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/* rev1 is 1 if ACPIv1 is to be generated, 0 otherwise.
|
/* rev1 is 1 if ACPIv1 is to be generated, 0 otherwise.
|
||||||
rev2 contains the revision of ACPIv2+ to generate or 0 if none. */
|
rev2 contains the revision of ACPIv2+ to generate or 0 if none. */
|
||||||
static int rev1, rev2;
|
static int rev1, rev2;
|
||||||
@@ -593,9 +605,6 @@ grub_cmd_acpi (struct grub_extcmd_context *ctxt, int argc, char **args)
|
|||||||
if (! table->addr)
|
if (! table->addr)
|
||||||
{
|
{
|
||||||
free_tables ();
|
free_tables ();
|
||||||
grub_free (exclude);
|
|
||||||
grub_free (load_only);
|
|
||||||
grub_free (table);
|
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
table->next = acpi_tables;
|
table->next = acpi_tables;
|
||||||
@@ -761,10 +770,10 @@ grub_cmd_acpi (struct grub_extcmd_context *ctxt, int argc, char **args)
|
|||||||
struct grub_efi_guid acpi = GRUB_EFI_ACPI_TABLE_GUID;
|
struct grub_efi_guid acpi = GRUB_EFI_ACPI_TABLE_GUID;
|
||||||
struct grub_efi_guid acpi20 = GRUB_EFI_ACPI_20_TABLE_GUID;
|
struct grub_efi_guid acpi20 = GRUB_EFI_ACPI_20_TABLE_GUID;
|
||||||
|
|
||||||
efi_call_2 (grub_efi_system_table->boot_services->install_configuration_table,
|
grub_efi_system_table->boot_services->install_configuration_table
|
||||||
&acpi20, grub_acpi_get_rsdpv2 ());
|
(&acpi20, grub_acpi_get_rsdpv2 ());
|
||||||
efi_call_2 (grub_efi_system_table->boot_services->install_configuration_table,
|
grub_efi_system_table->boot_services->install_configuration_table
|
||||||
&acpi, grub_acpi_get_rsdpv1 ());
|
(&acpi, grub_acpi_get_rsdpv1 ());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
@@ -26,8 +26,6 @@
|
|||||||
|
|
||||||
#define grub_dprintf(cond, args...) printf ( args )
|
#define grub_dprintf(cond, args...) printf ( args )
|
||||||
#define grub_printf printf
|
#define grub_printf printf
|
||||||
#define grub_util_fopen fopen
|
|
||||||
#define grub_memcmp memcmp
|
|
||||||
typedef uint64_t grub_uint64_t;
|
typedef uint64_t grub_uint64_t;
|
||||||
typedef uint32_t grub_uint32_t;
|
typedef uint32_t grub_uint32_t;
|
||||||
typedef uint16_t grub_uint16_t;
|
typedef uint16_t grub_uint16_t;
|
||||||
@@ -248,7 +246,6 @@ 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_CREATE_DWORD_FIELD:
|
|
||||||
case GRUB_ACPI_OPCODE_CREATE_WORD_FIELD:
|
case GRUB_ACPI_OPCODE_CREATE_WORD_FIELD:
|
||||||
case GRUB_ACPI_OPCODE_CREATE_BYTE_FIELD:
|
case GRUB_ACPI_OPCODE_CREATE_BYTE_FIELD:
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -140,13 +140,10 @@ grub_cmd_cat (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
|
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (utcount)
|
grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT);
|
||||||
{
|
for (j = 0; j < utcount; j++)
|
||||||
grub_setcolorstate (GRUB_TERM_COLOR_HIGHLIGHT);
|
grub_printf ("<%x>", (unsigned int) utbuf[j]);
|
||||||
for (j = 0; j < utcount; j++)
|
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
|
||||||
grub_printf ("<%x>", (unsigned int) utbuf[j]);
|
|
||||||
grub_setcolorstate (GRUB_TERM_COLOR_STANDARD);
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_xputs ("\n");
|
grub_xputs ("\n");
|
||||||
grub_refresh ();
|
grub_refresh ();
|
||||||
|
|||||||
File renamed without changes.
@@ -51,7 +51,7 @@ grub_cmd_lsefimmap (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
|
|
||||||
grub_printf
|
grub_printf
|
||||||
("Type Physical start - end #Pages "
|
("Type Physical start - end #Pages "
|
||||||
" Size Attributes\n");
|
" Size Attributes\n");
|
||||||
memory_map_end = ADD_MEMORY_DESCRIPTOR (memory_map, map_size);
|
memory_map_end = ADD_MEMORY_DESCRIPTOR (memory_map, map_size);
|
||||||
for (desc = memory_map;
|
for (desc = memory_map;
|
||||||
desc < memory_map_end;
|
desc < memory_map_end;
|
||||||
@@ -74,8 +74,7 @@ grub_cmd_lsefimmap (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
"ACPI-nvs",
|
"ACPI-nvs",
|
||||||
"MMIO ",
|
"MMIO ",
|
||||||
"IO-ports",
|
"IO-ports",
|
||||||
"PAL-code",
|
"PAL-code"
|
||||||
"persist ",
|
|
||||||
};
|
};
|
||||||
if (desc->type < ARRAY_SIZE (types_str))
|
if (desc->type < ARRAY_SIZE (types_str))
|
||||||
grub_printf ("%s ", types_str[desc->type]);
|
grub_printf ("%s ", types_str[desc->type]);
|
||||||
@@ -88,29 +87,21 @@ grub_cmd_lsefimmap (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
desc->physical_start + (desc->num_pages << 12) - 1,
|
desc->physical_start + (desc->num_pages << 12) - 1,
|
||||||
desc->num_pages);
|
desc->num_pages);
|
||||||
|
|
||||||
size = desc->num_pages << 12; /* 4 KiB page size */
|
size = desc->num_pages;
|
||||||
/*
|
size <<= (12 - 10);
|
||||||
* Since size is a multiple of 4 KiB, no need to handle units
|
if (size < 1024)
|
||||||
* of just Bytes (which would use a mask of 0x3ff).
|
grub_printf (" %4" PRIuGRUB_UINT64_T "KB", size);
|
||||||
*
|
|
||||||
* 14 characters would support the largest possible number of 4 KiB
|
|
||||||
* pages that are not a multiple of larger units (e.g., MiB):
|
|
||||||
* 17592186044415 (0xffffff_fffff000), but that uses a lot of
|
|
||||||
* whitespace for a rare case. 6 characters usually suffices;
|
|
||||||
* columns will be off if not, but this is preferable to rounding.
|
|
||||||
*/
|
|
||||||
if (size & 0xfffff)
|
|
||||||
grub_printf (" %6" PRIuGRUB_UINT64_T "KiB", size >> 10);
|
|
||||||
else if (size & 0x3fffffff)
|
|
||||||
grub_printf (" %6" PRIuGRUB_UINT64_T "MiB", size >> 20);
|
|
||||||
else if (size & 0xffffffffff)
|
|
||||||
grub_printf (" %6" PRIuGRUB_UINT64_T "GiB", size >> 30);
|
|
||||||
else if (size & 0x3ffffffffffff)
|
|
||||||
grub_printf (" %6" PRIuGRUB_UINT64_T "TiB", size >> 40);
|
|
||||||
else if (size & 0xfffffffffffffff)
|
|
||||||
grub_printf (" %6" PRIuGRUB_UINT64_T "PiB", size >> 50);
|
|
||||||
else
|
else
|
||||||
grub_printf (" %6" PRIuGRUB_UINT64_T "EiB", size >> 60);
|
{
|
||||||
|
size /= 1024;
|
||||||
|
if (size < 1024)
|
||||||
|
grub_printf (" %4" PRIuGRUB_UINT64_T "MB", size);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
size /= 1024;
|
||||||
|
grub_printf (" %4" PRIuGRUB_UINT64_T "GB", size);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
attr = desc->attribute;
|
attr = desc->attribute;
|
||||||
if (attr & GRUB_EFI_MEMORY_RUNTIME)
|
if (attr & GRUB_EFI_MEMORY_RUNTIME)
|
||||||
@@ -131,12 +122,6 @@ grub_cmd_lsefimmap (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
grub_printf (" RP");
|
grub_printf (" RP");
|
||||||
if (attr & GRUB_EFI_MEMORY_XP)
|
if (attr & GRUB_EFI_MEMORY_XP)
|
||||||
grub_printf (" XP");
|
grub_printf (" XP");
|
||||||
if (attr & GRUB_EFI_MEMORY_NV)
|
|
||||||
grub_printf (" NV");
|
|
||||||
if (attr & GRUB_EFI_MEMORY_MORE_RELIABLE)
|
|
||||||
grub_printf (" MR");
|
|
||||||
if (attr & GRUB_EFI_MEMORY_RO)
|
|
||||||
grub_printf (" RO");
|
|
||||||
|
|
||||||
grub_printf ("\n");
|
grub_printf ("\n");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,20 +37,10 @@ static const struct guid_mapping guid_mappings[] =
|
|||||||
{
|
{
|
||||||
{ GRUB_EFI_ACPI_20_TABLE_GUID, "ACPI-2.0"},
|
{ GRUB_EFI_ACPI_20_TABLE_GUID, "ACPI-2.0"},
|
||||||
{ GRUB_EFI_ACPI_TABLE_GUID, "ACPI-1.0"},
|
{ GRUB_EFI_ACPI_TABLE_GUID, "ACPI-1.0"},
|
||||||
{ GRUB_EFI_CRC32_GUIDED_SECTION_EXTRACTION_GUID,
|
|
||||||
"CRC32 GUIDED SECTION EXTRACTION"},
|
|
||||||
{ GRUB_EFI_DEBUG_IMAGE_INFO_TABLE_GUID, "DEBUG IMAGE INFO"},
|
|
||||||
{ GRUB_EFI_DXE_SERVICES_TABLE_GUID, "DXE SERVICES"},
|
|
||||||
{ GRUB_EFI_HCDP_TABLE_GUID, "HCDP"},
|
|
||||||
{ GRUB_EFI_HOB_LIST_GUID, "HOB LIST"},
|
|
||||||
{ GRUB_EFI_LZMA_CUSTOM_DECOMPRESS_GUID, "LZMA CUSTOM DECOMPRESS"},
|
|
||||||
{ GRUB_EFI_MEMORY_TYPE_INFORMATION_GUID, "MEMORY TYPE INFO"},
|
|
||||||
{ GRUB_EFI_MPS_TABLE_GUID, "MPS"},
|
|
||||||
{ GRUB_EFI_SAL_TABLE_GUID, "SAL"},
|
{ GRUB_EFI_SAL_TABLE_GUID, "SAL"},
|
||||||
{ GRUB_EFI_SMBIOS_TABLE_GUID, "SMBIOS"},
|
{ GRUB_EFI_SMBIOS_TABLE_GUID, "SMBIOS"},
|
||||||
{ GRUB_EFI_SYSTEM_RESOURCE_TABLE_GUID, "SYSTEM RESOURCE TABLE"},
|
{ GRUB_EFI_MPS_TABLE_GUID, "MPS"},
|
||||||
{ GRUB_EFI_TIANO_CUSTOM_DECOMPRESS_GUID, "TIANO CUSTOM DECOMPRESS"},
|
{ GRUB_EFI_HCDP_TABLE_GUID, "HCDP"}
|
||||||
{ GRUB_EFI_TSC_FREQUENCY_GUID, "TSC FREQUENCY"},
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
|
|||||||
@@ -328,7 +328,6 @@ grub_cmd_hdparm (grub_extcmd_context_t ctxt, int argc, char **args)
|
|||||||
ata = ((struct grub_scsi *) disk->data)->data;
|
ata = ((struct grub_scsi *) disk->data)->data;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
/* FALLTHROUGH */
|
|
||||||
default:
|
default:
|
||||||
grub_disk_close (disk);
|
grub_disk_close (disk);
|
||||||
return grub_error (GRUB_ERR_IO, "not an ATA device");
|
return grub_error (GRUB_ERR_IO, "not an ATA device");
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ static grub_err_t
|
|||||||
grub_cmd_cmostest (struct grub_command *cmd __attribute__ ((unused)),
|
grub_cmd_cmostest (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
int argc, char *argv[])
|
int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int byte = 0, bit = 0;
|
int byte, bit;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_uint8_t value;
|
grub_uint8_t value;
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ static grub_err_t
|
|||||||
grub_cmd_cmosclean (struct grub_command *cmd __attribute__ ((unused)),
|
grub_cmd_cmosclean (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
int argc, char *argv[])
|
int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int byte = 0, bit = 0;
|
int byte, bit;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_uint8_t value;
|
grub_uint8_t value;
|
||||||
|
|
||||||
@@ -85,7 +85,7 @@ static grub_err_t
|
|||||||
grub_cmd_cmosset (struct grub_command *cmd __attribute__ ((unused)),
|
grub_cmd_cmosset (struct grub_command *cmd __attribute__ ((unused)),
|
||||||
int argc, char *argv[])
|
int argc, char *argv[])
|
||||||
{
|
{
|
||||||
int byte = 0, bit = 0;
|
int byte, bit;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_uint8_t value;
|
grub_uint8_t value;
|
||||||
|
|
||||||
|
|||||||
File renamed without changes.
@@ -253,7 +253,6 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
struct grub_command *cmd;
|
struct grub_command *cmd;
|
||||||
char **cutargs;
|
char **cutargs;
|
||||||
int cutargc;
|
int cutargc;
|
||||||
grub_err_t err = GRUB_ERR_NONE;
|
|
||||||
|
|
||||||
for (i = 0; i < 2; i++)
|
for (i = 0; i < 2; i++)
|
||||||
{
|
{
|
||||||
@@ -315,8 +314,6 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
|
||||||
|
|
||||||
cutargs = grub_malloc (sizeof (cutargs[0]) * (argc - 1));
|
cutargs = grub_malloc (sizeof (cutargs[0]) * (argc - 1));
|
||||||
if (!cutargs)
|
|
||||||
return grub_errno;
|
|
||||||
cutargc = argc - 1;
|
cutargc = argc - 1;
|
||||||
grub_memcpy (cutargs + 1, args + 2, sizeof (cutargs[0]) * (argc - 2));
|
grub_memcpy (cutargs + 1, args + 2, sizeof (cutargs[0]) * (argc - 2));
|
||||||
cutargs[0] = args[0];
|
cutargs[0] = args[0];
|
||||||
@@ -336,7 +333,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (!(cmd->func) (cmd, cutargc, cutargs))
|
if (!(cmd->func) (cmd, cutargc, cutargs))
|
||||||
{
|
{
|
||||||
kernel_type = LINUX;
|
kernel_type = LINUX;
|
||||||
goto out;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
@@ -351,7 +348,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (!(cmd->func) (cmd, argc, args))
|
if (!(cmd->func) (cmd, argc, args))
|
||||||
{
|
{
|
||||||
kernel_type = MULTIBOOT;
|
kernel_type = MULTIBOOT;
|
||||||
goto out;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
@@ -416,7 +413,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (!(cmd->func) (cmd, cutargc, cutargs))
|
if (!(cmd->func) (cmd, cutargc, cutargs))
|
||||||
{
|
{
|
||||||
kernel_type = KFREEBSD;
|
kernel_type = KFREEBSD;
|
||||||
goto out;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
@@ -425,8 +422,6 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
char **bsdargs;
|
char **bsdargs;
|
||||||
int bsdargc;
|
int bsdargc;
|
||||||
char bsddevname[sizeof ("wdXXXXXXXXXXXXY")];
|
char bsddevname[sizeof ("wdXXXXXXXXXXXXY")];
|
||||||
int found = 0;
|
|
||||||
|
|
||||||
if (bsd_device == -1)
|
if (bsd_device == -1)
|
||||||
{
|
{
|
||||||
bsdargs = cutargs;
|
bsdargs = cutargs;
|
||||||
@@ -437,11 +432,6 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
char rbuf[3] = "-r";
|
char rbuf[3] = "-r";
|
||||||
bsdargc = cutargc + 2;
|
bsdargc = cutargc + 2;
|
||||||
bsdargs = grub_malloc (sizeof (bsdargs[0]) * bsdargc);
|
bsdargs = grub_malloc (sizeof (bsdargs[0]) * bsdargc);
|
||||||
if (!bsdargs)
|
|
||||||
{
|
|
||||||
err = grub_errno;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
grub_memcpy (bsdargs, args, argc * sizeof (bsdargs[0]));
|
grub_memcpy (bsdargs, args, argc * sizeof (bsdargs[0]));
|
||||||
bsdargs[argc] = rbuf;
|
bsdargs[argc] = rbuf;
|
||||||
bsdargs[argc + 1] = bsddevname;
|
bsdargs[argc + 1] = bsddevname;
|
||||||
@@ -457,8 +447,7 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (!(cmd->func) (cmd, bsdargc, bsdargs))
|
if (!(cmd->func) (cmd, bsdargc, bsdargs))
|
||||||
{
|
{
|
||||||
kernel_type = KNETBSD;
|
kernel_type = KNETBSD;
|
||||||
found = 1;
|
return GRUB_ERR_NONE;
|
||||||
goto free_bsdargs;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
@@ -471,28 +460,20 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
if (!(cmd->func) (cmd, bsdargc, bsdargs))
|
if (!(cmd->func) (cmd, bsdargc, bsdargs))
|
||||||
{
|
{
|
||||||
kernel_type = KOPENBSD;
|
kernel_type = KOPENBSD;
|
||||||
found = 1;
|
return GRUB_ERR_NONE;
|
||||||
goto free_bsdargs;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
grub_errno = GRUB_ERR_NONE;
|
grub_errno = GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
free_bsdargs:
|
|
||||||
if (bsdargs != cutargs)
|
if (bsdargs != cutargs)
|
||||||
grub_free (bsdargs);
|
grub_free (bsdargs);
|
||||||
if (found)
|
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (0);
|
while (0);
|
||||||
|
|
||||||
err = grub_error (GRUB_ERR_BAD_OS, "couldn't load file %s",
|
return grub_error (GRUB_ERR_BAD_OS, "couldn't load file %s",
|
||||||
args[0]);
|
args[0]);
|
||||||
out:
|
|
||||||
grub_free (cutargs);
|
|
||||||
return err;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
@@ -517,7 +498,7 @@ grub_cmd_legacy_initrd (struct grub_command *mycmd __attribute__ ((unused)),
|
|||||||
#endif
|
#endif
|
||||||
);
|
);
|
||||||
|
|
||||||
return cmd->func (cmd, argc ? 1 : 0, args);
|
return cmd->func (cmd, argc, args);
|
||||||
}
|
}
|
||||||
if (kernel_type == MULTIBOOT)
|
if (kernel_type == MULTIBOOT)
|
||||||
{
|
{
|
||||||
@@ -553,17 +534,15 @@ grub_cmd_legacy_initrdnounzip (struct grub_command *mycmd __attribute__ ((unused
|
|||||||
char **newargs;
|
char **newargs;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
char nounzipbuf[10] = "--nounzip";
|
char nounzipbuf[10] = "--nounzip";
|
||||||
|
|
||||||
cmd = grub_command_find ("module");
|
|
||||||
if (!cmd)
|
|
||||||
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"),
|
|
||||||
"module");
|
|
||||||
|
|
||||||
newargs = grub_malloc ((argc + 1) * sizeof (newargs[0]));
|
newargs = grub_malloc ((argc + 1) * sizeof (newargs[0]));
|
||||||
if (!newargs)
|
if (!newargs)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
grub_memcpy (newargs + 1, args, argc * sizeof (newargs[0]));
|
grub_memcpy (newargs + 1, args, argc * sizeof (newargs[0]));
|
||||||
newargs[0] = nounzipbuf;
|
newargs[0] = nounzipbuf;
|
||||||
|
cmd = grub_command_find ("module");
|
||||||
|
if (!cmd)
|
||||||
|
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"),
|
||||||
|
"module");
|
||||||
|
|
||||||
err = cmd->func (cmd, argc + 1, newargs);
|
err = cmd->func (cmd, argc + 1, newargs);
|
||||||
grub_free (newargs);
|
grub_free (newargs);
|
||||||
|
|||||||
@@ -37,8 +37,6 @@ static const char *names[] =
|
|||||||
is required to save accross hibernations. */
|
is required to save accross hibernations. */
|
||||||
[GRUB_MEMORY_NVS] = N_("ACPI non-volatile storage RAM"),
|
[GRUB_MEMORY_NVS] = N_("ACPI non-volatile storage RAM"),
|
||||||
[GRUB_MEMORY_BADRAM] = N_("faulty RAM (BadRAM)"),
|
[GRUB_MEMORY_BADRAM] = N_("faulty RAM (BadRAM)"),
|
||||||
[GRUB_MEMORY_PERSISTENT] = N_("persistent RAM"),
|
|
||||||
[GRUB_MEMORY_PERSISTENT_LEGACY] = N_("persistent RAM (legacy)"),
|
|
||||||
[GRUB_MEMORY_COREBOOT_TABLES] = N_("RAM holding coreboot tables"),
|
[GRUB_MEMORY_COREBOOT_TABLES] = N_("RAM holding coreboot tables"),
|
||||||
[GRUB_MEMORY_CODE] = N_("RAM holding firmware code")
|
[GRUB_MEMORY_CODE] = N_("RAM holding firmware code")
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -79,7 +79,6 @@ get_uuid (const char *name, char **uuid, int getnative)
|
|||||||
case GRUB_DISK_DEVICE_XEN:
|
case GRUB_DISK_DEVICE_XEN:
|
||||||
if (getnative)
|
if (getnative)
|
||||||
break;
|
break;
|
||||||
/* FALLTHROUGH */
|
|
||||||
|
|
||||||
/* Virtual disks. */
|
/* Virtual disks. */
|
||||||
/* GRUB dynamically generated files. */
|
/* GRUB dynamically generated files. */
|
||||||
@@ -199,10 +198,7 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
if (get_uuid (NULL, &uuid_root, 0))
|
if (get_uuid (NULL, &uuid_root, 0))
|
||||||
{
|
return grub_errno;
|
||||||
grub_free (mods);
|
|
||||||
return grub_errno;
|
|
||||||
}
|
|
||||||
|
|
||||||
prefdev = grub_file_get_device_name (prefix);
|
prefdev = grub_file_get_device_name (prefix);
|
||||||
if (grub_errno)
|
if (grub_errno)
|
||||||
@@ -214,8 +210,6 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
if (get_uuid (prefdev, &uuid_prefix, 0))
|
if (get_uuid (prefdev, &uuid_prefix, 0))
|
||||||
{
|
{
|
||||||
grub_free (uuid_root);
|
grub_free (uuid_root);
|
||||||
grub_free (prefdev);
|
|
||||||
grub_free (mods);
|
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -295,15 +289,12 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
}
|
}
|
||||||
grub_free (uuid_root);
|
grub_free (uuid_root);
|
||||||
grub_free (uuid_prefix);
|
grub_free (uuid_prefix);
|
||||||
grub_free (prefdev);
|
|
||||||
grub_free (mods);
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
|
|
||||||
fail:
|
fail:
|
||||||
grub_free (uuid_root);
|
grub_free (uuid_root);
|
||||||
grub_free (uuid_prefix);
|
grub_free (uuid_prefix);
|
||||||
grub_free (prefdev);
|
|
||||||
|
|
||||||
for (i = 0; i < mods_loaded; i++)
|
for (i = 0; i < mods_loaded; i++)
|
||||||
if (mods[i])
|
if (mods[i])
|
||||||
@@ -311,8 +302,6 @@ grub_cmd_nativedisk (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
mods[i]->fini = 0;
|
mods[i]->fini = 0;
|
||||||
grub_dl_unload (mods[i]);
|
grub_dl_unload (mods[i]);
|
||||||
}
|
}
|
||||||
grub_free (mods);
|
|
||||||
|
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -283,7 +283,6 @@ grub_cmd_parttool (grub_command_t cmd __attribute__ ((unused)),
|
|||||||
}
|
}
|
||||||
if (! cur)
|
if (! cur)
|
||||||
{
|
{
|
||||||
grub_free (parsed);
|
|
||||||
grub_device_close (dev);
|
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]);
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ check_password (const char *user, const char *entered, void *pin)
|
|||||||
grub_uint8_t *buf;
|
grub_uint8_t *buf;
|
||||||
struct pbkdf2_password *pass = pin;
|
struct pbkdf2_password *pass = pin;
|
||||||
gcry_err_code_t err;
|
gcry_err_code_t err;
|
||||||
grub_err_t ret;
|
|
||||||
|
|
||||||
buf = grub_malloc (pass->buflen);
|
buf = grub_malloc (pass->buflen);
|
||||||
if (!buf)
|
if (!buf)
|
||||||
@@ -56,17 +55,17 @@ check_password (const char *user, const char *entered, void *pin)
|
|||||||
pass->salt, pass->saltlen, pass->c,
|
pass->salt, pass->saltlen, pass->c,
|
||||||
buf, pass->buflen);
|
buf, pass->buflen);
|
||||||
if (err)
|
if (err)
|
||||||
ret = grub_crypto_gcry_error (err);
|
|
||||||
else if (grub_crypto_memcmp (buf, pass->expected, pass->buflen) != 0)
|
|
||||||
ret = GRUB_ACCESS_DENIED;
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
grub_auth_authenticate (user);
|
grub_free (buf);
|
||||||
ret = GRUB_ERR_NONE;
|
return grub_crypto_gcry_error (err);
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_free (buf);
|
if (grub_crypto_memcmp (buf, pass->expected, pass->buflen) != 0)
|
||||||
return ret;
|
return GRUB_ACCESS_DENIED;
|
||||||
|
|
||||||
|
grub_auth_authenticate (user);
|
||||||
|
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int
|
static inline int
|
||||||
|
|||||||
@@ -64,7 +64,7 @@ iterate_device (const char *name, void *data)
|
|||||||
/* Skip floppy drives when requested. */
|
/* Skip floppy drives when requested. */
|
||||||
if (ctx->no_floppy &&
|
if (ctx->no_floppy &&
|
||||||
name[0] == 'f' && name[1] == 'd' && name[2] >= '0' && name[2] <= '9')
|
name[0] == 'f' && name[1] == 'd' && name[2] >= '0' && name[2] <= '9')
|
||||||
return 1;
|
return 0;
|
||||||
|
|
||||||
#ifdef DO_SEARCH_FS_UUID
|
#ifdef DO_SEARCH_FS_UUID
|
||||||
#define compare_fn grub_strcasecmp
|
#define compare_fn grub_strcasecmp
|
||||||
|
|||||||
@@ -324,19 +324,19 @@ grub_load_public_key (grub_file_t f)
|
|||||||
if (grub_file_read (f, &l, sizeof (l)) != sizeof (l))
|
if (grub_file_read (f, &l, sizeof (l)) != sizeof (l))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
||||||
break;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
lb = (grub_be_to_cpu16 (l) + GRUB_CHAR_BIT - 1) / GRUB_CHAR_BIT;
|
lb = (grub_be_to_cpu16 (l) + GRUB_CHAR_BIT - 1) / GRUB_CHAR_BIT;
|
||||||
if (lb > READBUF_SIZE - sizeof (grub_uint16_t))
|
if (lb > READBUF_SIZE - sizeof (grub_uint16_t))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
||||||
break;
|
goto fail;
|
||||||
}
|
}
|
||||||
if (grub_file_read (f, buffer + sizeof (grub_uint16_t), lb) != (grub_ssize_t) lb)
|
if (grub_file_read (f, buffer + sizeof (grub_uint16_t), lb) != (grub_ssize_t) lb)
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
||||||
break;
|
goto fail;
|
||||||
}
|
}
|
||||||
grub_memcpy (buffer, &l, sizeof (l));
|
grub_memcpy (buffer, &l, sizeof (l));
|
||||||
|
|
||||||
@@ -346,16 +346,10 @@ grub_load_public_key (grub_file_t f)
|
|||||||
buffer, lb + sizeof (grub_uint16_t), 0))
|
buffer, lb + sizeof (grub_uint16_t), 0))
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
grub_error (GRUB_ERR_BAD_SIGNATURE, N_("bad signature"));
|
||||||
break;
|
goto fail;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (i < pkalgos[pk].nmpipub)
|
|
||||||
{
|
|
||||||
grub_free (sk);
|
|
||||||
goto fail;
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MD_SHA1->final (fingerprint_context);
|
GRUB_MD_SHA1->final (fingerprint_context);
|
||||||
|
|
||||||
grub_memcpy (sk->fingerprint, GRUB_MD_SHA1->read (fingerprint_context), 20);
|
grub_memcpy (sk->fingerprint, GRUB_MD_SHA1->read (fingerprint_context), 20);
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
struct grub_ahci_cmd_head
|
struct grub_ahci_cmd_head
|
||||||
{
|
{
|
||||||
grub_uint32_t config;
|
grub_uint32_t config;
|
||||||
grub_uint32_t transferred;
|
grub_uint32_t transfered;
|
||||||
grub_uint64_t command_table_base;
|
grub_uint64_t command_table_base;
|
||||||
grub_uint32_t unused[4];
|
grub_uint32_t unused[4];
|
||||||
};
|
};
|
||||||
@@ -954,7 +954,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);
|
||||||
|
|
||||||
dev->command_list[0].transferred = 0;
|
dev->command_list[0].transfered = 0;
|
||||||
dev->command_list[0].command_table_base
|
dev->command_list[0].command_table_base
|
||||||
= grub_dma_get_phys (dev->command_table_chunk);
|
= grub_dma_get_phys (dev->command_table_chunk);
|
||||||
|
|
||||||
@@ -1044,7 +1044,7 @@ grub_ahci_readwrite_real (struct grub_ahci_device *dev,
|
|||||||
dev->hba->ports[dev->port].command_issue,
|
dev->hba->ports[dev->port].command_issue,
|
||||||
dev->hba->ports[dev->port].intstatus,
|
dev->hba->ports[dev->port].intstatus,
|
||||||
dev->hba->ports[dev->port].task_file_data,
|
dev->hba->ports[dev->port].task_file_data,
|
||||||
dev->command_list[0].transferred,
|
dev->command_list[0].transfered,
|
||||||
dev->hba->ports[dev->port].sata_error,
|
dev->hba->ports[dev->port].sata_error,
|
||||||
((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x00],
|
((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x00],
|
||||||
((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x18]);
|
((grub_uint32_t *) grub_dma_get_virt (dev->rfis))[0x18]);
|
||||||
|
|||||||
@@ -25,7 +25,6 @@
|
|||||||
#include <grub/fs.h>
|
#include <grub/fs.h>
|
||||||
#include <grub/file.h>
|
#include <grub/file.h>
|
||||||
#include <grub/procfs.h>
|
#include <grub/procfs.h>
|
||||||
#include <grub/partition.h>
|
|
||||||
|
|
||||||
#ifdef GRUB_UTIL
|
#ifdef GRUB_UTIL
|
||||||
#include <grub/emu/hostdisk.h>
|
#include <grub/emu/hostdisk.h>
|
||||||
@@ -282,7 +281,6 @@ grub_cryptodisk_endecrypt (struct grub_cryptodisk *dev,
|
|||||||
break;
|
break;
|
||||||
case GRUB_CRYPTODISK_MODE_IV_PLAIN64:
|
case GRUB_CRYPTODISK_MODE_IV_PLAIN64:
|
||||||
iv[1] = grub_cpu_to_le32 (sector >> 32);
|
iv[1] = grub_cpu_to_le32 (sector >> 32);
|
||||||
/* FALLTHROUGH */
|
|
||||||
case GRUB_CRYPTODISK_MODE_IV_PLAIN:
|
case GRUB_CRYPTODISK_MODE_IV_PLAIN:
|
||||||
iv[0] = grub_cpu_to_le32 (sector & 0xFFFFFFFF);
|
iv[0] = grub_cpu_to_le32 (sector & 0xFFFFFFFF);
|
||||||
break;
|
break;
|
||||||
@@ -720,7 +718,6 @@ grub_cryptodisk_insert (grub_cryptodisk_t newdev, const char *name,
|
|||||||
newdev->id = last_cryptodisk_id++;
|
newdev->id = last_cryptodisk_id++;
|
||||||
newdev->source_id = source->id;
|
newdev->source_id = source->id;
|
||||||
newdev->source_dev_id = source->dev->id;
|
newdev->source_dev_id = source->dev->id;
|
||||||
newdev->partition_start = grub_partition_get_start (source->partition);
|
|
||||||
newdev->next = cryptodisk_list;
|
newdev->next = cryptodisk_list;
|
||||||
cryptodisk_list = newdev;
|
cryptodisk_list = newdev;
|
||||||
|
|
||||||
@@ -743,9 +740,7 @@ grub_cryptodisk_get_by_source_disk (grub_disk_t disk)
|
|||||||
grub_cryptodisk_t dev;
|
grub_cryptodisk_t dev;
|
||||||
for (dev = cryptodisk_list; dev != NULL; dev = dev->next)
|
for (dev = cryptodisk_list; dev != NULL; dev = dev->next)
|
||||||
if (dev->source_id == disk->id && dev->source_dev_id == disk->dev->id)
|
if (dev->source_id == disk->id && dev->source_dev_id == disk->dev->id)
|
||||||
if ((disk->partition && grub_partition_get_start (disk->partition) == dev->partition_start) ||
|
return dev;
|
||||||
(!disk->partition && dev->partition_start == 0))
|
|
||||||
return dev;
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -766,7 +761,6 @@ grub_cryptodisk_cheat_insert (grub_cryptodisk_t newdev, const char *name,
|
|||||||
newdev->cheat_fd = GRUB_UTIL_FD_INVALID;
|
newdev->cheat_fd = GRUB_UTIL_FD_INVALID;
|
||||||
newdev->source_id = source->id;
|
newdev->source_id = source->id;
|
||||||
newdev->source_dev_id = source->dev->id;
|
newdev->source_dev_id = source->dev->id;
|
||||||
newdev->partition_start = grub_partition_get_start (source->partition);
|
|
||||||
newdev->id = last_cryptodisk_id++;
|
newdev->id = last_cryptodisk_id++;
|
||||||
newdev->next = cryptodisk_list;
|
newdev->next = cryptodisk_list;
|
||||||
cryptodisk_list = newdev;
|
cryptodisk_list = newdev;
|
||||||
|
|||||||
@@ -80,26 +80,11 @@ make_devices (void)
|
|||||||
/* This should not happen... Why? */
|
/* This should not happen... Why? */
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* iPXE adds stub Block IO protocol to loaded image device handle. It is
|
|
||||||
completely non-functional and simply returns an error for every method.
|
|
||||||
So attempt to detect and skip it. Magic number is literal "iPXE" and
|
|
||||||
check block size as well */
|
|
||||||
/* FIXME: shoud we close it? We do not do it elsewhere */
|
|
||||||
if (bio->media && bio->media->media_id == 0x69505845U &&
|
|
||||||
bio->media->block_size == 1)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
d = grub_malloc (sizeof (*d));
|
d = grub_malloc (sizeof (*d));
|
||||||
if (! d)
|
if (! d)
|
||||||
{
|
{
|
||||||
/* Uggh. */
|
/* Uggh. */
|
||||||
grub_free (handles);
|
grub_free (handles);
|
||||||
while (devices)
|
|
||||||
{
|
|
||||||
d = devices->next;
|
|
||||||
grub_free (devices);
|
|
||||||
devices = d;
|
|
||||||
}
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -224,7 +209,7 @@ name_devices (struct grub_efidisk_data *devices)
|
|||||||
{
|
{
|
||||||
case GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE:
|
||||||
is_hard_drive = 1;
|
is_hard_drive = 1;
|
||||||
/* Intentionally fall through. */
|
/* Fall through by intention. */
|
||||||
case GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE:
|
case GRUB_EFI_CDROM_DEVICE_PATH_SUBTYPE:
|
||||||
{
|
{
|
||||||
struct grub_efidisk_data *parent, *parent2;
|
struct grub_efidisk_data *parent, *parent2;
|
||||||
@@ -502,15 +487,8 @@ grub_efidisk_open (const char *name, struct grub_disk *disk)
|
|||||||
m = d->block_io->media;
|
m = d->block_io->media;
|
||||||
/* FIXME: Probably it is better to store the block size in the disk,
|
/* FIXME: Probably it is better to store the block size in the disk,
|
||||||
and total sectors should be replaced with total blocks. */
|
and total sectors should be replaced with total blocks. */
|
||||||
grub_dprintf ("efidisk",
|
grub_dprintf ("efidisk", "m = %p, last block = %llx, block size = %x\n",
|
||||||
"m = %p, last block = %llx, block size = %x, io align = %x\n",
|
m, (unsigned long long) m->last_block, m->block_size);
|
||||||
m, (unsigned long long) m->last_block, m->block_size,
|
|
||||||
m->io_align);
|
|
||||||
|
|
||||||
/* Ensure required buffer alignment is a power of two (or is zero). */
|
|
||||||
if (m->io_align & (m->io_align - 1))
|
|
||||||
return grub_error (GRUB_ERR_IO, "invalid buffer alignment %d", m->io_align);
|
|
||||||
|
|
||||||
disk->total_sectors = m->last_block + 1;
|
disk->total_sectors = m->last_block + 1;
|
||||||
/* Don't increase this value due to bug in some EFI. */
|
/* Don't increase this value due to bug in some EFI. */
|
||||||
disk->max_agglomerate = 0xa0000 >> (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS);
|
disk->max_agglomerate = 0xa0000 >> (GRUB_DISK_CACHE_BITS + GRUB_DISK_SECTOR_BITS);
|
||||||
@@ -540,42 +518,15 @@ grub_efidisk_readwrite (struct grub_disk *disk, grub_disk_addr_t sector,
|
|||||||
{
|
{
|
||||||
struct grub_efidisk_data *d;
|
struct grub_efidisk_data *d;
|
||||||
grub_efi_block_io_t *bio;
|
grub_efi_block_io_t *bio;
|
||||||
grub_efi_status_t status;
|
|
||||||
grub_size_t io_align, num_bytes;
|
|
||||||
char *aligned_buf;
|
|
||||||
|
|
||||||
d = disk->data;
|
d = disk->data;
|
||||||
bio = d->block_io;
|
bio = d->block_io;
|
||||||
|
|
||||||
/* Set alignment to 1 if 0 specified */
|
return efi_call_5 ((wr ? bio->write_blocks : bio->read_blocks), bio,
|
||||||
io_align = bio->media->io_align ? bio->media->io_align : 1;
|
bio->media->media_id,
|
||||||
num_bytes = size << disk->log_sector_size;
|
(grub_efi_uint64_t) sector,
|
||||||
|
(grub_efi_uintn_t) size << disk->log_sector_size,
|
||||||
if ((grub_addr_t) buf & (io_align - 1))
|
buf);
|
||||||
{
|
|
||||||
aligned_buf = grub_memalign (io_align, num_bytes);
|
|
||||||
if (! aligned_buf)
|
|
||||||
return GRUB_EFI_OUT_OF_RESOURCES;
|
|
||||||
if (wr)
|
|
||||||
grub_memcpy (aligned_buf, buf, num_bytes);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
aligned_buf = buf;
|
|
||||||
}
|
|
||||||
|
|
||||||
status = efi_call_5 ((wr ? bio->write_blocks : bio->read_blocks), bio,
|
|
||||||
bio->media->media_id, (grub_efi_uint64_t) sector,
|
|
||||||
(grub_efi_uintn_t) num_bytes, aligned_buf);
|
|
||||||
|
|
||||||
if ((grub_addr_t) buf & (io_align - 1))
|
|
||||||
{
|
|
||||||
if (!wr)
|
|
||||||
grub_memcpy (buf, aligned_buf, num_bytes);
|
|
||||||
grub_free (aligned_buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
@@ -590,9 +541,7 @@ grub_efidisk_read (struct grub_disk *disk, grub_disk_addr_t sector,
|
|||||||
|
|
||||||
status = grub_efidisk_readwrite (disk, sector, size, buf, 0);
|
status = grub_efidisk_readwrite (disk, sector, size, buf, 0);
|
||||||
|
|
||||||
if (status == GRUB_EFI_NO_MEDIA)
|
if (status != GRUB_EFI_SUCCESS)
|
||||||
return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("no media in `%s'"), disk->name);
|
|
||||||
else if (status != GRUB_EFI_SUCCESS)
|
|
||||||
return grub_error (GRUB_ERR_READ_ERROR,
|
return grub_error (GRUB_ERR_READ_ERROR,
|
||||||
N_("failure reading sector 0x%llx from `%s'"),
|
N_("failure reading sector 0x%llx from `%s'"),
|
||||||
(unsigned long long) sector,
|
(unsigned long long) sector,
|
||||||
@@ -613,9 +562,7 @@ grub_efidisk_write (struct grub_disk *disk, grub_disk_addr_t sector,
|
|||||||
|
|
||||||
status = grub_efidisk_readwrite (disk, sector, size, (char *) buf, 1);
|
status = grub_efidisk_readwrite (disk, sector, size, (char *) buf, 1);
|
||||||
|
|
||||||
if (status == GRUB_EFI_NO_MEDIA)
|
if (status != GRUB_EFI_SUCCESS)
|
||||||
return grub_error (GRUB_ERR_OUT_OF_RANGE, N_("no media in `%s'"), disk->name);
|
|
||||||
else if (status != GRUB_EFI_SUCCESS)
|
|
||||||
return grub_error (GRUB_ERR_WRITE_ERROR,
|
return grub_error (GRUB_ERR_WRITE_ERROR,
|
||||||
N_("failure writing sector 0x%llx to `%s'"),
|
N_("failure writing sector 0x%llx to `%s'"),
|
||||||
(unsigned long long) sector, disk->name);
|
(unsigned long long) sector, disk->name);
|
||||||
|
|||||||
@@ -227,10 +227,7 @@ dev_iterate (const struct grub_ieee1275_devalias *alias)
|
|||||||
|
|
||||||
if (grub_ieee1275_open (alias->path, &ihandle))
|
if (grub_ieee1275_open (alias->path, &ihandle))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* This method doesn't need memory allocation for the table. Open
|
|
||||||
firmware takes care of all memory management and the result table
|
|
||||||
stays in memory and is never freed. */
|
|
||||||
INIT_IEEE1275_COMMON (&args.common, "call-method", 2, 3);
|
INIT_IEEE1275_COMMON (&args.common, "call-method", 2, 3);
|
||||||
args.method = (grub_ieee1275_cell_t) "vscsi-report-luns";
|
args.method = (grub_ieee1275_cell_t) "vscsi-report-luns";
|
||||||
args.ihandle = ihandle;
|
args.ihandle = ihandle;
|
||||||
@@ -263,82 +260,6 @@ dev_iterate (const struct grub_ieee1275_devalias *alias)
|
|||||||
grub_free (buf);
|
grub_free (buf);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (grub_strcmp (alias->type, "sas_ioa") == 0)
|
|
||||||
{
|
|
||||||
/* The method returns the number of disks and a table where
|
|
||||||
* each ID is 64-bit long. Example of sas paths:
|
|
||||||
* /pci@80000002000001f/pci1014,034A@0/sas/disk@c05db70800
|
|
||||||
* /pci@80000002000001f/pci1014,034A@0/sas/disk@a05db70800
|
|
||||||
* /pci@80000002000001f/pci1014,034A@0/sas/disk@805db70800 */
|
|
||||||
|
|
||||||
struct sas_children
|
|
||||||
{
|
|
||||||
struct grub_ieee1275_common_hdr common;
|
|
||||||
grub_ieee1275_cell_t method;
|
|
||||||
grub_ieee1275_cell_t ihandle;
|
|
||||||
grub_ieee1275_cell_t max;
|
|
||||||
grub_ieee1275_cell_t table;
|
|
||||||
grub_ieee1275_cell_t catch_result;
|
|
||||||
grub_ieee1275_cell_t nentries;
|
|
||||||
}
|
|
||||||
args;
|
|
||||||
char *buf, *bufptr;
|
|
||||||
unsigned i;
|
|
||||||
grub_uint64_t *table;
|
|
||||||
grub_uint16_t table_size;
|
|
||||||
grub_ieee1275_ihandle_t ihandle;
|
|
||||||
|
|
||||||
buf = grub_malloc (grub_strlen (alias->path) +
|
|
||||||
sizeof ("/disk@7766554433221100"));
|
|
||||||
if (!buf)
|
|
||||||
return;
|
|
||||||
bufptr = grub_stpcpy (buf, alias->path);
|
|
||||||
|
|
||||||
/* Power machines documentation specify 672 as maximum SAS disks in
|
|
||||||
one system. Using a slightly larger value to be safe. */
|
|
||||||
table_size = 768;
|
|
||||||
table = grub_malloc (table_size * sizeof (grub_uint64_t));
|
|
||||||
|
|
||||||
if (!table)
|
|
||||||
{
|
|
||||||
grub_free (buf);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (grub_ieee1275_open (alias->path, &ihandle))
|
|
||||||
{
|
|
||||||
grub_free (buf);
|
|
||||||
grub_free (table);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
INIT_IEEE1275_COMMON (&args.common, "call-method", 4, 2);
|
|
||||||
args.method = (grub_ieee1275_cell_t) "get-sas-children";
|
|
||||||
args.ihandle = ihandle;
|
|
||||||
args.max = table_size;
|
|
||||||
args.table = (grub_ieee1275_cell_t) table;
|
|
||||||
args.catch_result = 0;
|
|
||||||
args.nentries = 0;
|
|
||||||
|
|
||||||
if (IEEE1275_CALL_ENTRY_FN (&args) == -1)
|
|
||||||
{
|
|
||||||
grub_ieee1275_close (ihandle);
|
|
||||||
grub_free (table);
|
|
||||||
grub_free (buf);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < args.nentries; i++)
|
|
||||||
{
|
|
||||||
grub_snprintf (bufptr, sizeof ("/disk@7766554433221100"),
|
|
||||||
"/disk@%" PRIxGRUB_UINT64_T, table[i]);
|
|
||||||
dev_iterate_real (buf, buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_ieee1275_close (ihandle);
|
|
||||||
grub_free (table);
|
|
||||||
grub_free (buf);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS)
|
if (!grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_TREE_SCANNING_FOR_DISKS)
|
||||||
&& grub_strcmp (alias->type, "block") == 0)
|
&& grub_strcmp (alias->type, "block") == 0)
|
||||||
|
|||||||
@@ -154,10 +154,7 @@ grub_efiemu_init_segments (grub_efiemu_segment_t *segs, const Elf_Ehdr *e)
|
|||||||
s->sh_flags & SHF_EXECINSTR ? GRUB_EFI_RUNTIME_SERVICES_CODE
|
s->sh_flags & SHF_EXECINSTR ? GRUB_EFI_RUNTIME_SERVICES_CODE
|
||||||
: GRUB_EFI_RUNTIME_SERVICES_DATA);
|
: GRUB_EFI_RUNTIME_SERVICES_DATA);
|
||||||
if (seg->handle < 0)
|
if (seg->handle < 0)
|
||||||
{
|
return grub_errno;
|
||||||
grub_free (seg);
|
|
||||||
return grub_errno;
|
|
||||||
}
|
|
||||||
seg->off = 0;
|
seg->off = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -346,7 +343,7 @@ SUFFIX (grub_efiemu_loadcore_init) (void *core, const char *filename,
|
|||||||
return grub_error (GRUB_ERR_BAD_MODULE, N_("this ELF file is not of the right type"));
|
return grub_error (GRUB_ERR_BAD_MODULE, N_("this ELF file is not of the right type"));
|
||||||
|
|
||||||
/* Make sure that every section is within the core. */
|
/* Make sure that every section is within the core. */
|
||||||
if ((grub_size_t) core_size < e->e_shoff + (grub_uint32_t) e->e_shentsize * e->e_shnum)
|
if ((grub_size_t) core_size < e->e_shoff + e->e_shentsize * e->e_shnum)
|
||||||
return grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"),
|
return grub_error (GRUB_ERR_BAD_OS, N_("premature end of file %s"),
|
||||||
filename);
|
filename);
|
||||||
|
|
||||||
|
|||||||
@@ -196,7 +196,7 @@ grub_efiemu_load_file (const char *filename)
|
|||||||
{
|
{
|
||||||
grub_file_close (file);
|
grub_file_close (file);
|
||||||
grub_efiemu_unload ();
|
grub_efiemu_unload ();
|
||||||
return err;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|
||||||
grub_dprintf ("efiemu", "mm initialized\n");
|
grub_dprintf ("efiemu", "mm initialized\n");
|
||||||
|
|||||||
+3
-23
@@ -99,8 +99,7 @@ grub_efiemu_request_memalign (grub_size_t align, grub_size_t size,
|
|||||||
grub_size_t align_overhead;
|
grub_size_t align_overhead;
|
||||||
struct grub_efiemu_memrequest *ret, *cur, *prev;
|
struct grub_efiemu_memrequest *ret, *cur, *prev;
|
||||||
/* Check that the request is correct */
|
/* Check that the request is correct */
|
||||||
if (type <= GRUB_EFI_LOADER_CODE || type == GRUB_EFI_PERSISTENT_MEMORY ||
|
if (type >= GRUB_EFI_MAX_MEMORY_TYPE || type <= GRUB_EFI_LOADER_CODE)
|
||||||
type >= GRUB_EFI_MAX_MEMORY_TYPE)
|
|
||||||
return -2;
|
return -2;
|
||||||
|
|
||||||
/* Add new size to requested size */
|
/* Add new size to requested size */
|
||||||
@@ -167,13 +166,6 @@ efiemu_alloc_requests (void)
|
|||||||
GRUB_EFI_MEMORY_MAPPED_IO,
|
GRUB_EFI_MEMORY_MAPPED_IO,
|
||||||
GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE,
|
GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE,
|
||||||
GRUB_EFI_PAL_CODE
|
GRUB_EFI_PAL_CODE
|
||||||
|
|
||||||
/*
|
|
||||||
* These are not allocatable:
|
|
||||||
* GRUB_EFI_RESERVED_MEMORY_TYPE
|
|
||||||
* GRUB_EFI_PERSISTENT_MEMORY
|
|
||||||
* >= GRUB_EFI_MAX_MEMORY_TYPE
|
|
||||||
*/
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Compute total memory needed */
|
/* Compute total memory needed */
|
||||||
@@ -410,14 +402,9 @@ fill_hook (grub_uint64_t addr, grub_uint64_t size, grub_memory_type_t type,
|
|||||||
return grub_efiemu_add_to_mmap (addr, size,
|
return grub_efiemu_add_to_mmap (addr, size,
|
||||||
GRUB_EFI_ACPI_MEMORY_NVS);
|
GRUB_EFI_ACPI_MEMORY_NVS);
|
||||||
|
|
||||||
case GRUB_MEMORY_PERSISTENT:
|
|
||||||
case GRUB_MEMORY_PERSISTENT_LEGACY:
|
|
||||||
return grub_efiemu_add_to_mmap (addr, size,
|
|
||||||
GRUB_EFI_PERSISTENT_MEMORY);
|
|
||||||
default:
|
default:
|
||||||
grub_dprintf ("efiemu",
|
grub_dprintf ("efiemu",
|
||||||
"Unknown memory type %d. Assuming unusable\n", type);
|
"Unknown memory type %d. Assuming unusable\n", type);
|
||||||
/* FALLTHROUGH */
|
|
||||||
case GRUB_MEMORY_RESERVED:
|
case GRUB_MEMORY_RESERVED:
|
||||||
return grub_efiemu_add_to_mmap (addr, size,
|
return grub_efiemu_add_to_mmap (addr, size,
|
||||||
GRUB_EFI_UNUSABLE_MEMORY);
|
GRUB_EFI_UNUSABLE_MEMORY);
|
||||||
@@ -458,7 +445,7 @@ grub_efiemu_mmap_iterate (grub_memory_hook_t hook, void *hook_data)
|
|||||||
case GRUB_EFI_MEMORY_MAPPED_IO:
|
case GRUB_EFI_MEMORY_MAPPED_IO:
|
||||||
case GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE:
|
case GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE:
|
||||||
case GRUB_EFI_PAL_CODE:
|
case GRUB_EFI_PAL_CODE:
|
||||||
default:
|
case GRUB_EFI_MAX_MEMORY_TYPE:
|
||||||
hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096,
|
hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096,
|
||||||
GRUB_MEMORY_RESERVED, hook_data);
|
GRUB_MEMORY_RESERVED, hook_data);
|
||||||
break;
|
break;
|
||||||
@@ -481,12 +468,6 @@ grub_efiemu_mmap_iterate (grub_memory_hook_t hook, void *hook_data)
|
|||||||
hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096,
|
hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096,
|
||||||
GRUB_MEMORY_NVS, hook_data);
|
GRUB_MEMORY_NVS, hook_data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GRUB_EFI_PERSISTENT_MEMORY:
|
|
||||||
hook (efiemu_mmap[i].physical_start, efiemu_mmap[i].num_pages * 4096,
|
|
||||||
GRUB_MEMORY_PERSISTENT, hook_data);
|
|
||||||
break;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -522,8 +503,7 @@ grub_efiemu_mmap_sort_and_uniq (void)
|
|||||||
[GRUB_EFI_ACPI_MEMORY_NVS] = 3,
|
[GRUB_EFI_ACPI_MEMORY_NVS] = 3,
|
||||||
[GRUB_EFI_MEMORY_MAPPED_IO] = 4,
|
[GRUB_EFI_MEMORY_MAPPED_IO] = 4,
|
||||||
[GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE] = 4,
|
[GRUB_EFI_MEMORY_MAPPED_IO_PORT_SPACE] = 4,
|
||||||
[GRUB_EFI_PAL_CODE] = 4,
|
[GRUB_EFI_PAL_CODE] = 4
|
||||||
[GRUB_EFI_PERSISTENT_MEMORY] = 4
|
|
||||||
};
|
};
|
||||||
|
|
||||||
int i, j, k, done;
|
int i, j, k, done;
|
||||||
|
|||||||
@@ -83,16 +83,10 @@ SUFFIX (grub_efiemu_prepare) (struct grub_efiemu_prepare_hook *prepare_hooks,
|
|||||||
((grub_uint8_t *) grub_efiemu_mm_obtain_request (handle) + off);
|
((grub_uint8_t *) grub_efiemu_mm_obtain_request (handle) + off);
|
||||||
|
|
||||||
/* Put pointer to the list of configuration tables in system table */
|
/* Put pointer to the list of configuration tables in system table */
|
||||||
err = grub_efiemu_write_value
|
grub_efiemu_write_value
|
||||||
(&(SUFFIX (grub_efiemu_system_table)->configuration_table), 0,
|
(&(SUFFIX (grub_efiemu_system_table)->configuration_table), 0,
|
||||||
conftable_handle, 0, 1,
|
conftable_handle, 0, 1,
|
||||||
sizeof (SUFFIX (grub_efiemu_system_table)->configuration_table));
|
sizeof (SUFFIX (grub_efiemu_system_table)->configuration_table));
|
||||||
if (err)
|
|
||||||
{
|
|
||||||
grub_efiemu_unload ();
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
|
|
||||||
SUFFIX(grub_efiemu_system_table)->num_table_entries = cntconftables;
|
SUFFIX(grub_efiemu_system_table)->num_table_entries = cntconftables;
|
||||||
|
|
||||||
/* Fill the list of configuration tables */
|
/* Fill the list of configuration tables */
|
||||||
|
|||||||
@@ -227,11 +227,11 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data,
|
|||||||
static grub_err_t
|
static grub_err_t
|
||||||
read_sblock (grub_disk_t disk, struct grub_btrfs_superblock *sb)
|
read_sblock (grub_disk_t disk, struct grub_btrfs_superblock *sb)
|
||||||
{
|
{
|
||||||
struct grub_btrfs_superblock sblock;
|
|
||||||
unsigned i;
|
unsigned i;
|
||||||
grub_err_t err = GRUB_ERR_NONE;
|
grub_err_t err = GRUB_ERR_NONE;
|
||||||
for (i = 0; i < ARRAY_SIZE (superblock_sectors); i++)
|
for (i = 0; i < ARRAY_SIZE (superblock_sectors); i++)
|
||||||
{
|
{
|
||||||
|
struct grub_btrfs_superblock sblock;
|
||||||
/* Don't try additional superblocks beyond device size. */
|
/* Don't try additional superblocks beyond device size. */
|
||||||
if (i && (grub_le_to_cpu64 (sblock.this_device.size)
|
if (i && (grub_le_to_cpu64 (sblock.this_device.size)
|
||||||
>> GRUB_DISK_SECTOR_BITS) <= superblock_sectors[i])
|
>> GRUB_DISK_SECTOR_BITS) <= superblock_sectors[i])
|
||||||
|
|||||||
+1
-9
@@ -344,16 +344,8 @@ init_cbfsdisk (void)
|
|||||||
|
|
||||||
ptr = *(grub_uint32_t *) 0xfffffffc;
|
ptr = *(grub_uint32_t *) 0xfffffffc;
|
||||||
head = (struct cbfs_header *) (grub_addr_t) ptr;
|
head = (struct cbfs_header *) (grub_addr_t) ptr;
|
||||||
grub_dprintf ("cbfs", "head=%p\n", head);
|
|
||||||
|
|
||||||
/* coreboot current supports only ROMs <= 16 MiB. Bigger ROMs will
|
if (!validate_head (head))
|
||||||
have problems as RCBA is 18 MiB below end of 32-bit typically,
|
|
||||||
so either memory map would have to be rearranged or we'd need to support
|
|
||||||
reading ROMs through controller directly.
|
|
||||||
*/
|
|
||||||
if (ptr < 0xff000000
|
|
||||||
|| 0xffffffff - ptr < (grub_uint32_t) sizeof (*head) + 0xf
|
|
||||||
|| !validate_head (head))
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
cbfsdisk_size = ALIGN_UP (grub_be_to_cpu32 (head->romsize),
|
cbfsdisk_size = ALIGN_UP (grub_be_to_cpu32 (head->romsize),
|
||||||
|
|||||||
+2
-6
@@ -189,11 +189,7 @@ struct grub_fshelp_node {
|
|||||||
struct grub_fat_data *data;
|
struct grub_fat_data *data;
|
||||||
|
|
||||||
grub_uint8_t attr;
|
grub_uint8_t attr;
|
||||||
#ifndef MODE_EXFAT
|
grub_ssize_t file_size;
|
||||||
grub_uint32_t file_size;
|
|
||||||
#else
|
|
||||||
grub_uint64_t file_size;
|
|
||||||
#endif
|
|
||||||
grub_uint32_t file_cluster;
|
grub_uint32_t file_cluster;
|
||||||
grub_uint32_t cur_cluster_num;
|
grub_uint32_t cur_cluster_num;
|
||||||
grub_uint32_t cur_cluster;
|
grub_uint32_t cur_cluster;
|
||||||
@@ -685,7 +681,7 @@ grub_fat_iterate_dir_next (grub_fshelp_node_t node,
|
|||||||
ctxt->dir.file_size
|
ctxt->dir.file_size
|
||||||
= grub_cpu_to_le64 (sec.type_specific.stream_extension.file_size);
|
= grub_cpu_to_le64 (sec.type_specific.stream_extension.file_size);
|
||||||
ctxt->dir.have_stream = 1;
|
ctxt->dir.have_stream = 1;
|
||||||
ctxt->dir.is_contiguous = !!(sec.type_specific.stream_extension.flags
|
ctxt->dir.is_contiguous = !!(dir.type_specific.stream_extension.flags
|
||||||
& grub_cpu_to_le16_compile_time (FLAG_CONTIGUOUS));
|
& grub_cpu_to_le16_compile_time (FLAG_CONTIGUOUS));
|
||||||
break;
|
break;
|
||||||
case 0xc1:
|
case 0xc1:
|
||||||
|
|||||||
@@ -1308,7 +1308,6 @@ grub_hfs_open (struct grub_file *file, const char *name)
|
|||||||
if (grub_hfs_find_dir (data, name, &found, GRUB_FSHELP_REG))
|
if (grub_hfs_find_dir (data, name, &found, GRUB_FSHELP_REG))
|
||||||
{
|
{
|
||||||
grub_free (data);
|
grub_free (data);
|
||||||
grub_free (found);
|
|
||||||
grub_dl_unref (my_mod);
|
grub_dl_unref (my_mod);
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -750,15 +750,19 @@ grub_iso9660_iterate_dir (grub_fshelp_node_t dir,
|
|||||||
|
|
||||||
if (dir->data->joliet && !ctx.filename)
|
if (dir->data->joliet && !ctx.filename)
|
||||||
{
|
{
|
||||||
char *semicolon;
|
char *oldname, *semicolon;
|
||||||
|
|
||||||
|
oldname = name;
|
||||||
ctx.filename = grub_iso9660_convert_string
|
ctx.filename = grub_iso9660_convert_string
|
||||||
((grub_uint8_t *) name, dirent.namelen >> 1);
|
((grub_uint8_t *) oldname, dirent.namelen >> 1);
|
||||||
|
|
||||||
semicolon = grub_strrchr (ctx.filename, ';');
|
semicolon = grub_strrchr (ctx.filename, ';');
|
||||||
if (semicolon)
|
if (semicolon)
|
||||||
*semicolon = '\0';
|
*semicolon = '\0';
|
||||||
|
|
||||||
|
if (ctx.filename_alloc)
|
||||||
|
grub_free (oldname);
|
||||||
|
|
||||||
ctx.filename_alloc = 1;
|
ctx.filename_alloc = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -104,7 +104,7 @@ decomp_block (struct grub_ntfs_comp *cc, grub_uint8_t *dest)
|
|||||||
if (tag & 1)
|
if (tag & 1)
|
||||||
{
|
{
|
||||||
grub_uint32_t i, len, delta, code, lmask, dshift;
|
grub_uint32_t i, len, delta, code, lmask, dshift;
|
||||||
grub_uint16_t word = 0;
|
grub_uint16_t word;
|
||||||
|
|
||||||
if (decomp_get16 (cc, &word))
|
if (decomp_get16 (cc, &word))
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|||||||
+20
-37
@@ -823,12 +823,7 @@ direct_read (struct grub_squash_data *data,
|
|||||||
curread = data->blksz - boff;
|
curread = data->blksz - boff;
|
||||||
if (curread > len)
|
if (curread > len)
|
||||||
curread = len;
|
curread = len;
|
||||||
if (!ino->block_sizes[i])
|
if (!(ino->block_sizes[i]
|
||||||
{
|
|
||||||
/* Sparse block */
|
|
||||||
grub_memset (buf, '\0', curread);
|
|
||||||
}
|
|
||||||
else if (!(ino->block_sizes[i]
|
|
||||||
& grub_cpu_to_le32_compile_time (SQUASH_BLOCK_UNCOMPRESSED)))
|
& grub_cpu_to_le32_compile_time (SQUASH_BLOCK_UNCOMPRESSED)))
|
||||||
{
|
{
|
||||||
char *block;
|
char *block;
|
||||||
@@ -878,57 +873,36 @@ direct_read (struct grub_squash_data *data,
|
|||||||
|
|
||||||
|
|
||||||
static grub_ssize_t
|
static grub_ssize_t
|
||||||
grub_squash_read (grub_file_t file, char *buf, grub_size_t len)
|
grub_squash_read_data (struct grub_squash_data *data,
|
||||||
|
struct grub_squash_cache_inode *ino,
|
||||||
|
grub_off_t off, char *buf, grub_size_t len)
|
||||||
{
|
{
|
||||||
struct grub_squash_data *data = file->data;
|
|
||||||
struct grub_squash_cache_inode *ino = &data->ino;
|
|
||||||
grub_off_t off = file->offset;
|
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
grub_uint64_t a, b;
|
grub_uint64_t a = 0, b;
|
||||||
grub_uint32_t fragment = 0;
|
grub_uint32_t fragment = 0;
|
||||||
int compressed = 0;
|
int compressed = 0;
|
||||||
struct grub_squash_frag_desc frag;
|
struct grub_squash_frag_desc frag;
|
||||||
grub_off_t direct_len;
|
|
||||||
grub_uint64_t mask = grub_le_to_cpu32 (data->sb.block_size) - 1;
|
|
||||||
grub_size_t orig_len = len;
|
|
||||||
|
|
||||||
switch (ino->ino.type)
|
switch (ino->ino.type)
|
||||||
{
|
{
|
||||||
case grub_cpu_to_le16_compile_time (SQUASH_TYPE_LONG_REGULAR):
|
case grub_cpu_to_le16_compile_time (SQUASH_TYPE_LONG_REGULAR):
|
||||||
|
a = grub_le_to_cpu64 (ino->ino.long_file.chunk);
|
||||||
fragment = grub_le_to_cpu32 (ino->ino.long_file.fragment);
|
fragment = grub_le_to_cpu32 (ino->ino.long_file.fragment);
|
||||||
break;
|
break;
|
||||||
case grub_cpu_to_le16_compile_time (SQUASH_TYPE_REGULAR):
|
case grub_cpu_to_le16_compile_time (SQUASH_TYPE_REGULAR):
|
||||||
|
a = grub_le_to_cpu32 (ino->ino.file.chunk);
|
||||||
fragment = grub_le_to_cpu32 (ino->ino.file.fragment);
|
fragment = grub_le_to_cpu32 (ino->ino.file.fragment);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Squash may pack file tail as fragment. So read initial part directly and
|
if (fragment == 0xffffffff)
|
||||||
get tail from fragments */
|
return direct_read (data, ino, off, buf, len);
|
||||||
direct_len = fragment == 0xffffffff ? file->size : file->size & ~mask;
|
|
||||||
if (off < direct_len)
|
|
||||||
{
|
|
||||||
grub_size_t read_len = direct_len - off;
|
|
||||||
grub_ssize_t res;
|
|
||||||
|
|
||||||
if (read_len > len)
|
|
||||||
read_len = len;
|
|
||||||
res = direct_read (data, ino, off, buf, read_len);
|
|
||||||
if ((grub_size_t) res != read_len)
|
|
||||||
return -1; /* FIXME: is short read possible here? */
|
|
||||||
len -= read_len;
|
|
||||||
if (!len)
|
|
||||||
return read_len;
|
|
||||||
buf += read_len;
|
|
||||||
off = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
off -= direct_len;
|
|
||||||
|
|
||||||
err = read_chunk (data, &frag, sizeof (frag),
|
err = read_chunk (data, &frag, sizeof (frag),
|
||||||
data->fragments, sizeof (frag) * fragment);
|
data->fragments, sizeof (frag) * fragment);
|
||||||
if (err)
|
if (err)
|
||||||
return -1;
|
return -1;
|
||||||
a = grub_le_to_cpu64 (frag.offset);
|
a += grub_le_to_cpu64 (frag.offset);
|
||||||
compressed = !(frag.size & grub_cpu_to_le32_compile_time (SQUASH_BLOCK_UNCOMPRESSED));
|
compressed = !(frag.size & grub_cpu_to_le32_compile_time (SQUASH_BLOCK_UNCOMPRESSED));
|
||||||
if (ino->ino.type == grub_cpu_to_le16_compile_time (SQUASH_TYPE_LONG_REGULAR))
|
if (ino->ino.type == grub_cpu_to_le16_compile_time (SQUASH_TYPE_LONG_REGULAR))
|
||||||
b = grub_le_to_cpu32 (ino->ino.long_file.offset) + off;
|
b = grub_le_to_cpu32 (ino->ino.long_file.offset) + off;
|
||||||
@@ -969,7 +943,16 @@ grub_squash_read (grub_file_t file, char *buf, grub_size_t len)
|
|||||||
if (err)
|
if (err)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
return orig_len;
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static grub_ssize_t
|
||||||
|
grub_squash_read (grub_file_t file, char *buf, grub_size_t len)
|
||||||
|
{
|
||||||
|
struct grub_squash_data *data = file->data;
|
||||||
|
|
||||||
|
return grub_squash_read_data (data, &data->ino,
|
||||||
|
file->offset, buf, len);
|
||||||
}
|
}
|
||||||
|
|
||||||
static grub_err_t
|
static grub_err_t
|
||||||
|
|||||||
+2
-10
@@ -76,13 +76,8 @@ GRUB_MOD_LICENSE ("GPLv3+");
|
|||||||
|
|
||||||
/* incompat feature flags */
|
/* incompat feature flags */
|
||||||
#define XFS_SB_FEAT_INCOMPAT_FTYPE (1 << 0) /* filetype in dirent */
|
#define XFS_SB_FEAT_INCOMPAT_FTYPE (1 << 0) /* filetype in dirent */
|
||||||
#define XFS_SB_FEAT_INCOMPAT_SPINODES (1 << 1) /* sparse inode chunks */
|
|
||||||
#define XFS_SB_FEAT_INCOMPAT_META_UUID (1 << 2) /* metadata UUID */
|
|
||||||
|
|
||||||
/* We do not currently verify metadata UUID so it is safe to read such filesystem */
|
|
||||||
#define XFS_SB_FEAT_INCOMPAT_SUPPORTED \
|
#define XFS_SB_FEAT_INCOMPAT_SUPPORTED \
|
||||||
(XFS_SB_FEAT_INCOMPAT_FTYPE | \
|
(XFS_SB_FEAT_INCOMPAT_FTYPE)
|
||||||
XFS_SB_FEAT_INCOMPAT_META_UUID)
|
|
||||||
|
|
||||||
struct grub_xfs_sblock
|
struct grub_xfs_sblock
|
||||||
{
|
{
|
||||||
@@ -780,10 +775,7 @@ grub_xfs_iterate_dir (grub_fshelp_node_t dir,
|
|||||||
c = de->name[de->len];
|
c = de->name[de->len];
|
||||||
de->name[de->len] = '\0';
|
de->name[de->len] = '\0';
|
||||||
if (iterate_dir_call_hook (ino, de->name, &ctx))
|
if (iterate_dir_call_hook (ino, de->name, &ctx))
|
||||||
{
|
return 1;
|
||||||
de->name[de->len] = c;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
de->name[de->len] = c;
|
de->name[de->len] = c;
|
||||||
|
|
||||||
de = grub_xfs_inline_next_de(dir->data, head, de);
|
de = grub_xfs_inline_next_de(dir->data, head, de);
|
||||||
|
|||||||
@@ -3132,7 +3132,7 @@ make_mdn (dnode_end_t * mdn, struct grub_zfs_data *data)
|
|||||||
{
|
{
|
||||||
void *osp;
|
void *osp;
|
||||||
blkptr_t *bp;
|
blkptr_t *bp;
|
||||||
grub_size_t ospsize = 0;
|
grub_size_t ospsize;
|
||||||
grub_err_t err;
|
grub_err_t err;
|
||||||
|
|
||||||
grub_dprintf ("zfs", "endian = %d\n", mdn->endian);
|
grub_dprintf ("zfs", "endian = %d\n", mdn->endian);
|
||||||
|
|||||||
@@ -184,8 +184,6 @@ LZ4_uncompress_unknownOutputSize(const char *source,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* copy literals */
|
/* copy literals */
|
||||||
if ((grub_addr_t) length > ~(grub_addr_t)op)
|
|
||||||
goto _output_error;
|
|
||||||
cpy = op + length;
|
cpy = op + length;
|
||||||
if ((cpy > oend - COPYLENGTH) ||
|
if ((cpy > oend - COPYLENGTH) ||
|
||||||
(ip + length > iend - COPYLENGTH)) {
|
(ip + length > iend - COPYLENGTH)) {
|
||||||
|
|||||||
@@ -336,7 +336,6 @@ grub_gdb_trap (int trap_no)
|
|||||||
/* sAA..AA: Step one instruction from AA..AA(optional). */
|
/* sAA..AA: Step one instruction from AA..AA(optional). */
|
||||||
case 's':
|
case 's':
|
||||||
stepping = 1;
|
stepping = 1;
|
||||||
/* FALLTHROUGH */
|
|
||||||
|
|
||||||
/* cAA..AA: Continue at address AA..AA(optional). */
|
/* cAA..AA: Continue at address AA..AA(optional). */
|
||||||
case 'c':
|
case 'c':
|
||||||
|
|||||||
+7
-10
@@ -1,4 +1,4 @@
|
|||||||
#! @BUILD_SHEBANG@
|
#! /bin/sh
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Copyright (C) 2010 Free Software Foundation, Inc.
|
# Copyright (C) 2010 Free Software Foundation, Inc.
|
||||||
@@ -15,12 +15,12 @@ set -e
|
|||||||
#
|
#
|
||||||
# Example:
|
# Example:
|
||||||
#
|
#
|
||||||
# genmod.sh moddep.lst normal.module build-grub-module-verifier normal.mod
|
# genmod.sh moddep.lst normal.module normal.mod
|
||||||
#
|
#
|
||||||
|
|
||||||
moddep=$1
|
moddep=$1
|
||||||
infile=$2
|
infile=$2
|
||||||
outfile=$4
|
outfile=$3
|
||||||
|
|
||||||
tmpfile=${outfile}.tmp
|
tmpfile=${outfile}.tmp
|
||||||
modname=`echo $infile | sed -e 's@\.module.*$@@'`
|
modname=`echo $infile | sed -e 's@\.module.*$@@'`
|
||||||
@@ -58,7 +58,7 @@ if test x@TARGET_APPLE_LINKER@ != x1; then
|
|||||||
-K grub_mod_init -K grub_mod_fini \
|
-K grub_mod_init -K grub_mod_fini \
|
||||||
-K _grub_mod_init -K _grub_mod_fini \
|
-K _grub_mod_init -K _grub_mod_fini \
|
||||||
-R .note.gnu.gold-version -R .note.GNU-stack \
|
-R .note.gnu.gold-version -R .note.GNU-stack \
|
||||||
-R .note -R .comment -R .ARM.exidx $tmpfile || exit 1
|
-R .note -R .comment $tmpfile || exit 1
|
||||||
fi
|
fi
|
||||||
if ! test -z "${TARGET_OBJ2ELF}"; then
|
if ! test -z "${TARGET_OBJ2ELF}"; then
|
||||||
"${TARGET_OBJ2ELF}" $tmpfile || exit 1
|
"${TARGET_OBJ2ELF}" $tmpfile || exit 1
|
||||||
@@ -79,9 +79,9 @@ else
|
|||||||
for dep in $deps; do echo "char moddep_$dep[] __attribute__ ((section(\"_moddeps, _moddeps\"))) = \"$dep\";" >>$t2; done
|
for dep in $deps; do echo "char moddep_$dep[] __attribute__ ((section(\"_moddeps, _moddeps\"))) = \"$dep\";" >>$t2; done
|
||||||
|
|
||||||
if test -n "$deps"; then
|
if test -n "$deps"; then
|
||||||
@TARGET_CC@ @TARGET_LDFLAGS@ @TARGET_INCREMENTAL_LINK@ -ffreestanding -nostdlib -o $tmpfile2 $t1 $t2 $tmpfile
|
@TARGET_CC@ @TARGET_LDFLAGS@ -ffreestanding -nostdlib -o $tmpfile2 $t1 $t2 $tmpfile -Wl,-r,-d
|
||||||
else
|
else
|
||||||
@TARGET_CC@ @TARGET_LDFLAGS@ @TARGET_INCREMENTAL_LINK@ -ffreestanding -nostdlib -o $tmpfile2 $t1 $tmpfile
|
@TARGET_CC@ @TARGET_LDFLAGS@ -ffreestanding -nostdlib -o $tmpfile2 $t1 $tmpfile -Wl,-r,-d
|
||||||
fi
|
fi
|
||||||
rm -f $t1 $t2 $tmpfile
|
rm -f $t1 $t2 $tmpfile
|
||||||
mv $tmpfile2 $tmpfile
|
mv $tmpfile2 $tmpfile
|
||||||
@@ -91,9 +91,6 @@ else
|
|||||||
-nr:_grub_mod_init:grub_mod_init \
|
-nr:_grub_mod_init:grub_mod_init \
|
||||||
-nr:_grub_mod_fini:grub_mod_fini \
|
-nr:_grub_mod_fini:grub_mod_fini \
|
||||||
-wd1106 -nu -nd $tmpfile.bin $tmpfile || exit 1
|
-wd1106 -nu -nd $tmpfile.bin $tmpfile || exit 1
|
||||||
rm -f $tmpfile.bin
|
rm -f $name.bin
|
||||||
fi
|
|
||||||
if test x@platform@ != xemu; then
|
|
||||||
./build-grub-module-verifier@BUILD_EXEEXT@ $tmpfile @target_cpu@ @platform@
|
|
||||||
fi
|
fi
|
||||||
mv $tmpfile $outfile
|
mv $tmpfile $outfile
|
||||||
+1
-31
@@ -29,7 +29,7 @@ BEGIN {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
printf "error: %u: unrecognized input format\n", NR >"/dev/stderr";
|
printf "error: %u: unrecognized input format\n", NR;
|
||||||
error++;
|
error++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -39,8 +39,6 @@ END {
|
|||||||
if (error >= 1)
|
if (error >= 1)
|
||||||
exit 1;
|
exit 1;
|
||||||
|
|
||||||
total_depcount = 0
|
|
||||||
|
|
||||||
for (mod in modtab) {
|
for (mod in modtab) {
|
||||||
# Remove duplications.
|
# Remove duplications.
|
||||||
split(modtab[mod], depmods, " ");
|
split(modtab[mod], depmods, " ");
|
||||||
@@ -54,42 +52,14 @@ END {
|
|||||||
uniqmods[depmod] = 1;
|
uniqmods[depmod] = 1;
|
||||||
}
|
}
|
||||||
modlist = ""
|
modlist = ""
|
||||||
depcount[mod] = 0
|
|
||||||
for (depmod in uniqmods) {
|
for (depmod in uniqmods) {
|
||||||
modlist = modlist " " depmod;
|
modlist = modlist " " depmod;
|
||||||
inverse_dependencies[depmod] = inverse_dependencies[depmod] " " mod
|
|
||||||
depcount[mod]++
|
|
||||||
total_depcount++
|
|
||||||
}
|
}
|
||||||
if (mod == "all_video") {
|
if (mod == "all_video") {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
printf "%s:%s\n", mod, modlist;
|
printf "%s:%s\n", mod, modlist;
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check that we have no dependency circles
|
|
||||||
while (total_depcount != 0) {
|
|
||||||
something_done = 0
|
|
||||||
for (mod in depcount) {
|
|
||||||
if (depcount[mod] == 0) {
|
|
||||||
delete depcount[mod]
|
|
||||||
split(inverse_dependencies[mod], inv_depmods, " ");
|
|
||||||
for (ctr in inv_depmods) {
|
|
||||||
depcount[inv_depmods[ctr]]--
|
|
||||||
total_depcount--
|
|
||||||
}
|
|
||||||
delete inverse_dependencies[mod]
|
|
||||||
something_done = 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (something_done == 0) {
|
|
||||||
for (mod in depcount) {
|
|
||||||
circle = circle " " mod
|
|
||||||
}
|
|
||||||
printf "error: modules %s form a dependency circle\n", circle >"/dev/stderr";
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
modlist = ""
|
modlist = ""
|
||||||
while (getline <"video.lst") {
|
while (getline <"video.lst") {
|
||||||
modlist = modlist " " $1;
|
modlist = modlist " " $1;
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#! @BUILD_SHEBANG@
|
#! /bin/sh
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
# Copyright (C) 2010 Free Software Foundation, Inc.
|
# Copyright (C) 2010 Free Software Foundation, Inc.
|
||||||
|
|||||||
@@ -45,7 +45,6 @@ grub_font_draw_string (const char *str, grub_font_t font,
|
|||||||
grub_uint32_t *logical;
|
grub_uint32_t *logical;
|
||||||
grub_ssize_t logical_len, visual_len;
|
grub_ssize_t logical_len, visual_len;
|
||||||
struct grub_unicode_glyph *visual, *ptr;
|
struct grub_unicode_glyph *visual, *ptr;
|
||||||
grub_err_t err;
|
|
||||||
|
|
||||||
logical_len = grub_utf8_to_ucs4_alloc (str, &logical, 0);
|
logical_len = grub_utf8_to_ucs4_alloc (str, &logical, 0);
|
||||||
if (logical_len < 0)
|
if (logical_len < 0)
|
||||||
@@ -57,28 +56,24 @@ grub_font_draw_string (const char *str, grub_font_t font,
|
|||||||
if (visual_len < 0)
|
if (visual_len < 0)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
err = GRUB_ERR_NONE;
|
|
||||||
for (ptr = visual, x = left_x; ptr < visual + visual_len; ptr++)
|
for (ptr = visual, x = left_x; ptr < visual + visual_len; ptr++)
|
||||||
{
|
{
|
||||||
|
grub_err_t err;
|
||||||
struct grub_font_glyph *glyph;
|
struct grub_font_glyph *glyph;
|
||||||
glyph = grub_font_construct_glyph (font, ptr);
|
glyph = grub_font_construct_glyph (font, ptr);
|
||||||
if (!glyph)
|
if (!glyph)
|
||||||
{
|
return grub_errno;
|
||||||
err = grub_errno;
|
|
||||||
goto out;
|
|
||||||
}
|
|
||||||
err = grub_font_draw_glyph (glyph, color, x, baseline_y);
|
err = grub_font_draw_glyph (glyph, color, x, baseline_y);
|
||||||
if (err)
|
|
||||||
goto out;
|
|
||||||
x += glyph->device_width;
|
x += glyph->device_width;
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
|
||||||
for (ptr = visual; ptr < visual + visual_len; ptr++)
|
for (ptr = visual; ptr < visual + visual_len; ptr++)
|
||||||
grub_unicode_destroy_glyph (ptr);
|
grub_unicode_destroy_glyph (ptr);
|
||||||
grub_free (visual);
|
grub_free (visual);
|
||||||
|
|
||||||
return err;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the width in pixels of the specified UTF-8 string, when rendered in
|
/* Get the width in pixels of the specified UTF-8 string, when rendered in
|
||||||
|
|||||||
@@ -63,14 +63,14 @@ grub_gfxmenu_try (int entry, grub_menu_t menu, int nested)
|
|||||||
return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"),
|
return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("variable `%s' isn't set"),
|
||||||
"theme");
|
"theme");
|
||||||
|
|
||||||
err = grub_video_get_info (&mode_info);
|
|
||||||
if (err)
|
|
||||||
return err;
|
|
||||||
|
|
||||||
instance = grub_zalloc (sizeof (*instance));
|
instance = grub_zalloc (sizeof (*instance));
|
||||||
if (!instance)
|
if (!instance)
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|
||||||
|
err = grub_video_get_info (&mode_info);
|
||||||
|
if (err)
|
||||||
|
return err;
|
||||||
|
|
||||||
if (theme_path[0] != '/' && theme_path[0] != '(')
|
if (theme_path[0] != '/' && theme_path[0] != '(')
|
||||||
{
|
{
|
||||||
const char *prefix;
|
const char *prefix;
|
||||||
|
|||||||
@@ -255,7 +255,7 @@ theme_set_string (grub_gfxmenu_view_t view,
|
|||||||
{
|
{
|
||||||
unsigned int tmp;
|
unsigned int tmp;
|
||||||
int err = theme_get_unsigned_int_from_proportional (value,
|
int err = theme_get_unsigned_int_from_proportional (value,
|
||||||
view->screen.height,
|
view->screen.width,
|
||||||
&tmp);
|
&tmp);
|
||||||
if (err != GRUB_ERR_NONE)
|
if (err != GRUB_ERR_NONE)
|
||||||
return err;
|
return err;
|
||||||
@@ -275,7 +275,7 @@ theme_set_string (grub_gfxmenu_view_t view,
|
|||||||
{
|
{
|
||||||
unsigned int tmp;
|
unsigned int tmp;
|
||||||
int err = theme_get_unsigned_int_from_proportional (value,
|
int err = theme_get_unsigned_int_from_proportional (value,
|
||||||
view->screen.height,
|
view->screen.width,
|
||||||
&tmp);
|
&tmp);
|
||||||
if (err != GRUB_ERR_NONE)
|
if (err != GRUB_ERR_NONE)
|
||||||
return err;
|
return err;
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
diff --git grub-core/gnulib/regexec.c grub-core/gnulib/regexec.c
|
|
||||||
index f632cd4..a7776f0 100644
|
|
||||||
--- grub-core/gnulib/regexec.c
|
|
||||||
+++ grub-core/gnulib/regexec.c
|
|
||||||
@@ -4099,6 +4099,9 @@ check_node_accept (const re_match_context_t *mctx, const re_token_t *node,
|
|
||||||
case OP_UTF8_PERIOD:
|
|
||||||
if (ch >= ASCII_CHARS)
|
|
||||||
return false;
|
|
||||||
+#if defined __GNUC__ && __GNUC__ >= 7
|
|
||||||
+ __attribute__ ((fallthrough));
|
|
||||||
+#endif
|
|
||||||
/* FALLTHROUGH */
|
|
||||||
#endif
|
|
||||||
case OP_PERIOD:
|
|
||||||
@@ -4099,9 +4099,6 @@ check_node_accept (const re_match_context_t *mctx, const re_token_t *node,
|
|||||||
case OP_UTF8_PERIOD:
|
case OP_UTF8_PERIOD:
|
||||||
if (ch >= ASCII_CHARS)
|
if (ch >= ASCII_CHARS)
|
||||||
return false;
|
return false;
|
||||||
#if defined __GNUC__ && __GNUC__ >= 7
|
|
||||||
__attribute__ ((fallthrough));
|
|
||||||
#endif
|
|
||||||
/* FALLTHROUGH */
|
/* FALLTHROUGH */
|
||||||
#endif
|
#endif
|
||||||
case OP_PERIOD:
|
case OP_PERIOD:
|
||||||
|
|||||||
@@ -1,119 +0,0 @@
|
|||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2012 Free Software Foundation, Inc.
|
|
||||||
*
|
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* GRUB is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/types.h>
|
|
||||||
#include <grub/time.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/acpi.h>
|
|
||||||
|
|
||||||
/* Simple checksum by summing all bytes. Used by ACPI and SMBIOS. */
|
|
||||||
grub_uint8_t
|
|
||||||
grub_byte_checksum (void *base, grub_size_t size)
|
|
||||||
{
|
|
||||||
grub_uint8_t *ptr;
|
|
||||||
grub_uint8_t ret = 0;
|
|
||||||
for (ptr = (grub_uint8_t *) base; ptr < ((grub_uint8_t *) base) + size;
|
|
||||||
ptr++)
|
|
||||||
ret += *ptr;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *
|
|
||||||
grub_acpi_rsdt_find_table (struct grub_acpi_table_header *rsdt, const char *sig)
|
|
||||||
{
|
|
||||||
grub_size_t s;
|
|
||||||
grub_unaligned_uint32_t *ptr;
|
|
||||||
|
|
||||||
if (!rsdt)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (grub_memcmp (rsdt->signature, "RSDT", 4) != 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
ptr = (grub_unaligned_uint32_t *) (rsdt + 1);
|
|
||||||
s = (rsdt->length - sizeof (*rsdt)) / sizeof (grub_uint32_t);
|
|
||||||
for (; s; s--, ptr++)
|
|
||||||
{
|
|
||||||
struct grub_acpi_table_header *tbl;
|
|
||||||
tbl = (struct grub_acpi_table_header *) (grub_addr_t) ptr->val;
|
|
||||||
if (grub_memcmp (tbl->signature, sig, 4) == 0)
|
|
||||||
return tbl;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void *
|
|
||||||
grub_acpi_xsdt_find_table (struct grub_acpi_table_header *xsdt, const char *sig)
|
|
||||||
{
|
|
||||||
grub_size_t s;
|
|
||||||
grub_unaligned_uint64_t *ptr;
|
|
||||||
|
|
||||||
if (!xsdt)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (grub_memcmp (xsdt->signature, "XSDT", 4) != 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
ptr = (grub_unaligned_uint64_t *) (xsdt + 1);
|
|
||||||
s = (xsdt->length - sizeof (*xsdt)) / sizeof (grub_uint32_t);
|
|
||||||
for (; s; s--, ptr++)
|
|
||||||
{
|
|
||||||
struct grub_acpi_table_header *tbl;
|
|
||||||
#if GRUB_CPU_SIZEOF_VOID_P != 8
|
|
||||||
if (ptr->val >> 32)
|
|
||||||
continue;
|
|
||||||
#endif
|
|
||||||
tbl = (struct grub_acpi_table_header *) (grub_addr_t) ptr->val;
|
|
||||||
if (grub_memcmp (tbl->signature, sig, 4) == 0)
|
|
||||||
return tbl;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct grub_acpi_fadt *
|
|
||||||
grub_acpi_find_fadt (void)
|
|
||||||
{
|
|
||||||
struct grub_acpi_fadt *fadt = 0;
|
|
||||||
struct grub_acpi_rsdp_v10 *rsdpv1;
|
|
||||||
struct grub_acpi_rsdp_v20 *rsdpv2;
|
|
||||||
rsdpv1 = grub_machine_acpi_get_rsdpv1 ();
|
|
||||||
if (rsdpv1)
|
|
||||||
fadt = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *)
|
|
||||||
(grub_addr_t) rsdpv1->rsdt_addr,
|
|
||||||
GRUB_ACPI_FADT_SIGNATURE);
|
|
||||||
if (fadt)
|
|
||||||
return fadt;
|
|
||||||
rsdpv2 = grub_machine_acpi_get_rsdpv2 ();
|
|
||||||
if (rsdpv2)
|
|
||||||
fadt = grub_acpi_rsdt_find_table ((struct grub_acpi_table_header *)
|
|
||||||
(grub_addr_t) rsdpv2->rsdpv1.rsdt_addr,
|
|
||||||
GRUB_ACPI_FADT_SIGNATURE);
|
|
||||||
if (fadt)
|
|
||||||
return fadt;
|
|
||||||
if (rsdpv2
|
|
||||||
#if GRUB_CPU_SIZEOF_VOID_P != 8
|
|
||||||
&& !(rsdpv2->xsdt_addr >> 32)
|
|
||||||
#endif
|
|
||||||
)
|
|
||||||
fadt = grub_acpi_xsdt_find_table ((struct grub_acpi_table_header *)
|
|
||||||
(grub_addr_t) rsdpv2->xsdt_addr,
|
|
||||||
GRUB_ACPI_FADT_SIGNATURE);
|
|
||||||
if (fadt)
|
|
||||||
return fadt;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -173,8 +173,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
sym_addr += grub_arm_thm_call_get_offset ((grub_uint16_t *) target);
|
sym_addr += grub_arm_thm_call_get_offset ((grub_uint16_t *) target);
|
||||||
|
|
||||||
grub_dprintf ("dl", " sym_addr = 0x%08x\n", sym_addr);
|
grub_dprintf ("dl", " sym_addr = 0x%08x\n", sym_addr);
|
||||||
if (ELF_ST_TYPE (sym->st_info) != STT_FUNC)
|
|
||||||
sym_addr |= 1;
|
|
||||||
|
|
||||||
offset = sym_addr - (grub_uint32_t) target;
|
offset = sym_addr - (grub_uint32_t) target;
|
||||||
|
|
||||||
@@ -229,16 +227,13 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
|
|
||||||
sym_addr += grub_arm_thm_jump19_get_offset ((grub_uint16_t *) target);
|
sym_addr += grub_arm_thm_jump19_get_offset ((grub_uint16_t *) target);
|
||||||
|
|
||||||
if (ELF_ST_TYPE (sym->st_info) != STT_FUNC)
|
|
||||||
sym_addr |= 1;
|
|
||||||
|
|
||||||
offset = sym_addr - (grub_uint32_t) target;
|
offset = sym_addr - (grub_uint32_t) target;
|
||||||
|
|
||||||
if (!grub_arm_thm_jump19_check_offset (offset)
|
if (!grub_arm_thm_jump19_check_offset (offset)
|
||||||
|| !(sym_addr & 1))
|
|| !(sym_addr & 1))
|
||||||
{
|
{
|
||||||
struct trampoline_thumb *tp = mod->trampptr;
|
struct trampoline_thumb *tp = mod->gotptr;
|
||||||
mod->trampptr = tp + 1;
|
mod->gotptr = tp + 1;
|
||||||
grub_memcpy (tp->template, thumb_template, sizeof (tp->template));
|
grub_memcpy (tp->template, thumb_template, sizeof (tp->template));
|
||||||
tp->neg_addr = -sym_addr - 4;
|
tp->neg_addr = -sym_addr - 4;
|
||||||
offset = ((grub_uint8_t *) tp - (grub_uint8_t *) target - 4) | 1;
|
offset = ((grub_uint8_t *) tp - (grub_uint8_t *) target - 4) | 1;
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ static void
|
|||||||
increment_timer (grub_efi_event_t event __attribute__ ((unused)),
|
increment_timer (grub_efi_event_t event __attribute__ ((unused)),
|
||||||
void *context __attribute__ ((unused)))
|
void *context __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
tmr += 10;
|
tmr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -52,7 +52,7 @@ grub_machine_init (void)
|
|||||||
|
|
||||||
efi_call_5 (b->create_event, GRUB_EFI_EVT_TIMER | GRUB_EFI_EVT_NOTIFY_SIGNAL,
|
efi_call_5 (b->create_event, GRUB_EFI_EVT_TIMER | GRUB_EFI_EVT_NOTIFY_SIGNAL,
|
||||||
GRUB_EFI_TPL_CALLBACK, increment_timer, NULL, &tmr_evt);
|
GRUB_EFI_TPL_CALLBACK, increment_timer, NULL, &tmr_evt);
|
||||||
efi_call_3 (b->set_timer, tmr_evt, GRUB_EFI_TIMER_PERIODIC, 100000);
|
efi_call_3 (b->set_timer, tmr_evt, GRUB_EFI_TIMER_PERIODIC, 10000);
|
||||||
|
|
||||||
grub_install_get_time_ms (grub_efi_get_time_ms);
|
grub_install_get_time_ms (grub_efi_get_time_ms);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -55,6 +55,10 @@ FUNCTION(_start)
|
|||||||
VARIABLE(grub_total_module_size)
|
VARIABLE(grub_total_module_size)
|
||||||
.long 0
|
.long 0
|
||||||
|
|
||||||
|
VARIABLE(grub_uboot_machine_type)
|
||||||
|
.long 0
|
||||||
|
VARIABLE(grub_uboot_boot_data)
|
||||||
|
.long 0
|
||||||
VARIABLE(grub_modbase)
|
VARIABLE(grub_modbase)
|
||||||
.long 0
|
.long 0
|
||||||
bss_start_ptr:
|
bss_start_ptr:
|
||||||
@@ -62,66 +66,29 @@ bss_start_ptr:
|
|||||||
end_ptr:
|
end_ptr:
|
||||||
.long EXT_C(_end)
|
.long EXT_C(_end)
|
||||||
|
|
||||||
@ Memory map at start:
|
|
||||||
@ * text+data
|
|
||||||
@ * list relocations
|
|
||||||
@ * modules
|
|
||||||
@ Before we enter C, we need to apply the relocations
|
|
||||||
@ and get following map:
|
|
||||||
@ * text+data
|
|
||||||
@ * BSS (cleared)
|
|
||||||
@ * stack
|
|
||||||
@ * modules
|
|
||||||
@
|
|
||||||
@ To make things easier we ensure
|
|
||||||
@ that BSS+stack is larger than list of relocations
|
|
||||||
@ by increasing stack if necessarry.
|
|
||||||
@ This allows us to always unconditionally copy backwards
|
|
||||||
@ Currently list of relocations is ~5K and stack is set
|
|
||||||
@ to be at least 256K
|
|
||||||
|
|
||||||
FUNCTION(codestart)
|
FUNCTION(codestart)
|
||||||
@ Store context: Machine ID, atags/dtb, ...
|
@ Store context: Machine ID, atags/dtb, ...
|
||||||
@ U-Boot API signature is stored on the U-Boot heap
|
@ U-Boot API signature is stored on the U-Boot heap
|
||||||
@ Stack pointer used as start address for signature probing
|
@ Stack pointer used as start address for signature probing
|
||||||
mov r12, sp
|
mov r12, sp
|
||||||
adr sp, entry_state
|
adr sp, entry_state
|
||||||
push {r1-r12,lr} @ store U-Boot context (sp in r12)
|
push {r4-r12,lr} @ store U-Boot context (sp in r12)
|
||||||
|
|
||||||
adr r1, _start
|
str r1, EXT_C(grub_uboot_machine_type)
|
||||||
ldr r0, bss_start_ptr @ src
|
str r2, EXT_C(grub_uboot_boot_data)
|
||||||
add r0, r0, r1
|
|
||||||
|
|
||||||
add r0, r0, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1)
|
@ Modules have been stored as a blob in BSS,
|
||||||
mvn r2, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1)
|
|
||||||
and r0, r0, r2
|
|
||||||
1:
|
|
||||||
ldr r3, [r0], #4 @load next offset
|
|
||||||
@ both -2 and -1 are treated the same as we have only one type of relocs
|
|
||||||
@ -2 means "end of this type of relocs" and -1 means "end of all relocs"
|
|
||||||
add r2, r3, #2
|
|
||||||
cmp r2, #1
|
|
||||||
bls reloc_done
|
|
||||||
@ Adjust next offset
|
|
||||||
ldr r2, [r3, r1]
|
|
||||||
add r2, r2, r1
|
|
||||||
str r2, [r3, r1]
|
|
||||||
b 1b
|
|
||||||
|
|
||||||
reloc_done:
|
|
||||||
|
|
||||||
@ Modules have been stored as a blob
|
|
||||||
@ they need to be manually relocated to _end
|
@ they need to be manually relocated to _end
|
||||||
|
ldr r0, bss_start_ptr @ src
|
||||||
add r0, r0, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1)
|
add r0, r0, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1)
|
||||||
mvn r1, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1)
|
mvn r1, #(GRUB_KERNEL_MACHINE_MOD_ALIGN - 1)
|
||||||
and r0, r0, r1 @ src = aligned end of relocations
|
and r0, r0, r1
|
||||||
|
|
||||||
ldr r1, end_ptr @ dst = End of BSS
|
ldr r1, end_ptr @ dst = End of BSS
|
||||||
ldr r2, grub_total_module_size @ blob size
|
ldr r2, grub_total_module_size @ blob size
|
||||||
|
|
||||||
add r1, r1, #GRUB_KERNEL_MACHINE_STACK_SIZE
|
add r1, r1, #GRUB_KERNEL_MACHINE_STACK_SIZE
|
||||||
and r1, r1, #~0x7 @ Ensure 8-byte alignment
|
and r1, r1, #~0x7 @ Ensure 8-byte alignment
|
||||||
|
|
||||||
sub sp, r1, #8
|
sub sp, r1, #8
|
||||||
add r1, r1, #1024
|
add r1, r1, #1024
|
||||||
|
|
||||||
@@ -190,11 +157,6 @@ FUNCTION(grub_uboot_return)
|
|||||||
.align 3
|
.align 3
|
||||||
@ U-boot context stack space
|
@ U-boot context stack space
|
||||||
entry_state_end:
|
entry_state_end:
|
||||||
VARIABLE(grub_uboot_machine_type)
|
|
||||||
.long 0 @ r1
|
|
||||||
VARIABLE(grub_uboot_boot_data)
|
|
||||||
.long 0 @ r2
|
|
||||||
.long 0 @ r3
|
|
||||||
.long 0 @ r4
|
.long 0 @ r4
|
||||||
.long 0 @ r5
|
.long 0 @ r5
|
||||||
.long 0 @ r6
|
.long 0 @ r6
|
||||||
|
|||||||
+43
-71
@@ -25,9 +25,14 @@
|
|||||||
#include <grub/i18n.h>
|
#include <grub/i18n.h>
|
||||||
#include <grub/cpu/reloc.h>
|
#include <grub/cpu/reloc.h>
|
||||||
|
|
||||||
|
struct trampoline
|
||||||
|
{
|
||||||
#define LDR 0x58000050
|
#define LDR 0x58000050
|
||||||
#define BR 0xd61f0200
|
#define BR 0xd61f0200
|
||||||
|
grub_uint32_t ldr; /* ldr x16, 8 */
|
||||||
|
grub_uint32_t br; /* br x16 */
|
||||||
|
grub_uint64_t addr;
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if EHDR is a valid ELF header.
|
* Check if EHDR is a valid ELF header.
|
||||||
@@ -48,6 +53,42 @@ grub_arch_dl_check_header (void *ehdr)
|
|||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wcast-align"
|
#pragma GCC diagnostic ignored "-Wcast-align"
|
||||||
|
|
||||||
|
grub_err_t
|
||||||
|
grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
||||||
|
grub_size_t *got)
|
||||||
|
{
|
||||||
|
const Elf_Ehdr *e = ehdr;
|
||||||
|
const Elf_Shdr *s;
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
*tramp = 0;
|
||||||
|
*got = 0;
|
||||||
|
|
||||||
|
for (i = 0, s = (const Elf_Shdr *) ((grub_addr_t) e + e->e_shoff);
|
||||||
|
i < e->e_shnum;
|
||||||
|
i++, s = (const Elf_Shdr *) ((grub_addr_t) s + e->e_shentsize))
|
||||||
|
if (s->sh_type == SHT_REL || s->sh_type == SHT_RELA)
|
||||||
|
{
|
||||||
|
const Elf_Rel *rel, *max;
|
||||||
|
|
||||||
|
for (rel = (const Elf_Rel *) ((grub_addr_t) e + s->sh_offset),
|
||||||
|
max = rel + s->sh_size / s->sh_entsize;
|
||||||
|
rel < max;
|
||||||
|
rel = (const Elf_Rel *) ((grub_addr_t) rel + s->sh_entsize))
|
||||||
|
switch (ELF_R_TYPE (rel->r_info))
|
||||||
|
{
|
||||||
|
case R_AARCH64_CALL26:
|
||||||
|
case R_AARCH64_JUMP26:
|
||||||
|
{
|
||||||
|
*tramp += sizeof (struct trampoline);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Unified function for both REL and RELA
|
* Unified function for both REL and RELA
|
||||||
*/
|
*/
|
||||||
@@ -56,7 +97,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
Elf_Shdr *s, grub_dl_segment_t seg)
|
Elf_Shdr *s, grub_dl_segment_t seg)
|
||||||
{
|
{
|
||||||
Elf_Rel *rel, *max;
|
Elf_Rel *rel, *max;
|
||||||
unsigned unmatched_adr_got_page = 0;
|
|
||||||
|
|
||||||
for (rel = (Elf_Rel *) ((char *) ehdr + s->sh_offset),
|
for (rel = (Elf_Rel *) ((char *) ehdr + s->sh_offset),
|
||||||
max = (Elf_Rel *) ((char *) rel + s->sh_size);
|
max = (Elf_Rel *) ((char *) rel + s->sh_size);
|
||||||
@@ -92,12 +132,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
*abs_place = (grub_uint64_t) sym_addr;
|
*abs_place = (grub_uint64_t) sym_addr;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case R_AARCH64_ADD_ABS_LO12_NC:
|
|
||||||
grub_arm64_set_abs_lo12 (place, sym_addr);
|
|
||||||
break;
|
|
||||||
case R_AARCH64_LDST64_ABS_LO12_NC:
|
|
||||||
grub_arm64_set_abs_lo12_ldst64 (place, sym_addr);
|
|
||||||
break;
|
|
||||||
case R_AARCH64_CALL26:
|
case R_AARCH64_CALL26:
|
||||||
case R_AARCH64_JUMP26:
|
case R_AARCH64_JUMP26:
|
||||||
{
|
{
|
||||||
@@ -105,7 +139,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
|
|
||||||
if (!grub_arm_64_check_xxxx26_offset (offset))
|
if (!grub_arm_64_check_xxxx26_offset (offset))
|
||||||
{
|
{
|
||||||
struct grub_arm64_trampoline *tp = mod->trampptr;
|
struct trampoline *tp = mod->trampptr;
|
||||||
mod->trampptr = tp + 1;
|
mod->trampptr = tp + 1;
|
||||||
tp->ldr = LDR;
|
tp->ldr = LDR;
|
||||||
tp->br = BR;
|
tp->br = BR;
|
||||||
@@ -120,68 +154,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
grub_arm64_set_xxxx26_offset (place, offset);
|
grub_arm64_set_xxxx26_offset (place, offset);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case R_AARCH64_PREL32:
|
|
||||||
{
|
|
||||||
grub_int64_t value;
|
|
||||||
Elf64_Word *addr32 = place;
|
|
||||||
value = ((grub_int32_t) *addr32) + sym_addr -
|
|
||||||
(Elf64_Xword) (grub_addr_t) seg->addr - rel->r_offset;
|
|
||||||
if (value != (grub_int32_t) value)
|
|
||||||
return grub_error (GRUB_ERR_BAD_MODULE, "relocation out of range");
|
|
||||||
grub_dprintf("dl", " reloc_prel32 %p => 0x%016llx\n",
|
|
||||||
place, (unsigned long long) sym_addr);
|
|
||||||
*addr32 = value;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case R_AARCH64_ADR_GOT_PAGE:
|
|
||||||
{
|
|
||||||
grub_uint64_t *gp = mod->gotptr;
|
|
||||||
Elf_Rela *rel2;
|
|
||||||
grub_int64_t gpoffset = ((grub_uint64_t) gp & ~0xfffULL) - (((grub_uint64_t) place) & ~0xfffULL);
|
|
||||||
*gp = (grub_uint64_t) sym_addr;
|
|
||||||
mod->gotptr = gp + 1;
|
|
||||||
unmatched_adr_got_page++;
|
|
||||||
grub_dprintf("dl", " reloc_got %p => 0x%016llx (0x%016llx)\n",
|
|
||||||
place, (unsigned long long) sym_addr, (unsigned long long) gp);
|
|
||||||
if (!grub_arm64_check_hi21_signed (gpoffset))
|
|
||||||
return grub_error (GRUB_ERR_BAD_MODULE,
|
|
||||||
"HI21 out of range");
|
|
||||||
grub_arm64_set_hi21(place, gpoffset);
|
|
||||||
for (rel2 = (Elf_Rela *) ((char *) rel + s->sh_entsize);
|
|
||||||
rel2 < (Elf_Rela *) max;
|
|
||||||
rel2 = (Elf_Rela *) ((char *) rel2 + s->sh_entsize))
|
|
||||||
if (ELF_R_SYM (rel2->r_info)
|
|
||||||
== ELF_R_SYM (rel->r_info)
|
|
||||||
&& ((Elf_Rela *) rel)->r_addend == rel2->r_addend
|
|
||||||
&& ELF_R_TYPE (rel2->r_info) == R_AARCH64_LD64_GOT_LO12_NC)
|
|
||||||
{
|
|
||||||
grub_arm64_set_abs_lo12_ldst64 ((void *) ((grub_addr_t) seg->addr + rel2->r_offset),
|
|
||||||
(grub_uint64_t)gp);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if (rel2 >= (Elf_Rela *) max)
|
|
||||||
return grub_error (GRUB_ERR_BAD_MODULE,
|
|
||||||
"ADR_GOT_PAGE without matching LD64_GOT_LO12_NC");
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case R_AARCH64_LD64_GOT_LO12_NC:
|
|
||||||
if (unmatched_adr_got_page == 0)
|
|
||||||
return grub_error (GRUB_ERR_BAD_MODULE,
|
|
||||||
"LD64_GOT_LO12_NC without matching ADR_GOT_PAGE");
|
|
||||||
unmatched_adr_got_page--;
|
|
||||||
break;
|
|
||||||
case R_AARCH64_ADR_PREL_PG_HI21:
|
|
||||||
{
|
|
||||||
grub_int64_t offset = (sym_addr & ~0xfffULL) - (((grub_uint64_t) place) & ~0xfffULL);
|
|
||||||
|
|
||||||
if (!grub_arm64_check_hi21_signed (offset))
|
|
||||||
return grub_error (GRUB_ERR_BAD_MODULE,
|
|
||||||
"HI21 out of range");
|
|
||||||
|
|
||||||
grub_arm64_set_hi21 (place, offset);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
N_("relocation 0x%x is not implemented yet"),
|
N_("relocation 0x%x is not implemented yet"),
|
||||||
|
|||||||
@@ -53,82 +53,3 @@ grub_arm64_set_xxxx26_offset (grub_uint32_t *place, grub_int64_t offset)
|
|||||||
*place &= insmask;
|
*place &= insmask;
|
||||||
*place |= grub_cpu_to_le32 (offset >> 2) & ~insmask;
|
*place |= grub_cpu_to_le32 (offset >> 2) & ~insmask;
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
|
||||||
grub_arm64_check_hi21_signed (grub_int64_t offset)
|
|
||||||
{
|
|
||||||
if (offset != (grub_int64_t)(grub_int32_t)offset)
|
|
||||||
return 0;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_arm64_set_hi21 (grub_uint32_t *place, grub_int64_t offset)
|
|
||||||
{
|
|
||||||
const grub_uint32_t insmask = grub_cpu_to_le32_compile_time (0x9f00001f);
|
|
||||||
grub_uint32_t val;
|
|
||||||
|
|
||||||
offset >>= 12;
|
|
||||||
|
|
||||||
val = ((offset & 3) << 29) | (((offset >> 2) & 0x7ffff) << 5);
|
|
||||||
|
|
||||||
*place &= insmask;
|
|
||||||
*place |= grub_cpu_to_le32 (val) & ~insmask;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_arm64_set_abs_lo12 (grub_uint32_t *place, grub_int64_t target)
|
|
||||||
{
|
|
||||||
const grub_uint32_t insmask = grub_cpu_to_le32_compile_time (0xffc003ff);
|
|
||||||
|
|
||||||
*place &= insmask;
|
|
||||||
*place |= grub_cpu_to_le32 (target << 10) & ~insmask;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_arm64_set_abs_lo12_ldst64 (grub_uint32_t *place, grub_int64_t target)
|
|
||||||
{
|
|
||||||
const grub_uint32_t insmask = grub_cpu_to_le32_compile_time (0xfff803ff);
|
|
||||||
|
|
||||||
*place &= insmask;
|
|
||||||
*place |= grub_cpu_to_le32 (target << 7) & ~insmask;
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wcast-align"
|
|
||||||
|
|
||||||
grub_err_t
|
|
||||||
grub_arm64_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
|
||||||
grub_size_t *got)
|
|
||||||
{
|
|
||||||
const Elf64_Ehdr *e = ehdr;
|
|
||||||
const Elf64_Shdr *s;
|
|
||||||
unsigned i;
|
|
||||||
|
|
||||||
*tramp = 0;
|
|
||||||
*got = 0;
|
|
||||||
|
|
||||||
for (i = 0, s = (Elf64_Shdr *) ((char *) e + grub_le_to_cpu64 (e->e_shoff));
|
|
||||||
i < grub_le_to_cpu16 (e->e_shnum);
|
|
||||||
i++, s = (Elf64_Shdr *) ((char *) s + grub_le_to_cpu16 (e->e_shentsize)))
|
|
||||||
if (s->sh_type == grub_cpu_to_le32_compile_time (SHT_REL)
|
|
||||||
|| s->sh_type == grub_cpu_to_le32_compile_time (SHT_RELA))
|
|
||||||
{
|
|
||||||
const Elf64_Rela *rel, *max;
|
|
||||||
|
|
||||||
for (rel = (Elf64_Rela *) ((char *) e + grub_le_to_cpu64 (s->sh_offset)),
|
|
||||||
max = (const Elf64_Rela *) ((char *) rel + grub_le_to_cpu64 (s->sh_size));
|
|
||||||
rel < max; rel = (const Elf64_Rela *) ((char *) rel + grub_le_to_cpu64 (s->sh_entsize)))
|
|
||||||
switch (ELF64_R_TYPE (rel->r_info))
|
|
||||||
{
|
|
||||||
case R_AARCH64_CALL26:
|
|
||||||
case R_AARCH64_JUMP26:
|
|
||||||
*tramp += sizeof (struct grub_arm64_trampoline);
|
|
||||||
break;
|
|
||||||
case R_AARCH64_ADR_GOT_PAGE:
|
|
||||||
*got += 8;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return GRUB_ERR_NONE;
|
|
||||||
}
|
|
||||||
@@ -1,60 +0,0 @@
|
|||||||
/* init.c - initialize an arm-based EFI system */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2013 Free Software Foundation, Inc.
|
|
||||||
*
|
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* GRUB is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/env.h>
|
|
||||||
#include <grub/kernel.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
#include <grub/time.h>
|
|
||||||
#include <grub/efi/efi.h>
|
|
||||||
#include <grub/loader.h>
|
|
||||||
|
|
||||||
static grub_uint64_t timer_frequency_in_khz;
|
|
||||||
|
|
||||||
static grub_uint64_t
|
|
||||||
grub_efi_get_time_ms (void)
|
|
||||||
{
|
|
||||||
grub_uint64_t tmr;
|
|
||||||
asm volatile("mrs %0, cntvct_el0" : "=r" (tmr));
|
|
||||||
|
|
||||||
return tmr / timer_frequency_in_khz;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_machine_init (void)
|
|
||||||
{
|
|
||||||
grub_uint64_t timer_frequency;
|
|
||||||
|
|
||||||
grub_efi_init ();
|
|
||||||
|
|
||||||
asm volatile("mrs %0, cntfrq_el0" : "=r" (timer_frequency));
|
|
||||||
timer_frequency_in_khz = timer_frequency / 1000;
|
|
||||||
|
|
||||||
grub_install_get_time_ms (grub_efi_get_time_ms);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_machine_fini (int flags)
|
|
||||||
{
|
|
||||||
if (!(flags & GRUB_LOADER_FLAG_NORETURN))
|
|
||||||
return;
|
|
||||||
|
|
||||||
grub_efi_fini ();
|
|
||||||
}
|
|
||||||
+2
-8
@@ -333,11 +333,8 @@ grub_dl_resolve_symbols (grub_dl_t mod, Elf_Ehdr *e)
|
|||||||
if (s->sh_type == SHT_SYMTAB)
|
if (s->sh_type == SHT_SYMTAB)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
/* Module without symbol table may still be used to pull in dependencies.
|
|
||||||
We verify at build time that such modules do not contain any relocations
|
|
||||||
that may reference symbol table. */
|
|
||||||
if (i == e->e_shnum)
|
if (i == e->e_shnum)
|
||||||
return GRUB_ERR_NONE;
|
return grub_error (GRUB_ERR_BAD_MODULE, N_("no symbol table"));
|
||||||
|
|
||||||
#ifdef GRUB_MODULES_MACHINE_READONLY
|
#ifdef GRUB_MODULES_MACHINE_READONLY
|
||||||
mod->symtab = grub_malloc (s->sh_size);
|
mod->symtab = grub_malloc (s->sh_size);
|
||||||
@@ -579,9 +576,6 @@ grub_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
|||||||
|
|
||||||
if (seg)
|
if (seg)
|
||||||
{
|
{
|
||||||
if (!mod->symtab)
|
|
||||||
return grub_error (GRUB_ERR_BAD_MODULE, "relocation without symbol table");
|
|
||||||
|
|
||||||
err = grub_arch_dl_relocate_symbols (mod, ehdr, s, seg);
|
err = grub_arch_dl_relocate_symbols (mod, ehdr, s, seg);
|
||||||
if (err)
|
if (err)
|
||||||
return err;
|
return err;
|
||||||
@@ -611,7 +605,7 @@ grub_dl_load_core_noinit (void *addr, grub_size_t size)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Make sure that every section is within the core. */
|
/* Make sure that every section is within the core. */
|
||||||
if (size < e->e_shoff + (grub_uint32_t) e->e_shentsize * e->e_shnum)
|
if (size < e->e_shoff + e->e_shentsize * e->e_shnum)
|
||||||
{
|
{
|
||||||
grub_error (GRUB_ERR_BAD_OS, "ELF sections outside core");
|
grub_error (GRUB_ERR_BAD_OS, "ELF sections outside core");
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -366,9 +366,6 @@ grub_efi_get_filename (grub_efi_device_path_t *dp0)
|
|||||||
len = ((GRUB_EFI_DEVICE_PATH_LENGTH (dp) - 4)
|
len = ((GRUB_EFI_DEVICE_PATH_LENGTH (dp) - 4)
|
||||||
/ sizeof (grub_efi_char16_t));
|
/ sizeof (grub_efi_char16_t));
|
||||||
fp = (grub_efi_file_path_device_path_t *) dp;
|
fp = (grub_efi_file_path_device_path_t *) dp;
|
||||||
/* According to EFI spec Path Name is NULL terminated */
|
|
||||||
while (len > 0 && fp->path_name[len - 1] == 0)
|
|
||||||
len--;
|
|
||||||
|
|
||||||
p = (char *) grub_utf16_to_utf8 ((unsigned char *) p, fp->path_name, len);
|
p = (char *) grub_utf16_to_utf8 ((unsigned char *) p, fp->path_name, len);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
/* fdt.c - EFI Flattened Device Tree interaction */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2006,2007 Free Software Foundation, Inc.
|
|
||||||
*
|
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* GRUB is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/efi/efi.h>
|
|
||||||
#include <grub/mm.h>
|
|
||||||
|
|
||||||
void *
|
|
||||||
grub_efi_get_firmware_fdt (void)
|
|
||||||
{
|
|
||||||
grub_efi_configuration_table_t *tables;
|
|
||||||
grub_efi_guid_t fdt_guid = GRUB_EFI_DEVICE_TREE_GUID;
|
|
||||||
void *firmware_fdt = NULL;
|
|
||||||
unsigned int i;
|
|
||||||
|
|
||||||
/* Look for FDT in UEFI config tables. */
|
|
||||||
tables = grub_efi_system_table->configuration_table;
|
|
||||||
|
|
||||||
for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
|
|
||||||
if (grub_memcmp (&tables[i].vendor_guid, &fdt_guid, sizeof (fdt_guid)) == 0)
|
|
||||||
{
|
|
||||||
firmware_fdt = tables[i].vendor_table;
|
|
||||||
grub_dprintf ("linux", "found registered FDT @ %p\n", firmware_fdt);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return firmware_fdt;
|
|
||||||
}
|
|
||||||
@@ -59,13 +59,10 @@ grub_machine_get_bootlocation (char **device, char **path)
|
|||||||
if (!image)
|
if (!image)
|
||||||
return;
|
return;
|
||||||
*device = grub_efidisk_get_device_name (image->device_handle);
|
*device = grub_efidisk_get_device_name (image->device_handle);
|
||||||
if (!*device && grub_efi_net_config)
|
|
||||||
{
|
|
||||||
grub_efi_net_config (image->device_handle, device, path);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
*path = grub_efi_get_filename (image->file_path);
|
*path = grub_efi_get_filename (image->file_path);
|
||||||
|
if (!*device && grub_efi_net_config)
|
||||||
|
grub_efi_net_config (image->device_handle, device, path);
|
||||||
|
|
||||||
if (*path)
|
if (*path)
|
||||||
{
|
{
|
||||||
/* Get the directory. */
|
/* Get the directory. */
|
||||||
|
|||||||
@@ -28,8 +28,6 @@
|
|||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
GRUB_MOD_LICENSE ("GPLv3+");
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wcast-align"
|
|
||||||
|
|
||||||
#if defined(__powerpc__) && defined(GRUB_MACHINE_IEEE1275)
|
#if defined(__powerpc__) && defined(GRUB_MACHINE_IEEE1275)
|
||||||
#define GRUB_ELF_ENABLE_BI_ENDIAN 1
|
#define GRUB_ELF_ENABLE_BI_ENDIAN 1
|
||||||
#else
|
#else
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ grub_elfXX_load_phdrs (grub_elf_t elf)
|
|||||||
if (elf->phdrs)
|
if (elf->phdrs)
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
|
|
||||||
phdrs_size = (grub_uint32_t) elf->ehdr.ehdrXX.e_phnum * elf->ehdr.ehdrXX.e_phentsize;
|
phdrs_size = elf->ehdr.ehdrXX.e_phnum * elf->ehdr.ehdrXX.e_phentsize;
|
||||||
|
|
||||||
grub_dprintf ("elf", "Loading program headers at 0x%llx, size 0x%lx.\n",
|
grub_dprintf ("elf", "Loading program headers at 0x%llx, size 0x%lx.\n",
|
||||||
(unsigned long long) elf->ehdr.ehdrXX.e_phoff,
|
(unsigned long long) elf->ehdr.ehdrXX.e_phoff,
|
||||||
|
|||||||
@@ -161,9 +161,9 @@ grub_util_biosdisk_open (const char *name, grub_disk_t disk)
|
|||||||
{
|
{
|
||||||
struct stat st;
|
struct stat st;
|
||||||
# if GRUB_DISK_DEVS_ARE_CHAR
|
# if GRUB_DISK_DEVS_ARE_CHAR
|
||||||
if (fstat (fd, &st) >= 0 && S_ISCHR (st.st_mode))
|
if (fstat (fd, &st) < 0 || ! S_ISCHR (st.st_mode))
|
||||||
# else
|
# else
|
||||||
if (fstat (fd, &st) >= 0 && S_ISBLK (st.st_mode))
|
if (fstat (fd, &st) < 0 || ! S_ISBLK (st.st_mode))
|
||||||
# endif
|
# endif
|
||||||
data->is_disk = 1;
|
data->is_disk = 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,13 +63,6 @@ void
|
|||||||
grub_reboot (void)
|
grub_reboot (void)
|
||||||
{
|
{
|
||||||
longjmp (main_env, 1);
|
longjmp (main_env, 1);
|
||||||
grub_fatal ("longjmp failed");
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_exit (void)
|
|
||||||
{
|
|
||||||
grub_reboot ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -93,16 +86,11 @@ grub_machine_fini (int flags)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define OPT_MEMDISK 257
|
|
||||||
|
|
||||||
static struct argp_option options[] = {
|
static struct argp_option options[] = {
|
||||||
{"root", 'r', N_("DEVICE_NAME"), 0, N_("Set root device."), 2},
|
{"root", 'r', N_("DEVICE_NAME"), 0, N_("Set root device."), 2},
|
||||||
{"device-map", 'm', N_("FILE"), 0,
|
{"device-map", 'm', N_("FILE"), 0,
|
||||||
/* TRANSLATORS: There are many devices in device map. */
|
/* TRANSLATORS: There are many devices in device map. */
|
||||||
N_("use FILE as the device map [default=%s]"), 0},
|
N_("use FILE as the device map [default=%s]"), 0},
|
||||||
{"memdisk", OPT_MEMDISK, N_("FILE"), 0,
|
|
||||||
/* TRANSLATORS: There are many devices in device map. */
|
|
||||||
N_("use FILE as memdisk"), 0},
|
|
||||||
{"directory", 'd', N_("DIR"), 0,
|
{"directory", 'd', N_("DIR"), 0,
|
||||||
N_("use GRUB files in the directory DIR [default=%s]"), 0},
|
N_("use GRUB files in the directory DIR [default=%s]"), 0},
|
||||||
{"verbose", 'v', 0, 0, N_("print verbose messages."), 0},
|
{"verbose", 'v', 0, 0, N_("print verbose messages."), 0},
|
||||||
@@ -131,7 +119,6 @@ help_filter (int key, const char *text, void *input __attribute__ ((unused)))
|
|||||||
struct arguments
|
struct arguments
|
||||||
{
|
{
|
||||||
const char *dev_map;
|
const char *dev_map;
|
||||||
const char *mem_disk;
|
|
||||||
int hold;
|
int hold;
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -144,9 +131,6 @@ argp_parser (int key, char *arg, struct argp_state *state)
|
|||||||
|
|
||||||
switch (key)
|
switch (key)
|
||||||
{
|
{
|
||||||
case OPT_MEMDISK:
|
|
||||||
arguments->mem_disk = arg;
|
|
||||||
break;
|
|
||||||
case 'r':
|
case 'r':
|
||||||
free (root_dev);
|
free (root_dev);
|
||||||
root_dev = xstrdup (arg);
|
root_dev = xstrdup (arg);
|
||||||
@@ -196,13 +180,9 @@ main (int argc, char *argv[])
|
|||||||
struct arguments arguments =
|
struct arguments arguments =
|
||||||
{
|
{
|
||||||
.dev_map = DEFAULT_DEVICE_MAP,
|
.dev_map = DEFAULT_DEVICE_MAP,
|
||||||
.hold = 0,
|
.hold = 0
|
||||||
.mem_disk = 0,
|
|
||||||
};
|
};
|
||||||
volatile int hold = 0;
|
volatile int hold = 0;
|
||||||
size_t total_module_size = sizeof (struct grub_module_info), memdisk_size = 0;
|
|
||||||
struct grub_module_info *modinfo;
|
|
||||||
void *mods;
|
|
||||||
|
|
||||||
grub_util_host_init (&argc, &argv);
|
grub_util_host_init (&argc, &argv);
|
||||||
|
|
||||||
@@ -214,33 +194,6 @@ main (int argc, char *argv[])
|
|||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (arguments.mem_disk)
|
|
||||||
{
|
|
||||||
memdisk_size = ALIGN_UP(grub_util_get_image_size (arguments.mem_disk), 512);
|
|
||||||
total_module_size += memdisk_size + sizeof (struct grub_module_header);
|
|
||||||
}
|
|
||||||
|
|
||||||
mods = xmalloc (total_module_size);
|
|
||||||
modinfo = grub_memset (mods, 0, total_module_size);
|
|
||||||
mods = (char *) (modinfo + 1);
|
|
||||||
|
|
||||||
modinfo->magic = GRUB_MODULE_MAGIC;
|
|
||||||
modinfo->offset = sizeof (struct grub_module_info);
|
|
||||||
modinfo->size = total_module_size;
|
|
||||||
|
|
||||||
if (arguments.mem_disk)
|
|
||||||
{
|
|
||||||
struct grub_module_header *header = (struct grub_module_header *) mods;
|
|
||||||
header->type = OBJ_TYPE_MEMDISK;
|
|
||||||
header->size = memdisk_size + sizeof (*header);
|
|
||||||
mods = header + 1;
|
|
||||||
|
|
||||||
grub_util_load_image (arguments.mem_disk, mods);
|
|
||||||
mods = (char *) mods + memdisk_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
grub_modbase = (grub_addr_t) modinfo;
|
|
||||||
|
|
||||||
hold = arguments.hold;
|
hold = arguments.hold;
|
||||||
/* Wait until the ARGS.HOLD variable is cleared by an attached debugger. */
|
/* Wait until the ARGS.HOLD variable is cleared by an attached debugger. */
|
||||||
if (hold && verbosity > 0)
|
if (hold && verbosity > 0)
|
||||||
|
|||||||
@@ -127,7 +127,6 @@ xasprintf (const char *fmt, ...)
|
|||||||
|
|
||||||
va_start (ap, fmt);
|
va_start (ap, fmt);
|
||||||
result = grub_xvasprintf (fmt, ap);
|
result = grub_xvasprintf (fmt, ap);
|
||||||
va_end (ap);
|
|
||||||
if (!result)
|
if (!result)
|
||||||
grub_util_error ("%s", _("out of memory"));
|
grub_util_error ("%s", _("out of memory"));
|
||||||
|
|
||||||
@@ -135,13 +134,11 @@ xasprintf (const char *fmt, ...)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined (GRUB_MACHINE_EMU) || defined (GRUB_UTIL)
|
|
||||||
void
|
void
|
||||||
grub_exit (void)
|
grub_exit (void)
|
||||||
{
|
{
|
||||||
exit (1);
|
exit (1);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
grub_uint64_t
|
grub_uint64_t
|
||||||
grub_get_time_ms (void)
|
grub_get_time_ms (void)
|
||||||
@@ -152,51 +149,3 @@ grub_get_time_ms (void)
|
|||||||
|
|
||||||
return (tv.tv_sec * 1000 + tv.tv_usec / 1000);
|
return (tv.tv_sec * 1000 + tv.tv_usec / 1000);
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t
|
|
||||||
grub_util_get_image_size (const char *path)
|
|
||||||
{
|
|
||||||
FILE *f;
|
|
||||||
size_t ret;
|
|
||||||
off_t sz;
|
|
||||||
|
|
||||||
f = grub_util_fopen (path, "rb");
|
|
||||||
|
|
||||||
if (!f)
|
|
||||||
grub_util_error (_("cannot open `%s': %s"), path, strerror (errno));
|
|
||||||
|
|
||||||
fseeko (f, 0, SEEK_END);
|
|
||||||
|
|
||||||
sz = ftello (f);
|
|
||||||
if (sz < 0)
|
|
||||||
grub_util_error (_("cannot open `%s': %s"), path, strerror (errno));
|
|
||||||
if (sz != (size_t) sz)
|
|
||||||
grub_util_error (_("file `%s' is too big"), path);
|
|
||||||
ret = (size_t) sz;
|
|
||||||
|
|
||||||
fclose (f);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
grub_util_load_image (const char *path, char *buf)
|
|
||||||
{
|
|
||||||
FILE *fp;
|
|
||||||
size_t size;
|
|
||||||
|
|
||||||
grub_util_info ("reading %s", path);
|
|
||||||
|
|
||||||
size = grub_util_get_image_size (path);
|
|
||||||
|
|
||||||
fp = grub_util_fopen (path, "rb");
|
|
||||||
if (! fp)
|
|
||||||
grub_util_error (_("cannot open `%s': %s"), path,
|
|
||||||
strerror (errno));
|
|
||||||
|
|
||||||
if (fread (buf, 1, size, fp) != size)
|
|
||||||
grub_util_error (_("cannot read `%s': %s"), path,
|
|
||||||
strerror (errno));
|
|
||||||
|
|
||||||
fclose (fp);
|
|
||||||
}
|
|
||||||
@@ -89,11 +89,6 @@ grub_file_open (const char *name)
|
|||||||
|
|
||||||
file->device = device;
|
file->device = device;
|
||||||
|
|
||||||
/* In case of relative pathnames and non-Unix systems (like Windows)
|
|
||||||
* name of host files may not start with `/'. Blocklists for host files
|
|
||||||
* are meaningless as well (for a start, host disk does not allow any direct
|
|
||||||
* access - it is just a marker). So skip host disk in this case.
|
|
||||||
*/
|
|
||||||
if (device->disk && file_name[0] != '/'
|
if (device->disk && file_name[0] != '/'
|
||||||
#if defined(GRUB_UTIL) || defined(GRUB_MACHINE_EMU)
|
#if defined(GRUB_UTIL) || defined(GRUB_MACHINE_EMU)
|
||||||
&& grub_strcmp (device->disk->name, "host")
|
&& grub_strcmp (device->disk->name, "host")
|
||||||
|
|||||||
@@ -1,40 +0,0 @@
|
|||||||
/* kern/i386/tsc.c - x86 TSC time source implementation
|
|
||||||
* Requires Pentium or better x86 CPU that supports the RDTSC instruction.
|
|
||||||
* This module uses the PIT to calibrate the TSC to
|
|
||||||
* real time.
|
|
||||||
*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2008 Free Software Foundation, Inc.
|
|
||||||
*
|
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* GRUB is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/types.h>
|
|
||||||
#include <grub/time.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/i386/tsc.h>
|
|
||||||
#include <grub/efi/efi.h>
|
|
||||||
#include <grub/efi/api.h>
|
|
||||||
|
|
||||||
int
|
|
||||||
grub_tsc_calibrate_from_efi (void)
|
|
||||||
{
|
|
||||||
grub_uint64_t start_tsc, end_tsc;
|
|
||||||
/* Use EFI Time Service to calibrate TSC */
|
|
||||||
start_tsc = grub_get_tsc ();
|
|
||||||
efi_call_1 (grub_efi_system_table->boot_services->stall, 1000);
|
|
||||||
end_tsc = grub_get_tsc ();
|
|
||||||
grub_tsc_rate = grub_divmod64 ((1ULL << 32), end_tsc - start_tsc, 0);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
@@ -44,13 +44,6 @@ FUNCTION(grub_bios_interrupt)
|
|||||||
movl 24(%edx), %esi
|
movl 24(%edx), %esi
|
||||||
movl 28(%edx), %edx
|
movl 28(%edx), %edx
|
||||||
|
|
||||||
/*
|
|
||||||
Via C3 CPUs have cache coherence problems, so we need to call
|
|
||||||
wbinvd at these 2 points. As wbinvd slows down boot, don't do
|
|
||||||
it on non-VIA. 9090 is nop nop. */
|
|
||||||
VARIABLE(grub_bios_via_workaround1)
|
|
||||||
.byte 0x90, 0x90
|
|
||||||
|
|
||||||
PROT_TO_REAL
|
PROT_TO_REAL
|
||||||
.code16
|
.code16
|
||||||
pushf
|
pushf
|
||||||
@@ -99,10 +92,6 @@ intno:
|
|||||||
movw %ax, LOCAL(bios_register_es)
|
movw %ax, LOCAL(bios_register_es)
|
||||||
|
|
||||||
popf
|
popf
|
||||||
|
|
||||||
VARIABLE(grub_bios_via_workaround2)
|
|
||||||
.byte 0x90, 0x90
|
|
||||||
|
|
||||||
REAL_TO_PROT
|
REAL_TO_PROT
|
||||||
.code32
|
.code32
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,6 @@
|
|||||||
#include <grub/env.h>
|
#include <grub/env.h>
|
||||||
#include <grub/cache.h>
|
#include <grub/cache.h>
|
||||||
#include <grub/time.h>
|
#include <grub/time.h>
|
||||||
#include <grub/cpu/cpuid.h>
|
|
||||||
#include <grub/cpu/tsc.h>
|
#include <grub/cpu/tsc.h>
|
||||||
#include <grub/machine/time.h>
|
#include <grub/machine/time.h>
|
||||||
|
|
||||||
@@ -185,26 +184,6 @@ mmap_iterate_hook (grub_uint64_t addr, grub_uint64_t size,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
extern grub_uint16_t grub_bios_via_workaround1, grub_bios_via_workaround2;
|
|
||||||
|
|
||||||
/* Via needs additional wbinvd. */
|
|
||||||
static void
|
|
||||||
grub_via_workaround_init (void)
|
|
||||||
{
|
|
||||||
grub_uint32_t manufacturer[3], max_cpuid;
|
|
||||||
if (! grub_cpu_is_cpuid_supported ())
|
|
||||||
return;
|
|
||||||
|
|
||||||
grub_cpuid (0, max_cpuid, manufacturer[0], manufacturer[2], manufacturer[1]);
|
|
||||||
|
|
||||||
if (grub_memcmp (manufacturer, "CentaurHauls", 12) != 0)
|
|
||||||
return;
|
|
||||||
|
|
||||||
grub_bios_via_workaround1 = 0x090f;
|
|
||||||
grub_bios_via_workaround2 = 0x090f;
|
|
||||||
asm volatile ("wbinvd");
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_machine_init (void)
|
grub_machine_init (void)
|
||||||
{
|
{
|
||||||
@@ -214,9 +193,6 @@ grub_machine_init (void)
|
|||||||
#endif
|
#endif
|
||||||
grub_addr_t modend;
|
grub_addr_t modend;
|
||||||
|
|
||||||
/* This has to happen before any BIOS calls. */
|
|
||||||
grub_via_workaround_init ();
|
|
||||||
|
|
||||||
grub_modbase = GRUB_MEMORY_MACHINE_DECOMPRESSION_ADDR + (_edata - _start);
|
grub_modbase = GRUB_MEMORY_MACHINE_DECOMPRESSION_ADDR + (_edata - _start);
|
||||||
|
|
||||||
/* Initialize the console as early as possible. */
|
/* Initialize the console as early as possible. */
|
||||||
|
|||||||
+102
-19
@@ -1,6 +1,7 @@
|
|||||||
/* kern/i386/tsc.c - x86 TSC time source implementation
|
/* kern/i386/tsc.c - x86 TSC time source implementation
|
||||||
* Requires Pentium or better x86 CPU that supports the RDTSC instruction.
|
* Requires Pentium or better x86 CPU that supports the RDTSC instruction.
|
||||||
* This module calibrates the TSC to real time.
|
* This module uses the RTC (via grub_get_rtc()) to calibrate the TSC to
|
||||||
|
* real time.
|
||||||
*
|
*
|
||||||
* GRUB -- GRand Unified Bootloader
|
* GRUB -- GRand Unified Bootloader
|
||||||
* Copyright (C) 2008 Free Software Foundation, Inc.
|
* Copyright (C) 2008 Free Software Foundation, Inc.
|
||||||
@@ -24,6 +25,12 @@
|
|||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/i386/tsc.h>
|
#include <grub/i386/tsc.h>
|
||||||
#include <grub/i386/cpuid.h>
|
#include <grub/i386/cpuid.h>
|
||||||
|
#ifdef GRUB_MACHINE_XEN
|
||||||
|
#include <grub/xen.h>
|
||||||
|
#else
|
||||||
|
#include <grub/i386/pit.h>
|
||||||
|
#endif
|
||||||
|
#include <grub/cpu/io.h>
|
||||||
|
|
||||||
/* This defines the value TSC had at the epoch (that is, when we calibrated it). */
|
/* This defines the value TSC had at the epoch (that is, when we calibrated it). */
|
||||||
static grub_uint64_t tsc_boot_time;
|
static grub_uint64_t tsc_boot_time;
|
||||||
@@ -33,6 +40,66 @@ static grub_uint64_t tsc_boot_time;
|
|||||||
in 32-bit. */
|
in 32-bit. */
|
||||||
grub_uint32_t grub_tsc_rate;
|
grub_uint32_t grub_tsc_rate;
|
||||||
|
|
||||||
|
/* Read the TSC value, which increments with each CPU clock cycle. */
|
||||||
|
static __inline grub_uint64_t
|
||||||
|
grub_get_tsc (void)
|
||||||
|
{
|
||||||
|
grub_uint32_t lo, hi;
|
||||||
|
grub_uint32_t a,b,c,d;
|
||||||
|
|
||||||
|
/* The CPUID instruction is a 'serializing' instruction, and
|
||||||
|
avoids out-of-order execution of the RDTSC instruction. */
|
||||||
|
grub_cpuid (0,a,b,c,d);
|
||||||
|
/* Read TSC value. We cannot use "=A", since this would use
|
||||||
|
%rax on x86_64. */
|
||||||
|
__asm__ __volatile__ ("rdtsc":"=a" (lo), "=d" (hi));
|
||||||
|
|
||||||
|
return (((grub_uint64_t) hi) << 32) | lo;
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifndef GRUB_MACHINE_XEN
|
||||||
|
|
||||||
|
static __inline int
|
||||||
|
grub_cpu_is_tsc_supported (void)
|
||||||
|
{
|
||||||
|
grub_uint32_t a,b,c,d;
|
||||||
|
if (! grub_cpu_is_cpuid_supported ())
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
grub_cpuid(1,a,b,c,d);
|
||||||
|
|
||||||
|
return (d & (1 << 4)) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
grub_pit_wait (grub_uint16_t tics)
|
||||||
|
{
|
||||||
|
/* Disable timer2 gate and speaker. */
|
||||||
|
grub_outb (grub_inb (GRUB_PIT_SPEAKER_PORT)
|
||||||
|
& ~ (GRUB_PIT_SPK_DATA | GRUB_PIT_SPK_TMR2),
|
||||||
|
GRUB_PIT_SPEAKER_PORT);
|
||||||
|
|
||||||
|
/* Set tics. */
|
||||||
|
grub_outb (GRUB_PIT_CTRL_SELECT_2 | GRUB_PIT_CTRL_READLOAD_WORD,
|
||||||
|
GRUB_PIT_CTRL);
|
||||||
|
grub_outb (tics & 0xff, GRUB_PIT_COUNTER_2);
|
||||||
|
grub_outb (tics >> 8, GRUB_PIT_COUNTER_2);
|
||||||
|
|
||||||
|
/* Enable timer2 gate, keep speaker disabled. */
|
||||||
|
grub_outb ((grub_inb (GRUB_PIT_SPEAKER_PORT) & ~ GRUB_PIT_SPK_DATA)
|
||||||
|
| GRUB_PIT_SPK_TMR2,
|
||||||
|
GRUB_PIT_SPEAKER_PORT);
|
||||||
|
|
||||||
|
/* Wait. */
|
||||||
|
while ((grub_inb (GRUB_PIT_SPEAKER_PORT) & GRUB_PIT_SPK_TMR2_LATCH) == 0x00);
|
||||||
|
|
||||||
|
/* Disable timer2 gate and speaker. */
|
||||||
|
grub_outb (grub_inb (GRUB_PIT_SPEAKER_PORT)
|
||||||
|
& ~ (GRUB_PIT_SPK_DATA | GRUB_PIT_SPK_TMR2),
|
||||||
|
GRUB_PIT_SPEAKER_PORT);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static grub_uint64_t
|
static grub_uint64_t
|
||||||
grub_tsc_get_time_ms (void)
|
grub_tsc_get_time_ms (void)
|
||||||
{
|
{
|
||||||
@@ -43,36 +110,52 @@ grub_tsc_get_time_ms (void)
|
|||||||
return ((al * grub_tsc_rate) >> 32) + ah * grub_tsc_rate;
|
return ((al * grub_tsc_rate) >> 32) + ah * grub_tsc_rate;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
#ifndef GRUB_MACHINE_XEN
|
||||||
calibrate_tsc_hardcode (void)
|
/* Calibrate the TSC based on the RTC. */
|
||||||
|
static void
|
||||||
|
calibrate_tsc (void)
|
||||||
{
|
{
|
||||||
grub_tsc_rate = 5368;/* 800 MHz */
|
/* First calibrate the TSC rate (relative, not absolute time). */
|
||||||
return 1;
|
grub_uint64_t end_tsc;
|
||||||
|
|
||||||
|
tsc_boot_time = grub_get_tsc ();
|
||||||
|
grub_pit_wait (0xffff);
|
||||||
|
end_tsc = grub_get_tsc ();
|
||||||
|
|
||||||
|
grub_tsc_rate = 0;
|
||||||
|
if (end_tsc > tsc_boot_time)
|
||||||
|
grub_tsc_rate = grub_divmod64 ((55ULL << 32), end_tsc - tsc_boot_time, 0);
|
||||||
|
if (grub_tsc_rate == 0)
|
||||||
|
grub_tsc_rate = 5368;/* 800 MHz */
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_tsc_init (void)
|
grub_tsc_init (void)
|
||||||
{
|
{
|
||||||
if (!grub_cpu_is_tsc_supported ())
|
#ifdef GRUB_MACHINE_XEN
|
||||||
|
grub_uint64_t t;
|
||||||
|
tsc_boot_time = grub_get_tsc ();
|
||||||
|
t = grub_xen_shared_info->vcpu_info[0].time.tsc_to_system_mul;
|
||||||
|
if (grub_xen_shared_info->vcpu_info[0].time.tsc_shift > 0)
|
||||||
|
t <<= grub_xen_shared_info->vcpu_info[0].time.tsc_shift;
|
||||||
|
else
|
||||||
|
t >>= -grub_xen_shared_info->vcpu_info[0].time.tsc_shift;
|
||||||
|
grub_tsc_rate = grub_divmod64 (t, 1000000, 0);
|
||||||
|
grub_install_get_time_ms (grub_tsc_get_time_ms);
|
||||||
|
#else
|
||||||
|
if (grub_cpu_is_tsc_supported ())
|
||||||
|
{
|
||||||
|
calibrate_tsc ();
|
||||||
|
grub_install_get_time_ms (grub_tsc_get_time_ms);
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
#if defined (GRUB_MACHINE_PCBIOS) || defined (GRUB_MACHINE_IEEE1275)
|
#if defined (GRUB_MACHINE_PCBIOS) || defined (GRUB_MACHINE_IEEE1275)
|
||||||
grub_install_get_time_ms (grub_rtc_get_time_ms);
|
grub_install_get_time_ms (grub_rtc_get_time_ms);
|
||||||
#else
|
#else
|
||||||
grub_fatal ("no TSC found");
|
grub_fatal ("no TSC found");
|
||||||
#endif
|
#endif
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
tsc_boot_time = grub_get_tsc ();
|
|
||||||
|
|
||||||
#ifdef GRUB_MACHINE_XEN
|
|
||||||
(void) (grub_tsc_calibrate_from_xen () || calibrate_tsc_hardcode());
|
|
||||||
#elif defined (GRUB_MACHINE_EFI)
|
|
||||||
(void) (grub_tsc_calibrate_from_pit () || grub_tsc_calibrate_from_pmtimer () || grub_tsc_calibrate_from_efi() || calibrate_tsc_hardcode());
|
|
||||||
#elif defined (GRUB_MACHINE_COREBOOT)
|
|
||||||
(void) (grub_tsc_calibrate_from_pmtimer () || grub_tsc_calibrate_from_pit () || calibrate_tsc_hardcode());
|
|
||||||
#else
|
|
||||||
(void) (grub_tsc_calibrate_from_pit () || calibrate_tsc_hardcode());
|
|
||||||
#endif
|
#endif
|
||||||
grub_install_get_time_ms (grub_tsc_get_time_ms);
|
|
||||||
}
|
}
|
||||||
@@ -1,84 +0,0 @@
|
|||||||
/* kern/i386/tsc.c - x86 TSC time source implementation
|
|
||||||
* Requires Pentium or better x86 CPU that supports the RDTSC instruction.
|
|
||||||
* This module uses the PIT to calibrate the TSC to
|
|
||||||
* real time.
|
|
||||||
*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2008 Free Software Foundation, Inc.
|
|
||||||
*
|
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* GRUB is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/types.h>
|
|
||||||
#include <grub/time.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/i386/tsc.h>
|
|
||||||
#include <grub/i386/pit.h>
|
|
||||||
#include <grub/cpu/io.h>
|
|
||||||
|
|
||||||
static int
|
|
||||||
grub_pit_wait (void)
|
|
||||||
{
|
|
||||||
int ret = 0;
|
|
||||||
|
|
||||||
/* Disable timer2 gate and speaker. */
|
|
||||||
grub_outb (grub_inb (GRUB_PIT_SPEAKER_PORT)
|
|
||||||
& ~ (GRUB_PIT_SPK_DATA | GRUB_PIT_SPK_TMR2),
|
|
||||||
GRUB_PIT_SPEAKER_PORT);
|
|
||||||
|
|
||||||
/* Set tics. */
|
|
||||||
grub_outb (GRUB_PIT_CTRL_SELECT_2 | GRUB_PIT_CTRL_READLOAD_WORD,
|
|
||||||
GRUB_PIT_CTRL);
|
|
||||||
/* 0xffff ticks: 55ms. */
|
|
||||||
grub_outb (0xff, GRUB_PIT_COUNTER_2);
|
|
||||||
grub_outb (0xff, GRUB_PIT_COUNTER_2);
|
|
||||||
|
|
||||||
/* Enable timer2 gate, keep speaker disabled. */
|
|
||||||
grub_outb ((grub_inb (GRUB_PIT_SPEAKER_PORT) & ~ GRUB_PIT_SPK_DATA)
|
|
||||||
| GRUB_PIT_SPK_TMR2,
|
|
||||||
GRUB_PIT_SPEAKER_PORT);
|
|
||||||
|
|
||||||
if ((grub_inb (GRUB_PIT_SPEAKER_PORT) & GRUB_PIT_SPK_TMR2_LATCH) == 0x00) {
|
|
||||||
ret = 1;
|
|
||||||
/* Wait. */
|
|
||||||
while ((grub_inb (GRUB_PIT_SPEAKER_PORT) & GRUB_PIT_SPK_TMR2_LATCH) == 0x00);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Disable timer2 gate and speaker. */
|
|
||||||
grub_outb (grub_inb (GRUB_PIT_SPEAKER_PORT)
|
|
||||||
& ~ (GRUB_PIT_SPK_DATA | GRUB_PIT_SPK_TMR2),
|
|
||||||
GRUB_PIT_SPEAKER_PORT);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Calibrate the TSC based on the RTC. */
|
|
||||||
int
|
|
||||||
grub_tsc_calibrate_from_pit (void)
|
|
||||||
{
|
|
||||||
/* First calibrate the TSC rate (relative, not absolute time). */
|
|
||||||
grub_uint64_t start_tsc, end_tsc;
|
|
||||||
|
|
||||||
start_tsc = grub_get_tsc ();
|
|
||||||
if (!grub_pit_wait ())
|
|
||||||
return 0;
|
|
||||||
end_tsc = grub_get_tsc ();
|
|
||||||
|
|
||||||
grub_tsc_rate = 0;
|
|
||||||
if (end_tsc > start_tsc)
|
|
||||||
grub_tsc_rate = grub_divmod64 ((55ULL << 32), end_tsc - start_tsc, 0);
|
|
||||||
if (grub_tsc_rate == 0)
|
|
||||||
return 0;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
/* kern/i386/tsc.c - x86 TSC time source implementation
|
|
||||||
* Requires Pentium or better x86 CPU that supports the RDTSC instruction.
|
|
||||||
* This module uses the PIT to calibrate the TSC to
|
|
||||||
* real time.
|
|
||||||
*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2008 Free Software Foundation, Inc.
|
|
||||||
*
|
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* GRUB is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/types.h>
|
|
||||||
#include <grub/time.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/i386/tsc.h>
|
|
||||||
#include <grub/i386/pmtimer.h>
|
|
||||||
#include <grub/acpi.h>
|
|
||||||
#include <grub/cpu/io.h>
|
|
||||||
|
|
||||||
grub_uint64_t
|
|
||||||
grub_pmtimer_wait_count_tsc (grub_port_t pmtimer,
|
|
||||||
grub_uint16_t num_pm_ticks)
|
|
||||||
{
|
|
||||||
grub_uint32_t start;
|
|
||||||
grub_uint32_t last;
|
|
||||||
grub_uint32_t cur, end;
|
|
||||||
grub_uint64_t start_tsc;
|
|
||||||
grub_uint64_t end_tsc;
|
|
||||||
int num_iter = 0;
|
|
||||||
|
|
||||||
start = grub_inl (pmtimer) & 0xffffff;
|
|
||||||
last = start;
|
|
||||||
end = start + num_pm_ticks;
|
|
||||||
start_tsc = grub_get_tsc ();
|
|
||||||
while (1)
|
|
||||||
{
|
|
||||||
cur = grub_inl (pmtimer) & 0xffffff;
|
|
||||||
if (cur < last)
|
|
||||||
cur |= 0x1000000;
|
|
||||||
num_iter++;
|
|
||||||
if (cur >= end)
|
|
||||||
{
|
|
||||||
end_tsc = grub_get_tsc ();
|
|
||||||
return end_tsc - start_tsc;
|
|
||||||
}
|
|
||||||
/* Check for broken PM timer.
|
|
||||||
50000000 TSCs is between 5 ms (10GHz) and 200 ms (250 MHz)
|
|
||||||
if after this time we still don't have 1 ms on pmtimer, then
|
|
||||||
pmtimer is broken.
|
|
||||||
*/
|
|
||||||
if ((num_iter & 0xffffff) == 0 && grub_get_tsc () - start_tsc > 5000000) {
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
grub_tsc_calibrate_from_pmtimer (void)
|
|
||||||
{
|
|
||||||
struct grub_acpi_fadt *fadt;
|
|
||||||
grub_port_t pmtimer;
|
|
||||||
grub_uint64_t tsc_diff;
|
|
||||||
|
|
||||||
fadt = grub_acpi_find_fadt ();
|
|
||||||
if (!fadt)
|
|
||||||
return 0;
|
|
||||||
pmtimer = fadt->pmtimer;
|
|
||||||
if (!pmtimer)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/* It's 3.579545 MHz clock. Wait 1 ms. */
|
|
||||||
tsc_diff = grub_pmtimer_wait_count_tsc (pmtimer, 3580);
|
|
||||||
if (tsc_diff == 0)
|
|
||||||
return 0;
|
|
||||||
grub_tsc_rate = grub_divmod64 ((1ULL << 32), tsc_diff, 0);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
/* kern/i386/tsc.c - x86 TSC time source implementation
|
|
||||||
* Requires Pentium or better x86 CPU that supports the RDTSC instruction.
|
|
||||||
* This module uses the PIT to calibrate the TSC to
|
|
||||||
* real time.
|
|
||||||
*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2008 Free Software Foundation, Inc.
|
|
||||||
*
|
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* GRUB is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <grub/types.h>
|
|
||||||
#include <grub/time.h>
|
|
||||||
#include <grub/misc.h>
|
|
||||||
#include <grub/i386/tsc.h>
|
|
||||||
#include <grub/xen.h>
|
|
||||||
|
|
||||||
int
|
|
||||||
grub_tsc_calibrate_from_xen (void)
|
|
||||||
{
|
|
||||||
grub_uint64_t t;
|
|
||||||
t = grub_xen_shared_info->vcpu_info[0].time.tsc_to_system_mul;
|
|
||||||
if (grub_xen_shared_info->vcpu_info[0].time.tsc_shift > 0)
|
|
||||||
t <<= grub_xen_shared_info->vcpu_info[0].time.tsc_shift;
|
|
||||||
else
|
|
||||||
t >>= -grub_xen_shared_info->vcpu_info[0].time.tsc_shift;
|
|
||||||
grub_tsc_rate = grub_divmod64 (t, 1000000, 0);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
@@ -104,9 +104,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
case R_IA64_PCREL64LSB:
|
case R_IA64_PCREL64LSB:
|
||||||
*(grub_uint64_t *) addr += value - addr;
|
*(grub_uint64_t *) addr += value - addr;
|
||||||
break;
|
break;
|
||||||
case R_IA64_GPREL64I:
|
|
||||||
grub_ia64_set_immu64 (addr, value - (grub_addr_t) mod->base);
|
|
||||||
break;
|
|
||||||
case R_IA64_GPREL22:
|
case R_IA64_GPREL22:
|
||||||
if ((value - (grub_addr_t) mod->base) & ~MASK20)
|
if ((value - (grub_addr_t) mod->base) & ~MASK20)
|
||||||
return grub_error (GRUB_ERR_BAD_MODULE,
|
return grub_error (GRUB_ERR_BAD_MODULE,
|
||||||
@@ -119,7 +116,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
case R_IA64_LTOFF22:
|
case R_IA64_LTOFF22:
|
||||||
if (ELF_ST_TYPE (sym->st_info) == STT_FUNC)
|
if (ELF_ST_TYPE (sym->st_info) == STT_FUNC)
|
||||||
value = *(grub_uint64_t *) sym->st_value + rel->r_addend;
|
value = *(grub_uint64_t *) sym->st_value + rel->r_addend;
|
||||||
/* Fallthrough. */
|
|
||||||
case R_IA64_LTOFF_FPTR22:
|
case R_IA64_LTOFF_FPTR22:
|
||||||
{
|
{
|
||||||
grub_uint64_t *gpptr = mod->gotptr;
|
grub_uint64_t *gpptr = mod->gotptr;
|
||||||
|
|||||||
@@ -30,40 +30,6 @@
|
|||||||
#define MASK20 ((1 << 20) - 1)
|
#define MASK20 ((1 << 20) - 1)
|
||||||
#define MASK3 (~(grub_addr_t) 3)
|
#define MASK3 (~(grub_addr_t) 3)
|
||||||
|
|
||||||
void
|
|
||||||
grub_ia64_set_immu64 (grub_addr_t addr, grub_uint64_t val)
|
|
||||||
{
|
|
||||||
/* Copied from binutils. */
|
|
||||||
grub_uint64_t *ptr = ((grub_uint64_t *) (addr & MASK3));
|
|
||||||
grub_uint64_t t0, t1;
|
|
||||||
|
|
||||||
t0 = grub_le_to_cpu64 (ptr[0]);
|
|
||||||
t1 = grub_le_to_cpu64 (ptr[1]);
|
|
||||||
|
|
||||||
/* tmpl/s: bits 0.. 5 in t0
|
|
||||||
slot 0: bits 5..45 in t0
|
|
||||||
slot 1: bits 46..63 in t0, bits 0..22 in t1
|
|
||||||
slot 2: bits 23..63 in t1 */
|
|
||||||
|
|
||||||
/* First, clear the bits that form the 64 bit constant. */
|
|
||||||
t0 &= ~(0x3ffffLL << 46);
|
|
||||||
t1 &= ~(0x7fffffLL
|
|
||||||
| (( (0x07fLL << 13) | (0x1ffLL << 27)
|
|
||||||
| (0x01fLL << 22) | (0x001LL << 21)
|
|
||||||
| (0x001LL << 36)) << 23));
|
|
||||||
|
|
||||||
t0 |= ((val >> 22) & 0x03ffffLL) << 46; /* 18 lsbs of imm41 */
|
|
||||||
t1 |= ((val >> 40) & 0x7fffffLL) << 0; /* 23 msbs of imm41 */
|
|
||||||
t1 |= ( (((val >> 0) & 0x07f) << 13) /* imm7b */
|
|
||||||
| (((val >> 7) & 0x1ff) << 27) /* imm9d */
|
|
||||||
| (((val >> 16) & 0x01f) << 22) /* imm5c */
|
|
||||||
| (((val >> 21) & 0x001) << 21) /* ic */
|
|
||||||
| (((val >> 63) & 0x001) << 36)) << 23; /* i */
|
|
||||||
|
|
||||||
ptr[0] = t0;
|
|
||||||
ptr[1] = t1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_ia64_add_value_to_slot_20b (grub_addr_t addr, grub_uint32_t value)
|
grub_ia64_add_value_to_slot_20b (grub_addr_t addr, grub_uint32_t value)
|
||||||
{
|
{
|
||||||
@@ -216,11 +182,11 @@ grub_ia64_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
|||||||
i++, s = (Elf64_Shdr *) ((char *) s + grub_le_to_cpu16 (e->e_shentsize)))
|
i++, s = (Elf64_Shdr *) ((char *) s + grub_le_to_cpu16 (e->e_shentsize)))
|
||||||
if (s->sh_type == grub_cpu_to_le32_compile_time (SHT_RELA))
|
if (s->sh_type == grub_cpu_to_le32_compile_time (SHT_RELA))
|
||||||
{
|
{
|
||||||
const Elf64_Rela *rel, *max;
|
Elf64_Rela *rel, *max;
|
||||||
|
|
||||||
for (rel = (Elf64_Rela *) ((char *) e + grub_le_to_cpu64 (s->sh_offset)),
|
for (rel = (Elf64_Rela *) ((char *) e + grub_le_to_cpu64 (s->sh_offset)),
|
||||||
max = (const Elf64_Rela *) ((char *) rel + grub_le_to_cpu64 (s->sh_size));
|
max = rel + grub_le_to_cpu64 (s->sh_size) / grub_le_to_cpu64 (s->sh_entsize);
|
||||||
rel < max; rel = (const Elf64_Rela *) ((char *) rel + grub_le_to_cpu64 (s->sh_entsize)))
|
rel < max; rel++)
|
||||||
switch (ELF64_R_TYPE (grub_le_to_cpu64 (rel->r_info)))
|
switch (ELF64_R_TYPE (grub_le_to_cpu64 (rel->r_info)))
|
||||||
{
|
{
|
||||||
case R_IA64_PCREL21B:
|
case R_IA64_PCREL21B:
|
||||||
|
|||||||
@@ -46,19 +46,11 @@
|
|||||||
#define HEAP_MIN_SIZE (unsigned long) (2 * 1024 * 1024)
|
#define HEAP_MIN_SIZE (unsigned long) (2 * 1024 * 1024)
|
||||||
|
|
||||||
/* The maximum heap size we're going to claim */
|
/* The maximum heap size we're going to claim */
|
||||||
#ifdef __i386__
|
|
||||||
#define HEAP_MAX_SIZE (unsigned long) (64 * 1024 * 1024)
|
|
||||||
#else
|
|
||||||
#define HEAP_MAX_SIZE (unsigned long) (32 * 1024 * 1024)
|
#define HEAP_MAX_SIZE (unsigned long) (32 * 1024 * 1024)
|
||||||
#endif
|
|
||||||
|
|
||||||
/* If possible, we will avoid claiming heap above this address, because it
|
/* If possible, we will avoid claiming heap above this address, because it
|
||||||
seems to cause relocation problems with OSes that link at 4 MiB */
|
seems to cause relocation problems with OSes that link at 4 MiB */
|
||||||
#ifdef __i386__
|
|
||||||
#define HEAP_MAX_ADDR (unsigned long) (64 * 1024 * 1024)
|
|
||||||
#else
|
|
||||||
#define HEAP_MAX_ADDR (unsigned long) (32 * 1024 * 1024)
|
#define HEAP_MAX_ADDR (unsigned long) (32 * 1024 * 1024)
|
||||||
#endif
|
|
||||||
|
|
||||||
extern char _start[];
|
extern char _start[];
|
||||||
extern char _end[];
|
extern char _end[];
|
||||||
@@ -174,7 +166,7 @@ heap_init (grub_uint64_t addr, grub_uint64_t len, grub_memory_type_t type,
|
|||||||
{
|
{
|
||||||
unsigned long *total = data;
|
unsigned long *total = data;
|
||||||
|
|
||||||
if (type != GRUB_MEMORY_AVAILABLE)
|
if (type != 1)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_PRE1_5M_CLAIM))
|
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_PRE1_5M_CLAIM))
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data)
|
|||||||
{
|
{
|
||||||
grub_ieee1275_phandle_t root;
|
grub_ieee1275_phandle_t root;
|
||||||
grub_ieee1275_phandle_t memory;
|
grub_ieee1275_phandle_t memory;
|
||||||
grub_uint32_t available[128];
|
grub_uint32_t available[32];
|
||||||
grub_ssize_t available_size;
|
grub_ssize_t available_size;
|
||||||
grub_uint32_t address_cells = 1;
|
grub_uint32_t address_cells = 1;
|
||||||
grub_uint32_t size_cells = 1;
|
grub_uint32_t size_cells = 1;
|
||||||
@@ -49,9 +49,6 @@ grub_machine_mmap_iterate (grub_memory_hook_t hook, void *hook_data)
|
|||||||
sizeof available, &available_size))
|
sizeof available, &available_size))
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
||||||
"couldn't examine /memory/available property");
|
"couldn't examine /memory/available property");
|
||||||
if (available_size < 0 || (grub_size_t) available_size > sizeof (available))
|
|
||||||
return grub_error (GRUB_ERR_UNKNOWN_DEVICE,
|
|
||||||
"/memory response buffer exceeded");
|
|
||||||
|
|
||||||
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_BROKEN_ADDRESS_CELLS))
|
if (grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_BROKEN_ADDRESS_CELLS))
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -236,7 +236,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
sym_value &= 0xffff0000;
|
sym_value &= 0xffff0000;
|
||||||
*(grub_uint16_t *) addr = 0;
|
*(grub_uint16_t *) addr = 0;
|
||||||
}
|
}
|
||||||
/* Fallthrough. */
|
|
||||||
case R_MIPS_CALL16:
|
case R_MIPS_CALL16:
|
||||||
{
|
{
|
||||||
grub_uint32_t *gpptr = mod->gotptr;
|
grub_uint32_t *gpptr = mod->gotptr;
|
||||||
|
|||||||
+6
-16
@@ -391,13 +391,12 @@ grub_strtoull (const char *str, char **end, int base)
|
|||||||
unsigned long digit;
|
unsigned long digit;
|
||||||
|
|
||||||
digit = grub_tolower (*str) - '0';
|
digit = grub_tolower (*str) - '0';
|
||||||
if (digit >= 'a' - '0')
|
if (digit > 9)
|
||||||
digit += '0' - 'a' + 10;
|
{
|
||||||
else if (digit > 9)
|
digit += '0' - 'a' + 10;
|
||||||
break;
|
if (digit >= (unsigned long) base)
|
||||||
|
break;
|
||||||
if (digit >= (unsigned long) base)
|
}
|
||||||
break;
|
|
||||||
|
|
||||||
found = 1;
|
found = 1;
|
||||||
|
|
||||||
@@ -741,12 +740,6 @@ parse_printf_args (const char *fmt0, struct printf_args *args,
|
|||||||
fmt++;
|
fmt++;
|
||||||
|
|
||||||
c = *fmt++;
|
c = *fmt++;
|
||||||
if (c == '%')
|
|
||||||
{
|
|
||||||
n--;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (c == 'l')
|
if (c == 'l')
|
||||||
{
|
{
|
||||||
c = *fmt++;
|
c = *fmt++;
|
||||||
@@ -883,7 +876,6 @@ grub_vsnprintf_real (char *str, grub_size_t max_len, const char *fmt0,
|
|||||||
if (c == '%')
|
if (c == '%')
|
||||||
{
|
{
|
||||||
write_char (str, &count, max_len,c);
|
write_char (str, &count, max_len,c);
|
||||||
n--;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1107,8 +1099,6 @@ grub_fatal (const char *fmt, ...)
|
|||||||
grub_vprintf (_(fmt), ap);
|
grub_vprintf (_(fmt), ap);
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
grub_refresh ();
|
|
||||||
|
|
||||||
grub_abort ();
|
grub_abort ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -325,15 +325,6 @@ grub_memalign (grub_size_t align, grub_size_t size)
|
|||||||
if (!grub_mm_base)
|
if (!grub_mm_base)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
if (size > ~(grub_size_t) align)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
/* We currently assume at least a 32-bit grub_size_t,
|
|
||||||
so limiting allocations to <adress space size> - 1MiB
|
|
||||||
in name of sanity is beneficial. */
|
|
||||||
if ((size + align) > ~(grub_size_t) 0x100000)
|
|
||||||
goto fail;
|
|
||||||
|
|
||||||
align = (align >> GRUB_MM_ALIGN_LOG2);
|
align = (align >> GRUB_MM_ALIGN_LOG2);
|
||||||
if (align == 0)
|
if (align == 0)
|
||||||
align = 1;
|
align = 1;
|
||||||
|
|||||||
@@ -268,7 +268,6 @@ grub_parser_execute (char *source)
|
|||||||
grub_parser_execute_getline (&line, 0, &source);
|
grub_parser_execute_getline (&line, 0, &source);
|
||||||
grub_rescue_parse_line (line, grub_parser_execute_getline, &source);
|
grub_rescue_parse_line (line, grub_parser_execute_getline, &source);
|
||||||
grub_free (line);
|
grub_free (line);
|
||||||
grub_print_error ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return grub_errno;
|
return grub_errno;
|
||||||
|
|||||||
@@ -43,17 +43,13 @@ grub_rescue_parse_line (char *line,
|
|||||||
|
|
||||||
/* In case of an assignment set the environment accordingly
|
/* In case of an assignment set the environment accordingly
|
||||||
instead of calling a function. */
|
instead of calling a function. */
|
||||||
if (n == 1)
|
if (n == 1 && grub_strchr (line, '='))
|
||||||
{
|
{
|
||||||
char *val = grub_strchr (args[0], '=');
|
char *val = grub_strchr (args[0], '=');
|
||||||
|
val[0] = 0;
|
||||||
if (val)
|
grub_env_set (args[0], val + 1);
|
||||||
{
|
val[0] = '=';
|
||||||
val[0] = 0;
|
goto quit;
|
||||||
grub_env_set (args[0], val + 1);
|
|
||||||
val[0] = '=';
|
|
||||||
goto quit;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the command name. */
|
/* Get the command name. */
|
||||||
@@ -76,7 +72,6 @@ grub_rescue_parse_line (char *line,
|
|||||||
}
|
}
|
||||||
|
|
||||||
quit:
|
quit:
|
||||||
/* Arguments are returned in single memory chunk separated by zeroes */
|
|
||||||
grub_free (args[0]);
|
grub_free (args[0]);
|
||||||
grub_free (args);
|
grub_free (args);
|
||||||
|
|
||||||
|
|||||||
@@ -159,7 +159,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr,
|
|||||||
if (value >> 32)
|
if (value >> 32)
|
||||||
return grub_error (GRUB_ERR_BAD_MODULE,
|
return grub_error (GRUB_ERR_BAD_MODULE,
|
||||||
"address out of 32 bits range");
|
"address out of 32 bits range");
|
||||||
/* Fallthrough. */
|
|
||||||
case R_SPARC_LM22:
|
case R_SPARC_LM22:
|
||||||
*addr = (*addr & 0xFFC00000) | ((value >> 10) & 0x3FFFFF);
|
*addr = (*addr & 0xFFC00000) | ((value >> 10) & 0x3FFFFF);
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -50,7 +50,6 @@ FUNCTION(grub_longjmp)
|
|||||||
ldp x29, x30, [x0], #16
|
ldp x29, x30, [x0], #16
|
||||||
ldr x2, [x0]
|
ldr x2, [x0]
|
||||||
mov sp, x2
|
mov sp, x2
|
||||||
mov x0, #1
|
|
||||||
cmp x1, #0
|
cmp x1, #0
|
||||||
csel x0, x1, x0, ne
|
csel x0, x1, x0, ne
|
||||||
ret
|
ret
|
||||||
@@ -470,8 +470,7 @@ grub_password_get (char buf[], unsigned buf_size)
|
|||||||
|
|
||||||
if (key == '\b')
|
if (key == '\b')
|
||||||
{
|
{
|
||||||
if (cur_len)
|
cur_len--;
|
||||||
cur_len--;
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -19,9 +19,6 @@
|
|||||||
#include <grub/fdt.h>
|
#include <grub/fdt.h>
|
||||||
#include <grub/misc.h>
|
#include <grub/misc.h>
|
||||||
#include <grub/mm.h>
|
#include <grub/mm.h>
|
||||||
#include <grub/dl.h>
|
|
||||||
|
|
||||||
GRUB_MOD_LICENSE ("GPLv3+");
|
|
||||||
|
|
||||||
#define FDT_SUPPORTED_VERSION 17
|
#define FDT_SUPPORTED_VERSION 17
|
||||||
|
|
||||||
|
|||||||
@@ -56,11 +56,11 @@ void
|
|||||||
grub_backtrace (void)
|
grub_backtrace (void)
|
||||||
{
|
{
|
||||||
#ifdef __x86_64__
|
#ifdef __x86_64__
|
||||||
asm volatile ("movq %%rbp, %%rdi\n"
|
asm volatile ("movq %rbp, %rdi\n"
|
||||||
"callq *%%rax": :"a"(grub_backtrace_pointer));
|
"call " EXT_C("grub_backtrace_pointer"));
|
||||||
#else
|
#else
|
||||||
asm volatile ("movl %%ebp, %%eax\n"
|
asm volatile ("movl %ebp, %eax\n"
|
||||||
"calll *%%ecx": :"c"(grub_backtrace_pointer));
|
"call " EXT_C("grub_backtrace_pointer"));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
Loaded 100 of 308 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user