Merge branch 'upstream' into experimental

This commit is contained in:
Colin Watson 2013-12-20 11:09:12 +00:00
commit b0d34632e1
308 changed files with 10394 additions and 2213 deletions

43
.gitignore vendored
View File

@ -12,7 +12,6 @@ ahci_test
ascii.bitmaps ascii.bitmaps
ascii.h ascii.h
autom4te.cache autom4te.cache
build_env.mk
build-grub-gen-asciih build-grub-gen-asciih
build-grub-gen-widthspec build-grub-gen-widthspec
build-grub-mkfont build-grub-mkfont
@ -34,48 +33,59 @@ docs/*.info
docs/stamp-vti docs/stamp-vti
docs/version.texi docs/version.texi
ehci_test ehci_test
*.elf
example_grub_script_test example_grub_script_test
example_scripted_test example_scripted_test
example_unit_test example_unit_test
*.exec *.exec
*.exec.exe
fddboot_test fddboot_test
genkernsyms.sh genkernsyms.sh
gensymlist.sh gensymlist.sh
gentrigtables gentrigtables
gentrigtables.exe
gettext_strings_test gettext_strings_test
grub-bin2h grub-bin2h
grub-bios-setup /grub-bios-setup
/grub-bios-setup.exe
grub_cmd_date grub_cmd_date
grub_cmd_echo grub_cmd_echo
grub_cmd_regexp grub_cmd_regexp
grub_cmd_set_date grub_cmd_set_date
grub_cmd_sleep grub_cmd_sleep
grub-editenv /grub-editenv
/grub-editenv.exe
grub-emu grub-emu
grub-emu-lite grub-emu-lite
grub-emu.exe
grub-emu-lite.exe
grub_emu_init.c grub_emu_init.c
grub_emu_init.h grub_emu_init.h
grub-fstest grub-fstest
grub-fstest.exe
grub_fstest_init.c grub_fstest_init.c
grub_fstest_init.h grub_fstest_init.h
grub_func_test grub_func_test
grub-install grub-install
grub-install.exe
grub-kbdcomp grub-kbdcomp
grub-macho2img grub-macho2img
grub-menulst2cfg /grub-menulst2cfg
/grub-menulst2cfg.exe
/grub-mk* /grub-mk*
grub-mount grub-mount
grub-ofpathname /grub-ofpathname
grub-pe2elf /grub-ofpathname.exe
grub-probe grub-core/build-grub-pe2elf.exe
/grub-probe
/grub-probe.exe
grub_probe_init.c grub_probe_init.c
grub_probe_init.h grub_probe_init.h
grub-reboot /grub-reboot
grub_script_blanklines grub_script_blanklines
grub_script_blockarg grub_script_blockarg
grub_script_break grub_script_break
grub-script-check grub-script-check
grub-script-check.exe
grub_script_check_init.c grub_script_check_init.c
grub_script_check_init.h grub_script_check_init.h
grub_script_comments grub_script_comments
@ -106,17 +116,18 @@ grub_script.tab.h
grub_script.yy.c grub_script.yy.c
grub_script.yy.h grub_script.yy.h
grub-set-default grub-set-default
grub-setup
grub_setup_init.c grub_setup_init.c
grub_setup_init.h grub_setup_init.h
grub-shell grub-shell
grub-shell-tester grub-shell-tester
grub-sparc64-setup grub-sparc64-setup
grub-sparc64-setup.exe
gzcompress_test gzcompress_test
hddboot_test hddboot_test
help_test help_test
*.img *.img
*.image *.image
*.image.exe
include/grub/cpu include/grub/cpu
include/grub/machine include/grub/machine
install-sh install-sh
@ -183,6 +194,7 @@ grub-core/gmodule.pl
grub-core/grub.chrp grub-core/grub.chrp
grub-core/modinfo.sh grub-core/modinfo.sh
grub-core/*.module grub-core/*.module
grub-core/*.module.exe
grub-core/*.pp grub-core/*.pp
util/bash-completion.d/grub util/bash-completion.d/grub
grub-core/gnulib/alloca.h grub-core/gnulib/alloca.h
@ -204,7 +216,7 @@ grub-core/gnulib/unistd.h
grub-core/gnulib/warn-on-use.h grub-core/gnulib/warn-on-use.h
grub-core/gnulib/wchar.h grub-core/gnulib/wchar.h
grub-core/gnulib/wctype.h grub-core/gnulib/wctype.h
grub-core/rs_decoder.S grub-core/rs_decoder.h
widthspec.bin widthspec.bin
widthspec.h widthspec.h
docs/stamp-1 docs/stamp-1
@ -218,9 +230,14 @@ include/grub/gcrypt/gcrypt.h
include/grub/gcrypt/g10lib.h include/grub/gcrypt/g10lib.h
po/POTFILES.in po/POTFILES.in
po/POTFILES-shell.in po/POTFILES-shell.in
grub-glue-efi /grub-glue-efi
grub-render-label /grub-render-label
/grub-glue-efi.exe
/grub-render-label.exe
grub-core/gnulib/locale.h grub-core/gnulib/locale.h
grub-core/gnulib/unitypes.h grub-core/gnulib/unitypes.h
grub-core/gnulib/uniwidth.h grub-core/gnulib/uniwidth.h
build-aux/test-driver build-aux/test-driver
/garbage-gen
/garbage-gen.exe
/grub-fs-tester

608
ChangeLog
View File

@ -1,3 +1,611 @@
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
* configure.ac: Set version to 2.02~beta1.
2013-12-18 Allen Pais <allen.pais@oracle.com>
2013-12-18 Bob Picco <bob.picco@oracle.com>
* grub-core/boot/sparc64/ieee1275/boot.S: Fix order of fields.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
Make grub_zlib_decompress handle incomplete chunks.
Fixes squash4.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/Makefile.am: Don't attempt to export grub_bios_interrupt
on i386-multiboot.
2013-12-18 Aleš Nesrsta <starous@volny.cz>
* grub-core/disk/usbms.c: Retry on unknown errors.
Reuse the same tag on retries.
2013-12-18 Aleš Nesrsta <starous@volny.cz>
* grub-core/bus/usb/ehci.c: Fix handling of newborn transfers.
Avoid confusing them with already completed transfers.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
Remove xen VFB.
Due to XEN bug it prevents Linux boot. Remove it at least, until
workaround is found.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
* po/exclude.pot: Add 2 missing excludes.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
Add missing license section in macbless.mod and macho.mod.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
Allow compilation without thumb-interwork as long as no thumb is
involved or only thumb2 is used.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
Use -Wl,--no-relax rather than -mno-relax for uniformity.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
* INSTALL: Update comment as to why sparc64 clang isn't usable.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
Add __attribute__ ((sysv_abi)) only if it's really needed.
Some compilers don't support it.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/lib/syslinux_parse.c: Declare timeout unsigned.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
Remove -Wold-style-definition.
Not very useful and interaction of it with regexp depends on GCC
version.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
Make grub_util_get_windows_path_real static.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/commands/fileXX.c: Silence cast-align.
* grub-core/loader/i386/xen_fileXX.c: Likewise.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
* include/grub/efi/api.h (GRUB_EFI_ERROR_CODE): Use explicit cast
rather than LL suffix.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
* include/grub/efi/api.h (PRIxGRUB_EFI_UINTN_T): Remove leftover.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/loader/arm/linux.c: Use common initrd functions.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
Decrease number of strings to translate.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/arm/dl.c: Remove unnecessarry execution mode check.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
Mark strings for translation and add remaining ones to exclude list.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
* util/grub-file.c (main): Fix sizeof usage.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
Silence spurious warning.
2013-12-18 Vladimir Serbinenko <phcoder@gmail.com>
Remove check_nt_hiberfil as it's been superseeded by file command.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
* docs/osdetect.cfg: Add isolinux config to detected OSes.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Implement syslinux parser.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/commands/legacycfg.c: Use 32-bit Linux protocol on non-BIOS.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Support cpuid --pae.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Use AT keyboard on Yeeloong 3A.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Add Yeeloong 3A reboot and halt.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Add Radeon Yeeloong 3A support.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Add bonito 3A support.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/loader/machoXX.c: Fix compilation on non-i386.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/loader/i386/xen_fileXX.c: Silence cast-align.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/loader/macho.c: Fix compilation on non-i386.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Add missing format_arg attribute to check that printf with translated
messages has proper arguments.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Use grub_xasprintf to format translated error messages containing
64-bit quantity.
2013-12-17 Jon McCune <jonmccune@google.com>
Fix double-free introduced by commit 33d02a42d64cf06cada1c389
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Unify message for unsupported relocation.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Mark miscompile error for translation.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Use %I64 and not %ll when using OS printf if compiling for windows.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Update Mac code to match new register_efi prototype.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Implement better integration with Mac firmware.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/loader/multiboot_mbi2.c: Implement special value for
load_addr.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Include serial module in default_payload.elf.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Add explicit thumb interwork bx in asm files.
Shouldn't matter for armv >= 5 but let's be safe.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Implement Truecrypt ISO loader.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/lib/arg.c: Ensure at least a single space between commands.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Implement grub_file tool and use it to implement generating of config
in separate root.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Change to v1 xen grants.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/lib/i386/xen/relocator.S: Fix hypercall ABI violation.
GRUB relied on %ebx being preserved across hypercall which isn't true.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/lib/x86_64/xen/relocator.S: Fix hypercall ABI violation.
GRUB relied on %rdi being preserved across hypercall which isn't true.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Implement XEN VFB support.
2013-12-17 Vladimir Serbinenko <phcoder@gmail.com>
Remove grub_bios_interrupt on coreboot.
It's not used currently and cannot be used safely currently.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
Update exclude.pot and mark few strings for translation.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
* util/grub-mkrescue.c: Fix incorrect file usage in fallback code.
Reported by: Jon McCune
2013-12-16 Andrey Borzenkov <arvidjaar@gmail.com>
* grub-core/osdep/linux/platform.c (grub_install_get_default_x86_platform):
Add verbose information which firmware directories were tried.
2013-12-16 Andrey Borzenkov <arvidjaar@gmail.com>
* grub-core/osdep/unix/exec.c (grub_util_exec_redirect_all): New
function to optionally redirect all three standard descriptors.
Redefine grub_util_exec, grub_util_exec_redirect and
grub_util_exec_redirect_null to use it.
* include/grub/emu/exec.h: Define it.
* include/grub/osdep/exec_unix.h: Delete, it is unused.
* grub-core/osdep/linux/platform.c (grub_install_get_default_x86_platform):
Use grub_util_exec_redirect_all to redirect error to NULL.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/tests/sleep_test.c: Silence spurious warning.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
Make grub_xen_hypercall on i386 cdecl rather than stdcall to avoid
linker trying to "fixup" the code.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/x86_64/xen/startup.S: Align stack.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
Add support for converting PE+ to Elf64.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/commands/minicmd.c (grub_mini_cmd_dump): Handle LLP case.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
Remove practice of assigning random const pointers to device id.
This is not required as cache code already checks driver id as well.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
* include/grub/x86_64/types.h: Define sizeof (long) as 4 when compiling
with mingw.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
* include/grub/efi/api.h: Don't use call wrappers when compiled with
mingw or cygwin as API already matches.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/lib/posix_wrap/errno.h: Undefine errno before redefining.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
* include/grub/efi/api.h: Define (u)intn_t based on pointer size and
not on long.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
Handle X86_64_PC64 relocation.
Those are generated by some cygwin compilers.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
Determine the need for mingw-related stubs at compile time rather than
using not very significant $target_os.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/genmod.sh.in: Strip before converting to ELF as strip
may not work with ELF.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
Use unix functions for temporary files and special files on cygwin.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
Define functions explicitly rather than using --defsym in tests
whenever possible. Respect locality in remaining cases.
2013-12-16 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/genmoddep.awk: Remove explicit getline < /dev/stdin.
2013-12-15 Andrey Borzenkov <arvidjaar@gmail.com>
* grub-core/osdep/windows/platform.c (grub_install_register_efi): Handle
unlikely errors when getting EFI variables and make exhaustive search
for all BootNNNN variables to find matching one.
2013-12-15 Ian Campbell <ijc@hellion.org.uk>
* grub-core/kern/uboot/init.c: Fix units of uboot timer.
2013-12-15 Vladimir Serbinenko <phcoder@gmail.com>
New functional test for sleep function.
This test allows to check sleep without qemu. Keep qemu version as
well as functional test won't notice if all clocks are going too fast
or too slow.
2013-12-15 Vladimir Serbinenko <phcoder@gmail.com>
Add explicit sysv_abi on amd64 asm routines.
2013-12-15 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/commands/efi/lsefisystab.c: Use %lld to show
num_table_entries.
2013-12-15 Vladimir Serbinenko <phcoder@gmail.com>
* include/grub/test.h: Use gnu_printf rather than printf on GRUB
functions.
2013-12-15 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/loader/i386/linux.c: Use grub_addr_t rather than long when
appropriate.
2013-12-15 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/loader/i386/linux.c: Use %p rather than %lx for pointers.
2013-12-15 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/elfXX.c: Use grub_addr_t rather than long when
appropriate.
2013-12-15 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/disk/loopback.c: Use sequential IDs rather than pointer.
In case of quick removal of loopback and adding another one it may
get same ID, confusing the cache system.
2013-12-15 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/commands/acpi.c: Use grub_addr_t rather than long when
appropriate.
2013-12-15 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/i386/coreboot/cbtable.c: Use char * arithmetic rather
than converting to long.
2013-12-15 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/disk/cryptodisk.c: Rename "n" to "last_cryptodisk_id".
2013-12-15 Vladimir Serbinenko <phcoder@gmail.com>
* util/grub-mkimagexx.c (relocate_addresses): Display offset rather
than almost useless pointer.
2013-12-15 Vladimir Serbinenko <phcoder@gmail.com>
Add gcc_struct to all packed structures when compiling with mingw.
Just "packed" doesn't always pack the way we expect.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
* include/grub/i386/coreboot/lbio.h: Add missing attribute (packed).
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
* util/grub-pe2elf.c: Fix handling of .bss.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
Implement windows flavour of EFI install routines.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
* conf/Makefile.extra-dist: Adjust path to conf/i386-cygwin-img-ld.sc.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
Change grub_install_register_efi interface to pass GRUB device.
This allows grub_install_register_efi to request partition info
directly.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
Workaround cygwin bug when using \\?\Volume{GUID} syntax.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
Do not use TCHAR string functions as they are not available on cygwin.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
Workaround windows bug when querying EFI system partition parameters.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/i386/qemu/init.c (resource): Decrease struct size
by using bitfields.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/boot/i386/qemu/boot.S: Add missing EXT_C.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
Make i386-* other than i386-pc compileable under cygwin.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
Fix definition of grub_efi_hard_drive_device_path. Take care that
existing code would work even if by some reason bogus definition is
used by EFI implementations.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/osdep/windows/hostdisk.c: Fix cygwin compilation.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/osdep/windows/blocklist.c: Add missing cast in printf
invocation.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
* util/config.c: Remove trailing newline from distributor in simple
parsing.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
* include/grub/efi/api.h: Rename protocol and interface to avoid
conflict.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
* .gitignore: Add .exe variants. Add missing files. Remove few outdated
entries.
2013-12-14 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/osdep/exec.c: Use unix version on cygwin.
2013-12-13 Vladimir Serbinenko <phcoder@gmail.com>
Implement multiboot2 EFI BS specification.
2013-12-11 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/normal/charset.c: Fix premature line wrap and crash.
Crash happened only in some cases like a string starting at the
half of the screen of same length.
2013-12-11 Vladimir Serbinenko <phcoder@gmail.com>
* include/grub/efiemu/efiemu.h: Sync configuration table declaration
with EFI counterpart.
2013-12-11 Vladimir Serbinenko <phcoder@gmail.com>
Propagate the EFI commits to x86-efi specific parts.
2013-12-11 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/commands/efi/lssal.c: Fix terminating condition.
2013-12-11 Vladimir Serbinenko <phcoder@gmail.com>
Introduce grub_efi_packed_guid and use it where alignment is not
guaranteed.
2013-12-11 Vladimir Serbinenko <phcoder@gmail.com>
* include/grub/efi/api.h (grub_efi_device_path): Define length as
unaligned u16 rather than u8[2].
2013-12-11 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/ia64/dl.c (grub_arch_dl_relocate_symbols): Add checks
for relocation range.
2013-12-11 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/ia64/dl.c (grub_arch_dl_relocate_symbols): Handle
non-function pcrel21b relocation. It happens with .text.unlikely
section.
2013-12-10 Leif Lindholm <leif.lindholm@linaro.org>
* make MAX_USABLE_ADDRESS platform-specific
* grub-core/kern/efi/mm.c: add Vladimir's new BYTES_TO_PAGES_DOWN macro.
2013-12-10 Leif Lindholm <leif.lindholm@linaro.org>
* grub-core/lib/fdt.c: change memcpy => grub_memcpy
2013-12-09 Jon McCune <jonmccune@google.com>
* Add --no-rs-codes flag to optionally disable reed-solomon codes
in grub-install and grub-bios-setup for x86 BIOS targets.
2013-12-09 Vladimir Serbinenko <phcoder@gmail.com>
Add missing compile and link options for sparc64-emu.
2013-12-09 Vladimir Serbinenko <phcoder@gmail.com>
Implement sparc64 trampolines (needed for sparc64-emu).
2013-12-09 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/sparc64/dl.c (grub_arch_dl_relocate_symbols): Check
range of R_SPARC_HI22.
Implement R_SPARC_LM22.
2013-12-09 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/powerpc/dl_helper.c (grub_arch_dl_get_tramp_got_size):
Do not explicitly check for symbol table as it's already checked in
platform-independent layer.
2013-12-09 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/emu/cache.c [__ia64__]: Use our cache cleaning routine
on ia64 as __clear_cache is a dummy on ia64.
2013-12-09 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/ia64/dl_helper.c (grub_ia64_dl_get_tramp_got_size):
Do not explicitly check for symbol table as it's already checked in
platform-independent layer.
2013-12-09 Colin Watson <cjwatson@ubuntu.com>
* util/grub-mkconfig.in: Add missing newline to output.
2013-12-08 Vladimir Serbinenko <phcoder@gmail.com> 2013-12-08 Vladimir Serbinenko <phcoder@gmail.com>
* grub-core/kern/ia64/efi/init.c (grub_arch_sync_caches): Move to ... * grub-core/kern/ia64/efi/init.c (grub_arch_sync_caches): Move to ...

View File

@ -17,6 +17,7 @@ configuring the GRUB.
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 3.3 or later works for arm64 Note: clang 3.3 or later works for arm64
earlier versions have no arm64 support earlier versions have no arm64 support
@ -25,8 +26,7 @@ configuring the GRUB.
fail. fail.
Note: clang 3.2 or later works for powerpc Note: clang 3.2 or later works for powerpc
earlier versions not tested earlier versions not tested
Note: clang has no support for generating 64-bit sparc code and hence you Note: clang doesn't support -mno-app-regs and so can't be used for sparc64
can't compile GRUB for sparc64 with clang
Note: clang has no support for ia64 and hence you can't compile GRUB Note: clang has no support for ia64 and hence you can't compile GRUB
for ia64 with clang for ia64 with clang
* GNU Make * GNU Make

View File

@ -399,7 +399,7 @@ bootcheck: $(BOOTCHECKS)
if COND_i386_coreboot if COND_i386_coreboot
default_payload.elf: grub-mkstandalone grub-mkimage default_payload.elf: grub-mkstandalone grub-mkimage
pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos xfs ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos xfs ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
endif endif
windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows

View File

@ -62,6 +62,7 @@ library = {
common_nodist = grub_script.tab.h; common_nodist = grub_script.tab.h;
common = grub-core/commands/blocklist.c; common = grub-core/commands/blocklist.c;
common = grub-core/commands/macbless.c;
common = grub-core/commands/xnu_uuid.c; common = grub-core/commands/xnu_uuid.c;
common = grub-core/commands/testload.c; common = grub-core/commands/testload.c;
common = grub-core/commands/ls.c; common = grub-core/commands/ls.c;
@ -154,6 +155,7 @@ library = {
common = grub-core/script/script.c; common = grub-core/script/script.c;
common = grub-core/script/argv.c; common = grub-core/script/argv.c;
common = grub-core/io/gzio.c; common = grub-core/io/gzio.c;
common = grub-core/io/xzio.c;
common = grub-core/io/lzopio.c; common = grub-core/io/lzopio.c;
common = grub-core/kern/ia64/dl_helper.c; common = grub-core/kern/ia64/dl_helper.c;
common = grub-core/kern/arm/dl_helper.c; common = grub-core/kern/arm/dl_helper.c;
@ -417,6 +419,21 @@ program = {
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
}; };
program = {
name = grub-macbless;
installdir = sbin;
mansection = 1;
common = util/grub-macbless.c;
common = grub-core/osdep/init.c;
common = grub-core/kern/emu/argp_common.c;
ldadd = libgrubmods.a;
ldadd = libgrubgcry.a;
ldadd = libgrubkern.a;
ldadd = grub-core/gnulib/libgnu.a;
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
};
data = { data = {
common = util/grub.d/README; common = util/grub.d/README;
installdir = grubconf; installdir = grubconf;
@ -439,49 +456,42 @@ script = {
name = '10_hurd'; name = '10_hurd';
common = util/grub.d/10_hurd.in; common = util/grub.d/10_hurd.in;
installdir = grubconf; installdir = grubconf;
condition = COND_HOST_HURD;
}; };
script = { script = {
name = '10_kfreebsd'; name = '10_kfreebsd';
common = util/grub.d/10_kfreebsd.in; common = util/grub.d/10_kfreebsd.in;
installdir = grubconf; installdir = grubconf;
condition = COND_HOST_KFREEBSD;
}; };
script = { script = {
name = '10_illumos'; name = '10_illumos';
common = util/grub.d/10_illumos.in; common = util/grub.d/10_illumos.in;
installdir = grubconf; installdir = grubconf;
condition = COND_HOST_ILLUMOS;
}; };
script = { script = {
name = '10_netbsd'; name = '10_netbsd';
common = util/grub.d/10_netbsd.in; common = util/grub.d/10_netbsd.in;
installdir = grubconf; installdir = grubconf;
condition = COND_HOST_NETBSD;
}; };
script = { script = {
name = '10_linux'; name = '10_linux';
common = util/grub.d/10_linux.in; common = util/grub.d/10_linux.in;
installdir = grubconf; installdir = grubconf;
condition = COND_HOST_LINUX;
}; };
script = { script = {
name = '10_xnu'; name = '10_xnu';
common = util/grub.d/10_xnu.in; common = util/grub.d/10_xnu.in;
installdir = grubconf; installdir = grubconf;
condition = COND_HOST_XNU;
}; };
script = { script = {
name = '20_linux_xen'; name = '20_linux_xen';
common = util/grub.d/20_linux_xen.in; common = util/grub.d/20_linux_xen.in;
installdir = grubconf; installdir = grubconf;
condition = COND_HOST_LINUX;
}; };
script = { script = {
@ -567,6 +577,7 @@ program = {
common = grub-core/osdep/platform.c; common = grub-core/osdep/platform.c;
common = grub-core/osdep/platform_unix.c; common = grub-core/osdep/platform_unix.c;
extra_dist = grub-core/osdep/linux/platform.c; extra_dist = grub-core/osdep/linux/platform.c;
extra_dist = grub-core/osdep/windows/platform.c;
extra_dist = grub-core/osdep/basic/platform.c; extra_dist = grub-core/osdep/basic/platform.c;
extra_dist = grub-core/osdep/basic/no_platform.c; extra_dist = grub-core/osdep/basic/no_platform.c;
extra_dist = grub-core/osdep/unix/platform.c; extra_dist = grub-core/osdep/unix/platform.c;
@ -613,6 +624,9 @@ program = {
common = grub-core/osdep/blocklist.c; common = grub-core/osdep/blocklist.c;
common = grub-core/osdep/config.c; common = grub-core/osdep/config.c;
common = util/config.c; common = util/config.c;
common = util/render-label.c;
common = grub-core/kern/emu/hostfs.c;
common = grub-core/disk/host.c;
common = util/resolve.c; common = util/resolve.c;
enable = noemu; enable = noemu;
@ -1244,6 +1258,24 @@ program = {
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
}; };
program = {
name = grub-syslinux2cfg;
mansection = 1;
common = util/grub-syslinux2cfg.c;
common = grub-core/lib/syslinux_parse.c;
common = grub-core/lib/getline.c;
common = grub-core/osdep/init.c;
common = grub-core/kern/emu/hostfs.c;
common = grub-core/disk/host.c;
common = grub-core/kern/emu/argp_common.c;
ldadd = libgrubmods.a;
ldadd = libgrubgcry.a;
ldadd = libgrubkern.a;
ldadd = grub-core/gnulib/libgnu.a;
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
};
program = { program = {
name = grub-glue-efi; name = grub-glue-efi;
mansection = 1; mansection = 1;
@ -1277,3 +1309,32 @@ program = {
ldadd = grub-core/gnulib/libgnu.a; ldadd = grub-core/gnulib/libgnu.a;
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
}; };
program = {
name = grub-file;
mansection = 1;
common = util/grub-file.c;
common = util/render-label.c;
common = grub-core/commands/file.c;
common = grub-core/commands/file32.c;
common = grub-core/commands/file64.c;
common = grub-core/loader/i386/xen_file.c;
common = grub-core/loader/i386/xen_file32.c;
common = grub-core/loader/i386/xen_file64.c;
common = grub-core/io/offset.c;
common = grub-core/kern/elf.c;
common = grub-core/loader/lzss.c;
common = grub-core/loader/macho.c;
common = grub-core/loader/macho32.c;
common = grub-core/loader/macho64.c;
common = grub-core/kern/emu/hostfs.c;
common = grub-core/disk/host.c;
common = grub-core/osdep/init.c;
ldadd = libgrubmods.a;
ldadd = libgrubgcry.a;
ldadd = libgrubkern.a;
ldadd = grub-core/gnulib/libgnu.a;
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
};

View File

@ -19,6 +19,8 @@ AC_DEFUN([grub_PROG_TARGET_CC],
AC_CACHE_VAL(grub_cv_prog_target_cc, AC_CACHE_VAL(grub_cv_prog_target_cc,
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[ [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:"); asm (".globl start; start:");
void __main (void);
void __main (void) {}
int main (void); int main (void);
]], [[]])], ]], [[]])],
[grub_cv_prog_target_cc=yes], [grub_cv_prog_target_cc=yes],
@ -288,7 +290,12 @@ AC_DEFUN([grub_CHECK_BSS_START_SYMBOL],
[AC_REQUIRE([AC_PROG_CC]) [AC_REQUIRE([AC_PROG_CC])
AC_MSG_CHECKING([if __bss_start is defined by the compiler]) AC_MSG_CHECKING([if __bss_start is defined by the compiler])
AC_CACHE_VAL(grub_cv_check_uscore_uscore_bss_start_symbol, AC_CACHE_VAL(grub_cv_check_uscore_uscore_bss_start_symbol,
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
void __main (void);
void __main (void) {}
int main (void);
]],
[[asm ("incl __bss_start")]])], [[asm ("incl __bss_start")]])],
[grub_cv_check_uscore_uscore_bss_start_symbol=yes], [grub_cv_check_uscore_uscore_bss_start_symbol=yes],
[grub_cv_check_uscore_uscore_bss_start_symbol=no])]) [grub_cv_check_uscore_uscore_bss_start_symbol=no])])
@ -297,7 +304,11 @@ AC_MSG_RESULT([$grub_cv_check_uscore_uscore_bss_start_symbol])
AC_MSG_CHECKING([if edata is defined by the compiler]) AC_MSG_CHECKING([if edata is defined by the compiler])
AC_CACHE_VAL(grub_cv_check_edata_symbol, AC_CACHE_VAL(grub_cv_check_edata_symbol,
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
void __main (void);
void __main (void) {}
int main (void);]],
[[asm ("incl edata")]])], [[asm ("incl edata")]])],
[grub_cv_check_edata_symbol=yes], [grub_cv_check_edata_symbol=yes],
[grub_cv_check_edata_symbol=no])]) [grub_cv_check_edata_symbol=no])])
@ -306,7 +317,11 @@ AC_MSG_RESULT([$grub_cv_check_edata_symbol])
AC_MSG_CHECKING([if _edata is defined by the compiler]) AC_MSG_CHECKING([if _edata is defined by the compiler])
AC_CACHE_VAL(grub_cv_check_uscore_edata_symbol, AC_CACHE_VAL(grub_cv_check_uscore_edata_symbol,
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
void __main (void);
void __main (void) {}
int main (void);]],
[[asm ("incl _edata")]])], [[asm ("incl _edata")]])],
[grub_cv_check_uscore_edata_symbol=yes], [grub_cv_check_uscore_edata_symbol=yes],
[grub_cv_check_uscore_edata_symbol=no])]) [grub_cv_check_uscore_edata_symbol=no])])
@ -330,7 +345,11 @@ AC_DEFUN([grub_CHECK_END_SYMBOL],
[AC_REQUIRE([AC_PROG_CC]) [AC_REQUIRE([AC_PROG_CC])
AC_MSG_CHECKING([if end is defined by the compiler]) AC_MSG_CHECKING([if end is defined by the compiler])
AC_CACHE_VAL(grub_cv_check_end_symbol, AC_CACHE_VAL(grub_cv_check_end_symbol,
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
void __main (void);
void __main (void) {}
int main (void);]],
[[asm ("incl end")]])], [[asm ("incl end")]])],
[grub_cv_check_end_symbol=yes], [grub_cv_check_end_symbol=yes],
[grub_cv_check_end_symbol=no])]) [grub_cv_check_end_symbol=no])])
@ -339,7 +358,11 @@ AC_MSG_RESULT([$grub_cv_check_end_symbol])
AC_MSG_CHECKING([if _end is defined by the compiler]) AC_MSG_CHECKING([if _end is defined by the compiler])
AC_CACHE_VAL(grub_cv_check_uscore_end_symbol, AC_CACHE_VAL(grub_cv_check_uscore_end_symbol,
[AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
void __main (void);
void __main (void) {}
int main (void);]],
[[asm ("incl _end")]])], [[asm ("incl _end")]])],
[grub_cv_check_uscore_end_symbol=yes], [grub_cv_check_uscore_end_symbol=yes],
[grub_cv_check_uscore_end_symbol=no])]) [grub_cv_check_uscore_end_symbol=no])])

View File

@ -8,11 +8,13 @@ unexport LC_ALL
# Platform specific options # Platform specific options
if COND_sparc64_ieee1275 if COND_sparc64_ieee1275
CFLAGS_PLATFORM += -mno-app-regs CFLAGS_PLATFORM += -mno-app-regs
LDFLAGS_PLATFORM = -Wl,-melf64_sparc -mno-relax LDFLAGS_PLATFORM = -Wl,-melf64_sparc -Wl,--no-relax
endif
if COND_sparc64_emu
CFLAGS_PLATFORM += -mno-app-regs
LDFLAGS_PLATFORM = -Wl,--no-relax
endif endif
if COND_arm if COND_arm
CFLAGS_PLATFORM += -mthumb-interwork
CCASFLAGS_PLATFORM = -mthumb-interwork
if !COND_emu if !COND_emu
LDFLAGS_PLATFORM = -Wl,--wrap=__clear_cache LDFLAGS_PLATFORM = -Wl,--wrap=__clear_cache
endif endif
@ -44,11 +46,7 @@ CFLAGS_KERNEL = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding
LDFLAGS_KERNEL = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) $(TARGET_LDFLAGS_STATIC_LIBGCC) LDFLAGS_KERNEL = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) $(TARGET_LDFLAGS_STATIC_LIBGCC)
CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1 CPPFLAGS_KERNEL = $(CPPFLAGS_CPU) $(CPPFLAGS_PLATFORM) -DGRUB_KERNEL=1
CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM) CCASFLAGS_KERNEL = $(CCASFLAGS_CPU) $(CCASFLAGS_PLATFORM)
if COND_CYGWIN STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version
STRIPFLAGS_KERNEL = -F elf32-i386 -R .rel.dyn -R .reginfo -R .note -R .comment -R .drectve -R .note.gnu.gold-version
else
STRIPFLAGS_KERNEL = -R .rel.dyn -R .reginfo -R .note -R .comment -R .note.gnu.gold-version
endif
CFLAGS_MODULE = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding CFLAGS_MODULE = $(CFLAGS_CPU) $(CFLAGS_PLATFORM) -ffreestanding
LDFLAGS_MODULE = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r,-d LDFLAGS_MODULE = $(LDFLAGS_CPU) $(LDFLAGS_PLATFORM) -nostdlib $(TARGET_LDFLAGS_OLDMAGIC) -Wl,-r,-d

View File

@ -15,7 +15,7 @@ EXTRA_DIST += docs/autoiso.cfg
EXTRA_DIST += docs/grub.cfg EXTRA_DIST += docs/grub.cfg
EXTRA_DIST += docs/osdetect.cfg EXTRA_DIST += docs/osdetect.cfg
EXTRA_DIST += conf/i386-pc-cygwin-img-ld.sc EXTRA_DIST += conf/i386-cygwin-img-ld.sc
EXTRA_DIST += grub-core/Makefile.core.def EXTRA_DIST += grub-core/Makefile.core.def
EXTRA_DIST += grub-core/Makefile.gcry.def EXTRA_DIST += grub-core/Makefile.gcry.def

View File

@ -5,6 +5,8 @@ SECTIONS
.text : .text :
{ {
start = . ; start = . ;
_start = . ;
__start = . ;
*(.text) *(.text)
etext = . ; etext = . ;
} }
@ -33,6 +35,8 @@ SECTIONS
{ {
*(.edata) *(.edata)
end = . ; end = . ;
_end = . ;
__end = . ;
} }
.stab : .stab :
{ {

View File

@ -32,7 +32,7 @@ dnl type, so there is no conflict. Variables with the prefix "TARGET_"
dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target
dnl type. dnl type.
AC_INIT([GRUB],[2.00],[bug-grub@gnu.org]) AC_INIT([GRUB],[2.02~beta1],[bug-grub@gnu.org])
AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_AUX_DIR([build-aux])
@ -69,6 +69,7 @@ grub_TRANSFORM([grub-script-check])
grub_TRANSFORM([grub-set-default]) grub_TRANSFORM([grub-set-default])
grub_TRANSFORM([grub-sparc64-setup]) grub_TRANSFORM([grub-sparc64-setup])
grub_TRANSFORM([grub-render-label]) grub_TRANSFORM([grub-render-label])
grub_TRANSFORM([grub-file])
# Optimization flag. Allow user to override. # Optimization flag. Allow user to override.
if test "x$TARGET_CFLAGS" = x; then if test "x$TARGET_CFLAGS" = x; then
@ -176,6 +177,10 @@ if test x$platform != xemu ; then
esac esac
fi fi
if test x"$target_cpu-$platform" = xsparc64-emu ; then
target_m64=1 ;
fi
case "$target_os" in case "$target_os" in
windows* | mingw32*) target_os=cygwin ;; windows* | mingw32*) target_os=cygwin ;;
esac esac
@ -345,6 +350,11 @@ AC_SYS_LARGEFILE
# Identify characteristics of the host architecture. # Identify characteristics of the host architecture.
unset ac_cv_c_bigendian unset ac_cv_c_bigendian
if test x"$target_cpu-$platform" = xsparc64-emu ; then
CFLAGS="$CFLAGS -m64"
HOST_CFLAGS="$HOST_CFLAGS -m64"
fi
AC_C_BIGENDIAN AC_C_BIGENDIAN
AC_CHECK_SIZEOF(void *) AC_CHECK_SIZEOF(void *)
AC_CHECK_SIZEOF(long) AC_CHECK_SIZEOF(long)
@ -423,7 +433,7 @@ esac
gl_INIT gl_INIT
WARN_FLAGS="-Wall -W -Wshadow -Wpointer-arith -Wundef -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wpointer-arith -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wundef -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes" WARN_FLAGS="-Wall -W -Wshadow -Wpointer-arith -Wundef -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wpointer-arith -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wundef -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes"
EXTRA_WARN_FLAGS="-Wold-style-definition -Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign" EXTRA_WARN_FLAGS="-Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign"
HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align" HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align"
@ -505,7 +515,12 @@ AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
grub_cv_target_cc_w_extra_flags= grub_cv_target_cc_w_extra_flags=
for x in $EXTRA_WARN_FLAGS; do for x in $EXTRA_WARN_FLAGS; do
CFLAGS="$TARGET_CFLAGS $x -Werror" CFLAGS="$TARGET_CFLAGS $x -Werror"
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0]) AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
void __main (void);
void __main (void) {}
int main (void);
]], [[]])], [flag=1], [flag=0])
if test x$flag = x1 ; then if test x$flag = x1 ; then
grub_cv_target_cc_w_extra_flags="$grub_cv_target_cc_w_extra_flags $x" grub_cv_target_cc_w_extra_flags="$grub_cv_target_cc_w_extra_flags $x"
fi fi
@ -679,23 +694,13 @@ 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
# For platforms where ELF is not the default link format.
case "${target_os}" in
cygwin)
# FIXME: put proper test here
NEED_REGISTER_FRAME_INFO=1
;;
*) NEED_REGISTER_FRAME_INFO=0 ;;
esac
AC_ARG_ENABLE([efiemu], AC_ARG_ENABLE([efiemu],
[AS_HELP_STRING([--enable-efiemu], [AS_HELP_STRING([--enable-efiemu],
[build and install the efiemu runtimes (default=guessed)])]) [build and install the efiemu runtimes (default=guessed)])])
if test x"$enable_efiemu" = xno ; then if test x"$enable_efiemu" = xno ; then
efiemu_excuse="explicitly disabled" efiemu_excuse="explicitly disabled"
fi fi
if test x"$target_os" = xcygwin ; then 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" efiemu_excuse="not available on cygwin"
fi fi
if test x"$target_cpu" != xi386 ; then if test x"$target_cpu" != xi386 ; then
@ -755,8 +760,11 @@ CFLAGS="$TARGET_CFLAGS"
if test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then if test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [ AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [
grub_cv_target_cc_link_format=unknown grub_cv_target_cc_link_format=unknown
for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -m${target_cpu}pe -arch,${target_cpu}; do for format in -melf_${target_cpu} -melf_${target_cpu}_fbsd -melf_${target_cpu}_obsd -melf_${target_cpu}_haiku -mi386pe -mi386pep -arch,${target_cpu}; do
if test x${target_cpu} != xi386 && test x$format = x${target_cpu}pe; then if test x${target_cpu} != xi386 && test x$format = xi386pe; then
continue
fi
if test x${target_cpu} != xx86_64 && test x$format = xi386pep; then
continue continue
fi fi
CFLAGS="$TARGET_CFLAGS" CFLAGS="$TARGET_CFLAGS"
@ -777,9 +785,12 @@ if test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
AC_MSG_ERROR([no suitable link format found]) AC_MSG_ERROR([no suitable link format found])
fi fi
TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format" TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
if test x"$grub_cv_target_cc_link_format" = x-mi386pe; then if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then
TARGET_OBJ2ELF='./build-grub-pe2elf'; TARGET_OBJ2ELF='./build-grub-pe2elf';
fi fi
if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
TARGET_OBJ2ELF='./build-grub-pep2elf';
fi
fi fi
if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_cc_link_format = x-arch,x86_64; then if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_cc_link_format = x-arch,x86_64; then
@ -797,12 +808,12 @@ if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_c
TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20' TARGET_IMG_LDFLAGS_AC='-nostdlib -static -Wl,-preload -Wl,-segalign,20'
TARGET_IMG_BASE_LDOPT="-Wl,-image_base" TARGET_IMG_BASE_LDOPT="-Wl,-image_base"
TARGET_LDFLAGS_OLDMAGIC="" TARGET_LDFLAGS_OLDMAGIC=""
elif test x$grub_cv_target_cc_link_format = x-mi386pe && test x$platform = xpc; then elif test x$grub_cv_target_cc_link_format = x-mi386pe || test x$grub_cv_target_cc_link_format = x-mi386pep ; then
TARGET_APPLE_LINKER=0 TARGET_APPLE_LINKER=0
TARGET_LDFLAGS_OLDMAGIC="-Wl,-N" TARGET_LDFLAGS_OLDMAGIC="-Wl,-N"
TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/i386-pc-cygwin-img-ld.sc" TARGET_IMG_LDSCRIPT='$(top_srcdir)'"/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}" TARGET_IMG_LDFLAGS="-Wl,-T${TARGET_IMG_LDSCRIPT}"
TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/i386-pc-cygwin-img-ld.sc" TARGET_IMG_LDFLAGS_AC="-Wl,-T${srcdir}/${grub_coredir}/conf/i386-cygwin-img-ld.sc"
TARGET_IMG_BASE_LDOPT="-Wl,-Ttext" TARGET_IMG_BASE_LDOPT="-Wl,-Ttext"
TARGET_IMG_CFLAGS= TARGET_IMG_CFLAGS=
else else
@ -820,7 +831,7 @@ AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)
LDFLAGS="$TARGET_LDFLAGS" LDFLAGS="$TARGET_LDFLAGS"
if test "$target_cpu" = x86_64; then if test "$target_cpu" = x86_64 || test "$target_cpu-$platform" = sparc64-emu ; then
# Use large model to support 4G memory # Use large model to support 4G memory
AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [ AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
CFLAGS="$TARGET_CFLAGS -m64 -mcmodel=large" CFLAGS="$TARGET_CFLAGS -m64 -mcmodel=large"
@ -830,6 +841,8 @@ if test "$target_cpu" = x86_64; then
]) ])
if test "x$grub_cv_cc_mcmodel" = xyes; then if test "x$grub_cv_cc_mcmodel" = xyes; then
TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large" TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
elif test "$target_cpu-$platform" = sparc64-emu; then
TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
fi fi
fi fi
@ -858,6 +871,29 @@ if test "x$target_cpu" = xarm; then
if test "x$grub_cv_cc_mlong_calls" = xyes; then if test "x$grub_cv_cc_mlong_calls" = xyes; then
TARGET_CFLAGS="$TARGET_CFLAGS -mlong-calls" TARGET_CFLAGS="$TARGET_CFLAGS -mlong-calls"
fi fi
AC_CACHE_CHECK([whether option -mthumb-interwork works], grub_cv_cc_mthumb_interwork, [
CFLAGS="$TARGET_CFLAGS -mthumb-interwork -Werror"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_mthumb_interwork=yes],
[grub_cv_cc_mthumb_interwork=no])
])
if test "x$grub_cv_cc_mthumb_interwork" = xyes; then
TARGET_CFLAGS="$TARGET_CFLAGS -mthumb-interwork"
elif test "x$grub_cv_cc_target_clang" = xno ; then
AC_MSG_ERROR([your compiler doesn't support -mthumb-interwork])
else
CFLAGS="$TARGET_CFLAGS"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[
#if defined (__thumb__) && !defined (__thumb2__)
#error thumb without interworking
#endif
]])],
[no_interwork_ok=yes],
[no_interwork_ok=no])
if test x$no_interwork_ok = xno ; then
AC_MSG_ERROR([attempt to compile to thumb with no thumb interwork])
fi
fi
fi fi
# #
@ -948,7 +984,7 @@ CC="$TARGET_CC"
if test "x$TARGET_APPLE_LINKER" = x1 ; then if test "x$TARGET_APPLE_LINKER" = x1 ; then
CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error" CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error"
else else
CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100 -Wno-error" CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
fi fi
CPPFLAGS="$TARGET_CPPFLAGS" CPPFLAGS="$TARGET_CPPFLAGS"
if test x$target_cpu = xi386 || test x$target_cpu = xx86_64 || test "x$grub_cv_cc_target_clang" = xyes ; then if test x$target_cpu = xi386 || test x$target_cpu = xx86_64 || test "x$grub_cv_cc_target_clang" = xyes ; then
@ -962,10 +998,11 @@ LIBS="$TARGET_LIBGCC"
grub_ASM_USCORE grub_ASM_USCORE
if test "x$TARGET_APPLE_LINKER" = x0 ; then if test "x$TARGET_APPLE_LINKER" = x0 ; then
if test x$grub_cv_asm_uscore = xyes; then if test x$grub_cv_asm_uscore = xyes; then
CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,_abort=_main" DEFSYM="-Wl,--defsym,_abort=_main -Wl,--defsym,__main=_main"
else else
CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,abort=main" DEFSYM="-Wl,--defsym,abort=main -Wl,--defsym,_main=main -Wl,--defsym,__main=main"
fi fi
CFLAGS="$TARGET_CFLAGS -nostdlib $DEFSYM"
fi fi
# Check for libgcc symbols # Check for libgcc symbols
@ -974,7 +1011,7 @@ AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __ucmpdi2 _re
if test "x$TARGET_APPLE_LINKER" = x1 ; then if test "x$TARGET_APPLE_LINKER" = x1 ; then
CFLAGS="$TARGET_CFLAGS -nostdlib -static" CFLAGS="$TARGET_CFLAGS -nostdlib -static"
else else
CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100" CFLAGS="$TARGET_CFLAGS -nostdlib"
fi fi
LIBS="" LIBS=""
@ -988,7 +1025,7 @@ if test "x$target_cpu" = xi386; then
if test "$platform" != emu && test "x$TARGET_APPLE_LINKER" != x1 ; then if test "$platform" != emu && test "x$TARGET_APPLE_LINKER" != x1 ; then
if test ! -z "$TARGET_IMG_LDSCRIPT"; then if test ! -z "$TARGET_IMG_LDSCRIPT"; then
# Check symbols provided by linker script. # Check symbols provided by linker script.
CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000 -Wl,--defsym,___main=0x8100" CFLAGS="$TARGET_CFLAGS -nostdlib ${TARGET_IMG_LDFLAGS_AC} ${TARGET_IMG_BASE_LDOPT},0x8000"
fi fi
grub_CHECK_BSS_START_SYMBOL grub_CHECK_BSS_START_SYMBOL
grub_CHECK_END_SYMBOL grub_CHECK_END_SYMBOL
@ -1607,7 +1644,6 @@ AC_SUBST(TARGET_LDFLAGS)
AC_SUBST(TARGET_CPPFLAGS) AC_SUBST(TARGET_CPPFLAGS)
AC_SUBST(TARGET_CCASFLAGS) AC_SUBST(TARGET_CCASFLAGS)
AC_SUBST(TARGET_IMG_LDSCRIPT)
AC_SUBST(TARGET_IMG_LDFLAGS) AC_SUBST(TARGET_IMG_LDFLAGS)
AC_SUBST(TARGET_IMG_CFLAGS) AC_SUBST(TARGET_IMG_CFLAGS)
AC_SUBST(TARGET_IMG_BASE_LDOPT) AC_SUBST(TARGET_IMG_BASE_LDOPT)
@ -1640,6 +1676,7 @@ AM_CONDITIONAL([COND_mips_loongson], [test x$target_cpu = xmipsel -a x$platform
AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xqemu_mips]) AM_CONDITIONAL([COND_mips_qemu_mips], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xqemu_mips])
AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xarc]) AM_CONDITIONAL([COND_mips_arc], [test "(" x$target_cpu = xmips -o x$target_cpu = xmipsel ")" -a x$platform = xarc])
AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275]) AM_CONDITIONAL([COND_sparc64_ieee1275], [test x$target_cpu = xsparc64 -a x$platform = xieee1275])
AM_CONDITIONAL([COND_sparc64_emu], [test x$target_cpu = xsparc64 -a x$platform = xemu])
AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275]) AM_CONDITIONAL([COND_powerpc_ieee1275], [test x$target_cpu = xpowerpc -a x$platform = xieee1275])
AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel]) AM_CONDITIONAL([COND_mips], [test x$target_cpu = xmips -o x$target_cpu = xmipsel])
AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel]) AM_CONDITIONAL([COND_mipsel], [test x$target_cpu = xmipsel])
@ -1650,13 +1687,7 @@ AM_CONDITIONAL([COND_arm_efi], [test x$target_cpu = xarm -a x$platform = xefi])
AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ]) AM_CONDITIONAL([COND_arm64], [test x$target_cpu = xarm64 ])
AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi]) AM_CONDITIONAL([COND_arm64_efi], [test x$target_cpu = xarm64 -a x$platform = xefi])
AM_CONDITIONAL([COND_HOST_HURD], [test x$host_kernel = xhurd])
AM_CONDITIONAL([COND_HOST_LINUX], [test x$host_kernel = xlinux])
AM_CONDITIONAL([COND_HOST_NETBSD], [test x$host_kernel = xnetbsd])
AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows]) AM_CONDITIONAL([COND_HOST_WINDOWS], [test x$host_kernel = xwindows])
AM_CONDITIONAL([COND_HOST_KFREEBSD], [test x$host_kernel = xkfreebsd])
AM_CONDITIONAL([COND_HOST_XNU], [test x$host_kernel = xxnu])
AM_CONDITIONAL([COND_HOST_ILLUMOS], [test x$host_kernel = xillumos])
AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x]) AM_CONDITIONAL([COND_MAN_PAGES], [test x$cross_compiling = xno -a x$HELP2MAN != x])
AM_CONDITIONAL([COND_GRUB_EMU_USB], [test x$enable_grub_emu_usb = xyes]) AM_CONDITIONAL([COND_GRUB_EMU_USB], [test x$enable_grub_emu_usb = xyes])
@ -1679,7 +1710,6 @@ AM_CONDITIONAL([COND_ENABLE_BOOT_TIME_STATS], [test x$BOOT_TIME_STATS = x1])
AM_CONDITIONAL([COND_HAVE_CXX], [test x$HAVE_CXX = xyes]) AM_CONDITIONAL([COND_HAVE_CXX], [test x$HAVE_CXX = xyes])
AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1]) AM_CONDITIONAL([COND_HAVE_ASM_USCORE], [test x$HAVE_ASM_USCORE = x1])
AM_CONDITIONAL([COND_CYGWIN], [test x$target_os = xcygwin])
AM_CONDITIONAL([COND_STARFIELD], [test "x$starfield_excuse" = x]) AM_CONDITIONAL([COND_STARFIELD], [test "x$starfield_excuse" = x])
AM_CONDITIONAL([COND_HAVE_EXEC], [test "x$have_exec" = xy]) AM_CONDITIONAL([COND_HAVE_EXEC], [test "x$have_exec" = xy])

View File

@ -11,7 +11,7 @@ Index: b/util/setup.c
/* On SPARC this program fills in various fields inside of the 'boot' and 'core' /* On SPARC this program fills in various fields inside of the 'boot' and 'core'
* image files. * image files.
* *
@@ -577,6 +579,8 @@ @@ -590,6 +592,8 @@
grub_free (sectors); grub_free (sectors);
@ -20,7 +20,7 @@ Index: b/util/setup.c
goto finish; goto finish;
} }
@@ -619,6 +623,10 @@ @@ -632,6 +636,10 @@
/* The core image must be put on a filesystem unfortunately. */ /* The core image must be put on a filesystem unfortunately. */
grub_util_info ("will leave the core image on the filesystem"); grub_util_info ("will leave the core image on the filesystem");

View File

@ -2,7 +2,7 @@ Description: Read /etc/default/grub.d/*.cfg after /etc/default/grub
Author: Colin Watson <cjwatson@ubuntu.com> Author: Colin Watson <cjwatson@ubuntu.com>
Bug-Ubuntu: https://bugs.launchpad.net/bugs/901600 Bug-Ubuntu: https://bugs.launchpad.net/bugs/901600
Forwarded: no Forwarded: no
Last-Update: 2013-12-08 Last-Update: 2013-12-20
Index: b/grub-core/osdep/unix/config.c Index: b/grub-core/osdep/unix/config.c
=================================================================== ===================================================================
@ -92,7 +92,7 @@ Index: b/util/grub-mkconfig.in
=================================================================== ===================================================================
--- a/util/grub-mkconfig.in --- a/util/grub-mkconfig.in
+++ b/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in
@@ -153,6 +153,11 @@ @@ -162,6 +162,11 @@
if test -f ${sysconfdir}/default/grub ; then if test -f ${sysconfdir}/default/grub ; then
. ${sysconfdir}/default/grub . ${sysconfdir}/default/grub
fi fi

View File

@ -1,13 +1,13 @@
Description: Improve handling of Debian kernel version numbers Description: Improve handling of Debian kernel version numbers
Author: Robert Millan <rmh@aybabtu.com> Author: Robert Millan <rmh@aybabtu.com>
Forwarded: not-needed Forwarded: not-needed
Last-Update: 2011-04-21 Last-Update: 2013-12-20
Index: b/util/grub-mkconfig_lib.in Index: b/util/grub-mkconfig_lib.in
=================================================================== ===================================================================
--- a/util/grub-mkconfig_lib.in --- a/util/grub-mkconfig_lib.in
+++ b/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in
@@ -235,8 +235,9 @@ @@ -238,8 +238,9 @@
version_test_gt () version_test_gt ()
{ {
@ -19,7 +19,7 @@ Index: b/util/grub-mkconfig_lib.in
version_test_gt_cmp=gt version_test_gt_cmp=gt
if [ "x$version_test_gt_b" = "x" ] ; then if [ "x$version_test_gt_b" = "x" ] ; then
return 0 return 0
@@ -246,7 +247,7 @@ @@ -249,7 +250,7 @@
*.old:*) version_test_gt_a="`echo -n "$version_test_gt_a" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=gt ;; *.old:*) version_test_gt_a="`echo -n "$version_test_gt_a" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=gt ;;
*:*.old) version_test_gt_b="`echo -n "$version_test_gt_b" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=ge ;; *:*.old) version_test_gt_b="`echo -n "$version_test_gt_b" | sed -e 's/\.old$//'`" ; version_test_gt_cmp=ge ;;
esac esac

View File

@ -5,13 +5,13 @@ Description: Add configure option to enable gfxpayload=keep dynamically
Author: Evan Broder <evan@ebroder.net> Author: Evan Broder <evan@ebroder.net>
Author: Colin Watson <cjwatson@ubuntu.com> Author: Colin Watson <cjwatson@ubuntu.com>
Forwarded: no Forwarded: no
Last-Update: 2013-12-08 Last-Update: 2013-12-20
Index: b/configure.ac Index: b/configure.ac
=================================================================== ===================================================================
--- a/configure.ac --- a/configure.ac
+++ b/configure.ac +++ b/configure.ac
@@ -1534,6 +1534,17 @@ @@ -1571,6 +1571,17 @@
fi fi
AC_SUBST([QUICK_BOOT]) AC_SUBST([QUICK_BOOT])
@ -212,7 +212,7 @@ Index: b/util/grub.d/10_linux.in
. "@datadir@/@PACKAGE@/grub-mkconfig_lib" . "@datadir@/@PACKAGE@/grub-mkconfig_lib"
@@ -133,9 +134,10 @@ @@ -158,9 +159,10 @@
if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then
echo " load_video" | sed "s/^/$submenu_indentation/" echo " load_video" | sed "s/^/$submenu_indentation/"
fi fi
@ -226,7 +226,7 @@ Index: b/util/grub.d/10_linux.in
fi fi
echo " insmod gzio" | sed "s/^/$submenu_indentation/" echo " insmod gzio" | sed "s/^/$submenu_indentation/"
@@ -208,6 +210,35 @@ @@ -221,6 +223,35 @@
boot_device_id= boot_device_id=
title_correction_code= title_correction_code=

View File

@ -11,13 +11,13 @@ Description: Disable gfxpayload=keep by default
Author: Colin Watson <cjwatson@debian.org> Author: Colin Watson <cjwatson@debian.org>
Bug-Debian: http://bugs.debian.org/567245 Bug-Debian: http://bugs.debian.org/567245
Forwarded: no Forwarded: no
Last-Update: 2013-12-08 Last-Update: 2013-12-20
Index: b/util/grub.d/10_linux.in Index: b/util/grub.d/10_linux.in
=================================================================== ===================================================================
--- a/util/grub.d/10_linux.in --- a/util/grub.d/10_linux.in
+++ b/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in
@@ -102,10 +102,6 @@ @@ -127,10 +127,6 @@
# FIXME: We need an interface to select vesafb in case efifb can't be used. # FIXME: We need an interface to select vesafb in case efifb can't be used.
if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then if [ "x$GRUB_GFXPAYLOAD_LINUX" = x ]; then
echo " load_video" | sed "s/^/$submenu_indentation/" echo " load_video" | sed "s/^/$submenu_indentation/"

View File

@ -2,7 +2,7 @@ Index: b/util/grub-mkconfig.in
=================================================================== ===================================================================
--- a/util/grub-mkconfig.in --- a/util/grub-mkconfig.in
+++ b/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in
@@ -260,6 +260,10 @@ @@ -298,6 +298,10 @@
esac esac
done done

View File

@ -5,26 +5,27 @@ Description: Fall back to i386-pc if booted using EFI but -efi is missing
better than returning a confusing error. better than returning a confusing error.
Author: Colin Watson <cjwatson@ubuntu.com> Author: Colin Watson <cjwatson@ubuntu.com>
Forwarded: no Forwarded: no
Last-Update: 2013-11-19 Last-Update: 2013-12-20
Index: b/grub-core/osdep/linux/platform.c Index: b/grub-core/osdep/linux/platform.c
=================================================================== ===================================================================
--- a/grub-core/osdep/linux/platform.c --- a/grub-core/osdep/linux/platform.c
+++ b/grub-core/osdep/linux/platform.c +++ b/grub-core/osdep/linux/platform.c
@@ -19,9 +19,11 @@ @@ -19,10 +19,12 @@
#include <config.h> #include <config.h>
#include <grub/util/install.h> #include <grub/util/install.h>
+#include <grub/emu/config.h> +#include <grub/emu/config.h>
#include <grub/emu/exec.h> #include <grub/emu/exec.h>
#include <grub/emu/misc.h>
#include <sys/types.h> #include <sys/types.h>
#include <dirent.h> #include <dirent.h>
+#include <stdlib.h> +#include <stdlib.h>
#include <string.h> #include <string.h>
#include <sys/utsname.h> #include <sys/utsname.h>
@@ -73,12 +75,24 @@ @@ -76,11 +78,24 @@
"efivars", NULL }); grub_util_info ("Looking for /sys/firmware/efi ..");
if (is_not_empty_directory ("/sys/firmware/efi")) if (is_not_empty_directory ("/sys/firmware/efi"))
{ {
+ const char *pkglibdir = grub_util_get_pkglibdir (); + const char *pkglibdir = grub_util_get_pkglibdir ();
@ -32,11 +33,11 @@ Index: b/grub-core/osdep/linux/platform.c
+ char *pd; + char *pd;
+ int found; + int found;
+ +
grub_util_info ("...found");
if (is_64_kernel ()) if (is_64_kernel ())
- return "x86_64-efi"; - return "x86_64-efi";
+ platform = "x86_64-efi"; + platform = "x86_64-efi";
else + else
- return "i386-efi";
+ platform = "i386-efi"; + platform = "i386-efi";
+ +
+ pd = grub_util_path_concat (2, pkglibdir, platform); + pd = grub_util_path_concat (2, pkglibdir, platform);
@ -44,10 +45,9 @@ Index: b/grub-core/osdep/linux/platform.c
+ free (pd); + free (pd);
+ if (found) + if (found)
+ return platform; + return platform;
}
- else if (is_not_empty_directory ("/proc/device-tree"))
+
+ if (is_not_empty_directory ("/proc/device-tree"))
return "i386-ieee1275";
else else
return "i386-pc"; - return "i386-efi";
+ grub_util_info ("... but %s platform not available", platform);
}
grub_util_info ("... not found. Looking for /proc/device-tree ..");

View File

@ -5,13 +5,13 @@ Description: Cope with Kubuntu setting GRUB_DISTRIBUTOR
Author: Colin Watson <cjwatson@ubuntu.com> Author: Colin Watson <cjwatson@ubuntu.com>
Bug-Ubuntu: https://bugs.launchpad.net/bugs/1242417 Bug-Ubuntu: https://bugs.launchpad.net/bugs/1242417
Forwarded: not-needed Forwarded: not-needed
Last-Update: 2013-12-08 Last-Update: 2013-12-20
Index: b/util/grub-install.c Index: b/util/grub-install.c
=================================================================== ===================================================================
--- a/util/grub-install.c --- a/util/grub-install.c
+++ b/util/grub-install.c +++ b/util/grub-install.c
@@ -950,6 +950,8 @@ @@ -1075,6 +1075,8 @@
*/ */
char *t; char *t;
efi_distributor = bootloader_id; efi_distributor = bootloader_id;

View File

@ -3,32 +3,32 @@ Author: Colin Watson <cjwatson@ubuntu.com>
Author: Stéphane Graber <stgraber@ubuntu.com> Author: Stéphane Graber <stgraber@ubuntu.com>
Author: Steve Langasek <steve.langasek@ubuntu.com> Author: Steve Langasek <steve.langasek@ubuntu.com>
Forwarded: no Forwarded: no
Last-Update: 2013-12-08 Last-Update: 2013-12-20
Index: b/util/grub-install.c Index: b/util/grub-install.c
=================================================================== ===================================================================
--- a/util/grub-install.c --- a/util/grub-install.c
+++ b/util/grub-install.c +++ b/util/grub-install.c
@@ -69,6 +69,7 @@ @@ -76,6 +76,7 @@
static FILE * load_cfg_f = NULL; static char *label_bgcolor;
static char *load_cfg; static char *product_version;
static int install_bootsector = 1; static int add_rs_codes = 1;
+static int uefi_secure_boot = 1; +static int uefi_secure_boot = 1;
enum enum
{ {
@@ -94,7 +95,9 @@ @@ -107,7 +108,9 @@
OPTION_DEBUG_IMAGE, OPTION_LABEL_FONT,
OPTION_NO_FLOPPY, OPTION_LABEL_COLOR,
OPTION_DISK_MODULE, OPTION_LABEL_BGCOLOR,
- OPTION_NO_BOOTSECTOR - OPTION_PRODUCT_VERSION
+ OPTION_NO_BOOTSECTOR, + OPTION_PRODUCT_VERSION,
+ OPTION_UEFI_SECURE_BOOT, + OPTION_UEFI_SECURE_BOOT,
+ OPTION_NO_UEFI_SECURE_BOOT + OPTION_NO_UEFI_SECURE_BOOT
}; };
static int fs_probe = 1; static int fs_probe = 1;
@@ -190,6 +193,14 @@ @@ -231,6 +234,14 @@
bootloader_id = xstrdup (arg); bootloader_id = xstrdup (arg);
return 0; return 0;
@ -43,10 +43,10 @@ Index: b/util/grub-install.c
case ARGP_KEY_ARG: case ARGP_KEY_ARG:
if (install_device) if (install_device)
grub_util_error ("%s", _("More than one install device?")); grub_util_error ("%s", _("More than one install device?"));
@@ -250,6 +261,14 @@ @@ -300,6 +311,14 @@
N_("the ID of bootloader. This option is only available on EFI."), 2}, {"label-color", OPTION_LABEL_COLOR, N_("COLOR"), 0, N_("use COLOR for label"), 2},
{"efi-directory", OPTION_EFI_DIRECTORY, N_("DIR"), 0, {"label-bgcolor", OPTION_LABEL_BGCOLOR, N_("COLOR"), 0, N_("use COLOR for label background"), 2},
N_("use DIR as the EFI System Partition root."), 2}, {"product-version", OPTION_PRODUCT_VERSION, N_("STRING"), 0, N_("use STRING as product version"), 2},
+ {"uefi-secure-boot", OPTION_UEFI_SECURE_BOOT, 0, 0, + {"uefi-secure-boot", OPTION_UEFI_SECURE_BOOT, 0, 0,
+ N_("install an image usable with UEFI Secure Boot. " + N_("install an image usable with UEFI Secure Boot. "
+ "This option is only available on EFI and if the grub-efi-amd64-signed " + "This option is only available on EFI and if the grub-efi-amd64-signed "
@ -58,7 +58,7 @@ Index: b/util/grub-install.c
{0, 0, 0, 0, 0, 0} {0, 0, 0, 0, 0, 0}
}; };
@@ -694,7 +713,8 @@ @@ -801,7 +820,8 @@
{ {
int is_efi = 0; int is_efi = 0;
const char *efi_distributor = NULL; const char *efi_distributor = NULL;
@ -68,7 +68,7 @@ Index: b/util/grub-install.c
char **grub_devices; char **grub_devices;
grub_fs_t grub_fs; grub_fs_t grub_fs;
grub_device_t grub_dev = NULL; grub_device_t grub_dev = NULL;
@@ -930,6 +950,31 @@ @@ -1055,6 +1075,31 @@
*/ */
char *t; char *t;
efi_distributor = bootloader_id; efi_distributor = bootloader_id;
@ -100,7 +100,7 @@ Index: b/util/grub-install.c
if (removable) if (removable)
{ {
/* The specification makes stricter requirements of removable /* The specification makes stricter requirements of removable
@@ -938,54 +983,16 @@ @@ -1063,54 +1108,16 @@
must have a specific file name depending on the architecture. must have a specific file name depending on the architecture.
*/ */
efi_distributor = "BOOT"; efi_distributor = "BOOT";
@ -159,7 +159,7 @@ Index: b/util/grub-install.c
} }
t = grub_util_path_concat (3, efidir, "EFI", efi_distributor); t = grub_util_path_concat (3, efidir, "EFI", efi_distributor);
free (efidir); free (efidir);
@@ -1120,6 +1127,31 @@ @@ -1315,6 +1322,31 @@
} }
} }
@ -191,7 +191,7 @@ Index: b/util/grub-install.c
if (!have_abstractions) if (!have_abstractions)
{ {
if ((disk_module && grub_strcmp (disk_module, "biosdisk") != 0) if ((disk_module && grub_strcmp (disk_module, "biosdisk") != 0)
@@ -1127,7 +1159,8 @@ @@ -1322,7 +1354,8 @@
|| (!install_drive || (!install_drive
&& platform != GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275) && platform != GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275)
|| (install_drive && !is_same_disk (grub_drives[0], install_drive)) || (install_drive && !is_same_disk (grub_drives[0], install_drive))
@ -201,7 +201,7 @@ Index: b/util/grub-install.c
{ {
char *uuid = NULL; char *uuid = NULL;
/* generic method (used on coreboot and ata mod). */ /* generic method (used on coreboot and ata mod). */
@@ -1557,7 +1590,47 @@ @@ -1843,7 +1876,47 @@
case GRUB_INSTALL_PLATFORM_IA64_EFI: case GRUB_INSTALL_PLATFORM_IA64_EFI:
{ {
char *dst = grub_util_path_concat (2, efidir, efi_file); char *dst = grub_util_path_concat (2, efidir, efi_file);

View File

@ -2,24 +2,24 @@ Description: If GRUB Legacy is still around, tell packaging to ignore it
Author: Colin Watson <cjwatson@debian.org> Author: Colin Watson <cjwatson@debian.org>
Bug-Debian: http://bugs.debian.org/586143 Bug-Debian: http://bugs.debian.org/586143
Forwarded: not-needed Forwarded: not-needed
Last-Update: 2013-12-08 Last-Update: 2013-12-20
Index: b/util/grub-install.c Index: b/util/grub-install.c
=================================================================== ===================================================================
--- a/util/grub-install.c --- a/util/grub-install.c
+++ b/util/grub-install.c +++ b/util/grub-install.c
@@ -41,6 +41,7 @@ @@ -42,6 +42,7 @@
#include <grub/gpt_partition.h>
#include <grub/emu/config.h> #include <grub/emu/config.h>
#include <grub/util/ofpath.h> #include <grub/util/ofpath.h>
#include <grub/hfsplus.h>
+#include <grub/emu/hostfile.h> +#include <grub/emu/hostfile.h>
#include <string.h> #include <string.h>
@@ -1450,6 +1451,19 @@ @@ -1648,6 +1649,19 @@
grub_util_bios_setup (platdir, "boot.img", "core.img", grub_util_bios_setup (platdir, "boot.img", "core.img",
install_drive, force, install_drive, force,
fs_probe, allow_floppy); fs_probe, allow_floppy, add_rs_codes);
+ +
+ /* If vestiges of GRUB Legacy still exist, tell the Debian packaging + /* If vestiges of GRUB Legacy still exist, tell the Debian packaging
+ that they can ignore them. */ + that they can ignore them. */

View File

@ -2,13 +2,13 @@ Description: Add "linuxefi" loader which avoids ExitBootServices
Author: Matthew Garrett <mjg@redhat.com> Author: Matthew Garrett <mjg@redhat.com>
Origin: vendor, http://pkgs.fedoraproject.org/cgit/grub2.git/tree/grub2-linuxefi.patch Origin: vendor, http://pkgs.fedoraproject.org/cgit/grub2.git/tree/grub2-linuxefi.patch
Forwarded: no Forwarded: no
Last-Update: 2013-12-08 Last-Update: 2013-12-20
Index: b/grub-core/Makefile.core.def Index: b/grub-core/Makefile.core.def
=================================================================== ===================================================================
--- a/grub-core/Makefile.core.def --- a/grub-core/Makefile.core.def
+++ b/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def
@@ -1691,6 +1691,14 @@ @@ -1705,6 +1705,14 @@
}; };
module = { module = {
@ -27,7 +27,7 @@ Index: b/grub-core/kern/efi/mm.c
=================================================================== ===================================================================
--- a/grub-core/kern/efi/mm.c --- a/grub-core/kern/efi/mm.c
+++ b/grub-core/kern/efi/mm.c +++ b/grub-core/kern/efi/mm.c
@@ -53,6 +53,38 @@ @@ -49,6 +49,38 @@
static grub_efi_uint32_t finish_desc_version; static grub_efi_uint32_t finish_desc_version;
int grub_efi_is_finished = 0; int grub_efi_is_finished = 0;
@ -465,6 +465,6 @@ Index: b/include/grub/i386/linux.h
grub_uint64_t pref_address; grub_uint64_t pref_address;
grub_uint32_t init_size; grub_uint32_t init_size;
+ grub_uint32_t handover_offset; + grub_uint32_t handover_offset;
} __attribute__ ((packed)); } GRUB_PACKED;
/* Boot parameters for Linux based on 2.6.12. This is used by the setup /* Boot parameters for Linux based on 2.6.12. This is used by the setup

View File

@ -1,13 +1,13 @@
Description: Only build linuxefi on amd64 Description: Only build linuxefi on amd64
Author: Colin Watson <cjwatson@ubuntu.com> Author: Colin Watson <cjwatson@ubuntu.com>
Forwarded: no Forwarded: no
Last-Update: 2013-12-08 Last-Update: 2013-12-20
Index: b/grub-core/Makefile.core.def Index: b/grub-core/Makefile.core.def
=================================================================== ===================================================================
--- a/grub-core/Makefile.core.def --- a/grub-core/Makefile.core.def
+++ b/grub-core/Makefile.core.def +++ b/grub-core/Makefile.core.def
@@ -1694,7 +1694,6 @@ @@ -1708,7 +1708,6 @@
name = linuxefi; name = linuxefi;
efi = loader/i386/efi/linux.c; efi = loader/i386/efi/linux.c;
efi = lib/cmdline.c; efi = lib/cmdline.c;

View File

@ -2,7 +2,7 @@ Description: If running under UEFI secure boot, attempt to use linuxefi loader
Author: Colin Watson <cjwatson@ubuntu.com> Author: Colin Watson <cjwatson@ubuntu.com>
Author: Steve Langasek <steve.langasek@canonical.com> Author: Steve Langasek <steve.langasek@canonical.com>
Forwarded: no Forwarded: no
Last-Update: 2013-11-14 Last-Update: 2013-12-20
Index: b/grub-core/loader/i386/efi/linux.c Index: b/grub-core/loader/i386/efi/linux.c
=================================================================== ===================================================================
@ -30,7 +30,7 @@ Index: b/grub-core/loader/i386/linux.c
static grub_efi_uintn_t efi_mmap_size; static grub_efi_uintn_t efi_mmap_size;
#else #else
static const grub_size_t efi_mmap_size = 0; static const grub_size_t efi_mmap_size = 0;
@@ -688,6 +690,41 @@ @@ -690,6 +692,41 @@
grub_dl_ref (my_mod); grub_dl_ref (my_mod);
@ -72,7 +72,7 @@ Index: b/grub-core/loader/i386/linux.c
if (argc == 0) if (argc == 0)
{ {
grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected")); grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
@@ -1050,6 +1087,12 @@ @@ -1052,6 +1089,12 @@
grub_err_t err; grub_err_t err;
struct grub_linux_initrd_context initrd_ctx; struct grub_linux_initrd_context initrd_ctx;

View File

@ -25,7 +25,7 @@ Author: Colin Watson <cjwatson@ubuntu.com>
Bug-Ubuntu: https://bugs.launchpad.net/bugs/386922 Bug-Ubuntu: https://bugs.launchpad.net/bugs/386922
Bug-Ubuntu: https://bugs.launchpad.net/bugs/861048 Bug-Ubuntu: https://bugs.launchpad.net/bugs/861048
Forwarded: (partial) http://lists.gnu.org/archive/html/grub-devel/2009-09/msg00056.html Forwarded: (partial) http://lists.gnu.org/archive/html/grub-devel/2009-09/msg00056.html
Last-Update: 2013-12-08 Last-Update: 2013-12-20
Index: b/config.h.in Index: b/config.h.in
=================================================================== ===================================================================
@ -44,7 +44,7 @@ Index: b/configure.ac
=================================================================== ===================================================================
--- a/configure.ac --- a/configure.ac
+++ b/configure.ac +++ b/configure.ac
@@ -1512,6 +1512,17 @@ @@ -1549,6 +1549,17 @@
fi fi
AC_SUBST([UBUNTU_RECOVERY]) AC_SUBST([UBUNTU_RECOVERY])
@ -62,7 +62,7 @@ Index: b/configure.ac
LIBS="" LIBS=""
AC_SUBST([FONT_SOURCE]) AC_SUBST([FONT_SOURCE])
@@ -1767,5 +1778,10 @@ @@ -1797,5 +1808,10 @@
else else
echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)" echo "With liblzma from $LIBLZMA (support for XZ-compressed mips images)"
fi fi
@ -246,7 +246,7 @@ Index: b/grub-core/normal/main.c
=================================================================== ===================================================================
--- a/grub-core/normal/main.c --- a/grub-core/normal/main.c
+++ b/grub-core/normal/main.c +++ b/grub-core/normal/main.c
@@ -428,6 +428,15 @@ @@ -382,6 +382,15 @@
grub_normal_read_line_real (char **line, int cont, int nested) grub_normal_read_line_real (char **line, int cont, int nested)
{ {
const char *prompt; const char *prompt;
@ -262,7 +262,7 @@ Index: b/grub-core/normal/main.c
if (cont) if (cont)
/* TRANSLATORS: it's command line prompt. */ /* TRANSLATORS: it's command line prompt. */
@@ -476,7 +485,9 @@ @@ -430,7 +439,9 @@
return; return;
} }
@ -331,7 +331,7 @@ Index: b/util/grub.d/10_linux.in
. "@datadir@/@PACKAGE@/grub-mkconfig_lib" . "@datadir@/@PACKAGE@/grub-mkconfig_lib"
@@ -146,10 +147,12 @@ @@ -171,10 +172,12 @@
fi fi
printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/" printf '%s\n' "${prepare_boot_cache}" | sed "s/^/$submenu_indentation/"
fi fi
@ -346,7 +346,7 @@ Index: b/util/grub.d/10_linux.in
if test -d /sys/firmware/efi && test -e "${linux}.efi.signed"; then if test -d /sys/firmware/efi && test -e "${linux}.efi.signed"; then
sed "s/^/$submenu_indentation/" << EOF sed "s/^/$submenu_indentation/" << EOF
linux ${rel_dirname}/${basename}.efi.signed root=${linux_root_device_thisversion} ro ${args} linux ${rel_dirname}/${basename}.efi.signed root=${linux_root_device_thisversion} ro ${args}
@@ -161,9 +164,13 @@ @@ -186,9 +189,13 @@
fi fi
if test -n "${initrd}" ; then if test -n "${initrd}" ; then
# TRANSLATORS: ramdisk isn't identifier. Should be translated. # TRANSLATORS: ramdisk isn't identifier. Should be translated.

View File

@ -13,7 +13,7 @@ Index: b/util/grub-mkconfig_lib.in
=================================================================== ===================================================================
--- a/util/grub-mkconfig_lib.in --- a/util/grub-mkconfig_lib.in
+++ b/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in
@@ -130,6 +130,21 @@ @@ -133,6 +133,21 @@
esac esac
done done
@ -35,7 +35,7 @@ Index: b/util/grub-mkconfig_lib.in
if dmsetup status $device 2>/dev/null | grep -q 'crypt[[:space:]]$'; then if dmsetup status $device 2>/dev/null | grep -q 'crypt[[:space:]]$'; then
grub_warn \ grub_warn \
"$device is a crypto device, which GRUB cannot read directly. Some" \ "$device is a crypto device, which GRUB cannot read directly. Some" \
@@ -240,6 +255,14 @@ @@ -243,6 +258,14 @@
else else
return 1 return 1
fi fi
@ -54,7 +54,7 @@ Index: b/util/grub.d/10_linux.in
=================================================================== ===================================================================
--- a/util/grub.d/10_linux.in --- a/util/grub.d/10_linux.in
+++ b/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in
@@ -40,6 +40,11 @@ @@ -65,6 +65,11 @@
case ${GRUB_DEVICE} in case ${GRUB_DEVICE} in
/dev/loop/*|/dev/loop[0-9]) /dev/loop/*|/dev/loop[0-9])
GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"` GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`
@ -70,7 +70,7 @@ Index: b/util/grub.d/20_linux_xen.in
=================================================================== ===================================================================
--- a/util/grub.d/20_linux_xen.in --- a/util/grub.d/20_linux_xen.in
+++ b/util/grub.d/20_linux_xen.in +++ b/util/grub.d/20_linux_xen.in
@@ -40,6 +40,11 @@ @@ -44,6 +44,11 @@
case ${GRUB_DEVICE} in case ${GRUB_DEVICE} in
/dev/loop/*|/dev/loop[0-9]) /dev/loop/*|/dev/loop[0-9])
GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"` GRUB_DEVICE=`losetup ${GRUB_DEVICE} | sed -e "s/^[^(]*(\([^)]\+\)).*/\1/"`

View File

@ -8,13 +8,13 @@ Description: Bail out if trying to run grub-mkconfig during upgrade to 2.00
problem. problem.
Author: Colin Watson <cjwatson@ubuntu.com> Author: Colin Watson <cjwatson@ubuntu.com>
Forwarded: no Forwarded: no
Last-Update: 2013-11-14 Last-Update: 2013-12-20
Index: b/util/grub-mkconfig.in Index: b/util/grub-mkconfig.in
=================================================================== ===================================================================
--- a/util/grub-mkconfig.in --- a/util/grub-mkconfig.in
+++ b/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in
@@ -98,6 +98,13 @@ @@ -107,6 +107,13 @@
esac esac
done done

View File

@ -2,13 +2,13 @@ Description: Avoid getting confused by inaccessible loop device backing paths
Author: Colin Watson <cjwatson@ubuntu.com> Author: Colin Watson <cjwatson@ubuntu.com>
Bug-Ubuntu: https://bugs.launchpad.net/bugs/938724 Bug-Ubuntu: https://bugs.launchpad.net/bugs/938724
Forwarded: no Forwarded: no
Last-Update: 2013-11-26 Last-Update: 2013-12-20
Index: b/util/grub-mkconfig_lib.in Index: b/util/grub-mkconfig_lib.in
=================================================================== ===================================================================
--- a/util/grub-mkconfig_lib.in --- a/util/grub-mkconfig_lib.in
+++ b/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in
@@ -139,7 +139,7 @@ @@ -142,7 +142,7 @@
/dev/*) ;; /dev/*) ;;
*) *)
loop_device="${device}" loop_device="${device}"

View File

@ -3,7 +3,7 @@ Description: Add GRUB_RECOVERY_TITLE option
Author: Colin Watson <cjwatson@ubuntu.com> Author: Colin Watson <cjwatson@ubuntu.com>
Bug-Ubuntu: https://bugs.launchpad.net/bugs/1240360 Bug-Ubuntu: https://bugs.launchpad.net/bugs/1240360
Forwarded: no Forwarded: no
Last-Update: 2013-12-08 Last-Update: 2013-12-20
Index: b/docs/grub.texi Index: b/docs/grub.texi
=================================================================== ===================================================================
@ -25,7 +25,7 @@ Index: b/util/grub-mkconfig.in
=================================================================== ===================================================================
--- a/util/grub-mkconfig.in --- a/util/grub-mkconfig.in
+++ b/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in
@@ -185,6 +185,10 @@ @@ -194,6 +194,10 @@
if [ "x${GRUB_ACTUAL_DEFAULT}" = "xsaved" ] ; then GRUB_ACTUAL_DEFAULT="`"${grub_editenv}" - list | sed -n '/^saved_entry=/ s,^saved_entry=,,p'`" ; fi if [ "x${GRUB_ACTUAL_DEFAULT}" = "xsaved" ] ; then GRUB_ACTUAL_DEFAULT="`"${grub_editenv}" - list | sed -n '/^saved_entry=/ s,^saved_entry=,,p'`" ; fi
@ -36,7 +36,7 @@ Index: b/util/grub-mkconfig.in
# These are defined in this script, export them here so that user can # These are defined in this script, export them here so that user can
# override them. # override them.
@@ -236,7 +240,8 @@ @@ -246,7 +250,8 @@
GRUB_BADRAM \ GRUB_BADRAM \
GRUB_OS_PROBER_SKIP_LIST \ GRUB_OS_PROBER_SKIP_LIST \
GRUB_DISABLE_SUBMENU \ GRUB_DISABLE_SUBMENU \
@ -50,7 +50,7 @@ Index: b/util/grub.d/10_hurd.in
=================================================================== ===================================================================
--- a/util/grub.d/10_hurd.in --- a/util/grub.d/10_hurd.in
+++ b/util/grub.d/10_hurd.in +++ b/util/grub.d/10_hurd.in
@@ -88,8 +88,8 @@ @@ -98,8 +98,8 @@
if [ x$type != xsimple ] ; then if [ x$type != xsimple ] ; then
if [ x$type = xrecovery ] ; then if [ x$type = xrecovery ] ; then
@ -65,7 +65,7 @@ Index: b/util/grub.d/10_kfreebsd.in
=================================================================== ===================================================================
--- a/util/grub.d/10_kfreebsd.in --- a/util/grub.d/10_kfreebsd.in
+++ b/util/grub.d/10_kfreebsd.in +++ b/util/grub.d/10_kfreebsd.in
@@ -76,7 +76,7 @@ @@ -86,7 +86,7 @@
fi fi
if [ x$type != xsimple ] ; then if [ x$type != xsimple ] ; then
if [ x$type = xrecovery ] ; then if [ x$type = xrecovery ] ; then
@ -78,7 +78,7 @@ Index: b/util/grub.d/10_linux.in
=================================================================== ===================================================================
--- a/util/grub.d/10_linux.in --- a/util/grub.d/10_linux.in
+++ b/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in
@@ -114,7 +114,7 @@ @@ -139,7 +139,7 @@
if [ x$type != xsimple ] ; then if [ x$type != xsimple ] ; then
case $type in case $type in
recovery) recovery)
@ -91,7 +91,7 @@ Index: b/util/grub.d/10_netbsd.in
=================================================================== ===================================================================
--- a/util/grub.d/10_netbsd.in --- a/util/grub.d/10_netbsd.in
+++ b/util/grub.d/10_netbsd.in +++ b/util/grub.d/10_netbsd.in
@@ -102,7 +102,7 @@ @@ -110,7 +110,7 @@
if [ x$type != xsimple ] ; then if [ x$type != xsimple ] ; then
if [ x$type = xrecovery ] ; then if [ x$type = xrecovery ] ; then
@ -104,7 +104,7 @@ Index: b/util/grub.d/20_linux_xen.in
=================================================================== ===================================================================
--- a/util/grub.d/20_linux_xen.in --- a/util/grub.d/20_linux_xen.in
+++ b/util/grub.d/20_linux_xen.in +++ b/util/grub.d/20_linux_xen.in
@@ -93,7 +93,7 @@ @@ -97,7 +97,7 @@
fi fi
if [ x$type != xsimple ] ; then if [ x$type != xsimple ] ; then
if [ x$type = xrecovery ] ; then if [ x$type = xrecovery ] ; then

View File

@ -1,13 +1,13 @@
Description: Generate configuration for signed UEFI kernels if available Description: Generate configuration for signed UEFI kernels if available
Author: Colin Watson <cjwatson@ubuntu.com> Author: Colin Watson <cjwatson@ubuntu.com>
Forwarded: no Forwarded: no
Last-Update: 2013-12-08 Last-Update: 2013-12-20
Index: b/util/grub.d/10_linux.in Index: b/util/grub.d/10_linux.in
=================================================================== ===================================================================
--- a/util/grub.d/10_linux.in --- a/util/grub.d/10_linux.in
+++ b/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in
@@ -149,8 +149,16 @@ @@ -174,8 +174,16 @@
message="$(gettext_printf "Loading Linux %s ..." ${version})" message="$(gettext_printf "Loading Linux %s ..." ${version})"
sed "s/^/$submenu_indentation/" << EOF sed "s/^/$submenu_indentation/" << EOF
echo '$(echo "$message" | grub_quote)' echo '$(echo "$message" | grub_quote)'
@ -24,7 +24,7 @@ Index: b/util/grub.d/10_linux.in
if test -n "${initrd}" ; then if test -n "${initrd}" ; then
# TRANSLATORS: ramdisk isn't identifier. Should be translated. # TRANSLATORS: ramdisk isn't identifier. Should be translated.
message="$(gettext_printf "Loading initial ramdisk ...")" message="$(gettext_printf "Loading initial ramdisk ...")"
@@ -196,6 +204,13 @@ @@ -209,6 +217,13 @@
is_top_level=true is_top_level=true
while [ "x$list" != "x" ] ; do while [ "x$list" != "x" ] ; do
linux=`version_find_latest $list` linux=`version_find_latest $list`

View File

@ -6,13 +6,13 @@ Author: Colin Watson <cjwatson@debian.org>
Origin: other, http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=542165#25 Origin: other, http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=542165#25
Bug-Debian: http://bugs.debian.org/542165 Bug-Debian: http://bugs.debian.org/542165
Forwarded: no Forwarded: no
Last-Update: 2010-06-05 Last-Update: 2013-12-20
Index: b/util/grub-mkconfig_lib.in Index: b/util/grub-mkconfig_lib.in
=================================================================== ===================================================================
--- a/util/grub-mkconfig_lib.in --- a/util/grub-mkconfig_lib.in
+++ b/util/grub-mkconfig_lib.in +++ b/util/grub-mkconfig_lib.in
@@ -130,6 +130,15 @@ @@ -133,6 +133,15 @@
esac esac
done done

View File

@ -4,13 +4,13 @@ Author: Mario Limonciello <Mario_Limonciello@dell.com>
Author: Colin Watson <cjwatson@debian.org> Author: Colin Watson <cjwatson@debian.org>
Author: Harald Sitter <apachelogger@kubuntu.org> Author: Harald Sitter <apachelogger@kubuntu.org>
Forwarded: not-needed Forwarded: not-needed
Last-Update: 2013-11-14 Last-Update: 2013-12-20
Index: b/util/grub.d/10_linux.in Index: b/util/grub.d/10_linux.in
=================================================================== ===================================================================
--- a/util/grub.d/10_linux.in --- a/util/grub.d/10_linux.in
+++ b/util/grub.d/10_linux.in +++ b/util/grub.d/10_linux.in
@@ -32,7 +32,14 @@ @@ -57,7 +57,14 @@
if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then if [ "x${GRUB_DISTRIBUTOR}" = "x" ] ; then
OS=GNU/Linux OS=GNU/Linux
else else

View File

@ -6,13 +6,13 @@ Description: "single" -> "recovery" when friendly-recovery is installed
Author: Colin Watson <cjwatson@ubuntu.com> Author: Colin Watson <cjwatson@ubuntu.com>
Author: Stéphane Graber <stgraber@ubuntu.com> Author: Stéphane Graber <stgraber@ubuntu.com>
Forwarded: no Forwarded: no
Last-Update: 2013-12-08 Last-Update: 2013-12-20
Index: b/configure.ac Index: b/configure.ac
=================================================================== ===================================================================
--- a/configure.ac --- a/configure.ac
+++ b/configure.ac +++ b/configure.ac
@@ -1501,6 +1501,17 @@ @@ -1538,6 +1538,17 @@
AC_SUBST([LIBZFS]) AC_SUBST([LIBZFS])
AC_SUBST([LIBNVPAIR]) AC_SUBST([LIBNVPAIR])
@ -42,7 +42,7 @@ Index: b/util/grub.d/10_linux.in
. "@datadir@/@PACKAGE@/grub-mkconfig_lib" . "@datadir@/@PACKAGE@/grub-mkconfig_lib"
@@ -72,6 +73,15 @@ @@ -97,6 +98,15 @@
title_correction_code= title_correction_code=
@ -58,7 +58,7 @@ Index: b/util/grub.d/10_linux.in
linux_entry () linux_entry ()
{ {
os="$1" os="$1"
@@ -111,7 +121,9 @@ @@ -136,7 +146,9 @@
if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then if [ "x$GRUB_GFXPAYLOAD_LINUX" != xtext ]; then
echo " load_video" | sed "s/^/$submenu_indentation/" echo " load_video" | sed "s/^/$submenu_indentation/"
fi fi
@ -69,7 +69,7 @@ Index: b/util/grub.d/10_linux.in
fi fi
echo " insmod gzio" | sed "s/^/$submenu_indentation/" echo " insmod gzio" | sed "s/^/$submenu_indentation/"
@@ -239,7 +251,7 @@ @@ -252,7 +264,7 @@
"${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}" "${GRUB_CMDLINE_LINUX} ${GRUB_CMDLINE_LINUX_DEFAULT}"
if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then if [ "x${GRUB_DISABLE_RECOVERY}" != "xtrue" ]; then
linux_entry "${OS}" "${version}" recovery \ linux_entry "${OS}" "${version}" recovery \

View File

@ -3,13 +3,13 @@ Author: Mario Limonciello <Mario_Limonciello@dell.com>
Author: Colin Watson <cjwatson@ubuntu.com> Author: Colin Watson <cjwatson@ubuntu.com>
Bug-Ubuntu: https://bugs.launchpad.net/bugs/677758 Bug-Ubuntu: https://bugs.launchpad.net/bugs/677758
Forwarded: http://lists.gnu.org/archive/html/grub-devel/2011-01/msg00028.html Forwarded: http://lists.gnu.org/archive/html/grub-devel/2011-01/msg00028.html
Last-Update: 2013-12-08 Last-Update: 2013-12-20
Index: b/util/grub-mkrescue.c Index: b/util/grub-mkrescue.c
=================================================================== ===================================================================
--- a/util/grub-mkrescue.c --- a/util/grub-mkrescue.c
+++ b/util/grub-mkrescue.c +++ b/util/grub-mkrescue.c
@@ -631,12 +631,18 @@ @@ -636,12 +636,18 @@
make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_IA64_EFI, "ia64-efi", imgname); make_image_fwdisk_abs (GRUB_INSTALL_PLATFORM_IA64_EFI, "ia64-efi", imgname);
free (imgname); free (imgname);

View File

@ -14,13 +14,13 @@ Description: Add configure option to bypass boot menu if possible
Author: Colin Watson <cjwatson@ubuntu.com> Author: Colin Watson <cjwatson@ubuntu.com>
Author: Richard Laager <rlaager@wiktel.com> Author: Richard Laager <rlaager@wiktel.com>
Forwarded: no Forwarded: no
Last-Update: 2013-12-11 Last-Update: 2013-12-20
Index: b/configure.ac Index: b/configure.ac
=================================================================== ===================================================================
--- a/configure.ac --- a/configure.ac
+++ b/configure.ac +++ b/configure.ac
@@ -1523,6 +1523,17 @@ @@ -1560,6 +1560,17 @@
fi fi
AC_SUBST([QUIET_BOOT]) AC_SUBST([QUIET_BOOT])
@ -97,7 +97,7 @@ Index: b/util/grub-mkconfig.in
=================================================================== ===================================================================
--- a/util/grub-mkconfig.in --- a/util/grub-mkconfig.in
+++ b/util/grub-mkconfig.in +++ b/util/grub-mkconfig.in
@@ -235,7 +235,8 @@ @@ -245,7 +245,8 @@
GRUB_ENABLE_CRYPTODISK \ GRUB_ENABLE_CRYPTODISK \
GRUB_BADRAM \ GRUB_BADRAM \
GRUB_OS_PROBER_SKIP_LIST \ GRUB_OS_PROBER_SKIP_LIST \
@ -223,7 +223,7 @@ Index: b/util/grub.d/10_linux.in
. "@datadir@/@PACKAGE@/grub-mkconfig_lib" . "@datadir@/@PACKAGE@/grub-mkconfig_lib"
@@ -117,6 +118,9 @@ @@ -142,6 +143,9 @@
else else
echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/" echo "menuentry '$(echo "$os" | grub_quote)' ${CLASS} \$menuentry_id_option 'gnulinux-simple-$boot_device_id' {" | sed "s/^/$submenu_indentation/"
fi fi

View File

@ -2,7 +2,7 @@ Index: b/Makefile.util.def
=================================================================== ===================================================================
--- a/Makefile.util.def --- a/Makefile.util.def
+++ b/Makefile.util.def +++ b/Makefile.util.def
@@ -311,6 +311,23 @@ @@ -313,6 +313,23 @@
}; };
program = { program = {

View File

@ -1,13 +1,13 @@
Description: Output a menu entry for firmware setup on UEFI FastBoot systems Description: Output a menu entry for firmware setup on UEFI FastBoot systems
Author: Steve Langasek <steve.langasek@ubuntu.com> Author: Steve Langasek <steve.langasek@ubuntu.com>
Forwarded: no Forwarded: no
Last-Update: 2013-11-26 Last-Update: 2013-12-20
Index: b/Makefile.util.def Index: b/Makefile.util.def
=================================================================== ===================================================================
--- a/Makefile.util.def --- a/Makefile.util.def
+++ b/Makefile.util.def +++ b/Makefile.util.def
@@ -491,6 +491,12 @@ @@ -501,6 +501,12 @@
}; };
script = { script = {

View File

@ -4,13 +4,13 @@ Description: Add configure option to use vt.handoff=7
Author: Colin Watson <cjwatson@ubuntu.com> Author: Colin Watson <cjwatson@ubuntu.com>
Author: Andy Whitcroft <apw@canonical.com> Author: Andy Whitcroft <apw@canonical.com>
Forwarded: not-needed Forwarded: not-needed
Last-Update: 2013-12-08 Last-Update: 2013-12-20
Index: b/configure.ac Index: b/configure.ac
=================================================================== ===================================================================
--- a/configure.ac --- a/configure.ac
+++ b/configure.ac +++ b/configure.ac
@@ -1545,6 +1545,17 @@ @@ -1582,6 +1582,17 @@
fi fi
AC_SUBST([GFXPAYLOAD_DYNAMIC]) AC_SUBST([GFXPAYLOAD_DYNAMIC])
@ -40,7 +40,7 @@ Index: b/util/grub.d/10_linux.in
. "@datadir@/@PACKAGE@/grub-mkconfig_lib" . "@datadir@/@PACKAGE@/grub-mkconfig_lib"
@@ -92,6 +93,14 @@ @@ -117,6 +118,14 @@
GRUB_CMDLINE_LINUX_RECOVERY="$GRUB_CMDLINE_LINUX_RECOVERY nomodeset" GRUB_CMDLINE_LINUX_RECOVERY="$GRUB_CMDLINE_LINUX_RECOVERY nomodeset"
fi fi
@ -55,7 +55,7 @@ Index: b/util/grub.d/10_linux.in
linux_entry () linux_entry ()
{ {
os="$1" os="$1"
@@ -137,7 +146,7 @@ @@ -162,7 +171,7 @@
fi fi
if ([ "$ubuntu_recovery" = 0 ] || [ x$type != xrecovery ]) && \ if ([ "$ubuntu_recovery" = 0 ] || [ x$type != xrecovery ]) && \
([ "x$GRUB_GFXPAYLOAD_LINUX" != x ] || [ "$gfxpayload_dynamic" = 1 ]); then ([ "x$GRUB_GFXPAYLOAD_LINUX" != x ] || [ "$gfxpayload_dynamic" = 1 ]); then
@ -64,7 +64,7 @@ Index: b/util/grub.d/10_linux.in
fi fi
echo " insmod gzio" | sed "s/^/$submenu_indentation/" echo " insmod gzio" | sed "s/^/$submenu_indentation/"
@@ -210,6 +219,23 @@ @@ -223,6 +232,23 @@
boot_device_id= boot_device_id=
title_correction_code= title_correction_code=

View File

@ -6008,8 +6008,20 @@ mounted on
Recheck the device map, even if @file{/boot/grub/device.map} already Recheck the device map, even if @file{/boot/grub/device.map} already
exists. You should use this option whenever you add/remove a disk exists. You should use this option whenever you add/remove a disk
into/from your computer. into/from your computer.
@end table
@item --no-rs-codes
By default on x86 BIOS systems, @command{grub-install} will use some
extra space in the bootloader embedding area for Reed-Solomon
error-correcting codes. This enables GRUB to still boot successfully
if some blocks are corrupted. The exact amount of protection offered
is dependent on available space in the embedding area. R sectors of
redundancy can tolerate up to R/2 corrupted sectors. This
redundancy may be cumbersome if attempting to cryptographically
validate the contents of the bootloader embedding area, or in more
modern systems with GPT-style partition tables (@pxref{BIOS
installation}) where GRUB does not reside in any unpartitioned space
outside of the MBR. Disable the Reed-Solomon codes with this option.
@end table
@node Invoking grub-mkconfig @node Invoking grub-mkconfig
@chapter Invoking grub-mkconfig @chapter Invoking grub-mkconfig

2
docs/man/grub-file.h2m Normal file
View File

@ -0,0 +1,2 @@
[NAME]
grub-file \- check file type

View File

@ -0,0 +1,4 @@
[NAME]
grub-macbless \- bless a mac file/directory
[SEE ALSO]
.BR grub-install (1)

View File

@ -0,0 +1,4 @@
[NAME]
grub-syslinux2cfg \- transform syslinux config into grub.cfg
[SEE ALSO]
.BR grub-menulst2cfg (8)

View File

@ -178,6 +178,12 @@ for dev in (*); do
# uuid: filesystem UUID # uuid: filesystem UUID
probe -s uuid -u $dev probe -s uuid -u $dev
if test -f ($device)/isolinux/isolinux.cfg ; then
menuentry "ISOLINUX config (on $device)" $device {
set root=$2
syslinux_configfile -i /isolinux/isolinux.cfg
}
fi
if test -f ($device)/bootmgr -a -f ($device)/boot/bcd; then if test -f ($device)/bootmgr -a -f ($device)/boot/bcd; then
menuentry "Windows Vista bootmgr (on $device)" $device { menuentry "Windows Vista bootmgr (on $device)" $device {
set root=$2 set root=$2

View File

@ -718,11 +718,14 @@ def kernel(defn, platform):
"""if test x$(TARGET_APPLE_LINKER) = x1; then \ """if test x$(TARGET_APPLE_LINKER) = x1; then \
$(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -wd1106 -nu -nd $< $@; \ $(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -wd1106 -nu -nd $< $@; \
elif test ! -z '$(TARGET_OBJ2ELF)'; then \ elif test ! -z '$(TARGET_OBJ2ELF)'; then \
cp $< $@.bin; $(TARGET_OBJ2ELF) $@.bin && cp $@.bin $@ || (rm -f $@.bin; exit 1); \ $(TARGET_OBJ2ELF) $< $@ || (rm -f $@; exit 1); \
else cp $< $@; fi""", else cp $< $@; fi""",
"""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 $@; \
elif test ! -z '$(TARGET_OBJ2ELF)'; then \
""" + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@.bin $< && \
$(TARGET_OBJ2ELF) $@.bin $@ || (rm -f $@; rm -f $@.bin; exit 1); \
else """ + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@ $<; \ else """ + "$(TARGET_STRIP) $(" + cname(defn) + "_STRIPFLAGS) -o $@ $<; \
fi""")) fi"""))

View File

@ -26,8 +26,11 @@ CFLAGS_LIBRARY += $(CFLAGS_PLATFORM) -fno-builtin
CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM) CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM)
CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM) CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM)
build-grub-pep2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=64 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pep2elf\" $^
build-grub-pe2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c build-grub-pe2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^ $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=32 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^
# gentrigtables # gentrigtables
gentrigtables: gentrigtables.c gentrigtables: gentrigtables.c
@ -100,7 +103,6 @@ endif
if COND_i386_coreboot if COND_i386_coreboot
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/i386/coreboot/lbio.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/coreboot/lbio.h
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/i386/pc/int.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
@ -110,7 +112,6 @@ 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_builddir)/include/grub/i386/pc/int.h
endif endif
if COND_i386_qemu if COND_i386_qemu

View File

@ -59,9 +59,7 @@ kernel = {
ia64_efi_ldflags = '-Wl,-r,-d'; 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';
x86_64_xen_ldflags = '-Wl,-Ttext=0';
x86_64_xen_cppflags = '$(CPPFLAGS_XEN)'; x86_64_xen_cppflags = '$(CPPFLAGS_XEN)';
i386_xen_ldflags = '-Wl,-Ttext=0';
i386_xen_cppflags = '$(CPPFLAGS_XEN)'; i386_xen_cppflags = '$(CPPFLAGS_XEN)';
arm_efi_ldflags = '-Wl,-r,-d'; arm_efi_ldflags = '-Wl,-r,-d';
@ -72,15 +70,21 @@ kernel = {
i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000'; i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
i386_qemu_ldflags = '$(TARGET_IMG_LDFLAGS)'; i386_qemu_ldflags = '$(TARGET_IMG_LDFLAGS)';
i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200'; i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200';
i386_coreboot_ldflags = '$(TARGET_IMG_LDFLAGS)';
i386_coreboot_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200';
i386_multiboot_ldflags = '$(TARGET_IMG_LDFLAGS)';
i386_multiboot_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200';
i386_ieee1275_ldflags = '$(TARGET_IMG_LDFLAGS)';
i386_ieee1275_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x10000';
i386_xen_ldflags = '$(TARGET_IMG_LDFLAGS)';
i386_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0';
x86_64_xen_ldflags = '$(TARGET_IMG_LDFLAGS)';
x86_64_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0';
ldadd = '$(LDADD_KERNEL)'; ldadd = '$(LDADD_KERNEL)';
i386_coreboot_ldflags = '-Wl,-Ttext=0x8200';
i386_multiboot_ldflags = '-Wl,-Ttext=0x8200';
i386_ieee1275_ldflags = '-Wl,-Ttext=0x10000';
mips_loongson_ldflags = '-Wl,-Ttext,0x80200000'; mips_loongson_ldflags = '-Wl,-Ttext,0x80200000';
powerpc_ieee1275_ldflags = '-Wl,-Ttext,0x200000'; powerpc_ieee1275_ldflags = '-Wl,-Ttext,0x200000';
sparc64_ieee1275_ldflags = '-Wl,-Ttext,0x4400'; sparc64_ieee1275_ldflags = '-Wl,-Ttext,0x4400';
@ -241,6 +245,7 @@ kernel = {
mips_loongson = video/sm712.c; mips_loongson = video/sm712.c;
mips_loongson = video/sis315pro.c; mips_loongson = video/sis315pro.c;
mips_loongson = video/radeon_fuloong2e.c; mips_loongson = video/radeon_fuloong2e.c;
mips_loongson = video/radeon_yeeloong3a.c;
extra_dist = video/sm712_init.c; extra_dist = video/sm712_init.c;
extra_dist = video/sis315_init.c; extra_dist = video/sis315_init.c;
mips_loongson = commands/keylayouts.c; mips_loongson = commands/keylayouts.c;
@ -618,11 +623,6 @@ module = {
enable = xen; enable = xen;
}; };
module = {
name = check_nt_hiberfil;
common = commands/i386/nthibr.c;
};
module = { module = {
name = cmostest; name = cmostest;
common = commands/i386/cmostest.c; common = commands/i386/cmostest.c;
@ -1452,6 +1452,11 @@ module = {
common = fs/zfs/zfsinfo.c; common = fs/zfs/zfsinfo.c;
}; };
module = {
name = macbless;
common = commands/macbless.c;
};
module = { module = {
name = pxe; name = pxe;
i386_pc = net/drivers/i386/pc/pxe.c; i386_pc = net/drivers/i386/pc/pxe.c;
@ -1625,6 +1630,14 @@ module = {
enable = i386_pc; enable = i386_pc;
}; };
module = {
name = truecrypt;
i386_pc = loader/i386/pc/truecrypt.c;
enable = i386_pc;
};
module = { module = {
name = freedos; name = freedos;
i386_pc = loader/i386/pc/freedos.c; i386_pc = loader/i386/pc/freedos.c;
@ -1661,10 +1674,6 @@ 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 = loader/i386/xen_file.c;
xen = loader/i386/xen_file32.c;
xen = loader/i386/xen_file64.c;
extra_dist = loader/i386/xen_fileXX.c;
xen_cppflags = '$(CPPFLAGS_XEN)'; 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;
@ -1682,16 +1691,21 @@ module = {
name = xnu; name = xnu;
x86 = loader/xnu_resume.c; x86 = loader/xnu_resume.c;
x86 = loader/i386/xnu.c; x86 = loader/i386/xnu.c;
x86 = loader/macho32.c;
x86 = loader/macho64.c;
x86 = loader/macho.c;
x86 = loader/xnu.c; x86 = loader/xnu.c;
x86 = loader/lzss.c;
extra_dist = loader/machoXX.c;
enable = x86; enable = x86;
}; };
module = {
name = macho;
common = loader/macho.c;
common = loader/macho32.c;
common = loader/macho64.c;
common = loader/lzss.c;
extra_dist = loader/machoXX.c;
};
module = { module = {
name = appleldr; name = appleldr;
common = loader/efi/appleloader.c; common = loader/efi/appleloader.c;
@ -1755,6 +1769,7 @@ module = {
common = normal/term.c; common = normal/term.c;
common = normal/context.c; common = normal/context.c;
common = normal/charset.c; common = normal/charset.c;
common = lib/getline.c;
common = script/main.c; common = script/main.c;
common = script/script.c; common = script/script.c;
@ -1944,6 +1959,11 @@ module = {
common = tests/signatures.h; common = tests/signatures.h;
}; };
module = {
name = sleep_test;
common = tests/sleep_test.c;
};
module = { module = {
name = xnu_uuid_test; name = xnu_uuid_test;
common = tests/xnu_uuid_test.c; common = tests/xnu_uuid_test.c;
@ -2131,6 +2151,12 @@ module = {
enable = xen; enable = xen;
}; };
module = {
name = syslinuxcfg;
common = lib/syslinux_parse.c;
common = commands/syslinuxcfg.c;
};
module = { module = {
name = test_blockarg; name = test_blockarg;
common = tests/test_blockarg.c; common = tests/test_blockarg.c;
@ -2273,3 +2299,15 @@ module = {
name = progress; name = progress;
common = lib/progress.c; common = lib/progress.c;
}; };
module = {
name = file;
common = commands/file.c;
common = commands/file32.c;
common = commands/file64.c;
extra_dist = commands/fileXX.c;
common = loader/i386/xen_file.c;
common = loader/i386/xen_file32.c;
common = loader/i386/xen_file64.c;
extra_dist = loader/i386/xen_fileXX.c;
};

View File

@ -58,7 +58,7 @@ VARIABLE(grub_core_entry_addr)
orb $0x02, %al orb $0x02, %al
outb $0x92 outb $0x92
1: 1:
movl grub_core_entry_addr, %edx movl EXT_C(grub_core_entry_addr), %edx
jmp *%edx jmp *%edx
#include "../../../kern/i386/realmode.S" #include "../../../kern/i386/realmode.S"

View File

@ -63,18 +63,18 @@ __start:
This way we don't need to sacrifice a register for it. */ This way we don't need to sacrifice a register for it. */
retry_cs5536: retry_cs5536:
/* We have only one bus (0). Function is 0. */ /* We have only one bus (0). Function is 0. */
lui $t0, %hi(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR) lui $t0, %hi(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR_2F)
lui $t1, %hi(GRUB_MACHINE_PCI_CONFSPACE) lui $t1, %hi(GRUB_MACHINE_PCI_CONFSPACE_2F)
lui $t3, %hi(GRUB_CS5536_PCIID) lui $t3, %hi(GRUB_CS5536_PCIID)
addiu $t3, $t3, %lo(GRUB_CS5536_PCIID) addiu $t3, $t3, %lo(GRUB_CS5536_PCIID)
ori $t4, $zero, 1 ori $t4, $zero, 1
1: 1:
andi $t4, $t4, ((1 << GRUB_PCI_NUM_DEVICES) - 1) andi $t4, $t4, ((1 << GRUB_PCI_NUM_DEVICES_2F) - 1)
/* In case of failure try again. CS5536 may be slow to come up. */ /* In case of failure try again. CS5536 may be slow to come up. */
beql $t4, $zero, retry_cs5536 beql $t4, $zero, retry_cs5536
nop nop
sw $t4, %lo(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR) ($t0) sw $t4, %lo(GRUB_MACHINE_PCI_CONF_CTRL_REG_ADDR_2F) ($t0)
lw $t2, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_PCI_REG_PCI_ID) ($t1) lw $t2, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_PCI_REG_PCI_ID) ($t1)
bnel $t2, $t3, 1b bnel $t2, $t3, 1b
sll $t4, $t4, 1 sll $t4, $t4, 1
@ -86,9 +86,9 @@ retry_cs5536:
move $a0, $t4 move $a0, $t4
#endif #endif
lui $t0, %hi(GRUB_MACHINE_PCI_CONFSPACE) lui $t0, %hi(GRUB_MACHINE_PCI_CONFSPACE_2F)
li $t1, GRUB_CS5536_MSR_MAILBOX_CONFIG_ENABLED li $t1, GRUB_CS5536_MSR_MAILBOX_CONFIG_ENABLED
sw $t1, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_CS5536_MSR_MAILBOX_CONFIG) ($t0) sw $t1, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_CONFIG) ($t0)
/* Set GPIO LBAR. */ /* Set GPIO LBAR. */
lui $a0, %hi(GRUB_CS5536_MSR_GPIO_BAR) lui $a0, %hi(GRUB_CS5536_MSR_GPIO_BAR)
@ -121,21 +121,21 @@ retry_cs5536:
bal message bal message
addiu $a0, $a0, %lo(smbus_enabled) addiu $a0, $a0, %lo(smbus_enabled)
lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS) lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS)
/* Disable SMB. */ /* Disable SMB. */
sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0) sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0)
/* Disable interrupts. */ /* Disable interrupts. */
sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1) ($t0) sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1) ($t0)
/* Set as master. */ /* Set as master. */
sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_ADDR) ($t0) sb $zero, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_ADDR) ($t0)
/* Launch SMBus controller at slowest speed possible. */ /* Launch SMBus controller at slowest speed possible. */
ori $t1, $zero, 0xff ori $t1, $zero, 0xff
sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL3) ($t0) sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL3) ($t0)
sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0) sb $t1, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL2) ($t0)
/* Yeeloong and Fuloong2f have only one memory slot. */ /* Yeeloong and Fuloong2f have only one memory slot. */
/* Output first byte on serial for debugging. */ /* Output first byte on serial for debugging. */
@ -237,8 +237,8 @@ other_exception:
addiu $a0, $a0, %lo(unhandled_exception) addiu $a0, $a0, %lo(unhandled_exception)
gpio_init: gpio_init:
lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_GPIO) lui $t0, %hi(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_GPIO)
addiu $t0, $t0, %lo(GRUB_MACHINE_PCI_IO_BASE + GRUB_CS5536_LBAR_GPIO) addiu $t0, $t0, %lo(GRUB_MACHINE_PCI_IO_BASE_2F + GRUB_CS5536_LBAR_GPIO)
lui $t1, %hi (gpio_dump) lui $t1, %hi (gpio_dump)
addiu $t1, $t1, %lo (gpio_dump) addiu $t1, $t1, %lo (gpio_dump)
@ -368,18 +368,18 @@ self:
Clobbered: $t0 Clobbered: $t0
*/ */
wrmsr: wrmsr:
lui $t0, %hi(GRUB_MACHINE_PCI_CONFSPACE) lui $t0, %hi(GRUB_MACHINE_PCI_CONFSPACE_2F)
sw $a0, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_CS5536_MSR_MAILBOX_ADDR) ($t0) sw $a0, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_ADDR) ($t0)
sw $a1, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_CS5536_MSR_MAILBOX_DATA0) ($t0) sw $a1, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_DATA0) ($t0)
jr $ra jr $ra
sw $a2, (%lo(GRUB_MACHINE_PCI_CONFSPACE) + GRUB_CS5536_MSR_MAILBOX_DATA1) ($t0) sw $a2, (%lo(GRUB_MACHINE_PCI_CONFSPACE_2F) + GRUB_CS5536_MSR_MAILBOX_DATA1) ($t0)
/* Wait for SMBus data or empty transmitter. */ /* Wait for SMBus data or empty transmitter. */
/* In: $a0 = exception handler. Out: none. Clobbered: $t0, $t1 */ /* In: $a0 = exception handler. Out: none. Clobbered: $t0, $t1 */
smbus_wait: smbus_wait:
1: 1:
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_STATUS + GRUB_MACHINE_PCI_IO_BASE) lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_STATUS + GRUB_MACHINE_PCI_IO_BASE_2F)
lb $t0, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_STATUS + GRUB_MACHINE_PCI_IO_BASE) ($t0) lb $t0, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_STATUS + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
andi $t1, $t0, GRUB_CS5536_SMB_REG_STATUS_SDAST andi $t1, $t0, GRUB_CS5536_SMB_REG_STATUS_SDAST
bne $t1, $zero, return bne $t1, $zero, return
nop nop
@ -401,52 +401,52 @@ read_spd:
addiu $a0, $a0, %hi(read_spd_fail) addiu $a0, $a0, %hi(read_spd_fail)
/* Send START. */ /* Send START. */
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F)
lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_START ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_START
bal smbus_wait bal smbus_wait
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
/* Send device address. */ /* Send device address. */
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F)
sll $t1, $a1, 1 sll $t1, $a1, 1
bal smbus_wait bal smbus_wait
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) ($t0) sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
/* Send ACK. */ /* Send ACK. */
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F)
lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_ACK ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_ACK
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
/* Send byte address. */ /* Send byte address. */
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F)
bal smbus_wait bal smbus_wait
sb $t2, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) ($t0) sb $t2, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
/* Send START. */ /* Send START. */
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F)
lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_START ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_START
bal smbus_wait bal smbus_wait
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
/* Send device address. */ /* Send device address. */
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F)
sll $t1, $a1, 1 sll $t1, $a1, 1
ori $t1, $t1, 1 ori $t1, $t1, 1
bal smbus_wait bal smbus_wait
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) ($t0) sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
/* Send STOP. */ /* Send STOP. */
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F)
lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) lb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_STOP ori $t1, $t1, GRUB_CS5536_SMB_REG_CTRL1_STOP
bal smbus_wait bal smbus_wait
sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE) ($t0) sb $t1, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_CTRL1 + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) lui $t0, %hi(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F)
lb $v0, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE) ($t0) lb $v0, %lo(GRUB_CS5536_LBAR_SMBUS + GRUB_CS5536_SMB_REG_DATA + GRUB_MACHINE_PCI_IO_BASE_2F) ($t0)
jr $t3 jr $t3
andi $v0, $v0, 0xff andi $v0, $v0, 0xff
read_spd_fail: read_spd_fail:

View File

@ -44,8 +44,8 @@ pic_base:
. = _start + GRUB_BOOT_MACHINE_BOOT_DEVPATH . = _start + GRUB_BOOT_MACHINE_BOOT_DEVPATH
boot_path: boot_path:
. = _start + GRUB_BOOT_MACHINE_KERNEL_BYTE . = _start + GRUB_BOOT_MACHINE_KERNEL_BYTE
kernel_byte: .xword (2 << 9)
boot_path_end: boot_path_end:
kernel_byte: .xword (2 << 9)
kernel_address: .word GRUB_BOOT_MACHINE_KERNEL_ADDR kernel_address: .word GRUB_BOOT_MACHINE_KERNEL_ADDR
#else #else
#define boot_path (_start + 512 + SCRATCH_PAD_BOOT_SIZE) #define boot_path (_start + 512 + SCRATCH_PAD_BOOT_SIZE)

View File

@ -30,8 +30,66 @@ static grub_addr_t addr_win[GRUB_MACHINE_PCI_NUM_WIN] =
{GRUB_MACHINE_PCI_WIN1_ADDR, GRUB_MACHINE_PCI_WIN2_ADDR, {GRUB_MACHINE_PCI_WIN1_ADDR, GRUB_MACHINE_PCI_WIN2_ADDR,
GRUB_MACHINE_PCI_WIN3_ADDR}; GRUB_MACHINE_PCI_WIN3_ADDR};
grub_bonito_type_t grub_bonito_type;
static volatile void *
config_addr (grub_pci_address_t addr)
{
if (grub_bonito_type == GRUB_BONITO_2F)
{
GRUB_MACHINE_PCI_CONF_CTRL_REG_2F = 1 << ((addr >> 11) & 0xf);
return (volatile void *) (GRUB_MACHINE_PCI_CONFSPACE_2F
| (addr & 0x07ff));
}
else
{
if (addr >> 16)
return (volatile void *) (GRUB_MACHINE_PCI_CONFSPACE_3A_EXT | addr);
else
return (volatile void *) (GRUB_MACHINE_PCI_CONFSPACE_3A | addr);
}
}
grub_uint32_t
grub_pci_read (grub_pci_address_t addr)
{
return *(volatile grub_uint32_t *) config_addr (addr);
}
grub_uint16_t
grub_pci_read_word (grub_pci_address_t addr)
{
return *(volatile grub_uint16_t *) config_addr (addr);
}
grub_uint8_t
grub_pci_read_byte (grub_pci_address_t addr)
{
return *(volatile grub_uint8_t *) config_addr (addr);
}
void
grub_pci_write (grub_pci_address_t addr, grub_uint32_t data)
{
*(volatile grub_uint32_t *) config_addr (addr) = data;
}
void
grub_pci_write_word (grub_pci_address_t addr, grub_uint16_t data)
{
*(volatile grub_uint16_t *) config_addr (addr) = data;
}
void
grub_pci_write_byte (grub_pci_address_t addr, grub_uint8_t data)
{
*(volatile grub_uint8_t *) config_addr (addr) = data;
}
static inline void static inline void
write_bases (void) write_bases_2f (void)
{ {
int i; int i;
grub_uint32_t reg = 0; grub_uint32_t reg = 0;
@ -39,13 +97,15 @@ write_bases (void)
reg |= (((base_win[i] >> GRUB_MACHINE_PCI_WIN_SHIFT) reg |= (((base_win[i] >> GRUB_MACHINE_PCI_WIN_SHIFT)
& GRUB_MACHINE_PCI_WIN_MASK) & GRUB_MACHINE_PCI_WIN_MASK)
<< (i * GRUB_MACHINE_PCI_WIN_MASK_SIZE)); << (i * GRUB_MACHINE_PCI_WIN_MASK_SIZE));
GRUB_MACHINE_PCI_IO_CTRL_REG = reg; GRUB_MACHINE_PCI_IO_CTRL_REG_2F = reg;
} }
volatile void * volatile void *
grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)), grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)),
grub_addr_t base, grub_size_t size) grub_addr_t base, grub_size_t size)
{ {
if (grub_bonito_type == GRUB_BONITO_2F)
{
int i; int i;
grub_addr_t newbase; grub_addr_t newbase;
@ -66,11 +126,25 @@ grub_pci_device_map_range (grub_pci_device_t dev __attribute__ ((unused)),
{ {
usage_win[i]++; usage_win[i]++;
base_win[i] = newbase; base_win[i] = newbase;
write_bases (); write_bases_2f ();
return (void *) return (void *)
(addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK)); (addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK));
} }
grub_fatal ("Out of PCI windows."); grub_fatal ("Out of PCI windows.");
}
else
{
int region = 0;
if (base >= 0x10000000
&& base + size <= 0x18000000)
region = 1;
if (base >= 0x1c000000
&& base + size <= 0x1f000000)
region = 2;
if (region == 0)
grub_fatal ("Attempt to map out of regions");
return (void *) (0xa0000000 | base);
}
} }
void * void *
@ -86,6 +160,8 @@ grub_pci_device_unmap_range (grub_pci_device_t dev __attribute__ ((unused)),
volatile void *mem, volatile void *mem,
grub_size_t size __attribute__ ((unused))) grub_size_t size __attribute__ ((unused)))
{ {
if (grub_bonito_type == GRUB_BONITO_2F)
{
int i; int i;
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++) for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
if (usage_win[i] && addr_win[i] if (usage_win[i] && addr_win[i]
@ -96,4 +172,5 @@ grub_pci_device_unmap_range (grub_pci_device_t dev __attribute__ ((unused)),
return; return;
} }
grub_fatal ("Tried to unmap not mapped region"); grub_fatal ("Tried to unmap not mapped region");
}
} }

View File

@ -1513,7 +1513,7 @@ grub_ehci_check_transfer (grub_usb_controller_t dev,
struct grub_ehci *e = dev->data; struct grub_ehci *e = dev->data;
struct grub_ehci_transfer_controller_data *cdata = struct grub_ehci_transfer_controller_data *cdata =
transfer->controller_data; transfer->controller_data;
grub_uint32_t token; grub_uint32_t token, token_ftd;
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",
@ -1541,13 +1541,18 @@ grub_ehci_check_transfer (grub_usb_controller_t dev,
return grub_ehci_parse_notrun (dev, transfer, actual); return grub_ehci_parse_notrun (dev, transfer, actual);
token = grub_le_to_cpu32 (cdata->qh_virt->td_overlay.token); token = grub_le_to_cpu32 (cdata->qh_virt->td_overlay.token);
/* If the transfer consist from only one TD, we should check */
/* if the TD was really executed and deactivated - to prevent */
/* false detection of transfer finish. */
token_ftd = grub_le_to_cpu32 (cdata->td_first_virt->token);
/* Detect QH halted */ /* Detect QH halted */
if ((token & GRUB_EHCI_STATUS_HALTED) != 0) if ((token & GRUB_EHCI_STATUS_HALTED) != 0)
return grub_ehci_parse_halt (dev, transfer, actual); return grub_ehci_parse_halt (dev, transfer, actual);
/* Detect QH not active - QH is not active and no next TD */ /* Detect QH not active - QH is not active and no next TD */
if ((token & GRUB_EHCI_STATUS_ACTIVE) == 0) if (token && ((token & GRUB_EHCI_STATUS_ACTIVE) == 0)
&& ((token_ftd & GRUB_EHCI_STATUS_ACTIVE) == 0))
{ {
/* It could be finish at all or short packet condition */ /* It could be finish at all or short packet condition */
if ((grub_le_to_cpu32 (cdata->qh_virt->td_overlay.next_td) if ((grub_le_to_cpu32 (cdata->qh_virt->td_overlay.next_td)

View File

@ -47,7 +47,7 @@ struct grub_ohci_hcca
grub_uint32_t donehead; grub_uint32_t donehead;
grub_uint8_t reserved[116]; grub_uint8_t reserved[116];
} __attribute__((packed)); } GRUB_PACKED;
/* OHCI General Transfer Descriptor */ /* OHCI General Transfer Descriptor */
struct grub_ohci_td struct grub_ohci_td
@ -64,7 +64,7 @@ struct grub_ohci_td
* physical address in CPU endian */ * physical address in CPU endian */
grub_uint32_t tr_index; /* index of TD in transfer */ grub_uint32_t tr_index; /* index of TD in transfer */
grub_uint8_t pad[8 - sizeof (volatile struct grub_ohci_td *)]; /* padding to 32 bytes */ grub_uint8_t pad[8 - sizeof (volatile struct grub_ohci_td *)]; /* padding to 32 bytes */
} __attribute__((packed)); } GRUB_PACKED;
/* OHCI Endpoint Descriptor. */ /* OHCI Endpoint Descriptor. */
struct grub_ohci_ed struct grub_ohci_ed
@ -73,7 +73,7 @@ struct grub_ohci_ed
grub_uint32_t td_tail; grub_uint32_t td_tail;
grub_uint32_t td_head; grub_uint32_t td_head;
grub_uint32_t next_ed; grub_uint32_t next_ed;
} __attribute__((packed)); } GRUB_PACKED;
typedef volatile struct grub_ohci_td *grub_ohci_td_t; typedef volatile struct grub_ohci_td *grub_ohci_td_t;
typedef volatile struct grub_ohci_ed *grub_ohci_ed_t; typedef volatile struct grub_ohci_ed *grub_ohci_ed_t;

View File

@ -55,7 +55,7 @@ struct grub_pl2303_config
grub_uint8_t stop_bits; grub_uint8_t stop_bits;
grub_uint8_t parity; grub_uint8_t parity;
grub_uint8_t word_len; grub_uint8_t word_len;
} __attribute__ ((packed)); } GRUB_PACKED;
static void static void
real_config (struct grub_serial_port *port) real_config (struct grub_serial_port *port)

View File

@ -105,7 +105,7 @@ struct grub_uhci_qh
/* Queue heads are aligned on 16 bytes, pad so a queue head is 16 /* Queue heads are aligned on 16 bytes, pad so a queue head is 16
bytes so we can store many in a 4K page. */ bytes so we can store many in a 4K page. */
grub_uint8_t pad[8]; grub_uint8_t pad[8];
} __attribute__ ((packed)); } GRUB_PACKED;
/* UHCI Transfer Descriptor. */ /* UHCI Transfer Descriptor. */
struct grub_uhci_td struct grub_uhci_td
@ -129,7 +129,7 @@ struct grub_uhci_td
/* 3 additional 32 bits words reserved for the Host Controller Driver. */ /* 3 additional 32 bits words reserved for the Host Controller Driver. */
grub_uint32_t data[3]; grub_uint32_t data[3];
} __attribute__ ((packed)); } GRUB_PACKED;
typedef volatile struct grub_uhci_td *grub_uhci_td_t; typedef volatile struct grub_uhci_td *grub_uhci_td_t;
typedef volatile struct grub_uhci_qh *grub_uhci_qh_t; typedef volatile struct grub_uhci_qh *grub_uhci_qh_t;

View File

@ -227,7 +227,7 @@ grub_acpi_create_ebda (void)
grub_dprintf ("acpi", "Copying rsdpv2 to %p\n", target); grub_dprintf ("acpi", "Copying rsdpv2 to %p\n", target);
v2inebda = target; v2inebda = target;
target += v2->length; target += v2->length;
target = (grub_uint8_t *) ((((long) target - 1) | 0xf) + 1); target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1);
v2 = 0; v2 = 0;
break; break;
} }
@ -246,7 +246,7 @@ grub_acpi_create_ebda (void)
grub_dprintf ("acpi", "Copying rsdpv1 to %p\n", target); grub_dprintf ("acpi", "Copying rsdpv1 to %p\n", target);
v1inebda = target; v1inebda = target;
target += sizeof (struct grub_acpi_rsdp_v10); target += sizeof (struct grub_acpi_rsdp_v10);
target = (grub_uint8_t *) ((((long) target - 1) | 0xf) + 1); target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1);
v1 = 0; v1 = 0;
break; break;
} }
@ -265,7 +265,7 @@ grub_acpi_create_ebda (void)
grub_memcpy (target, v2, v2->length); grub_memcpy (target, v2, v2->length);
v2inebda = target; v2inebda = target;
target += v2->length; target += v2->length;
target = (grub_uint8_t *) ((((long) target - 1) | 0xf) + 1); target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1);
v2 = 0; v2 = 0;
break; break;
} }
@ -282,7 +282,7 @@ grub_acpi_create_ebda (void)
grub_memcpy (target, v1, sizeof (struct grub_acpi_rsdp_v10)); grub_memcpy (target, v1, sizeof (struct grub_acpi_rsdp_v10));
v1inebda = target; v1inebda = target;
target += sizeof (struct grub_acpi_rsdp_v10); target += sizeof (struct grub_acpi_rsdp_v10);
target = (grub_uint8_t *) ((((long) target - 1) | 0xf) + 1); target = (grub_uint8_t *) ((((grub_addr_t) target - 1) | 0xf) + 1);
v1 = 0; v1 = 0;
break; break;
} }
@ -306,7 +306,7 @@ grub_acpi_create_ebda (void)
*target = 0; *target = 0;
grub_dprintf ("acpi", "Switching EBDA\n"); grub_dprintf ("acpi", "Switching EBDA\n");
(*((grub_uint16_t *) 0x40e)) = ((long)targetebda) >> 4; (*((grub_uint16_t *) 0x40e)) = ((grub_addr_t) targetebda) >> 4;
grub_dprintf ("acpi", "EBDA switched\n"); grub_dprintf ("acpi", "EBDA switched\n");
return GRUB_ERR_NONE; return GRUB_ERR_NONE;

View File

@ -26,14 +26,14 @@ struct grub_acpi_rsdp_v10 *
grub_machine_acpi_get_rsdpv1 (void) grub_machine_acpi_get_rsdpv1 (void)
{ {
unsigned i; unsigned i;
static grub_efi_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID; static grub_efi_packed_guid_t acpi_guid = GRUB_EFI_ACPI_TABLE_GUID;
for (i = 0; i < grub_efi_system_table->num_table_entries; i++) for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
{ {
grub_efi_guid_t *guid = grub_efi_packed_guid_t *guid =
&grub_efi_system_table->configuration_table[i].vendor_guid; &grub_efi_system_table->configuration_table[i].vendor_guid;
if (! grub_memcmp (guid, &acpi_guid, sizeof (grub_efi_guid_t))) if (! grub_memcmp (guid, &acpi_guid, sizeof (grub_efi_packed_guid_t)))
return (struct grub_acpi_rsdp_v10 *) return (struct grub_acpi_rsdp_v10 *)
grub_efi_system_table->configuration_table[i].vendor_table; grub_efi_system_table->configuration_table[i].vendor_table;
} }
@ -44,14 +44,14 @@ struct grub_acpi_rsdp_v20 *
grub_machine_acpi_get_rsdpv2 (void) grub_machine_acpi_get_rsdpv2 (void)
{ {
unsigned i; unsigned i;
static grub_efi_guid_t acpi20_guid = GRUB_EFI_ACPI_20_TABLE_GUID; static grub_efi_packed_guid_t acpi20_guid = GRUB_EFI_ACPI_20_TABLE_GUID;
for (i = 0; i < grub_efi_system_table->num_table_entries; i++) for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
{ {
grub_efi_guid_t *guid = grub_efi_packed_guid_t *guid =
&grub_efi_system_table->configuration_table[i].vendor_guid; &grub_efi_system_table->configuration_table[i].vendor_guid;
if (! grub_memcmp (guid, &acpi20_guid, sizeof (grub_efi_guid_t))) if (! grub_memcmp (guid, &acpi20_guid, sizeof (grub_efi_packed_guid_t)))
return (struct grub_acpi_rsdp_v20 *) return (struct grub_acpi_rsdp_v20 *)
grub_efi_system_table->configuration_table[i].vendor_table; grub_efi_system_table->configuration_table[i].vendor_table;
} }

View File

@ -105,7 +105,7 @@ fake_bios_data (int use_rom)
smbios = 0; smbios = 0;
for (i = 0; i < grub_efi_system_table->num_table_entries; i++) for (i = 0; i < grub_efi_system_table->num_table_entries; i++)
{ {
grub_efi_guid_t *guid = grub_efi_packed_guid_t *guid =
&grub_efi_system_table->configuration_table[i].vendor_guid; &grub_efi_system_table->configuration_table[i].vendor_guid;
if (! grub_memcmp (guid, &acpi2_guid, sizeof (grub_efi_guid_t))) if (! grub_memcmp (guid, &acpi2_guid, sizeof (grub_efi_guid_t)))

View File

@ -95,7 +95,7 @@ grub_cmd_lsefi (grub_command_t cmd __attribute__ ((unused)),
grub_efi_handle_t handle = handles[i]; grub_efi_handle_t handle = handles[i];
grub_efi_status_t status; grub_efi_status_t status;
grub_efi_uintn_t num_protocols; grub_efi_uintn_t num_protocols;
grub_efi_guid_t **protocols; grub_efi_packed_guid_t **protocols;
grub_efi_device_path_t *dp; grub_efi_device_path_t *dp;
grub_printf ("Handle %p\n", handle); grub_printf ("Handle %p\n", handle);

View File

@ -71,7 +71,7 @@ grub_cmd_lsefisystab (struct grub_command *cmd __attribute__ ((unused)),
grub_printf (", Version=%x\n", st->firmware_revision); grub_printf (", Version=%x\n", st->firmware_revision);
grub_printf ("%ld tables:\n", st->num_table_entries); grub_printf ("%lld tables:\n", (long long) st->num_table_entries);
t = st->configuration_table; t = st->configuration_table;
for (i = 0; i < st->num_table_entries; i++) for (i = 0; i < st->num_table_entries; i++)
{ {

View File

@ -32,7 +32,7 @@ disp_sal (void *table)
{ {
struct grub_efi_sal_system_table *t = table; struct grub_efi_sal_system_table *t = table;
void *desc; void *desc;
grub_uint32_t len, l; grub_uint32_t len, l, i;
grub_printf ("SAL rev: %02x, signature: %x, len:%x\n", grub_printf ("SAL rev: %02x, signature: %x, len:%x\n",
t->sal_rev, t->signature, t->total_table_len); t->sal_rev, t->signature, t->total_table_len);
@ -44,7 +44,9 @@ disp_sal (void *table)
desc = t->entries; desc = t->entries;
len = t->total_table_len - sizeof (struct grub_efi_sal_system_table); len = t->total_table_len - sizeof (struct grub_efi_sal_system_table);
while (len > 0) if (t->total_table_len <= sizeof (struct grub_efi_sal_system_table))
return;
for (i = 0; i < t->entry_count; i++)
{ {
switch (*(grub_uint8_t *) desc) switch (*(grub_uint8_t *) desc)
{ {
@ -123,6 +125,8 @@ disp_sal (void *table)
return; return;
} }
desc = (grub_uint8_t *)desc + l; desc = (grub_uint8_t *)desc + l;
if (len <= l)
return;
len -= l; len -= l;
} }
} }
@ -135,12 +139,12 @@ grub_cmd_lssal (struct grub_command *cmd __attribute__ ((unused)),
const grub_efi_system_table_t *st = grub_efi_system_table; const grub_efi_system_table_t *st = grub_efi_system_table;
grub_efi_configuration_table_t *t = st->configuration_table; grub_efi_configuration_table_t *t = st->configuration_table;
unsigned int i; unsigned int i;
grub_efi_guid_t guid = GRUB_EFI_SAL_TABLE_GUID; grub_efi_packed_guid_t guid = GRUB_EFI_SAL_TABLE_GUID;
for (i = 0; i < st->num_table_entries; i++) for (i = 0; i < st->num_table_entries; i++)
{ {
if (grub_memcmp (&guid, &t->vendor_guid, if (grub_memcmp (&guid, &t->vendor_guid,
sizeof (grub_efi_guid_t)) == 0) sizeof (grub_efi_packed_guid_t)) == 0)
{ {
disp_sal (t->vendor_table); disp_sal (t->vendor_table);
return GRUB_ERR_NONE; return GRUB_ERR_NONE;

641
grub-core/commands/file.c Normal file
View File

@ -0,0 +1,641 @@
/*
* 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/dl.h>
#include <grub/misc.h>
#include <grub/mm.h>
#include <grub/env.h>
#include <grub/command.h>
#include <grub/extcmd.h>
#include <grub/i18n.h>
#include <grub/file.h>
#include <grub/elf.h>
#include <grub/xen_file.h>
#include <grub/efi/pe32.h>
#include <grub/i386/linux.h>
#include <grub/xnu.h>
#include <grub/machoload.h>
#include <grub/fileid.h>
GRUB_MOD_LICENSE ("GPLv3+");
static const struct grub_arg_option options[] = {
{"is-i386-xen-pae-domu", 0, 0,
N_("Check if FILE can be booted as i386 PAE xen unprivilegied guest"),
0, 0},
{"is-x86_64-xen-domu", 0, 0,
N_("Check if FILE can be booted as x86_64 xen unprivilegied guest"), 0, 0},
{"is-x86-xen-dom0", 0, 0,
N_("Check if FILE can be used as xen x86 privilegied guest kernel"), 0, 0},
{"is-x86-multiboot", 0, 0,
N_("Check if FILE can be used as x86 multiboot kernel"), 0, 0},
{"is-x86-multiboot2", 0, 0,
N_("Check if FILE can be used as x86 multiboot2 kernel"), 0, 0},
{"is-arm-linux", 0, 0,
N_("Check if FILE is ARM linux"), 0, 0},
{"is-ia64-linux", 0, 0,
N_("Check if FILE is IA64 linux"), 0, 0},
{"is-mips-linux", 0, 0,
N_("Check if FILE is MIPS linux"), 0, 0},
{"is-mipsel-linux", 0, 0,
N_("Check if FILE is MIPSEL linux"), 0, 0},
{"is-sparc64-linux", 0, 0,
N_("Check if FILE is SPARC64 linux"), 0, 0},
{"is-powerpc-linux", 0, 0,
N_("Check if FILE is POWERPC linux"), 0, 0},
{"is-x86-linux", 0, 0,
N_("Check if FILE is x86 linux"), 0, 0},
{"is-x86-linux32", 0, 0,
N_("Check if FILE is x86 linux supporting 32-bit protocol"), 0, 0},
{"is-x86-kfreebsd", 0, 0,
N_("Check if FILE is x86 kfreebsd"), 0, 0},
{"is-i386-kfreebsd", 0, 0,
N_("Check if FILE is i386 kfreebsd"), 0, 0},
{"is-x86_64-kfreebsd", 0, 0,
N_("Check if FILE is x86_64 kfreebsd"), 0, 0},
{"is-x86-knetbsd", 0, 0,
N_("Check if FILE is x86 knetbsd"), 0, 0},
{"is-i386-knetbsd", 0, 0,
N_("Check if FILE is i386 knetbsd"), 0, 0},
{"is-x86_64-knetbsd", 0, 0,
N_("Check if FILE is x86_64 knetbsd"), 0, 0},
{"is-i386-efi", 0, 0,
N_("Check if FILE is i386 EFI file"), 0, 0},
{"is-x86_64-efi", 0, 0,
N_("Check if FILE is x86-64 EFI file"), 0, 0},
{"is-ia64-efi", 0, 0,
N_("Check if FILE is IA64 EFI file"), 0, 0},
{"is-arm-efi", 0, 0,
N_("Check if FILE is ARM EFI file"), 0, 0},
{"is-hibernated-hiberfil", 0, 0,
N_("Check if FILE is hiberfil.sys in hibernated state"), 0, 0},
{"is-x86_64-xnu", 0, 0,
N_("Check if FILE is x86_64 xnu (Mac OS X kernel)"), 0, 0},
{"is-i386-xnu", 0, 0,
N_("Check if FILE is i386 xnu (Mac OS X kernel)"), 0, 0},
{"is-xnu-hibr", 0, 0,
N_("Check if FILE is xnu (Mac OS X kernel) hibernated image"), 0, 0},
{"is-x86-bios-bootsector", 0, 0,
N_("Check if FILE is BIOS bootsector"), 0, 0},
{0, 0, 0, 0, 0, 0}
};
enum
{
IS_PAE_DOMU,
IS_64_DOMU,
IS_DOM0,
IS_MULTIBOOT,
IS_MULTIBOOT2,
IS_ARM_LINUX,
IS_IA64_LINUX,
IS_MIPS_LINUX,
IS_MIPSEL_LINUX,
IS_SPARC64_LINUX,
IS_POWERPC_LINUX,
IS_X86_LINUX,
IS_X86_LINUX32,
IS_X86_KFREEBSD,
IS_X86_KFREEBSD32,
IS_X86_KFREEBSD64,
IS_X86_KNETBSD,
IS_X86_KNETBSD32,
IS_X86_KNETBSD64,
IS_32_EFI,
IS_64_EFI,
IS_IA_EFI,
IS_ARM_EFI,
IS_HIBERNATED,
IS_XNU64,
IS_XNU32,
IS_XNU_HIBR,
IS_BIOS_BOOTSECTOR,
OPT_TYPE_MIN = IS_PAE_DOMU,
OPT_TYPE_MAX = IS_BIOS_BOOTSECTOR
};
static grub_err_t
grub_cmd_file (grub_extcmd_context_t ctxt, int argc, char **args)
{
grub_file_t file = 0;
grub_elf_t elf = 0;
grub_err_t err;
int type = -1, i;
int ret = 0;
grub_macho_t macho = 0;
if (argc == 0)
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
for (i = OPT_TYPE_MIN; i <= OPT_TYPE_MAX; i++)
if (ctxt->state[i].set)
{
if (type == -1)
{
type = i;
continue;
}
return grub_error (GRUB_ERR_BAD_ARGUMENT, "multiple types specified");
}
if (type == -1)
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no type specified");
file = grub_file_open (args[0]);
if (!file)
return grub_errno;
switch (type)
{
case IS_BIOS_BOOTSECTOR:
{
grub_uint16_t sig;
if (grub_file_size (file) != 512)
break;
if (grub_file_seek (file, 510) == (grub_size_t) -1)
break;
if (grub_file_read (file, &sig, 2) != 2)
break;
if (sig != grub_cpu_to_le16_compile_time (0xaa55))
break;
ret = 1;
break;
}
case IS_IA64_LINUX:
{
Elf64_Ehdr ehdr;
if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr))
break;
if (ehdr.e_ident[EI_MAG0] != ELFMAG0
|| ehdr.e_ident[EI_MAG1] != ELFMAG1
|| ehdr.e_ident[EI_MAG2] != ELFMAG2
|| ehdr.e_ident[EI_MAG3] != ELFMAG3
|| ehdr.e_ident[EI_VERSION] != EV_CURRENT
|| ehdr.e_version != EV_CURRENT)
break;
if (ehdr.e_ident[EI_CLASS] != ELFCLASS64
|| ehdr.e_ident[EI_DATA] != ELFDATA2LSB
|| ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_IA_64))
break;
ret = 1;
break;
}
case IS_SPARC64_LINUX:
{
Elf64_Ehdr ehdr;
if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr))
break;
if (ehdr.e_ident[EI_MAG0] != ELFMAG0
|| ehdr.e_ident[EI_MAG1] != ELFMAG1
|| ehdr.e_ident[EI_MAG2] != ELFMAG2
|| ehdr.e_ident[EI_MAG3] != ELFMAG3
|| ehdr.e_ident[EI_VERSION] != EV_CURRENT
|| ehdr.e_version != EV_CURRENT)
break;
if (ehdr.e_ident[EI_CLASS] != ELFCLASS64
|| ehdr.e_ident[EI_DATA] != ELFDATA2MSB)
break;
if (ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_SPARCV9)
|| ehdr.e_type != grub_cpu_to_be16_compile_time (ET_EXEC))
break;
ret = 1;
break;
}
case IS_POWERPC_LINUX:
{
Elf32_Ehdr ehdr;
if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr))
break;
if (ehdr.e_ident[EI_MAG0] != ELFMAG0
|| ehdr.e_ident[EI_MAG1] != ELFMAG1
|| ehdr.e_ident[EI_MAG2] != ELFMAG2
|| ehdr.e_ident[EI_MAG3] != ELFMAG3
|| ehdr.e_ident[EI_VERSION] != EV_CURRENT
|| ehdr.e_version != EV_CURRENT)
break;
if (ehdr.e_ident[EI_DATA] != ELFDATA2MSB
|| (ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_PPC)
&& ehdr.e_machine !=
grub_cpu_to_le16_compile_time (EM_PPC64)))
break;
if (ehdr.e_type != grub_cpu_to_be16_compile_time (ET_EXEC)
&& ehdr.e_type != grub_cpu_to_be16_compile_time (ET_DYN))
break;
ret = 1;
break;
}
case IS_MIPS_LINUX:
{
Elf32_Ehdr ehdr;
if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr))
break;
if (ehdr.e_ident[EI_MAG0] != ELFMAG0
|| ehdr.e_ident[EI_MAG1] != ELFMAG1
|| ehdr.e_ident[EI_MAG2] != ELFMAG2
|| ehdr.e_ident[EI_MAG3] != ELFMAG3
|| ehdr.e_ident[EI_VERSION] != EV_CURRENT
|| ehdr.e_version != EV_CURRENT)
break;
if (ehdr.e_ident[EI_DATA] != ELFDATA2MSB
|| ehdr.e_machine != grub_cpu_to_be16_compile_time (EM_MIPS)
|| ehdr.e_type != grub_cpu_to_be16_compile_time (ET_EXEC))
break;
ret = 1;
break;
}
case IS_X86_KNETBSD:
case IS_X86_KNETBSD32:
case IS_X86_KNETBSD64:
{
int is32, is64;
elf = grub_elf_file (file, file->name);
if (elf->ehdr.ehdr32.e_type != grub_cpu_to_le16_compile_time (ET_EXEC)
|| elf->ehdr.ehdr32.e_ident[EI_DATA] != ELFDATA2LSB)
break;
is32 = grub_elf_is_elf32 (elf);
is64 = grub_elf_is_elf64 (elf);
if (!is32 && !is64)
break;
if (!is32 && type == IS_X86_KNETBSD32)
break;
if (!is64 && type == IS_X86_KNETBSD64)
break;
if (is64)
ret = grub_file_check_netbsd64 (elf);
if (is32)
ret = grub_file_check_netbsd32 (elf);
break;
}
case IS_X86_KFREEBSD:
case IS_X86_KFREEBSD32:
case IS_X86_KFREEBSD64:
{
Elf32_Ehdr ehdr;
int is32, is64;
if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr))
break;
if (ehdr.e_ident[EI_MAG0] != ELFMAG0
|| ehdr.e_ident[EI_MAG1] != ELFMAG1
|| ehdr.e_ident[EI_MAG2] != ELFMAG2
|| ehdr.e_ident[EI_MAG3] != ELFMAG3
|| ehdr.e_ident[EI_VERSION] != EV_CURRENT
|| ehdr.e_version != EV_CURRENT)
break;
if (ehdr.e_type != grub_cpu_to_le16_compile_time (ET_EXEC)
|| ehdr.e_ident[EI_DATA] != ELFDATA2LSB)
break;
if (ehdr.e_ident[EI_OSABI] != ELFOSABI_FREEBSD)
break;
is32 = (ehdr.e_machine == grub_cpu_to_le16_compile_time (EM_386)
&& ehdr.e_ident[EI_CLASS] == ELFCLASS32);
is64 = (ehdr.e_machine == grub_cpu_to_le16_compile_time (EM_X86_64)
&& ehdr.e_ident[EI_CLASS] == ELFCLASS64);
if (!is32 && !is64)
break;
if (!is32 && (type == IS_X86_KFREEBSD32 || type == IS_X86_KNETBSD32))
break;
if (!is64 && (type == IS_X86_KFREEBSD64 || type == IS_X86_KNETBSD64))
break;
ret = 1;
break;
}
case IS_MIPSEL_LINUX:
{
Elf32_Ehdr ehdr;
if (grub_file_read (file, &ehdr, sizeof (ehdr)) != sizeof (ehdr))
break;
if (ehdr.e_ident[EI_MAG0] != ELFMAG0
|| ehdr.e_ident[EI_MAG1] != ELFMAG1
|| ehdr.e_ident[EI_MAG2] != ELFMAG2
|| ehdr.e_ident[EI_MAG3] != ELFMAG3
|| ehdr.e_ident[EI_VERSION] != EV_CURRENT
|| ehdr.e_version != EV_CURRENT)
break;
if (ehdr.e_machine != grub_cpu_to_le16_compile_time (EM_MIPS)
|| ehdr.e_type != grub_cpu_to_le16_compile_time (ET_EXEC))
break;
ret = 1;
break;
}
case IS_ARM_LINUX:
{
grub_uint32_t sig;
if (grub_file_seek (file, 0x24) == (grub_size_t) -1)
break;
if (grub_file_read (file, &sig, 4) != 4)
break;
if (sig != grub_cpu_to_le32_compile_time (0x016f2818))
break;
ret = 1;
break;
}
case IS_PAE_DOMU ... IS_DOM0:
{
struct grub_xen_file_info xen_inf;
elf = grub_xen_file (file);
if (!elf)
break;
err = grub_xen_get_info (elf, &xen_inf);
if (err)
break;
/* Unfortuntely no way to check if kernel supports dom0. */
if (type == IS_DOM0)
ret = 1;
if (type == IS_PAE_DOMU)
ret = (xen_inf.arch == GRUB_XEN_FILE_I386_PAE
|| xen_inf.arch == GRUB_XEN_FILE_I386_PAE_BIMODE);
if (type == IS_64_DOMU)
ret = (xen_inf.arch == GRUB_XEN_FILE_X86_64);
break;
}
case IS_MULTIBOOT:
case IS_MULTIBOOT2:
{
grub_uint32_t *buffer;
grub_ssize_t len;
grub_size_t search_size;
grub_uint32_t *header;
grub_uint32_t magic;
grub_size_t step;
if (type == IS_MULTIBOOT2)
{
search_size = 32768;
magic = grub_cpu_to_le32_compile_time (0xe85250d6);
step = 2;
}
else
{
search_size = 8192;
magic = grub_cpu_to_le32_compile_time (0x1BADB002);
step = 1;
}
buffer = grub_malloc (search_size);
if (!buffer)
break;
len = grub_file_read (file, buffer, search_size);
if (len < 32)
{
grub_free (buffer);
break;
}
/* Look for the multiboot header in the buffer. The header should
be at least 12 bytes and aligned on a 4-byte boundary. */
for (header = buffer;
((char *) header <=
(char *) buffer + len - (type == IS_MULTIBOOT2 ? 16 : 12))
|| (header = 0); header += step)
{
if (header[0] == magic
&& !(grub_le_to_cpu32 (header[0])
+ grub_le_to_cpu32 (header[1])
+ grub_le_to_cpu32 (header[2])
+ (type == IS_MULTIBOOT2
? grub_le_to_cpu32 (header[3]) : 0)))
break;
}
if (header != 0)
ret = 1;
grub_free (buffer);
break;
}
case IS_X86_LINUX32:
case IS_X86_LINUX:
{
struct linux_kernel_header lh;
if (grub_file_read (file, &lh, sizeof (lh)) != sizeof (lh))
break;
if (lh.boot_flag != grub_cpu_to_le16_compile_time (0xaa55))
break;
if (lh.setup_sects > GRUB_LINUX_MAX_SETUP_SECTS)
break;
/* FIXME: some really old kernels (< 1.3.73) will fail this. */
if (lh.header !=
grub_cpu_to_le32_compile_time (GRUB_LINUX_MAGIC_SIGNATURE)
|| grub_le_to_cpu16 (lh.version) < 0x0200)
break;
if (type == IS_X86_LINUX)
{
ret = 1;
break;
}
/* FIXME: 2.03 is not always good enough (Linux 2.4 can be 2.03 and
still not support 32-bit boot. */
if (lh.header !=
grub_cpu_to_le32_compile_time (GRUB_LINUX_MAGIC_SIGNATURE)
|| grub_le_to_cpu16 (lh.version) < 0x0203)
break;
if (!(lh.loadflags & GRUB_LINUX_FLAG_BIG_KERNEL))
break;
ret = 1;
break;
}
case IS_HIBERNATED:
{
grub_uint8_t hibr_file_magic[4];
if (grub_file_read (file, &hibr_file_magic, sizeof (hibr_file_magic))
!= sizeof (hibr_file_magic))
break;
if (grub_memcmp ("hibr", hibr_file_magic, sizeof (hibr_file_magic)) ==
0
|| grub_memcmp ("HIBR", hibr_file_magic,
sizeof (hibr_file_magic)) == 0)
ret = 1;
break;
}
case IS_XNU64:
case IS_XNU32:
{
macho = grub_macho_open (args[0], (type == IS_XNU64));
if (!macho)
break;
/* FIXME: more checks? */
ret = 1;
break;
}
case IS_XNU_HIBR:
{
struct grub_xnu_hibernate_header hibhead;
if (grub_file_read (file, &hibhead, sizeof (hibhead))
!= sizeof (hibhead))
break;
if (hibhead.magic !=
grub_cpu_to_le32_compile_time (GRUB_XNU_HIBERNATE_MAGIC))
break;
ret = 1;
break;
}
case IS_32_EFI:
case IS_64_EFI:
case IS_IA_EFI:
case IS_ARM_EFI:
{
char signature[4];
grub_uint32_t pe_offset;
struct grub_pe32_coff_header coff_head;
if (grub_file_read (file, signature, 2) != 2)
break;
if (signature[0] != 'M' || signature[1] != 'Z')
break;
if ((grub_ssize_t) grub_file_seek (file, 0x3c) == -1)
break;
if (grub_file_read (file, &pe_offset, 4) != 4)
break;
if ((grub_ssize_t) grub_file_seek (file, grub_le_to_cpu32 (pe_offset))
== -1)
break;
if (grub_file_read (file, signature, 4) != 4)
break;
if (signature[0] != 'P' || signature[1] != 'E'
|| signature[2] != '\0' || signature[3] != '\0')
break;
if (grub_file_read (file, &coff_head, sizeof (coff_head))
!= sizeof (coff_head))
break;
if (type == IS_32_EFI
&& coff_head.machine !=
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_I386))
break;
if (type == IS_64_EFI
&& coff_head.machine !=
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_X86_64))
break;
if (type == IS_IA_EFI
&& coff_head.machine !=
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_IA64))
break;
if (type == IS_ARM_EFI
&& coff_head.machine !=
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_ARMTHUMB_MIXED))
break;
if (type == IS_64_EFI || type == IS_64_EFI)
{
struct grub_pe64_optional_header o64;
if (grub_file_read (file, &o64, sizeof (o64)) != sizeof (o64))
break;
if (o64.magic !=
grub_cpu_to_le16_compile_time (GRUB_PE32_PE64_MAGIC))
break;
if (o64.subsystem !=
grub_cpu_to_le16_compile_time
(GRUB_PE32_SUBSYSTEM_EFI_APPLICATION))
break;
ret = 1;
break;
}
if (type == IS_32_EFI || type == IS_ARM_EFI)
{
struct grub_pe32_optional_header o32;
if (grub_file_read (file, &o32, sizeof (o32)) != sizeof (o32))
break;
if (o32.magic !=
grub_cpu_to_le16_compile_time (GRUB_PE32_PE32_MAGIC))
break;
if (o32.subsystem !=
grub_cpu_to_le16_compile_time
(GRUB_PE32_SUBSYSTEM_EFI_APPLICATION))
break;
ret = 1;
break;
}
break;
}
}
if (elf)
grub_elf_close (elf);
else if (macho)
grub_macho_close (macho);
else if (file)
grub_file_close (file);
if (!ret && (grub_errno == GRUB_ERR_BAD_OS || grub_errno == GRUB_ERR_NONE))
/* TRANSLATORS: it's a standalone boolean value,
opposite of "true". */
grub_error (GRUB_ERR_TEST_FAILURE, N_("false"));
return grub_errno;
}
static grub_extcmd_t cmd;
GRUB_MOD_INIT(file)
{
cmd = grub_register_extcmd ("file", grub_cmd_file, 0,
N_("OPTIONS FILE"),
N_("Check if FILE is of specified type."),
options);
}
GRUB_MOD_FINI(file)
{
grub_unregister_extcmd (cmd);
}

View File

@ -0,0 +1,5 @@
#define GRUB_TARGET_WORDSIZE 32
#define XX 32
#define ehdrXX ehdr32
#define grub_file_check_netbsdXX grub_file_check_netbsd32
#include "fileXX.c"

View File

@ -0,0 +1,5 @@
#define GRUB_TARGET_WORDSIZE 64
#define XX 64
#define ehdrXX ehdr64
#define grub_file_check_netbsdXX grub_file_check_netbsd64
#include "fileXX.c"

View File

@ -0,0 +1,70 @@
/*
* 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/fileid.h>
#include <grub/elfload.h>
#pragma GCC diagnostic ignored "-Wcast-align"
int
grub_file_check_netbsdXX (grub_elf_t elf)
{
Elf_Shdr *s, *s0;
grub_size_t shnum = elf->ehdr.ehdrXX.e_shnum;
grub_size_t shentsize = elf->ehdr.ehdrXX.e_shentsize;
grub_size_t shsize = shnum * shentsize;
grub_off_t stroff;
if (!shnum || !shentsize)
return 0;
s0 = grub_malloc (shsize);
if (!s0)
return 0;
if (grub_file_seek (elf->file, elf->ehdr.ehdrXX.e_shoff) == (grub_off_t) -1)
return 0;
if (grub_file_read (elf->file, s0, shsize) != (grub_ssize_t) shsize)
return 0;
s = (Elf_Shdr *) ((char *) s0 + elf->ehdr.ehdrXX.e_shstrndx * shentsize);
stroff = s->sh_offset;
for (s = s0; s < (Elf_Shdr *) ((char *) s0 + shnum * shentsize);
s = (Elf_Shdr *) ((char *) s + shentsize))
{
char name[sizeof(".note.netbsd.ident")];
grub_memset (name, 0, sizeof (name));
if (grub_file_seek (elf->file, stroff + s->sh_name) == (grub_off_t) -1)
return grub_errno;
if (grub_file_read (elf->file, name, sizeof (name)) != (grub_ssize_t) sizeof (name))
{
if (grub_errno)
return grub_errno;
continue;
}
if (grub_memcmp (name, ".note.netbsd.ident",
sizeof(".note.netbsd.ident")) != 0)
continue;
return 1;
}
return 0;
}

View File

@ -34,19 +34,38 @@ static const struct grub_arg_option options[] =
/* TRANSLATORS: "(default)" at the end means that this option is used if /* TRANSLATORS: "(default)" at the end means that this option is used if
no argument is specified. */ no argument is specified. */
{"long-mode", 'l', 0, N_("Check if CPU supports 64-bit (long) mode (default)."), 0, 0}, {"long-mode", 'l', 0, N_("Check if CPU supports 64-bit (long) mode (default)."), 0, 0},
{"pae", 'p', 0, N_("Check if CPU supports Physical Address Extension."), 0, 0},
{0, 0, 0, 0, 0, 0} {0, 0, 0, 0, 0, 0}
}; };
#define bit_LM (1 << 29) enum
{
MODE_LM = 0,
MODE_PAE = 1
};
unsigned char grub_cpuid_has_longmode = 0; enum
{
bit_PAE = (1 << 6),
};
enum
{
bit_LM = (1 << 29)
};
unsigned char grub_cpuid_has_longmode = 0, grub_cpuid_has_pae = 0;
static grub_err_t static grub_err_t
grub_cmd_cpuid (grub_extcmd_context_t ctxt __attribute__ ((unused)), grub_cmd_cpuid (grub_extcmd_context_t ctxt,
int argc __attribute__ ((unused)), int argc __attribute__ ((unused)),
char **args __attribute__ ((unused))) char **args __attribute__ ((unused)))
{ {
return grub_cpuid_has_longmode ? GRUB_ERR_NONE int val = 0;
if (ctxt->state[MODE_PAE].set)
val = grub_cpuid_has_pae;
else
val = grub_cpuid_has_longmode;
return val ? GRUB_ERR_NONE
/* TRANSLATORS: it's a standalone boolean value, /* TRANSLATORS: it's a standalone boolean value,
opposite of "true". */ opposite of "true". */
: grub_error (GRUB_ERR_TEST_FAILURE, N_("false")); : grub_error (GRUB_ERR_TEST_FAILURE, N_("false"));
@ -59,6 +78,7 @@ GRUB_MOD_INIT(cpuid)
#ifdef __x86_64__ #ifdef __x86_64__
/* grub-emu */ /* grub-emu */
grub_cpuid_has_longmode = 1; grub_cpuid_has_longmode = 1;
grub_cpuid_has_pae = 1;
#else #else
unsigned int eax, ebx, ecx, edx; unsigned int eax, ebx, ecx, edx;
unsigned int max_level; unsigned int max_level;
@ -79,6 +99,12 @@ GRUB_MOD_INIT(cpuid)
if (max_level == 0) if (max_level == 0)
goto done; goto done;
if (max_level >= 1)
{
grub_cpuid (1, eax, ebx, ecx, edx);
grub_cpuid_has_pae = !!(edx & bit_PAE);
}
grub_cpuid (0x80000000, eax, ebx, ecx, edx); grub_cpuid (0x80000000, eax, ebx, ecx, edx);
ext_level = eax; ext_level = eax;
if (ext_level < 0x80000000) if (ext_level < 0x80000000)

View File

@ -1,79 +0,0 @@
/* nthibr.c - tests whether an MS Windows system partition is hibernated */
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2013 Peter Lustig
* 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/types.h>
#include <grub/mm.h>
#include <grub/file.h>
#include <grub/misc.h>
#include <grub/dl.h>
#include <grub/command.h>
#include <grub/err.h>
#include <grub/i18n.h>
GRUB_MOD_LICENSE ("GPLv3+");
static grub_err_t
grub_cmd_nthibr (grub_command_t cmd __attribute__ ((unused)),
int argc, char **args)
{
grub_uint8_t hibr_file_magic[4];
grub_file_t hibr_file = 0;
if (argc != 1)
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected"));
hibr_file = grub_file_open (args[0]);
if (!hibr_file)
return grub_errno;
/* Try to read magic number of 'hiberfil.sys' */
if (grub_file_read (hibr_file, hibr_file_magic,
sizeof (hibr_file_magic))
!= (grub_ssize_t) sizeof (hibr_file_magic))
{
if (!grub_errno)
grub_error (GRUB_ERR_TEST_FAILURE, "false");
goto exit;
}
if (!(grub_memcmp ("hibr", hibr_file_magic, sizeof (hibr_file_magic)) == 0
|| grub_memcmp ("HIBR", hibr_file_magic, sizeof (hibr_file_magic)) == 0))
grub_error (GRUB_ERR_TEST_FAILURE, "false");
exit:
grub_file_close (hibr_file);
return grub_errno;
}
static grub_command_t cmd;
GRUB_MOD_INIT (check_nt_hiberfil)
{
cmd = grub_register_command ("check_nt_hiberfil", grub_cmd_nthibr,
N_("FILE"),
N_("Test whether a hiberfil.sys is "
"in hibernated state."));
}
GRUB_MOD_FINI (check_nt_hiberfil)
{
grub_unregister_command (cmd);
}

View File

@ -74,7 +74,7 @@ typedef struct drivemap_node
grub_uint8_t redirto; grub_uint8_t redirto;
} drivemap_node_t; } drivemap_node_t;
typedef struct __attribute__ ((packed)) int13map_node typedef struct GRUB_PACKED int13map_node
{ {
grub_uint8_t disknum; grub_uint8_t disknum;
grub_uint8_t mapto; grub_uint8_t mapto;

View File

@ -314,7 +314,11 @@ grub_cmd_legacy_kernel (struct grub_command *mycmd __attribute__ ((unused)),
/* First try Linux. */ /* First try Linux. */
if (kernel_type == GUESS_IT || kernel_type == LINUX) if (kernel_type == GUESS_IT || kernel_type == LINUX)
{ {
#ifdef GRUB_MACHINE_PCBIOS
cmd = grub_command_find ("linux16"); cmd = grub_command_find ("linux16");
#else
cmd = grub_command_find ("linux");
#endif
if (cmd) if (cmd)
{ {
if (!(cmd->func) (cmd, cutargc, cutargs)) if (!(cmd->func) (cmd, cutargc, cutargs))
@ -469,10 +473,19 @@ grub_cmd_legacy_initrd (struct grub_command *mycmd __attribute__ ((unused)),
if (kernel_type == LINUX) if (kernel_type == LINUX)
{ {
#ifdef GRUB_MACHINE_PCBIOS
cmd = grub_command_find ("initrd16"); cmd = grub_command_find ("initrd16");
#else
cmd = grub_command_find ("initrd");
#endif
if (!cmd) if (!cmd)
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"), return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("can't find command `%s'"),
"initrd16"); #ifdef GRUB_MACHINE_PCBIOS
"initrd16"
#else
"initrd"
#endif
);
return cmd->func (cmd, argc, args); return cmd->func (cmd, argc, args);
} }

View File

@ -0,0 +1,236 @@
/* hfspbless.c - set the hfs+ boot directory. */
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2003,2005,2007,2008,2009,2012,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/command.h>
#include <grub/fs.h>
#include <grub/misc.h>
#include <grub/dl.h>
#include <grub/device.h>
#include <grub/disk.h>
#include <grub/hfsplus.h>
#include <grub/hfs.h>
#include <grub/partition.h>
#include <grub/file.h>
#include <grub/mm.h>
#include <grub/err.h>
GRUB_MOD_LICENSE ("GPLv3+");
struct find_node_context
{
grub_uint64_t inode_found;
char *dirname;
enum
{ NONE, FILE, DIR } found;
};
static int
find_inode (const char *filename,
const struct grub_dirhook_info *info, void *data)
{
struct find_node_context *ctx = data;
if (!info->inodeset)
return 0;
if ((grub_strcmp (ctx->dirname, filename) == 0
|| (info->case_insensitive
&& grub_strcasecmp (ctx->dirname, filename) == 0)))
{
ctx->inode_found = info->inode;
ctx->found = info->dir ? DIR : FILE;
}
return 0;
}
grub_err_t
grub_mac_bless_inode (grub_device_t dev, grub_uint64_t inode, int is_dir,
int intel)
{
grub_err_t err;
union
{
struct grub_hfs_sblock hfs;
struct grub_hfsplus_volheader hfsplus;
} volheader;
grub_disk_addr_t embedded_offset;
if (intel && is_dir)
return grub_error (GRUB_ERR_BAD_ARGUMENT,
"can't bless a directory for mactel");
if (!intel && !is_dir)
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
"can't bless a file for mac PPC");
/* Read the bootblock. */
err = grub_disk_read (dev->disk, GRUB_HFSPLUS_SBLOCK, 0, sizeof (volheader),
(char *) &volheader);
if (err)
return err;
embedded_offset = 0;
if (grub_be_to_cpu16 (volheader.hfs.magic) == GRUB_HFS_MAGIC)
{
int extent_start;
int ablk_size;
int ablk_start;
/* See if there's an embedded HFS+ filesystem. */
if (grub_be_to_cpu16 (volheader.hfs.embed_sig) != GRUB_HFSPLUS_MAGIC)
{
if (intel)
volheader.hfs.intel_bootfile = grub_be_to_cpu32 (inode);
else
volheader.hfs.ppc_bootdir = grub_be_to_cpu32 (inode);
return GRUB_ERR_NONE;
}
/* Calculate the offset needed to translate HFS+ sector numbers. */
extent_start =
grub_be_to_cpu16 (volheader.hfs.embed_extent.first_block);
ablk_size = grub_be_to_cpu32 (volheader.hfs.blksz);
ablk_start = grub_be_to_cpu16 (volheader.hfs.first_block);
embedded_offset = (ablk_start
+ extent_start
* (ablk_size >> GRUB_DISK_SECTOR_BITS));
err =
grub_disk_read (dev->disk, embedded_offset + GRUB_HFSPLUS_SBLOCK, 0,
sizeof (volheader), (char *) &volheader);
if (err)
return err;
}
if ((grub_be_to_cpu16 (volheader.hfsplus.magic) != GRUB_HFSPLUS_MAGIC)
&& (grub_be_to_cpu16 (volheader.hfsplus.magic) != GRUB_HFSPLUSX_MAGIC))
return grub_error (GRUB_ERR_BAD_FS, "not a HFS+ filesystem");
if (intel)
volheader.hfsplus.intel_bootfile = grub_be_to_cpu32 (inode);
else
volheader.hfsplus.ppc_bootdir = grub_be_to_cpu32 (inode);
return grub_disk_write (dev->disk, embedded_offset + GRUB_HFSPLUS_SBLOCK, 0,
sizeof (volheader), (char *) &volheader);
}
grub_err_t
grub_mac_bless_file (grub_device_t dev, const char *path_in, int intel)
{
grub_fs_t fs;
char *path, *tail;
struct find_node_context ctx;
fs = grub_fs_probe (dev);
if (!fs || (grub_strcmp (fs->name, "hfsplus") != 0
&& grub_strcmp (fs->name, "hfs") != 0))
return grub_error (GRUB_ERR_BAD_FS, "no suitable FS found");
path = grub_strdup (path_in);
if (!path)
return grub_errno;
tail = path + grub_strlen (path) - 1;
/* Remove trailing '/'. */
while (tail != path && *tail == '/')
*(tail--) = 0;
tail = grub_strrchr (path, '/');
ctx.found = 0;
if (tail)
{
*tail = 0;
ctx.dirname = tail + 1;
(fs->dir) (dev, *path == 0 ? "/" : path, find_inode, &ctx);
}
else
{
ctx.dirname = path + 1;
(fs->dir) (dev, "/", find_inode, &ctx);
}
if (!ctx.found)
{
grub_free (path);
return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"),
path_in);
}
grub_free (path);
return grub_mac_bless_inode (dev, ctx.inode_found, (ctx.found == DIR),
intel);
}
static grub_err_t
grub_cmd_macbless (grub_command_t cmd, int argc, char **args)
{
char *device_name;
char *path = 0;
grub_device_t dev;
grub_err_t err;
if (argc != 1)
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("one argument expected"));
device_name = grub_file_get_device_name (args[0]);
dev = grub_device_open (device_name);
path = grub_strchr (args[0], ')');
if (!path)
path = args[0];
else
path = path + 1;
if (!path || *path == 0 || !device_name)
{
if (dev)
grub_device_close (dev);
grub_free (device_name);
grub_free (path);
return grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid argument");
}
err = grub_mac_bless_file (dev, path, cmd->name[3] == 't');
grub_device_close (dev);
grub_free (device_name);
return err;
}
static grub_command_t cmd, cmd_ppc;
GRUB_MOD_INIT(macbless)
{
cmd = grub_register_command ("mactelbless", grub_cmd_macbless,
N_("FILE"),
N_
("Bless FILE of HFS or HFS+ partition for intel macs."));
cmd_ppc =
grub_register_command ("macppcbless", grub_cmd_macbless, N_("DIR"),
N_
("Bless DIR of HFS or HFS+ partition for PPC macs."));
}
GRUB_MOD_FINI(macbless)
{
grub_unregister_command (cmd);
grub_unregister_command (cmd_ppc);
}

View File

@ -101,12 +101,18 @@ grub_mini_cmd_dump (struct grub_command *cmd __attribute__ ((unused)),
if (argc == 0) if (argc == 0)
return grub_error (GRUB_ERR_BAD_ARGUMENT, "no address specified"); return grub_error (GRUB_ERR_BAD_ARGUMENT, "no address specified");
addr = (grub_uint8_t *) grub_strtoul (argv[0], 0, 0); #if GRUB_CPU_SIZEOF_VOID_P == GRUB_CPU_SIZEOF_LONG
#define grub_strtoaddr grub_strtoul
#else
#define grub_strtoaddr grub_strtoull
#endif
addr = (grub_uint8_t *) grub_strtoaddr (argv[0], 0, 0);
if (grub_errno) if (grub_errno)
return grub_errno; return grub_errno;
if (argc > 1) if (argc > 1)
size = (grub_size_t) grub_strtoul (argv[1], 0, 0); size = (grub_size_t) grub_strtoaddr (argv[1], 0, 0);
while (size--) while (size--)
{ {

View File

@ -0,0 +1,214 @@
/*
* 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/types.h>
#include <grub/misc.h>
#include <grub/extcmd.h>
#include <grub/mm.h>
#include <grub/err.h>
#include <grub/dl.h>
#include <grub/file.h>
#include <grub/normal.h>
#include <grub/script_sh.h>
#include <grub/i18n.h>
#include <grub/term.h>
#include <grub/syslinux_parse.h>
#include <grub/crypto.h>
#include <grub/auth.h>
#include <grub/disk.h>
#include <grub/partition.h>
GRUB_MOD_LICENSE ("GPLv3+");
/* Helper for syslinux_file. */
static grub_err_t
syslinux_file_getline (char **line, int cont __attribute__ ((unused)),
void *data __attribute__ ((unused)))
{
*line = 0;
return GRUB_ERR_NONE;
}
static const struct grub_arg_option options[] =
{
{"root", 'r', 0,
N_("root directory of the syslinux disk (default /)."),
N_("DIR"), ARG_TYPE_STRING},
{"cwd", 'c', 0,
N_("home directory of the syslinux config (default directory of configfile)."),
N_("DIR"), ARG_TYPE_STRING},
{"isolinux", 'i', 0, N_("assume isolinux."), 0, 0},
{"pxelinux", 'p', 0, N_("assume pxelinux."), 0, 0},
{"syslinux", 's', 0, N_("assume syslinux."), 0, 0},
{0, 0, 0, 0, 0, 0}
};
enum
{
OPTION_ROOT,
OPTION_CWD,
OPTION_ISOLINUX,
OPTION_PXELINUX,
OPTION_SYSLINUX
};
static grub_err_t
syslinux_file (grub_extcmd_context_t ctxt, const char *filename)
{
char *result;
const char *root = ctxt->state[OPTION_ROOT].set ? ctxt->state[OPTION_ROOT].arg : "/";
const char *cwd = ctxt->state[OPTION_CWD].set ? ctxt->state[OPTION_CWD].arg : NULL;
grub_syslinux_flavour_t flav = GRUB_SYSLINUX_UNKNOWN;
char *cwdf = NULL;
grub_menu_t menu;
if (ctxt->state[OPTION_ISOLINUX].set)
flav = GRUB_SYSLINUX_ISOLINUX;
if (ctxt->state[OPTION_PXELINUX].set)
flav = GRUB_SYSLINUX_PXELINUX;
if (ctxt->state[OPTION_SYSLINUX].set)
flav = GRUB_SYSLINUX_SYSLINUX;
if (!cwd)
{
char *p;
cwdf = grub_strdup (filename);
if (!cwdf)
return grub_errno;
p = grub_strrchr (cwdf, '/');
if (!p)
{
grub_free (cwdf);
cwd = "/";
cwdf = NULL;
}
else
{
*p = '\0';
cwd = cwdf;
}
}
grub_dprintf ("syslinux",
"transforming syslinux config %s, root = %s, cwd = %s\n",
filename, root, cwd);
result = grub_syslinux_config_file (root, root, cwd, cwd, filename, flav);
if (!result)
return grub_errno;
grub_dprintf ("syslinux", "syslinux config transformed\n");
menu = grub_env_get_menu ();
if (! menu)
{
menu = grub_zalloc (sizeof (*menu));
if (! menu)
return grub_errno;
grub_env_set_menu (menu);
}
grub_normal_parse_line (result, syslinux_file_getline, NULL);
grub_print_error ();
grub_free (result);
grub_free (cwdf);
return GRUB_ERR_NONE;
}
static grub_err_t
grub_cmd_syslinux_source (grub_extcmd_context_t ctxt,
int argc, char **args)
{
int new_env, extractor;
grub_err_t ret;
if (argc != 1)
return grub_error (GRUB_ERR_BAD_ARGUMENT, N_("filename expected"));
extractor = (ctxt->extcmd->cmd->name[0] == 'e');
new_env = (ctxt->extcmd->cmd->name[extractor ? (sizeof ("extract_syslinux_entries_") - 1)
: (sizeof ("syslinux_") - 1)] == 'c');
if (new_env)
grub_cls ();
if (new_env && !extractor)
grub_env_context_open ();
if (extractor)
grub_env_extractor_open (!new_env);
ret = syslinux_file (ctxt, args[0]);
if (new_env)
{
grub_menu_t menu;
menu = grub_env_get_menu ();
if (menu && menu->size)
grub_show_menu (menu, 1, 0);
if (!extractor)
grub_env_context_close ();
}
if (extractor)
grub_env_extractor_close (!new_env);
return ret;
}
static grub_extcmd_t cmd_source, cmd_configfile;
static grub_extcmd_t cmd_source_extract, cmd_configfile_extract;
GRUB_MOD_INIT(syslinuxcfg)
{
cmd_source
= grub_register_extcmd ("syslinux_source",
grub_cmd_syslinux_source, 0,
N_("FILE"),
/* TRANSLATORS: "syslinux config" means
"config as used by syslinux". */
N_("Parse syslinux config in same context"),
options);
cmd_configfile
= grub_register_extcmd ("syslinux_configfile",
grub_cmd_syslinux_source, 0,
N_("FILE"),
N_("Parse syslinux config in new context"),
options);
cmd_source_extract
= grub_register_extcmd ("extract_syslinux_entries_source",
grub_cmd_syslinux_source, 0,
N_("FILE"),
N_("Parse syslinux config in same context taking only menu entries"),
options);
cmd_configfile_extract
= grub_register_extcmd ("extract_syslinux_entries_configfile",
grub_cmd_syslinux_source, 0,
N_("FILE"),
N_("Parse syslinux config in new context taking only menu entries"),
options);
}
GRUB_MOD_FINI(syslinuxcfg)
{
grub_unregister_extcmd (cmd_source);
grub_unregister_extcmd (cmd_configfile);
grub_unregister_extcmd (cmd_source_extract);
grub_unregister_extcmd (cmd_configfile_extract);
}

View File

@ -29,7 +29,7 @@ GRUB_MOD_LICENSE ("GPLv3+");
static const struct grub_arg_option options[] = static const struct grub_arg_option options[] =
{ {
{ "set", 's', 0, N_("Variable name to update."), N_("VARNAME"), ARG_TYPE_STRING }, { "set", 's', 0, N_("Set a variable to return value."), N_("VARNAME"), ARG_TYPE_STRING },
{ "upcase", 'U', 0, N_("Translate to upper case."), 0, 0 }, { "upcase", 'U', 0, N_("Translate to upper case."), 0, 0 },
{ "downcase", 'D', 0, N_("Translate to lower case."), 0, 0 }, { "downcase", 'D', 0, N_("Translate to lower case."), 0, 0 },
{ 0, 0, 0, 0, 0, 0 } { 0, 0, 0, 0, 0, 0 }

View File

@ -133,7 +133,7 @@ struct signature_v4_header
grub_uint8_t pkeyalgo; grub_uint8_t pkeyalgo;
grub_uint8_t hash; grub_uint8_t hash;
grub_uint16_t hashed_sub; grub_uint16_t hashed_sub;
} __attribute__ ((packed)); } GRUB_PACKED;
const char *hashes[] = { const char *hashes[] = {
[0x01] = "md5", [0x01] = "md5",
@ -885,6 +885,7 @@ grub_pubkey_open (grub_file_t io, const char *filename)
if (err) if (err)
return NULL; return NULL;
io->device = 0; io->device = 0;
io->name = 0;
grub_file_close (io); grub_file_close (io);
return ret; return ret;
} }

View File

@ -77,9 +77,9 @@ static grub_command_t cmd_ls, cmd_cat;
GRUB_MOD_INIT (lsxen) GRUB_MOD_INIT (lsxen)
{ {
cmd_ls = grub_register_command ("xen_ls", grub_cmd_lsxen, "[DIR]", cmd_ls = grub_register_command ("xen_ls", grub_cmd_lsxen, N_("[DIR]"),
N_("List XEN storage.")); N_("List XEN storage."));
cmd_cat = grub_register_command ("xen_cat", grub_cmd_catxen, "[DIR]", cmd_cat = grub_register_command ("xen_cat", grub_cmd_catxen, N_("[DIR]"),
N_("List XEN storage.")); N_("List XEN storage."));
} }

View File

@ -51,7 +51,7 @@ static inline int GF_PER_SECTOR (const struct grub_cryptodisk *dev)
} }
static grub_cryptodisk_t cryptodisk_list = NULL; static grub_cryptodisk_t cryptodisk_list = NULL;
static grub_uint8_t n = 0; static grub_uint8_t last_cryptodisk_id = 0;
static void static void
gf_mul_x (grub_uint8_t *g) gf_mul_x (grub_uint8_t *g)
@ -707,7 +707,7 @@ grub_cryptodisk_insert (grub_cryptodisk_t newdev, const char *name,
return grub_errno; return grub_errno;
} }
newdev->id = n++; 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->next = cryptodisk_list; newdev->next = cryptodisk_list;
@ -753,7 +753,7 @@ 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->id = n++; newdev->id = last_cryptodisk_id++;
newdev->next = cryptodisk_list; newdev->next = cryptodisk_list;
cryptodisk_list = newdev; cryptodisk_list = newdev;

View File

@ -1057,7 +1057,8 @@ insert_array (grub_disk_t disk, const struct grub_diskfilter_pv_id *id,
(unsigned long long) grub_disk_get_size (disk), (unsigned long long) grub_disk_get_size (disk),
array->name, diskfilter->name); array->name, diskfilter->name);
#ifdef GRUB_UTIL #ifdef GRUB_UTIL
grub_util_info ("Inserting %s (+%lld,%lld) into %s (%s)\n", disk->name, grub_util_info ("Inserting %s (+%" GRUB_HOST_PRIuLONG_LONG ",%"
GRUB_HOST_PRIuLONG_LONG ") into %s (%s)\n", disk->name,
(unsigned long long) grub_partition_get_start (disk->partition), (unsigned long long) grub_partition_get_start (disk->partition),
(unsigned long long) grub_disk_get_size (disk), (unsigned long long) grub_disk_get_size (disk),
array->name, diskfilter->name); array->name, diskfilter->name);

View File

@ -88,7 +88,7 @@ struct grub_nv_super
char prodrev[NV_PRODREV_LEN]; /* 0x2C - 0x2F Array product revision */ char prodrev[NV_PRODREV_LEN]; /* 0x2C - 0x2F Array product revision */
grub_uint32_t unit_flags; /* 0x30 - 0x33 Flags for this disk */ grub_uint32_t unit_flags; /* 0x30 - 0x33 Flags for this disk */
struct grub_nv_array array; /* Array information */ struct grub_nv_array array; /* Array information */
} __attribute__ ((packed)); } GRUB_PACKED;
static struct grub_diskfilter_vg * static struct grub_diskfilter_vg *
grub_dmraid_nv_detect (grub_disk_t disk, grub_dmraid_nv_detect (grub_disk_t disk,

View File

@ -157,8 +157,7 @@ find_parent_device (struct grub_efidisk_data *devices,
ldp = find_last_device_path (dp); ldp = find_last_device_path (dp);
ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
ldp->length[0] = sizeof (*ldp); ldp->length = sizeof (*ldp);
ldp->length[1] = 0;
for (parent = devices; parent; parent = parent->next) for (parent = devices; parent; parent = parent->next)
{ {
@ -188,8 +187,7 @@ is_child (struct grub_efidisk_data *child,
ldp = find_last_device_path (dp); ldp = find_last_device_path (dp);
ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
ldp->length[0] = sizeof (*ldp); ldp->length = sizeof (*ldp);
ldp->length[1] = 0;
ret = (grub_efi_compare_device_paths (dp, parent->device_path) == 0); ret = (grub_efi_compare_device_paths (dp, parent->device_path) == 0);
grub_free (dp); grub_free (dp);
@ -668,19 +666,19 @@ grub_efidisk_get_device_handle (grub_disk_t disk)
devices = make_devices (); devices = make_devices ();
FOR_CHILDREN (c, devices) FOR_CHILDREN (c, devices)
{ {
grub_efi_hard_drive_device_path_t hd; grub_efi_hard_drive_device_path_t *hd;
grub_memcpy (&hd, c->last_device_path, sizeof (hd)); hd = (grub_efi_hard_drive_device_path_t *) c->last_device_path;
if ((GRUB_EFI_DEVICE_PATH_TYPE (c->last_device_path) if ((GRUB_EFI_DEVICE_PATH_TYPE (c->last_device_path)
== GRUB_EFI_MEDIA_DEVICE_PATH_TYPE) == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE)
&& (GRUB_EFI_DEVICE_PATH_SUBTYPE (c->last_device_path) && (GRUB_EFI_DEVICE_PATH_SUBTYPE (c->last_device_path)
== GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE) == GRUB_EFI_HARD_DRIVE_DEVICE_PATH_SUBTYPE)
&& (grub_partition_get_start (disk->partition) && (grub_partition_get_start (disk->partition)
== (hd.partition_start << (disk->log_sector_size == (hd->partition_start << (disk->log_sector_size
- GRUB_DISK_SECTOR_BITS))) - GRUB_DISK_SECTOR_BITS)))
&& (grub_partition_get_len (disk->partition) && (grub_partition_get_len (disk->partition)
== (hd.partition_size << (disk->log_sector_size == (hd->partition_size << (disk->log_sector_size
- GRUB_DISK_SECTOR_BITS)))) - GRUB_DISK_SECTOR_BITS))))
{ {
handle = c->handle; handle = c->handle;
@ -747,7 +745,7 @@ get_diskname_from_path (const grub_efi_device_path_t *path,
struct grub_efidisk_get_device_name_ctx struct grub_efidisk_get_device_name_ctx
{ {
char *partition_name; char *partition_name;
grub_efi_hard_drive_device_path_t hd; grub_efi_hard_drive_device_path_t *hd;
}; };
/* Helper for grub_efidisk_get_device_name. /* Helper for grub_efidisk_get_device_name.
@ -759,10 +757,10 @@ grub_efidisk_get_device_name_iter (grub_disk_t disk,
struct grub_efidisk_get_device_name_ctx *ctx = data; struct grub_efidisk_get_device_name_ctx *ctx = data;
if (grub_partition_get_start (part) if (grub_partition_get_start (part)
== (ctx->hd.partition_start << (disk->log_sector_size == (ctx->hd->partition_start << (disk->log_sector_size
- GRUB_DISK_SECTOR_BITS)) - GRUB_DISK_SECTOR_BITS))
&& grub_partition_get_len (part) && grub_partition_get_len (part)
== (ctx->hd.partition_size << (disk->log_sector_size == (ctx->hd->partition_size << (disk->log_sector_size
- GRUB_DISK_SECTOR_BITS))) - GRUB_DISK_SECTOR_BITS)))
{ {
ctx->partition_name = grub_partition_get_name (part); ctx->partition_name = grub_partition_get_name (part);
@ -816,8 +814,7 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
dup_ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE; dup_ldp->type = GRUB_EFI_END_DEVICE_PATH_TYPE;
dup_ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE; dup_ldp->subtype = GRUB_EFI_END_ENTIRE_DEVICE_PATH_SUBTYPE;
dup_ldp->length[0] = sizeof (*dup_ldp); dup_ldp->length = sizeof (*dup_ldp);
dup_ldp->length[1] = 0;
} }
if (!get_diskname_from_path (dup_dp, device_name)) if (!get_diskname_from_path (dup_dp, device_name))
@ -834,9 +831,9 @@ grub_efidisk_get_device_name (grub_efi_handle_t *handle)
/* Find a partition which matches the hard drive device path. */ /* Find a partition which matches the hard drive device path. */
ctx.partition_name = NULL; ctx.partition_name = NULL;
grub_memcpy (&ctx.hd, ldp, sizeof (ctx.hd)); ctx.hd = (grub_efi_hard_drive_device_path_t *) ldp;
if (ctx.hd.partition_start == 0 if (ctx.hd->partition_start == 0
&& (ctx.hd.partition_size << (parent->log_sector_size && (ctx.hd->partition_size << (parent->log_sector_size
- GRUB_DISK_SECTOR_BITS)) - GRUB_DISK_SECTOR_BITS))
== grub_disk_get_size (parent)) == grub_disk_get_size (parent))
{ {

View File

@ -95,7 +95,7 @@ struct grub_geli_key
grub_uint8_t iv_key[64]; grub_uint8_t iv_key[64];
grub_uint8_t cipher_key[64]; grub_uint8_t cipher_key[64];
grub_uint8_t hmac[64]; grub_uint8_t hmac[64];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_geli_phdr struct grub_geli_phdr
{ {
@ -111,7 +111,7 @@ struct grub_geli_phdr
grub_uint32_t niter; grub_uint32_t niter;
grub_uint8_t salt[64]; grub_uint8_t salt[64];
struct grub_geli_key keys[2]; struct grub_geli_key keys[2];
} __attribute__ ((packed)); } GRUB_PACKED;
enum enum
{ {
@ -144,7 +144,7 @@ geli_rekey (struct grub_cryptodisk *dev, grub_uint64_t zoneno)
const struct { const struct {
char magic[4]; char magic[4];
grub_uint64_t zone; grub_uint64_t zone;
} __attribute__ ((packed)) tohash } GRUB_PACKED tohash
= { {'e', 'k', 'e', 'y'}, grub_cpu_to_le64 (zoneno) }; = { {'e', 'k', 'e', 'y'}, grub_cpu_to_le64 (zoneno) };
GRUB_PROPERLY_ALIGNED_ARRAY (key, GRUB_CRYPTO_MAX_MDLEN); GRUB_PROPERLY_ALIGNED_ARRAY (key, GRUB_CRYPTO_MAX_MDLEN);

View File

@ -49,7 +49,7 @@ grub_host_open (const char *name, grub_disk_t disk)
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a host disk"); return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a host disk");
disk->total_sectors = 0; disk->total_sectors = 0;
disk->id = (unsigned long) "host"; disk->id = 0;
disk->data = 0; disk->data = 0;

View File

@ -49,7 +49,7 @@ struct grub_ldm_vblk {
grub_uint8_t type; grub_uint8_t type;
grub_uint32_t unused2; grub_uint32_t unused2;
grub_uint8_t dynamic[104]; grub_uint8_t dynamic[104];
} __attribute__ ((packed)); } GRUB_PACKED;
#define LDM_VBLK_MAGIC "VBLK" #define LDM_VBLK_MAGIC "VBLK"
enum enum
@ -83,7 +83,7 @@ struct grub_ldm_label
grub_uint64_t pv_size; grub_uint64_t pv_size;
grub_uint64_t config_start; grub_uint64_t config_start;
grub_uint64_t config_size; grub_uint64_t config_size;
} __attribute__ ((packed)); } GRUB_PACKED;
#define LDM_MAGIC "PRIVHEAD" #define LDM_MAGIC "PRIVHEAD"

View File

@ -32,9 +32,11 @@ struct grub_loopback
char *devname; char *devname;
grub_file_t file; grub_file_t file;
struct grub_loopback *next; struct grub_loopback *next;
unsigned long id;
}; };
static struct grub_loopback *loopback_list; static struct grub_loopback *loopback_list;
static unsigned long last_id = 0;
static const struct grub_arg_option options[] = static const struct grub_arg_option options[] =
{ {
@ -120,6 +122,7 @@ grub_cmd_loopback (grub_extcmd_context_t ctxt, int argc, char **args)
} }
newdev->file = file; newdev->file = file;
newdev->id = last_id++;
/* Add the new entry to the list. */ /* Add the new entry to the list. */
newdev->next = loopback_list; newdev->next = loopback_list;
@ -171,7 +174,7 @@ grub_loopback_open (const char *name, grub_disk_t disk)
disk->max_agglomerate = 1 << (29 - GRUB_DISK_SECTOR_BITS disk->max_agglomerate = 1 << (29 - GRUB_DISK_SECTOR_BITS
- GRUB_DISK_CACHE_BITS); - GRUB_DISK_CACHE_BITS);
disk->id = (unsigned long) dev; disk->id = dev->id;
disk->data = dev; disk->data = dev;

View File

@ -56,7 +56,7 @@ struct grub_luks_phdr
grub_uint32_t keyMaterialOffset; grub_uint32_t keyMaterialOffset;
grub_uint32_t stripes; grub_uint32_t stripes;
} keyblock[8]; } keyblock[8];
} __attribute__ ((packed)); } GRUB_PACKED;
typedef struct grub_luks_phdr *grub_luks_phdr_t; typedef struct grub_luks_phdr *grub_luks_phdr_t;

View File

@ -97,7 +97,7 @@ struct grub_raid_super_1x
*/ */
grub_uint16_t dev_roles[0]; /* Role in array, or 0xffff for a spare, or 0xfffe for faulty. */ grub_uint16_t dev_roles[0]; /* Role in array, or 0xffff for a spare, or 0xfffe for faulty. */
}; };
/* Could be __attribute__ ((packed)), but since all members in this struct /* Could be GRUB_PACKED, but since all members in this struct
are already appropriately aligned, we can omit this and avoid suboptimal are already appropriately aligned, we can omit this and avoid suboptimal
assembly in some cases. */ assembly in some cases. */

View File

@ -175,7 +175,7 @@ struct grub_raid_super_09
* Active descriptor * Active descriptor
*/ */
struct grub_raid_disk_09 this_disk; struct grub_raid_disk_09 this_disk;
} __attribute__ ((packed)); } GRUB_PACKED;
static struct grub_diskfilter_vg * static struct grub_diskfilter_vg *
grub_mdraid_detect (grub_disk_t disk, grub_mdraid_detect (grub_disk_t disk,

View File

@ -47,7 +47,7 @@ grub_memdisk_open (const char *name, grub_disk_t disk)
disk->total_sectors = memdisk_size / GRUB_DISK_SECTOR_SIZE; disk->total_sectors = memdisk_size / GRUB_DISK_SECTOR_SIZE;
disk->max_agglomerate = GRUB_DISK_MAX_MAX_AGGLOMERATE; disk->max_agglomerate = GRUB_DISK_MAX_MAX_AGGLOMERATE;
disk->id = (unsigned long) "mdsk"; disk->id = 0;
return GRUB_ERR_NONE; return GRUB_ERR_NONE;
} }

View File

@ -44,7 +44,7 @@ struct grub_usbms_cbw
grub_uint8_t lun; grub_uint8_t lun;
grub_uint8_t length; grub_uint8_t length;
grub_uint8_t cbwcb[16]; grub_uint8_t cbwcb[16];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_usbms_csw struct grub_usbms_csw
{ {
@ -52,7 +52,7 @@ struct grub_usbms_csw
grub_uint32_t tag; grub_uint32_t tag;
grub_uint32_t residue; grub_uint32_t residue;
grub_uint8_t status; grub_uint8_t status;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_usbms_dev struct grub_usbms_dev
{ {
@ -298,6 +298,8 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
grub_usb_err_t errCSW = GRUB_USB_ERR_NONE; grub_usb_err_t errCSW = GRUB_USB_ERR_NONE;
int retrycnt = 3 + 1; int retrycnt = 3 + 1;
tag++;
retry: retry:
retrycnt--; retrycnt--;
if (retrycnt == 0) if (retrycnt == 0)
@ -306,7 +308,7 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
/* Setup the request. */ /* Setup the request. */
grub_memset (&cbw, 0, sizeof (cbw)); grub_memset (&cbw, 0, sizeof (cbw));
cbw.signature = grub_cpu_to_le32 (0x43425355); cbw.signature = grub_cpu_to_le32 (0x43425355);
cbw.tag = tag++; cbw.tag = tag;
cbw.transfer_length = grub_cpu_to_le32 (size); cbw.transfer_length = grub_cpu_to_le32 (size);
cbw.flags = (!read_write) << GRUB_USBMS_DIRECTION_BIT; cbw.flags = (!read_write) << GRUB_USBMS_DIRECTION_BIT;
cbw.lun = scsi->lun; /* In USB MS CBW are LUN bits on another place than in SCSI CDB, both should be set correctly. */ cbw.lun = scsi->lun; /* In USB MS CBW are LUN bits on another place than in SCSI CDB, both should be set correctly. */
@ -335,7 +337,7 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
grub_usb_clear_halt (dev->dev, dev->out->endp_addr); grub_usb_clear_halt (dev->dev, dev->out->endp_addr);
goto CheckCSW; goto CheckCSW;
} }
return grub_error (GRUB_ERR_IO, "USB Mass Storage request failed"); goto retry;
} }
/* Read/write the data, (maybe) according to specification. */ /* Read/write the data, (maybe) according to specification. */

View File

@ -36,7 +36,7 @@ struct grub_affs_bblock
grub_uint8_t flags; grub_uint8_t flags;
grub_uint32_t checksum; grub_uint32_t checksum;
grub_uint32_t rootblock; grub_uint32_t rootblock;
} __attribute__ ((packed)); } GRUB_PACKED;
/* Set if the filesystem is a AFFS filesystem. Otherwise this is an /* Set if the filesystem is a AFFS filesystem. Otherwise this is an
OFS filesystem. */ OFS filesystem. */
@ -51,14 +51,14 @@ struct grub_affs_rblock
grub_uint32_t unused2; grub_uint32_t unused2;
grub_uint32_t checksum; grub_uint32_t checksum;
grub_uint32_t hashtable[1]; grub_uint32_t hashtable[1];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_affs_time struct grub_affs_time
{ {
grub_int32_t day; grub_int32_t day;
grub_uint32_t min; grub_uint32_t min;
grub_uint32_t hz; grub_uint32_t hz;
} __attribute__ ((packed)); } GRUB_PACKED;
/* The second part of a file header block. */ /* The second part of a file header block. */
struct grub_affs_file struct grub_affs_file
@ -76,7 +76,7 @@ struct grub_affs_file
grub_uint32_t parent; grub_uint32_t parent;
grub_uint32_t extension; grub_uint32_t extension;
grub_uint32_t type; grub_uint32_t type;
} __attribute__ ((packed)); } GRUB_PACKED;
/* The location of `struct grub_affs_file' relative to the end of a /* The location of `struct grub_affs_file' relative to the end of a
file header block. */ file header block. */

View File

@ -73,7 +73,7 @@ struct grub_bfs_extent
grub_uint32_t ag; grub_uint32_t ag;
grub_uint16_t start; grub_uint16_t start;
grub_uint16_t len; grub_uint16_t len;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_bfs_superblock struct grub_bfs_superblock
{ {
@ -89,7 +89,7 @@ struct grub_bfs_superblock
grub_uint8_t unused3[32]; grub_uint8_t unused3[32];
grub_uint32_t magic3; grub_uint32_t magic3;
struct grub_bfs_extent root_dir; struct grub_bfs_extent root_dir;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_bfs_inode struct grub_bfs_inode
{ {
@ -118,11 +118,11 @@ struct grub_bfs_inode
grub_uint64_t max_double_indirect_range; grub_uint64_t max_double_indirect_range;
grub_uint64_t size; grub_uint64_t size;
grub_uint32_t pad[4]; grub_uint32_t pad[4];
} __attribute__ ((packed)); } GRUB_PACKED;
char inplace_link[144]; char inplace_link[144];
} __attribute__ ((packed)); } GRUB_PACKED;
grub_uint8_t small_data[0]; grub_uint8_t small_data[0];
} __attribute__ ((packed)); } GRUB_PACKED;
enum enum
{ {
@ -134,7 +134,7 @@ struct grub_bfs_small_data_element_header
grub_uint32_t type; grub_uint32_t type;
grub_uint16_t name_len; grub_uint16_t name_len;
grub_uint16_t value_len; grub_uint16_t value_len;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_bfs_btree_header struct grub_bfs_btree_header
{ {
@ -151,7 +151,7 @@ struct grub_bfs_btree_header
grub_uint64_t root; grub_uint64_t root;
#endif #endif
grub_uint32_t unused2[2]; grub_uint32_t unused2[2];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_bfs_btree_node struct grub_bfs_btree_node
{ {
@ -165,7 +165,7 @@ struct grub_bfs_btree_node
grub_uint16_t count_keys; grub_uint16_t count_keys;
grub_uint16_t total_key_len; grub_uint16_t total_key_len;
#endif #endif
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_bfs_data struct grub_bfs_data
{ {

View File

@ -53,7 +53,7 @@ struct grub_btrfs_device
grub_uint64_t device_id; grub_uint64_t device_id;
grub_uint64_t size; grub_uint64_t size;
grub_uint8_t dummy[0x62 - 0x10]; grub_uint8_t dummy[0x62 - 0x10];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_superblock struct grub_btrfs_superblock
{ {
@ -71,7 +71,7 @@ struct grub_btrfs_superblock
char label[0x100]; char label[0x100];
grub_uint8_t dummy4[0x100]; grub_uint8_t dummy4[0x100];
grub_uint8_t bootstrap_mapping[0x800]; grub_uint8_t bootstrap_mapping[0x800];
} __attribute__ ((packed)); } GRUB_PACKED;
struct btrfs_header struct btrfs_header
{ {
@ -80,7 +80,7 @@ struct btrfs_header
grub_uint8_t dummy[0x30]; grub_uint8_t dummy[0x30];
grub_uint32_t nitems; grub_uint32_t nitems;
grub_uint8_t level; grub_uint8_t level;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_device_desc struct grub_btrfs_device_desc
{ {
@ -122,28 +122,28 @@ struct grub_btrfs_chunk_item
grub_uint8_t dummy2[0xc]; grub_uint8_t dummy2[0xc];
grub_uint16_t nstripes; grub_uint16_t nstripes;
grub_uint16_t nsubstripes; grub_uint16_t nsubstripes;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_chunk_stripe struct grub_btrfs_chunk_stripe
{ {
grub_uint64_t device_id; grub_uint64_t device_id;
grub_uint64_t offset; grub_uint64_t offset;
grub_btrfs_uuid_t device_uuid; grub_btrfs_uuid_t device_uuid;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_leaf_node struct grub_btrfs_leaf_node
{ {
struct grub_btrfs_key key; struct grub_btrfs_key key;
grub_uint32_t offset; grub_uint32_t offset;
grub_uint32_t size; grub_uint32_t size;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_internal_node struct grub_btrfs_internal_node
{ {
struct grub_btrfs_key key; struct grub_btrfs_key key;
grub_uint64_t addr; grub_uint64_t addr;
grub_uint64_t dummy; grub_uint64_t dummy;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_dir_item struct grub_btrfs_dir_item
{ {
@ -156,7 +156,7 @@ struct grub_btrfs_dir_item
#define GRUB_BTRFS_DIR_ITEM_TYPE_SYMLINK 7 #define GRUB_BTRFS_DIR_ITEM_TYPE_SYMLINK 7
grub_uint8_t type; grub_uint8_t type;
char name[0]; char name[0];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_leaf_descriptor struct grub_btrfs_leaf_descriptor
{ {
@ -183,7 +183,7 @@ struct grub_btrfs_inode
grub_uint64_t size; grub_uint64_t size;
grub_uint8_t dummy2[0x70]; grub_uint8_t dummy2[0x70];
struct grub_btrfs_time mtime; struct grub_btrfs_time mtime;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_extent_data struct grub_btrfs_extent_data
{ {
@ -204,7 +204,7 @@ struct grub_btrfs_extent_data
grub_uint64_t filled; grub_uint64_t filled;
}; };
}; };
} __attribute__ ((packed)); } GRUB_PACKED;
#define GRUB_BTRFS_EXTENT_INLINE 0 #define GRUB_BTRFS_EXTENT_INLINE 0
#define GRUB_BTRFS_EXTENT_REGULAR 1 #define GRUB_BTRFS_EXTENT_REGULAR 1
@ -1104,8 +1104,13 @@ grub_btrfs_extent_read (struct grub_btrfs_data *data,
- (grub_uint8_t *) data->extent), - (grub_uint8_t *) data->extent),
extoff, buf, csize) extoff, buf, csize)
!= (grub_ssize_t) csize) != (grub_ssize_t) csize)
{
if (!grub_errno)
grub_error (GRUB_ERR_BAD_COMPRESSED_DATA,
"premature end of compressed");
return -1; return -1;
} }
}
else if (data->extent->compression == GRUB_BTRFS_COMPRESSION_LZO) else if (data->extent->compression == GRUB_BTRFS_COMPRESSION_LZO)
{ {
if (grub_btrfs_lzo_decompress(data->extent->inl, data->extsize - if (grub_btrfs_lzo_decompress(data->extent->inl, data->extsize -
@ -1158,7 +1163,12 @@ grub_btrfs_extent_read (struct grub_btrfs_data *data,
grub_free (tmp); grub_free (tmp);
if (ret != (grub_ssize_t) csize) if (ret != (grub_ssize_t) csize)
{
if (!grub_errno)
grub_error (GRUB_ERR_BAD_COMPRESSED_DATA,
"premature end of compressed");
return -1; return -1;
}
break; break;
} }

View File

@ -291,7 +291,7 @@ grub_cbfsdisk_open (const char *name, grub_disk_t disk)
disk->total_sectors = cbfsdisk_size / GRUB_DISK_SECTOR_SIZE; disk->total_sectors = cbfsdisk_size / GRUB_DISK_SECTOR_SIZE;
disk->max_agglomerate = GRUB_DISK_MAX_MAX_AGGLOMERATE; disk->max_agglomerate = GRUB_DISK_MAX_MAX_AGGLOMERATE;
disk->id = (unsigned long) "cbfs"; disk->id = 0;
return GRUB_ERR_NONE; return GRUB_ERR_NONE;
} }

View File

@ -35,7 +35,7 @@ struct head
grub_uint16_t mtime[2]; grub_uint16_t mtime[2];
grub_uint16_t namesize[1]; grub_uint16_t namesize[1];
grub_uint16_t filesize[2]; grub_uint16_t filesize[2];
} __attribute__ ((packed)); } GRUB_PACKED;
static inline unsigned long long static inline unsigned long long
read_number (const grub_uint16_t *arr, grub_size_t size) read_number (const grub_uint16_t *arr, grub_size_t size)

View File

@ -35,7 +35,7 @@ struct head
grub_uint16_t mtime[2]; grub_uint16_t mtime[2];
grub_uint16_t namesize[1]; grub_uint16_t namesize[1];
grub_uint16_t filesize[2]; grub_uint16_t filesize[2];
} __attribute__ ((packed)); } GRUB_PACKED;
static inline unsigned long long static inline unsigned long long
read_number (const grub_uint16_t *arr, grub_size_t size) read_number (const grub_uint16_t *arr, grub_size_t size)

View File

@ -92,7 +92,7 @@ struct grub_fat_dir_entry
grub_uint8_t m_time_tenth; grub_uint8_t m_time_tenth;
grub_uint8_t a_time_tenth; grub_uint8_t a_time_tenth;
grub_uint8_t reserved2[9]; grub_uint8_t reserved2[9];
} __attribute__ ((packed)) file; } GRUB_PACKED file;
struct { struct {
grub_uint8_t flags; grub_uint8_t flags;
grub_uint8_t reserved1; grub_uint8_t reserved1;
@ -103,17 +103,17 @@ struct grub_fat_dir_entry
grub_uint32_t reserved3; grub_uint32_t reserved3;
grub_uint32_t first_cluster; grub_uint32_t first_cluster;
grub_uint64_t file_size; grub_uint64_t file_size;
} __attribute__ ((packed)) stream_extension; } GRUB_PACKED stream_extension;
struct { struct {
grub_uint8_t flags; grub_uint8_t flags;
grub_uint16_t str[15]; grub_uint16_t str[15];
} __attribute__ ((packed)) file_name; } GRUB_PACKED file_name;
struct { struct {
grub_uint8_t character_count; grub_uint8_t character_count;
grub_uint16_t str[15]; grub_uint16_t str[15];
} __attribute__ ((packed)) volume_label; } GRUB_PACKED volume_label;
} __attribute__ ((packed)) type_specific; } GRUB_PACKED type_specific;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_fat_dir_node struct grub_fat_dir_node
{ {
@ -142,7 +142,7 @@ struct grub_fat_dir_entry
grub_uint16_t w_date; grub_uint16_t w_date;
grub_uint16_t first_cluster_low; grub_uint16_t first_cluster_low;
grub_uint32_t file_size; grub_uint32_t file_size;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_fat_long_name_entry struct grub_fat_long_name_entry
{ {
@ -154,7 +154,7 @@ struct grub_fat_long_name_entry
grub_uint16_t name2[6]; grub_uint16_t name2[6];
grub_uint16_t first_cluster; grub_uint16_t first_cluster;
grub_uint16_t name3[2]; grub_uint16_t name3[2];
} __attribute__ ((packed)); } GRUB_PACKED;
typedef struct grub_fat_dir_entry grub_fat_dir_node_t; typedef struct grub_fat_dir_entry grub_fat_dir_node_t;

View File

@ -65,7 +65,7 @@ struct grub_hfs_node
grub_uint8_t level; grub_uint8_t level;
grub_uint16_t reccnt; grub_uint16_t reccnt;
grub_uint16_t unused; grub_uint16_t unused;
} __attribute__ ((packed)); } GRUB_PACKED;
/* The head of the B*-Tree. */ /* The head of the B*-Tree. */
struct grub_hfs_treeheader struct grub_hfs_treeheader
@ -81,7 +81,7 @@ struct grub_hfs_treeheader
grub_uint32_t nodes; grub_uint32_t nodes;
grub_uint32_t free_nodes; grub_uint32_t free_nodes;
grub_uint8_t unused[76]; grub_uint8_t unused[76];
} __attribute__ ((packed)); } GRUB_PACKED;
/* The state of a mounted HFS filesystem. */ /* The state of a mounted HFS filesystem. */
struct grub_hfs_data struct grub_hfs_data
@ -112,7 +112,7 @@ struct grub_hfs_catalog_key
/* Filename. */ /* Filename. */
grub_uint8_t str[31]; grub_uint8_t str[31];
} __attribute__ ((packed)); } GRUB_PACKED;
/* The key as used on disk in a extent overflow tree. Using this key /* The key as used on disk in a extent overflow tree. Using this key
the extents can be looked up using a fileid and logical start block the extents can be looked up using a fileid and logical start block
@ -125,7 +125,7 @@ struct grub_hfs_extent_key
grub_uint8_t forktype; grub_uint8_t forktype;
grub_uint32_t fileid; grub_uint32_t fileid;
grub_uint16_t first_block; grub_uint16_t first_block;
} __attribute__ ((packed)); } GRUB_PACKED;
/* A directory record. This is used to find out the directory ID. */ /* A directory record. This is used to find out the directory ID. */
struct grub_hfs_dirrec struct grub_hfs_dirrec
@ -136,7 +136,7 @@ struct grub_hfs_dirrec
grub_uint32_t dirid; grub_uint32_t dirid;
grub_uint32_t ctime; grub_uint32_t ctime;
grub_uint32_t mtime; grub_uint32_t mtime;
} __attribute__ ((packed)); } GRUB_PACKED;
/* Information about a file. */ /* Information about a file. */
struct grub_hfs_filerec struct grub_hfs_filerec
@ -154,7 +154,7 @@ struct grub_hfs_filerec
/* The first 3 extents of the file. The other extents can be found /* The first 3 extents of the file. The other extents can be found
in the extent overflow file. */ in the extent overflow file. */
grub_hfs_datarecord_t extents; grub_hfs_datarecord_t extents;
} __attribute__ ((packed)); } GRUB_PACKED;
/* A record descriptor, both key and data, used to pass to call back /* A record descriptor, both key and data, used to pass to call back
functions. */ functions. */
@ -712,7 +712,7 @@ grub_hfs_iterate_records (struct grub_hfs_data *data, int type, int idx,
{ {
grub_uint8_t keylen; grub_uint8_t keylen;
grub_uint8_t key; grub_uint8_t key;
} __attribute__ ((packed)) *pnt; } GRUB_PACKED *pnt;
pnt = (struct pointer *) (grub_be_to_cpu16 (node->offsets[pos]) pnt = (struct pointer *) (grub_be_to_cpu16 (node->offsets[pos])
+ node->rawnode); + node->rawnode);
@ -1229,14 +1229,18 @@ grub_hfs_dir_hook (struct grub_hfs_record *rec, void *hook_arg)
{ {
info.dir = 1; info.dir = 1;
info.mtimeset = 1; info.mtimeset = 1;
info.inodeset = 1;
info.mtime = grub_be_to_cpu32 (drec->mtime) - 2082844800; info.mtime = grub_be_to_cpu32 (drec->mtime) - 2082844800;
info.inode = grub_be_to_cpu32 (drec->dirid);
return ctx->hook (fname, &info, ctx->hook_data); return ctx->hook (fname, &info, ctx->hook_data);
} }
if (frec->type == GRUB_HFS_FILETYPE_FILE) if (frec->type == GRUB_HFS_FILETYPE_FILE)
{ {
info.dir = 0; info.dir = 0;
info.mtimeset = 1; info.mtimeset = 1;
info.inodeset = 1;
info.mtime = grub_be_to_cpu32 (frec->mtime) - 2082844800; info.mtime = grub_be_to_cpu32 (frec->mtime) - 2082844800;
info.inode = grub_be_to_cpu32 (frec->fileid);
return ctx->hook (fname, &info, ctx->hook_data); return ctx->hook (fname, &info, ctx->hook_data);
} }

View File

@ -34,11 +34,6 @@
GRUB_MOD_LICENSE ("GPLv3+"); GRUB_MOD_LICENSE ("GPLv3+");
#define GRUB_HFSPLUS_MAGIC 0x482B
#define GRUB_HFSPLUSX_MAGIC 0x4858
#define GRUB_HFSPLUS_SBLOCK 2
/* The type of node. */ /* The type of node. */
enum grub_hfsplus_btnode_type enum grub_hfsplus_btnode_type
{ {
@ -65,7 +60,7 @@ struct grub_hfsplus_btheader
grub_uint8_t btree_type; grub_uint8_t btree_type;
grub_uint8_t key_compare; grub_uint8_t key_compare;
grub_uint32_t attributes; grub_uint32_t attributes;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_hfsplus_catfile struct grub_hfsplus_catfile
{ {
@ -80,7 +75,7 @@ struct grub_hfsplus_catfile
grub_uint8_t unused3[44]; grub_uint8_t unused3[44];
struct grub_hfsplus_forkdata data; struct grub_hfsplus_forkdata data;
struct grub_hfsplus_forkdata resource; struct grub_hfsplus_forkdata resource;
} __attribute__ ((packed)); } GRUB_PACKED;
/* Filetype information as used in inodes. */ /* Filetype information as used in inodes. */
#define GRUB_HFSPLUS_FILEMODE_MASK 0170000 #define GRUB_HFSPLUS_FILEMODE_MASK 0170000
@ -919,6 +914,8 @@ grub_hfsplus_dir_iter (const char *filename,
info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR); info.dir = ((filetype & GRUB_FSHELP_TYPE_MASK) == GRUB_FSHELP_DIR);
info.mtimeset = 1; info.mtimeset = 1;
info.mtime = node->mtime; info.mtime = node->mtime;
info.inodeset = 1;
info.inode = node->fileid;
info.case_insensitive = !! (filetype & GRUB_FSHELP_CASE_INSENSITIVE); info.case_insensitive = !! (filetype & GRUB_FSHELP_CASE_INSENSITIVE);
grub_free (node); grub_free (node);
return ctx->hook (filename, &info, ctx->hook_data); return ctx->hook (filename, &info, ctx->hook_data);

View File

@ -35,19 +35,19 @@ struct grub_hfsplus_compress_header1
grub_uint32_t total_compressed_size_including_seek_blocks_and_header2; grub_uint32_t total_compressed_size_including_seek_blocks_and_header2;
grub_uint32_t value_0x32; grub_uint32_t value_0x32;
grub_uint8_t unused[0xf0]; grub_uint8_t unused[0xf0];
} __attribute__ ((packed)); } GRUB_PACKED;
/* big-endian. */ /* big-endian. */
struct grub_hfsplus_compress_header2 struct grub_hfsplus_compress_header2
{ {
grub_uint32_t total_compressed_size_including_seek_blocks; grub_uint32_t total_compressed_size_including_seek_blocks;
} __attribute__ ((packed)); } GRUB_PACKED;
/* little-endian. */ /* little-endian. */
struct grub_hfsplus_compress_header3 struct grub_hfsplus_compress_header3
{ {
grub_uint32_t num_chunks; grub_uint32_t num_chunks;
} __attribute__ ((packed)); } GRUB_PACKED;
/* little-endian. */ /* little-endian. */
struct grub_hfsplus_compress_block_descriptor struct grub_hfsplus_compress_block_descriptor
@ -59,7 +59,7 @@ struct grub_hfsplus_compress_block_descriptor
struct grub_hfsplus_compress_end_descriptor struct grub_hfsplus_compress_end_descriptor
{ {
grub_uint8_t always_the_same[50]; grub_uint8_t always_the_same[50];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_hfsplus_attr_header struct grub_hfsplus_attr_header
{ {
@ -67,7 +67,7 @@ struct grub_hfsplus_attr_header
grub_uint8_t type; grub_uint8_t type;
grub_uint32_t unknown[1]; grub_uint32_t unknown[1];
grub_uint64_t size; grub_uint64_t size;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_hfsplus_compress_attr struct grub_hfsplus_compress_attr
{ {
@ -75,7 +75,7 @@ struct grub_hfsplus_compress_attr
grub_uint32_t type; grub_uint32_t type;
grub_uint32_t uncompressed_inline_size; grub_uint32_t uncompressed_inline_size;
grub_uint32_t always_0; grub_uint32_t always_0;
} __attribute__ ((packed)); } GRUB_PACKED;
enum enum
{ {
@ -156,8 +156,12 @@ hfsplus_read_compressed_real (struct grub_hfsplus_file *node,
if (ts > node->size - (pos & ~(HFSPLUS_COMPRESS_BLOCK_SIZE))) if (ts > node->size - (pos & ~(HFSPLUS_COMPRESS_BLOCK_SIZE)))
ts = node->size - (pos & ~(HFSPLUS_COMPRESS_BLOCK_SIZE)); ts = node->size - (pos & ~(HFSPLUS_COMPRESS_BLOCK_SIZE));
if (grub_zlib_decompress (tmp_buf, sz, 0, if (grub_zlib_decompress (tmp_buf, sz, 0,
node->cbuf, ts) < 0) node->cbuf, ts) != (grub_ssize_t) ts)
{ {
if (!grub_errno)
grub_error (GRUB_ERR_BAD_COMPRESSED_DATA,
"premature end of compressed");
grub_free (tmp_buf); grub_free (tmp_buf);
return -1; return -1;
} }
@ -288,8 +292,14 @@ hfsplus_open_compressed_real (struct grub_hfsplus_file *node)
if (grub_zlib_decompress ((char *) (cmp_head + 1), if (grub_zlib_decompress ((char *) (cmp_head + 1),
grub_cpu_to_be64 (attr_head->size) grub_cpu_to_be64 (attr_head->size)
- sizeof (*cmp_head), 0, - sizeof (*cmp_head), 0,
node->cbuf, node->size) < 0) node->cbuf, node->size)
!= (grub_ssize_t) node->size)
{
if (!grub_errno)
grub_error (GRUB_ERR_BAD_COMPRESSED_DATA,
"premature end of compressed");
return grub_errno; return grub_errno;
}
node->compressed = 1; node->compressed = 1;
return 0; return 0;
} }

View File

@ -54,7 +54,7 @@ struct grub_iso9660_voldesc
grub_uint8_t type; grub_uint8_t type;
grub_uint8_t magic[5]; grub_uint8_t magic[5];
grub_uint8_t version; grub_uint8_t version;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_iso9660_date2 struct grub_iso9660_date2
{ {
@ -65,7 +65,7 @@ struct grub_iso9660_date2
grub_uint8_t minute; grub_uint8_t minute;
grub_uint8_t second; grub_uint8_t second;
grub_uint8_t offset; grub_uint8_t offset;
} __attribute__ ((packed)); } GRUB_PACKED;
/* A directory entry. */ /* A directory entry. */
struct grub_iso9660_dir struct grub_iso9660_dir
@ -81,7 +81,7 @@ struct grub_iso9660_dir
grub_uint8_t unused2[6]; grub_uint8_t unused2[6];
#define MAX_NAMELEN 255 #define MAX_NAMELEN 255
grub_uint8_t namelen; grub_uint8_t namelen;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_iso9660_date struct grub_iso9660_date
{ {
@ -93,7 +93,7 @@ struct grub_iso9660_date
grub_uint8_t second[2]; grub_uint8_t second[2];
grub_uint8_t hundredth[2]; grub_uint8_t hundredth[2];
grub_uint8_t offset; grub_uint8_t offset;
} __attribute__ ((packed)); } GRUB_PACKED;
/* The primary volume descriptor. Only little endian is used. */ /* The primary volume descriptor. Only little endian is used. */
struct grub_iso9660_primary_voldesc struct grub_iso9660_primary_voldesc
@ -112,7 +112,7 @@ struct grub_iso9660_primary_voldesc
grub_uint8_t unused6[624]; grub_uint8_t unused6[624];
struct grub_iso9660_date created; struct grub_iso9660_date created;
struct grub_iso9660_date modified; struct grub_iso9660_date modified;
} __attribute__ ((packed)); } GRUB_PACKED;
/* A single entry in the path table. */ /* A single entry in the path table. */
struct grub_iso9660_path struct grub_iso9660_path
@ -122,7 +122,7 @@ struct grub_iso9660_path
grub_uint32_t first_sector; grub_uint32_t first_sector;
grub_uint16_t parentdir; grub_uint16_t parentdir;
grub_uint8_t name[0]; grub_uint8_t name[0];
} __attribute__ ((packed)); } GRUB_PACKED;
/* An entry in the System Usage area of the directory entry. */ /* An entry in the System Usage area of the directory entry. */
struct grub_iso9660_susp_entry struct grub_iso9660_susp_entry
@ -131,7 +131,7 @@ struct grub_iso9660_susp_entry
grub_uint8_t len; grub_uint8_t len;
grub_uint8_t version; grub_uint8_t version;
grub_uint8_t data[0]; grub_uint8_t data[0];
} __attribute__ ((packed)); } GRUB_PACKED;
/* The CE entry. This is used to describe the next block where data /* The CE entry. This is used to describe the next block where data
can be found. */ can be found. */
@ -144,7 +144,7 @@ struct grub_iso9660_susp_ce
grub_uint32_t off_be; grub_uint32_t off_be;
grub_uint32_t len; grub_uint32_t len;
grub_uint32_t len_be; grub_uint32_t len_be;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_iso9660_data struct grub_iso9660_data
{ {

View File

@ -70,7 +70,7 @@ struct grub_jfs_extent
/* The physical offset of the first block on the disk. */ /* The physical offset of the first block on the disk. */
grub_uint8_t blk1; grub_uint8_t blk1;
grub_uint32_t blk2; grub_uint32_t blk2;
} __attribute__ ((packed)); } GRUB_PACKED;
#define GRUB_JFS_IAG_INODES_OFFSET 3072 #define GRUB_JFS_IAG_INODES_OFFSET 3072
#define GRUB_JFS_IAG_INODES_COUNT 128 #define GRUB_JFS_IAG_INODES_COUNT 128
@ -79,7 +79,7 @@ struct grub_jfs_iag
{ {
grub_uint8_t unused[GRUB_JFS_IAG_INODES_OFFSET]; grub_uint8_t unused[GRUB_JFS_IAG_INODES_OFFSET];
struct grub_jfs_extent inodes[GRUB_JFS_IAG_INODES_COUNT]; struct grub_jfs_extent inodes[GRUB_JFS_IAG_INODES_COUNT];
} __attribute__ ((packed)); } GRUB_PACKED;
/* The head of the tree used to find extents. */ /* The head of the tree used to find extents. */
@ -94,7 +94,7 @@ struct grub_jfs_treehead
grub_uint16_t count; grub_uint16_t count;
grub_uint16_t max; grub_uint16_t max;
grub_uint8_t unused2[10]; grub_uint8_t unused2[10];
} __attribute__ ((packed)); } GRUB_PACKED;
/* A node in the extent tree. */ /* A node in the extent tree. */
struct grub_jfs_tree_extent struct grub_jfs_tree_extent
@ -107,7 +107,7 @@ struct grub_jfs_tree_extent
grub_uint32_t offset2; grub_uint32_t offset2;
struct grub_jfs_extent extent; struct grub_jfs_extent extent;
} __attribute__ ((packed)); } GRUB_PACKED;
/* The tree of directory entries. */ /* The tree of directory entries. */
struct grub_jfs_tree_dir struct grub_jfs_tree_dir
@ -128,7 +128,7 @@ struct grub_jfs_tree_dir
/* The location of the sorted array of pointers to dirents. */ /* The location of the sorted array of pointers to dirents. */
grub_uint8_t sindex; grub_uint8_t sindex;
grub_uint8_t unused[10]; grub_uint8_t unused[10];
} __attribute__ ((packed)); } GRUB_PACKED;
/* An internal node in the dirents tree. */ /* An internal node in the dirents tree. */
struct grub_jfs_internal_dirent struct grub_jfs_internal_dirent
@ -137,7 +137,7 @@ struct grub_jfs_internal_dirent
grub_uint8_t next; grub_uint8_t next;
grub_uint8_t len; grub_uint8_t len;
grub_uint16_t namepart[11]; grub_uint16_t namepart[11];
} __attribute__ ((packed)); } GRUB_PACKED;
/* A leaf node in the dirents tree. */ /* A leaf node in the dirents tree. */
struct grub_jfs_leaf_dirent struct grub_jfs_leaf_dirent
@ -150,7 +150,7 @@ struct grub_jfs_leaf_dirent
grub_uint8_t len; grub_uint8_t len;
grub_uint16_t namepart[11]; grub_uint16_t namepart[11];
grub_uint32_t index; grub_uint32_t index;
} __attribute__ ((packed)); } GRUB_PACKED;
/* A leaf in the dirents tree. This one is used if the previously /* A leaf in the dirents tree. This one is used if the previously
dirent was not big enough to store the name. */ dirent was not big enough to store the name. */
@ -159,13 +159,13 @@ struct grub_jfs_leaf_next_dirent
grub_uint8_t next; grub_uint8_t next;
grub_uint8_t len; grub_uint8_t len;
grub_uint16_t namepart[15]; grub_uint16_t namepart[15];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_jfs_time struct grub_jfs_time
{ {
grub_int32_t sec; grub_int32_t sec;
grub_int32_t nanosec; grub_int32_t nanosec;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_jfs_inode struct grub_jfs_inode
{ {
@ -185,7 +185,7 @@ struct grub_jfs_inode
union union
{ {
/* The tree describing the extents of the file. */ /* The tree describing the extents of the file. */
struct __attribute__ ((packed)) struct GRUB_PACKED
{ {
struct grub_jfs_treehead tree; struct grub_jfs_treehead tree;
struct grub_jfs_tree_extent extents[16]; struct grub_jfs_tree_extent extents[16];
@ -206,15 +206,15 @@ struct grub_jfs_inode
grub_uint8_t sorted[8]; grub_uint8_t sorted[8];
} header; } header;
struct grub_jfs_leaf_dirent dirents[8]; struct grub_jfs_leaf_dirent dirents[8];
} dir __attribute__ ((packed)); } GRUB_PACKED dir;
/* Fast symlink. */ /* Fast symlink. */
struct struct
{ {
grub_uint8_t unused[32]; grub_uint8_t unused[32];
grub_uint8_t path[256]; grub_uint8_t path[256];
} symlink; } symlink;
} __attribute__ ((packed)); } GRUB_PACKED;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_jfs_data struct grub_jfs_data
{ {
@ -226,7 +226,7 @@ struct grub_jfs_data
int pos; int pos;
int linknest; int linknest;
int namecomponentlen; int namecomponentlen;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_jfs_diropen struct grub_jfs_diropen
{ {
@ -237,7 +237,7 @@ struct grub_jfs_diropen
struct grub_jfs_leaf_dirent dirent[0]; struct grub_jfs_leaf_dirent dirent[0];
struct grub_jfs_leaf_next_dirent next_dirent[0]; struct grub_jfs_leaf_next_dirent next_dirent[0];
grub_uint8_t sorted[0]; grub_uint8_t sorted[0];
} *dirpage __attribute__ ((packed)); } GRUB_PACKED *dirpage;
struct grub_jfs_data *data; struct grub_jfs_data *data;
struct grub_jfs_inode *inode; struct grub_jfs_inode *inode;
int count; int count;
@ -251,7 +251,7 @@ struct grub_jfs_diropen
*/ */
char name[256 * GRUB_MAX_UTF8_PER_UTF16 + 1]; char name[256 * GRUB_MAX_UTF8_PER_UTF16 + 1];
grub_uint32_t ino; grub_uint32_t ino;
} __attribute__ ((packed)); } GRUB_PACKED;
static grub_dl_t my_mod; static grub_dl_t my_mod;

View File

@ -38,7 +38,7 @@ struct head
char rdevminor[8]; char rdevminor[8];
char namesize[8]; char namesize[8];
char check[8]; char check[8];
} __attribute__ ((packed)); } GRUB_PACKED;
static inline unsigned long long static inline unsigned long long
read_number (const char *str, grub_size_t size) read_number (const char *str, grub_size_t size)

View File

@ -143,7 +143,7 @@ struct grub_nilfs2_dir_entry
char name[NILFS_NAME_LEN]; char name[NILFS_NAME_LEN];
char pad; char pad;
#endif #endif
} __attribute__ ((packed)); } GRUB_PACKED;
enum enum
{ {

Some files were not shown because too many files have changed in this diff Show More