Compare commits

...
Author SHA1 Message Date
Paulo Flabiano Smorigo b14d85db89 Suport for bi-endianess in elf file
* grub-core/kern/elf.c: check and switch endianess with grub_{be,le}_to
cpu functions.
* grub-core/kern/elfXX.c: Likewise.

Also-by: Tomohiro B Berry <tbberry@us.ibm.com>
2015-01-23 08:03:30 -02:00
Paulo Flabiano Smorigo 21143c3fde Skip libgcc dependency for powerpc
* configure.ac: Add conditions to avoid libgcc dependency.
* Makefile.am: Likewise.
* Makefile.core.def: Include compiler-rt.S and compiler-rt.c.
* compiler-rt.c: New file.
* compiler-rt.S: Likewise.
* compiler-rt.h: Likewise.

Also-By: Brent Baude <bbaude@redhat.com>
Also-By: Vladimir 'phcoder' Serbinenko <phcoder@gmail.com>
2015-01-23 08:01:48 -02:00
Paulo Flabiano Smorigo 872dec5684 Add powerpc little-endian (ppc64le) flags
libgcc dependency was removed *just* for this target because
the distros that use ppc64el doesn't have 32-bit support on it.

* configure.ac: Add targets for powerpc64el and skip libgcc.
* Makefile.am: Likewise.
2015-01-23 08:00:13 -02:00
Felix Janda 3bac4caa2b Remove direct _llseek code and require long filesystem libc. 2015-01-22 19:54:36 +01:00
Vladimir Serbinenko 6866f2ba37 Remove potential division by 0 in gfxmenu. 2015-01-21 17:42:15 +01:00
Vladimir Serbinenko 44b38e4988 grub_menu_init_page: Avoid returning 0 geometry to avoid divisions by 0. 2015-01-21 17:42:15 +01:00
Vladimir Serbinenko 68581b009f unix/cputime.c: Cache sc_clk_tck and check it for sanity. 2015-01-21 17:42:15 +01:00
Vladimir Serbinenko 69aee43fa6 * grub-core/kern/efi/mm.c (grub_efi_get_memory_map): Never return a
descriptor_size==0 to avoid potential divisions by zero.
2015-01-21 17:42:15 +01:00
Vladimir Serbinenko ac8bac2496 haiku/getroot.c (grub_util_find_partition_start_os): Avoid division by zero. 2015-01-21 17:42:15 +01:00
Vladimir Serbinenko 4e0a25a4c0 rtc_get_time_ms.c (grub_rtc_get_time_ms): Avoid division by zero. 2015-01-21 17:42:14 +01:00
Vladimir Serbinenko b666e01b9c * grub-core/loader/i386/xnu.c (guessfsb): Avoid division by 0. 2015-01-21 17:42:14 +01:00
Vladimir Serbinenko 2e62352bc2 * grub-core/kern/i386/tsc.c (calibrate_tsc): Ensure that
no division by 0 occurs.
2015-01-21 17:42:14 +01:00
Vladimir Serbinenko e360b5d176 * include/grub/misc.h (grub_div_roundup): Remove as it's unused. 2015-01-21 17:42:14 +01:00
Vladimir Serbinenko c453760c71 * grub-core/term/gfxterm.c: Avoid division by zero. 2015-01-21 17:42:13 +01:00
Vladimir Serbinenko e95685dab1 Avoid division by zero in serial. 2015-01-21 17:42:13 +01:00
Vladimir Serbinenko 4816dcac19 * grub-core/video/readers/jpeg.c: Avoid division by zero. 2015-01-21 17:42:13 +01:00
Vladimir Serbinenko 750f4bacd3 * grub-core/disk/diskfilter.c: Validate volumes to avoid division by zero. 2015-01-21 17:42:13 +01:00
Vladimir Serbinenko 1b6aaddc45 term.h: Avoid returining 0-sized terminal as it may lead to division by zero. 2015-01-21 17:42:13 +01:00
Vladimir Serbinenko 475bffeae6 * grub-core/fs/zfs.c: Avoid divisions by zero. 2015-01-21 17:42:12 +01:00
Vladimir Serbinenko 9deb46e363 * grub-core/fs/btrfs.c: Avoid divisions by zero. 2015-01-21 17:42:12 +01:00
Vladimir Serbinenko 065ed900d4 grub-core/lib/pbkdf2.c (grub_crypto_pbkdf2): Check that hash len is not 0. 2015-01-21 17:42:12 +01:00
Vladimir Serbinenko 111ab3b9cc osdep/linux/blocklist.c (grub_install_get_blocklist): Check blocksize validity. 2015-01-21 17:42:12 +01:00
Vladimir Serbinenko 4200ad44fe * grub-core/disk/i386/pc/biosdisk.c: Check disk size sanity. 2015-01-21 17:42:12 +01:00
Vladimir Serbinenko f1959b1695 * grub-core/disk/ieee1275/nand.c (grub_nand_open): Check block size
validity.
2015-01-21 17:42:11 +01:00
Vladimir Serbinenko 935863518f grub_dmraid_nv_detect: Do not divide by zero. 2015-01-21 17:42:11 +01:00
Vladimir Serbinenko 98f74998d5 * grub-core/fs/hfs.c (grub_hfs_mount): Additional filesystem sanity checks. 2015-01-21 17:42:11 +01:00
Vladimir Serbinenko 5ed3a5d049 * grub-core/fs/minix.c: Additional filesystem sanity checks. 2015-01-21 17:42:11 +01:00
Vladimir Serbinenko 47cd2645dd * grub-core/fs/ext2.c (grub_ext2_mount): Additional checks for superblock validity. 2015-01-21 17:42:11 +01:00
Vladimir Serbinenko 245e21b2b5 grub_ufs_mount: Check that sblock.ino_per_group is not 0. 2015-01-21 17:42:11 +01:00
Vladimir Serbinenko 9201cd79a3 Reject NILFS2 superblocks with over 1GiB blocks.
* grub-core/fs/nilfs2.c (grub_nilfs2_valid_sb): Check that
	block size is <= 1GiB.
2015-01-21 17:42:10 +01:00
Vladimir Serbinenko f27ccb584c grub_ata_setaddress: Check that geometry is sane when using CHS addressing. 2015-01-21 17:42:10 +01:00
Vladimir Serbinenko 1dfe3f973e * grub-core/disk/AFSplitter.c (AF_merge): Check that mdlen is not 0. 2015-01-21 17:42:10 +01:00
Vladimir Serbinenko 44461d5af2 grub_cmd_play: Avoid division by zero. 2015-01-21 17:42:10 +01:00
Vladimir Serbinenko 30e177a05b grub-core/fs/minix.c (grub_minix_read_file): Avoid reading past the end of file. 2015-01-21 17:42:06 +01:00
Vladimir Serbinenko af435524cd grub_fshelp_read_file: Don't attempt to read past the end of file. 2015-01-21 17:38:04 +01:00
Vladimir Serbinenko 66ce4d1aef grub_script_lexer_yywrap: Update len synchronously with line. 2015-01-21 17:38:01 +01:00
Vladimir Serbinenko 59d4036594 Replace explicit sizeof divisions by ARRAY_SIZE. 2015-01-21 17:37:31 +01:00
Kris Moore ba3031f996 Support GELI v6 and v7 2015-01-19 21:56:41 +03:00
Andrei Borzenkov bac5d1a64a Fix serial --rtscts option processing 2014-12-09 21:56:39 +03:00
David Kozub 17328db3b3 grub-core/kern/arm/misc.S: fix unaligned grub_uint64_t local variable
The unaligned local in __aeabi_uidivmod leads to a store to a 64bit
value at an address that is not divisible by 8 (in grub_divmod64).
The compiler most likely generates a STRD instruction to store it and
this causes an exception.

Fixes Savannah bug #43632.

This includes improvements done by Leif Lindholm.
2014-12-07 20:16:29 +03:00
Peter Nelson 58f66137a3 * grub-core/fs/ext2.c (grub_ext2_read_block): Support large sparse chunks. 2014-12-07 17:57:49 +01:00
Andrei Borzenkov cdae5bf208 Avoid use of non-portable echo -n in grub-mkconfig
util/grub-mkconfig_lib.in(version_test_gt): "echo -n" is not really needed,
final newline is stripped by command substitution.

util/grub.d/10_kfreebsd.in, util/grub.d/10_linux.in,
util/grub.d/20_linux_xen.in: change how list is built, to avoid echo -n
completely.

util/grub.d/30_os-prober.in: add spaces to printed line directly

Closes 43668.
2014-12-07 14:56:17 +03:00
Curtis Larsen 06eadf5ebf fix double free in grub_net_recv_tcp_packet
Using the http module to download config files, produces memory errors,
after the config file is downloaded.

The error was traced to the tcp stack in grub-core/net/tcp.c. The wrong
netbuff pointer was being freed in the clean up loop.

Changing the code to free the correct netbuff pointer removes the runtime
error.

Closes 42765.
2014-12-07 11:28:57 +03:00
Andrei Borzenkov ebb3d958aa fix memory corruption in pubkey filter over network
grub_pubkey_open closed original file after it was read; it set
io->device to NULL to prevent grub_file_close from trying to close device.
But network device itself is stacked (net -> bufio); and bufio preserved
original netfs file which hold reference to device. grub_file_close(io)
called grub_bufio_close which called grub_file_close for original file.
grub_file_close(netfs-file) now also called grub_device_close which
freed file->device->net. So file structure returned by grub_pubkey_open
now had device->net pointed to freed memory. When later file was closed,
it was attempted to be freed again.

Change grub_pubkey_open to behave like other filters - preserve original
parent file and pass grub_file_close down to parent. In this way only the
original file will close device. We really need to move this logic into
core instead.

Also plug memory leaks in error paths on the way.

Reported-By: Robert Kliewer <robert.kliewer@gmail.com>
Closes: bug #43601
2014-12-05 21:17:08 +03:00
Andrei Borzenkov 272e0466da add file filters tests
Tests file access with all filters enabled. It does it both for local
and network access, due to regression in signature checking over network.

This includes all files in distribution to not depend on existence
of compression tools and gpg. Test preloads all required modules to
avoid having to provide signatures for them.

Still not implemented is file offset filter (is not available in grub
script, needs extra module)
2014-12-05 21:04:06 +03:00
Andrei Borzenkov 4b94e3227b grub-shell: support --files also for net boot
This allows running tests that require extra files using netboot as well.
2014-12-05 19:55:59 +03:00
Andrei Borzenkov 3173c7501c grub-core/loader/i386/xen_fileXX.c: memory leak in grub_xen_get_infoXX
CID: 73645, 73782
2014-12-01 21:23:54 +03:00
Andrei Borzenkov 03d79a878b grub-core/fs/zfs/zfsinfo.c: memory leak in print_vdev_info
CID: 73635
2014-12-01 20:54:12 +03:00
Andrei Borzenkov dbbac5a04c grub-core/lib/syslinux_parse.c: do not free array
say->msg is inline array in a structure and should not be freed.
CID: 73610
2014-11-30 18:49:14 +03:00
Andrei Borzenkov 343dad410e grub-core/disk/lzopio.c: fix double free in error path
CID: 73665
2014-11-28 22:37:00 +03:00
Andrei Borzenkov f07784e890 Fix ChangeLog 2014-11-28 22:35:01 +03:00
Andrei Borzenkov bbbcb791ed grub-core/disk/geli.c: fix memory leaks in error paths
CID: 73813, 73710
2014-11-28 22:23:30 +03:00
Andrei Borzenkov 740c08ed2f Use ssize_t for grub_util_fd_read result
Fixes commit 0415dbe28f.
2014-11-28 21:43:07 +03:00
Andrei Borzenkov ea44693fc8 grub-core/disk/luks.c: fix use after free and memory leaks
configure_ciphers:

- several memory leaks where allocated ciphers were not freed. CID: 73813,
73710

- use after free. It is probably quite innocent as grub is single threaded,
but could potentially be a problem with memory allocator debugger turned on.
CID: 73730

luks_recover_key:

- memory leak. CID: 73854
2014-11-28 21:12:00 +03:00
Andrei Borzenkov 0415dbe28f grub-install-common: avoid out of bound access when read failed
Check that modinfo.sh could be read successfully; abort on error. Avoids
potential out-of-bound array access.

CID: 73819
2014-11-28 20:45:27 +03:00
Andrei Borzenkov 478b567520 grub-mkstandalone: out of bound access to tar header magic
Magic size is 6 bytes and we copied 7 bytes in it.

CID: 73587, 73888
Closes bug 43690
2014-11-28 20:39:22 +03:00
Michael Chang 7c4b6b7bb4 send router solicitation for ipv6 address autoconf v2
Many routers have long router advertisment interval configured by
default. The Neighbor Discovery protocol (RFC4861) has defined default
MaxRtrAdvInterval value as 600 seconds and
MinRtrAdvInterval as 0.33*MaxRtrAdvInterval. This makes
net_ipv6_autoconf fails more often than not as currently it passively
listens the RA message to perfom address autoconfiguration.

This patch tries to send router solicitation to overcome the problem of
long RA interval.

v2:
use cpu_to_be macro for network byte order conversion
add missing error handling
2014-11-28 20:21:34 +03:00
Andrei Borzenkov e2dd6daa8c grub-fs-tester: consistently print output of grub ls if test fails 2014-11-20 20:56:51 +03:00
Andrei Borzenkov 2ccaa3b9fd Fix date in last ChangeLog entry 2014-11-20 20:54:49 +03:00
Leif Lindholm 004a2b1efd efi: check *path non-null before grub_strrchr
The EFI version of grub_machine_get_bootlocation crops the boot image
name back to the last / in order to get a directory path. However, it
does not check that *name is actually set before calling grub_strrchr
to do this, and neither does grub_strrchr before dereferencing a NULL
pointer.

Parent function, grub_set_prefix_and_root, does check the pointer
before using.
2014-11-17 14:11:01 +00:00
Michael Chang 72ec399ad8 icmp6 fix no respond to neighbor solicit message
The structure size used in grub_netbuff_pull to get the pointer to
option header is apparently wrong, which leads to subsequent range check
failed and therefore not responding to any neighbor solicit message in my
testing.
2014-11-03 20:03:04 +03:00
Andrei Borzenkov 9a67e1ac8e Use full initializer for initrd_ctx to avoid fatal warnings with older GCC
struct ... foo = { 0, } is valid initializer, but older GCC emits
warning which is fatal error due to -Werror=missing-field-initializer.
So simply use full initializer to avoid these errors. This was fixed
probably in GCC 4.7.

See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=36750
2014-10-14 20:12:15 +04:00
Colin Watson 77063f4cb6 Fix in-tree --platform=none
* configure.ac: Only remove include/grub/cpu and
include/grub/machine in the --platform=none case, not all of
include/grub.
2014-09-25 20:59:26 +01:00
Colin Watson 5d90f6e533 Add a new "none" platform that only builds utilities
This makes it possible to build generally-useful utilities such as
grub-mount even if the rest of GRUB has not been ported to the target
CPU.

* configure.ac: Add "none" platform.  Default to it for unsupported
CPUs rather than stopping with a fatal error.  Don't downgrade
x86_64-none to i386.  Define COND_real_platform Automake conditional
if the platform is anything other than "none".  Don't do any include
directory linking for "none".
* Makefile.am: Skip building grub-core and all bootcheck targets if
!COND_real_platform.
* include/grub/time.h: Don't include <grub/cpu/time.h> if GRUB_UTIL
is defined.
2014-09-23 12:06:30 +01:00
Andrey Borzenkov 954fe77163 cleanup: grub_cpu_to_XXX_compile_time for constants
This tries to catch all cases where grub_cpu_to_XXX was used for constant
expressions (including sizeof).
2014-09-22 20:47:10 +04:00
Vladimir Serbinenko 6d05b6383c Revert " Use -Wl,--no-relax rather than -mno-relax for uniformity."
This reverts commit 063f2a04d1.
2014-09-21 19:02:11 +02:00
Valentin Dornauer 0f1f95c7b7 ACPIhalt: Add more ACPI opcodes.
The AML parser implements only a small subset of possible AML
	opcodes. On the Fujitsu Lifebook E744 this and another bug in
	the parser (incorrect handling of TermArg data types) would lead
	to the laptop not turning off (_S5 not found).

	* grub-core/commands/acpihalt.c: Support OpAlias in the AML parser;
	in skip_ext_op(), handle some Type2Opcodes more correctly (TermArgs
	aren't always simply strings!); Add function to skip TermArgs
	* include/grub/acpi.h: Add new opcodes
2014-09-21 18:58:14 +02:00
Vladimir Serbinenko 41c6f91fce * grub-core/normal/main.c: Don't drop to rescue console in
case of password-protected prompt and no menu entries.
2014-09-21 18:51:09 +02:00
Vladimir Serbinenko 7c378c3964 * grub-core/commands/keylayouts.c: Ignore unknown keys. 2014-09-21 18:49:49 +02:00
Vladimir Serbinenko 2988a849fc * grub-core/gmodule.pl.in: Accept newer binutils which output
empty column rather than 0x0.
2014-09-21 18:23:23 +02:00
Vladimir Serbinenko 5e42618e00 Fix wrong commit 2014-09-21 18:18:03 +02:00
Michael Chang 0aece00c54 * grub-core/osdep/unix/config.c: Remove extraneous comma. 2014-09-21 17:49:13 +02:00
Peter Jones 631a820038 Initialized initrd_ctx so we don't free a random pointer from the stack.
Currently, if "linux" fails, the "goto fail;" in grub_cmd_initrd sends us
into grub_initrd_close() without grub_initrd_init() being called, and thus
it never clears initrd_ctx->components.  grub_initrd_close() then frees that
address, which is stale data from the stack.  If the stack happens to have a
stale *address* there that matches a recent allocation, then you'll get a
double free later.

So initialize the memory up front.

Signed-off-by: Peter Jones <pjones@redhat.com>
2014-09-21 10:36:42 +04:00
Colin Watson 60049a0e72 Tidy up ChangeLog formatting. 2014-09-19 14:50:51 +01:00
Khem Raj a276b84046 Fix build with glibc 2.20
* grub-core/kern/emu/hostfs.c: squahes below warning
  warning: #warning "_BSD_SOURCE and _SVID_SOURCE are deprecated, use _DEFAULT_SOURCE"

Signed-off-by: Khem Raj <raj.khem@gmail.com>

Upstream-Status: Submitted
2014-09-15 19:59:27 +04:00
Michael Chang 54bd9a0610 Fix incorrect address reference in btrfs
We encountered a weird random kernel initrd unpacking error on btrfs
and finally found it was caused by incorrect address reference in range
check for type GRUB_BTRFS_EXTENT_REGULAR and the entire result is
unpredictable.

This is a quick fix to make the address reference to the
grub_btrfs_extent_data structure correctly, not the pointer variable
to it.

Any suggestions to this patch is welcome.
2014-09-08 11:33:40 +01:00
Colin Watson 2a5a532c00 Support grub-emu on x32 (ILP32 but with x86-64 instruction set)
* configure.ac: Remove -m64 from checks for -mcmodel=large and
-mno-red-zone.  These are always either unnecessary (x86_64-emu) or
already in TARGET_CFLAGS at this point, and they produce incorrect
results when building for x32.
* grub-core/kern/x86_64/dl.c (grub_arch_dl_relocate_symbols): Cast
pointers to Elf64_Xword via grub_addr_t, in order to work on x32.
* include/grub/x86_64/types.h (GRUB_TARGET_SIZEOF_VOID_P,
GRUB_TARGET_SIZEOF_LONG): Define to 4 on x32.
2014-09-07 23:04:50 +01:00
Colin Watson 4d94b2db58 * configure.ac: Remove several unnecessary semicolons. 2014-09-07 20:47:43 +01:00
Colin Watson 1de3a48098 * grub-core/kern/mips/arc/init.c (grub_machine_get_bootlocation):
Initialise pend to pacify GCC.
2014-08-25 15:19:48 -07:00
Andrey Borzenkov c291f47b2c Fix typo (gettext_print instead of gettext_printf) 2014-08-14 21:02:31 +04:00
Vladimir Serbinenko 3c05833249 * grub-core/term/at_keyboard.c: Retry probing keyboard if
scancode setup failed.
2014-08-13 23:04:01 +02:00
Vladimir Serbinenko d1224d209b * grub-core/kern/disk_common.c: Clump disk size to 1EiB. 2014-08-10 11:27:36 +02:00
Vladimir Serbinenko 0af3ae2d8b * grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_rw): Add
safety to avoid triggerring VirtualBox bug.
2014-08-10 11:27:13 +02:00
Vladimir Serbinenko 79c80b06b8 Fix Changelog 2014-08-10 10:04:04 +02:00
Vladimir Serbinenko 33f6ce671f * grub-core/fs/cbfs.c: Don't probe disks of unknow size.
Fixes hang on virtualbox.
2014-08-10 09:50:36 +02:00
Colin Watson 0901e7855f Fix an infinite loop in grub-mkconfig
* util/grub.d/10_hurd.in: Make kernel list progression not fail on
kernels whose paths contain regex metacharacters.
* util/grub.d/10_kfreebsd.in: Likewise.
* util/grub.d/10_linux.in: Likewise.
* util/grub.d/20_linux_xen.in: Likewise.

Reported by: Heimo Stranner.
2014-07-08 23:54:30 +01:00
Colin Watson 4250f552a6 * docs/grub-dev.texi (Finding your way around): The build system no
longer uses AutoGen directly.
2014-06-26 14:20:17 +01:00
Роман Пехов 1f6af2a9f8 * grub-core/commands/loadenv.c (check_blocklists): Fix overlap check. 2014-06-22 03:51:50 +04:00
Glenn Washburn fa33530870 * util/grub-install.c: Fix handling of --disk-module. 2014-06-22 01:45:11 +02:00
Stephane Rochoy 15bd333e10 * grub-core/loader/i386/bsd.c (grub_netbsd_boot): Pass pointer to
EFI system table.
2014-06-22 01:35:52 +02:00
Stephane Rochoy 3f3ec8ef44 * grub-core/commands/efi/lsefisystab.c (grub_cmd_lsefisystab): Show
EFI system table physical address.
2014-06-22 01:34:57 +02:00
Trevor Woerner 87de66d9d8 * util/grub-gen-asciih.c (add_glyph): Fix uninitialised variable. 2014-06-21 20:26:47 +02:00
Vladimir Serbinenko 2c2c5c720d * grub-core/commands/verify.c (grub_pubkey_open): Trust procfs. 2014-06-21 20:11:08 +02:00
Vladimir Serbinenko 480c89858e * grub-core/commands/verify.c (grub_pubkey_open): Fix memdisk
check.
2014-06-21 20:10:48 +02:00
Vladimir Serbinenko 4b8b9135f1 * grub-core/kern/misc.c (__bzero): Don't compile in GRUB_UTIL.
Reported by: Yves Blusseau <blusseau@zetam.org>.
2014-04-20 16:12:41 +02:00
Piotr Krysiuk 5a6db38d62 Allow loading old kernels by placing GDT in conventional memory. 2014-04-20 16:00:55 +02:00
Colin Watson 3a310e842f Tolerate devices with no filesystem UUID returned by os-prober
* util/grub.d/30_os-prober.in: Tolerate devices with no filesystem
UUID.  Other parts of grub-mkconfig tolerate these, they were
previously allowed here up to commit
55e706c918, and they can arise in
practice when the system has active LVM snapshots.
Fixes Ubuntu bug #1287436.
2014-04-10 16:54:33 +01:00
Colin Watson c4badfe836 Improve LVM "logical_volumes" string matching
* grub-core/disk/lvm.c (grub_lvm_detect): Search for
"logical_volumes" block a little more accurately.
2014-04-10 14:42:41 +01:00
Vladimir Serbinenko a72fc329eb * grub-core/lib/syslinux_parse.c: Fix timeout quoting. 2014-04-06 00:44:44 +02:00
Vladimir Serbinenko 2009da62f2 Add missing #endif 2014-04-04 08:11:15 +02:00
Vladimir Serbinenko 6f6d4aa02c * include/grub/libgcc.h: Remove ctzsi2 and ctzdi2. They're no longer pulled from libgcc. 2014-04-04 08:02:38 +02:00
Vladimir Serbinenko 8063ce197f Replace few instances of memcmp/memcpy in the code that should be grub_memcmp/grub_memcpy. 2014-04-04 07:58:42 +02:00
Vladimir Serbinenko 9706066791 * grub-core/osdep/linux/getroot.c (grub_util_part_to_disk): Support NVMe device names. 2014-04-03 21:31:12 +02:00
Thomas Falcon 4afd0107ef btrfs: fix get_root key comparison failures due to endianness
* grub-core/fs/btrfs.c (get_root): Convert
GRUB_BTRFS_ROOT_VOL_OBJECTID to little-endian.
2014-03-31 15:32:30 +01:00
Colin Watson 24024dac7f Fix partmap, cryptodisk, and abstraction handling in grub-mkconfig.
Commit 588744d0dc caused grub-mkconfig
no longer to be forgiving of trailing spaces on grub-probe output
lines, which among other things means that util/grub.d/10_linux.in
no longer detects LVM.  To fix this, make grub-probe's output
delimiting more consistent.  As a bonus, this improves the coverage
of the -0 option.

Fixes Debian bug #735935.

* grub-core/disk/cryptodisk.c
(grub_util_cryptodisk_get_abstraction): Add a user-data argument.
* grub-core/disk/diskfilter.c (grub_diskfilter_get_partmap):
Likewise.
* include/grub/cryptodisk.h (grub_util_cryptodisk_get_abstraction):
Update prototype.
* include/grub/diskfilter.h (grub_diskfilter_get_partmap): Likewise.
* util/grub-install.c (push_partmap_module, push_cryptodisk_module,
probe_mods): Adjust for extra user-data arguments.
* util/grub-probe.c (do_print, probe_partmap, probe_cryptodisk_uuid,
probe_abstraction): Use configured delimiter.  Update callers.
2014-03-31 14:48:46 +01:00
Colin Watson 9b35fe819f Fix grub-probe -0 option
* util/grub-probe,c (options): Make -0 work again (broken by
conversion to argp).
(main): Simplify logic.
2014-03-31 13:51:17 +01:00
Vladimir Serbinenko 46b74dd3cb * grub-core/lib/relocator.c: Fix the case when end of leftover is used. 2014-03-26 08:48:30 +01:00
Fu Wei 68f17b2b30 * grub-core/loader/arm64/linux.c: Remove redundant "0x". 2014-03-26 08:13:07 +01:00
Nikunj A Dadhania e4a1fe3919 ieee1275: check for IBM pseries emulated machine
is_qemu is not being set lead to disabling of feature like
GRUB_IEEE1275_FLAG_HAS_CURSORONOFF. This resulted in cursor not being
displayed during the grub-menu edit.

Signed-off-by: Nikunj A Dadhania <nikunj@linux.vnet.ibm.com>
2014-03-24 15:44:33 +00:00
Vladimir Serbinenko 86402b4e0f * include/grub/i386/openbsd_bootarg.h: Add addr and frequency fields.
* grub-core/loader/i386/bsd.c (grub_cmd_openbsd): Fill addr field.

	Suggested by: Markus Müller.
2014-02-28 10:50:05 +01:00
Vladimir Serbinenko bec35dad2a * grub-core/kern/i386/pc/mmap.c: Fallback to EISA memory map
if E820 failed to return any regions.
2014-02-28 10:07:11 +01:00
Vladimir Serbinenko dfc5ccfa97 * grub-core/mmap/i386/uppermem.c (lower_hook) [COREBOOT]: Ignore low
tables for low memory calculations.
2014-02-28 09:50:47 +01:00
Vladimir Serbinenko 4a70fed815 * grub-core/loader/i386/multiboot_mbi.c (grub_multiboot_make_mbi): Limit
location to 640K.
2014-02-28 09:48:57 +01:00
Vladimir Serbinenko f94b2b4eeb * grub-core/kern/i386/coreboot/mmap.c: Filter out 0xa0000-0x100000
region.
2014-02-28 09:47:57 +01:00
Vladimir Serbinenko d0949e3747 * grub-core/disk/ahci.c: Ignore NPORTS field and rely on PI
exclusively.
2014-02-20 10:11:43 +01:00
Paulo Flabiano Smorigo 9585647a25 add bootpath parser for open firmware
It enables net boot even when there is no bootp/dhcp server.

* grub-core/net/drivers/ieee1275/ofnet.c: Add grub_ieee1275_parse_bootpath and
call it at grub_ieee1275_net_config_real.
* grub-core/kern/ieee1275/init.c: Add bootpath to grub_ieee1275_net_config.
* include/grub/ieee1275/ieee1275.h: Likewise.
2014-02-04 19:02:16 -02:00
Paulo Flabiano Smorigo e4dbf247b6 add grub_env_set_net_property function
* grub-core/net/bootp.c: Remove set_env_limn_ro.
* grub-core/net/net.c: Add grub_env_set_net_property.
* include/grub/net.h: Likewise.
2014-02-04 18:41:38 -02:00
Vladimir Serbinenko 006c78f378 * util/grub-mkrescue.c: Build fix for argp.h with older gcc. 2014-02-03 14:35:51 +01:00
Vladimir Serbinenko 511ece7ceb * util/grub-mkfont.c: Build fix for argp.h with older gcc. 2014-02-03 14:34:27 +01:00
Vladimir Serbinenko 9abbaae7cd * grub-core/disk/ahci.c: Increase timeout. Some SSDs take up to
7 seconds to recover if last poweroff was bad.
2014-01-29 23:50:49 +01:00
Vladimir Serbinenko d6b94c5eb2 * grub-core/disk/ahci.c: Properly handle transactions with no
transferred data.
2014-01-29 23:49:51 +01:00
Vladimir Serbinenko 07ea8daa86 * grub-core/disk/ahci.c: Add safety cleanups. 2014-01-29 23:46:17 +01:00
Vladimir Serbinenko 3142b2feac * grub-core/disk/ahci.c: Allocate and clean space for all possible 32
slots to avoid pointing to uninited area.
2014-01-29 23:45:18 +01:00
Vladimir Serbinenko 4686e163f2 * grub-core/disk/ahci.c: Do not enable I/O decoding and keep
enabling busmaster for the end.
2014-01-29 23:43:25 +01:00
Vladimir Serbinenko ba424f37a9 * util/grub-mkfont.c: Downgrade warnings about unhandled features
to debug.
2014-01-29 23:41:48 +01:00
Vladimir Serbinenko 3beabdc8e4 Merge branch 'master' of git.sv.gnu.org:/srv/git/grub
Conflicts:
	ChangeLog
2014-01-29 23:40:11 +01:00
Paulo Flabiano Smorigo ba584da163 .gitignore: add missing files and .exe variants. 2014-01-29 13:27:37 -02:00
Vladimir Serbinenko 7f64fb590c * grub-core/term/at_keyboard.c: Tolerate missing keyboard. 2014-01-26 03:31:10 +01:00
Mike Gilbert 35f2d96c0d grub-install: support for partitioned partx loop devices.
* grub-core/osdep/linux/getroot.c (grub_util_part_to_disk): Detect
	/dev/loopX as being the parent of /dev/loopXpY.
2014-01-26 02:56:04 +01:00
Vladimir Serbinenko 9afe2053c9 * grub-core/term/serial.c (grub_serial_register): Fix invalid free.
Ensure that pointers are inited to NULL and that pointers are not
	accessed after free.
2014-01-26 02:36:05 +01:00
Andrey Borzenkov 5ae584c0b0 fix Mingw W64-32 cross compile failure due to printf redefinition in libintl.h
In file included from util/misc.c:36:0:
./include/grub/emu/misc.h:56:1: error: 'libintl_printf' is an unrecognized format function type [-Werror=format=]
 char * EXPORT_FUNC(xasprintf) (const char *fmt, ...) __attribute__ ((format (printf, 1, 2))) WARN_UNUSED_RESULT;
 ^
./include/grub/emu/misc.h:58:1: error: 'libintl_printf' is an unrecognized format function type [-Werror=format=]

The reason is libintl.h which redefines printf as libintl_printf. The problem
is not present in native MinGW build which avoids redefinition.  Use
(format (__printf__) instead which is valid replacement in GCC.

v2: add grub-core/lib/libgcrypt/src/g10lib.h
v3: modify g10lib.h during import
2014-01-25 21:49:41 +04:00
Andrey Borzenkov 1440b7ebae do not set default prefix in grub-mkimage
Default prefix is likely wrong on Unix and completely wrong on Windows.
Let caller set it explicitly to avoid any ambiguity.
2014-01-25 19:54:51 +04:00
Vladimir Serbinenko 61c8482b20 Fix several translatable strings.
Suggested by: D. Prévot.
2014-01-24 18:20:27 +01:00
Vladimir Serbinenko 95cd131ea0 * util/grub-install.c: List available targets. 2014-01-24 18:09:25 +01:00
Colin Watson d08059309f * util/grub-install.c (write_to_disk): Add an info message. 2014-01-23 12:05:36 +00:00
Andrey Borzenkov eec4237a32 add GRUB_WINDOWS_EXTRA_DIST to allow shipping runtime files
Not all toolkits provide static libraries. This patch enables creation of self
contained distribution that does not require pre-existing runtime libraries.
Intended usage is

export GRUB_WINDOWS_EXTRA_DIST="/path/to/liblzma.dll /path/to/libintl.dll"
make
make windowszip

As those libraries and locations are dependent on toolchain in use, trying
to autodetect them is likely impossible. So just provide a simple way to
package everything in one step.

Also remove $(windowsdir) after ZIP was created same as other "make dist"
targets.
2014-01-21 20:54:09 +04:00
Andrey Borzenkov 443b322262 Show detected path to DejaVuSans in configure summary 2014-01-21 19:41:11 +04:00
Andrey Borzenkov 36387ece6b look for DejaVu also in /usr/share/fonts/truetype
It is installed in this path on openSUSE.
2014-01-21 19:29:33 +04:00
Paulo Flabiano Smorigo 6f65e36cc4 increase network try interval gradually
* grub-core/net/arp.c (grub_net_arp_send_request): Increase network try
interval gradually.
* grub-core/net/icmp6.c (grub_net_icmp6_send_request): Likewise.
* grub-core/net/net.c (grub_net_fs_read_real): Likewise.
* grub-core/net/tftp.c (tftp_open): Likewise.
* include/grub/net.h (GRUB_NET_INTERVAL_ADDITION): New define.
2014-01-21 11:06:35 -02:00
Paulo Flabiano Smorigo d99d2f8416 change stop condition to avoid infinite loops
In net/net.c there is a while (1) that only exits if there is a stop
condition and more then 10 packages or if there is no package received.

If GRUB is idle and enter in this loop, the only condition to leave is
if it doesn't have incoming packages. In a network with heavy traffic
this never happens.
2014-01-21 10:54:49 -02:00
Colin Watson 049f63824c Ignore EPERM when modifying kern.geom.debugflags
Many tests fail when run as a non-root user on FreeBSD.  The failures
all amount to an inability to open files using grub_util_fd_open,
because we cannot set the kern.geom.debugflags sysctl.  This sysctl is
indeed important to allow us to do such things as installing GRUB to the
MBR, but if we need to do that and can't then we will get an error
later.  Enforcing it here is unnecessary and prevents otherwise
perfectly reasonable operations.
2014-01-19 14:38:07 +00:00
Andrey Borzenkov 015045471e use MODULE_FILES for genemuinit* instead of MOD_FILES
MinGW native nm does not support ELF binaries.
2014-01-18 23:15:40 +04:00
Vladimir Serbinenko b204b718cc * util/grub-install.c: Fix a typo. 2014-01-18 20:02:51 +01:00
Vladimir Serbinenko 41155a5722 * grub-core/normal/main.c (read_config_file): Buffer config file.
Reduces boot time.
2014-01-18 19:54:09 +01:00
Andrey Borzenkov e0a850947f fix removal of {cpu,machine} links on mingw/msys
At least on Windows 2003 using "ln -s dir1 dir2" in msys shell succeeds,
but results in what looks like hard link. Subsequent "rm -f dir2" (e.g.
during second config.status invocation) fails. Check that we also can
remove link to directory.

Make it more clear in message that we are checking "ln -s".
2014-01-18 22:48:04 +04:00
Vladimir Serbinenko 0b47c57ad6 * Makefile.am (default_payload.elf): Add modules
multiboot cbmemc linux16 gzio echo help.
2014-01-18 19:43:19 +01:00
Mike Gilbert 6ba983559d * Makefile.util.def: Link grub-ofpathname with zfs libs. 2014-01-18 19:41:15 +01:00
Vladimir Serbinenko 6c519b5c6c * grub-core/commands/macbless.c: Rename FILE and DIR to avoid
conflicts.

	Reported by: Andrey Borzenkov.
2014-01-18 19:26:40 +01:00
Andrey Borzenkov f371dd5da8 fix include loop on MinGW due to libintl.h pulling stdio.h
In file included from ./include/grub/dl.h:23:0,
                 from grub-core/lib/libgcrypt-grub/cipher/rfc2268.c:3:
./include/grub/list.h:34:18: warning: conflicting types for 'grub_list_push' [en
abled by default]
 void EXPORT_FUNC(grub_list_push) (grub_list_t *head, grub_list_t item);
                  ^
./include/grub/symbol.h:68:25: note: in definition of macro 'EXPORT_FUNC'
 # define EXPORT_FUNC(x) x
                         ^
In file included from ./include/grub/fs.h:30:0,
                 from ./include/grub/file.h:25,
                 from ./grub-core/lib/posix_wrap/stdio.h:23,
                 from c:\mingw\include\libintl.h:314,
                 from ./include/grub/i18n.h:33,
                 from ./include/grub/misc.h:27,
                 from ./include/grub/list.h:25,
                 from ./include/grub/dl.h:28,
                 from grub-core/lib/libgcrypt-grub/cipher/rfc2268.c:3:
./include/grub/partition.h:106:3: note: previous implicit declaration of 'grub_l
ist_push' was here
   grub_list_push (GRUB_AS_LIST_P (&grub_partition_map_list),
   ^
list.h needs just ATTRIBUTE_ERROR from misc.h; split compiler features
into separate file grub/compiler.h and include it instead.
2014-01-18 21:22:57 +04:00
Andrey Borzenkov 1ecf96fcc4 add BUILD_EXEEXT support to fix make clean on Windows
Add $(BUILD_EXEEXT) to ensure files are removed. Also add CLEANFILES where
appropriate.
2014-01-18 20:41:24 +04:00
Andrey Borzenkov 5ef569df5b Use _W64 to detect MinGW W64-32 instead of _FILE_OFFSET_BITS
In 94cee4a4c2 I overlooked that config.h
unconditionally sets _FILE_OFFSET_BITS, so it cannot be used to detect
MinGW W64 environment. It looks like Emacs folks already found
solution; instead of _FILE_OFFSET_BITS use _W64 as suggested in
http://lists.gnu.org/archive/html/emacs-devel/2013-03/msg00723.html
2014-01-18 20:04:11 +04:00
Andrey Borzenkov 9b9c4686f0 Fix ChangeLog date 2014-01-18 20:01:16 +04:00
Vladimir Serbinenko 3abb956371 * grub-core/term/terminfo.c: Recognize keys F1-F12. 2014-01-18 16:57:35 +01:00
Andrey Borzenkov dcecae1a49 reintroduce BUILD_LDFLAGS for the cross-compile case
This allows providing separate LDFLAGS for build and host environments, which
are not necessary the same for cross-compile case. In particular, it allows
building host programs statically to not depend on presence of libraries at
run-time (e.g. MinGW DLLs on Windows) while continue to use default dynamic
linking at build time.

Also fix obsolete comments in confgure.ac - we do use different environment
for build and host now.
2014-01-18 19:50:54 +04:00
Vladimir Serbinenko ae80f31270 * util/grub-mount.c: Extend GCC warning workaround to grub-mount. 2014-01-18 16:43:29 +01:00
Vladimir Serbinenko 7e7293d745 * grub-core/kern/efi/efi.c: Ensure that the result starts with /
and has no //.
2014-01-18 16:41:47 +01:00
Vladimir Serbinenko 5acc8020b4 * NEWS: Add few missing entries. 2014-01-18 16:31:10 +01:00
Colin Watson ff66b8e7d8 Prefer more portable test(1) constructs
* util/grub.d/00_header.in (make_timeout): Use && rather than test
-a.
* util/grub.d/10_windows.in: Likewise.
* util/grub.d/10_netbsd.in (netbsd_load_fs_module): Use || rather
than test -o.
* util/grub.d/30_os-prober.in: Use && rather than test -a, and ||
rather than test -o.
2014-01-17 15:29:43 +00:00
Colin Watson 09a836e59c freebsd/hostdisk.c is only ever compiled on FreeBSD
* grub-core/osdep/freebsd/hostdisk.c (grub_util_fd_open): Remove
redundant preprocessor conditional.
2014-01-17 02:30:52 +00:00
Andrey Borzenkov 0776112c53 add part_apple to EFI rescue image to fix missing prefix
On Mac rescue image is booted from HFS+ partition, so bootpath looks like
/ACPI(a0341d0,0)/PCI(1,1f)/ATAPI(0,0,0)/HD(3,5d1,ca3,0000000000000000,20,0)/EndEntire

grub fails to find device for this path because it cannot scan partition
table. The simplest fix is to add part_apple by default.
2014-01-12 15:29:21 +04:00
Colin Watson ccd21a65ed * Makefile.util.def (grub-macbless): Change mansection to 8. 2014-01-08 11:05:20 +00:00
Leif Lindholm 4d21c10199 arm64: set correct length of device path end entry
The length of the Device Path End entry in the grub_linux_boot()
function was incorrectly set to 0. This triggers an assert failure
in debug builds of Tianocore.

Set it to sizeof (grub_efi_device_path_t).
2014-01-07 17:52:50 +00:00
Andrey Borzenkov e7cfa8d5e1 Change grub-mkrescue to use bootaa64.efi too
Also add ChangeLog entry for previous change.
2014-01-07 20:34:25 +04:00
Andrey Borzenkov 94cee4a4c2 fix 32 bit compilation on MinGW-w64
Use _FILE_OFFSET_BITS macro to distinguish between native MinGW and
32 bit under MinGW-64. The latter does not require fseeko/ftello
redefinition which it already does in case of _FILE_OFFSET_BITS=64.
2014-01-07 18:44:51 +04:00
Andrey Borzenkov c9e839e2ca use {grub,boot}aa64.efi for boot images on AArch64
According to UEFI 2.4 specification, default boot file name on AArch64
is BOOTAA64.EFI (3.4.1.1 Removable Media Boot Behavior). Also set default
GRUB image name to grubaa64.efi to match it.
2014-01-07 10:38:54 +04:00
Andrey Borzenkov 668add258f strip .eh_frame section from arm64-efi kernel
Fixes grub-mkimage error "relocation 0x105 is not implemented yet."
2013-12-30 13:07:54 +00:00
Vladimir Serbinenko 0e309454f6 * NEWS: Add few missing entries. Correct existing ones. 2013-12-30 06:49:15 +01:00
Vladimir Serbinenko 093dec7370 Don't abort() on unavailable coreboot tables if not running on coreboot. 2013-12-28 17:25:14 +01:00
Andrey Borzenkov 989af02582 remove unused error.h from kern/emu/misc.c
Fixes compilation on mingw32, where include is apparently missing.
2013-12-28 09:04:10 +04:00
Colin Watson 8442d3e956 * NEWS: The cmosclean command in fact dates back to 1.99. Remove
mention of it from 2.02.
2013-12-28 02:20:27 +00:00
Vladimir Serbinenko 645ff636fe Merge branch 'master' of git.sv.gnu.org:/srv/git/grub
Conflicts:
	ChangeLog
2013-12-27 11:20:37 +01:00
Colin Watson 30a338460a * NEWS: First draft of 2.02 entry. 2013-12-27 03:05:38 +00:00
Colin Watson 51f941a0d8 * INSTALL (Cross-compiling the GRUB): Fix some spelling mistakes.
* docs/grub.texi (Getting the source code): Likewise.
2013-12-27 03:03:32 +00:00
Vladimir Serbinenko 5bda44d7f9 * grub-core/kern/arm/cache_armv6.S: Remove .arch directive.
As these functions are used on pre-ARMv6 CPUs as well we don't want
	to make assembler assume that architecture is higher than default one.
2013-12-25 23:31:42 +01:00
Andrey Borzenkov a6e7719bbe fix EFI detection on Windows
We are on legacy BIOS if GetFirmwareEnvironmentVariable fails (returns
zero) *and* extended error information is ERROR_INVALID_FUNCTION.

Cf. http://msdn.microsoft.com/en-us/library/windows/desktop/ms724325%28v=vs.85%29.aspx
2013-12-25 22:36:28 +04:00
Vladimir Serbinenko e8f07821cc * configure.ac: Set version to 2.02~beta2. 2013-12-24 21:53:23 +01:00
Vladimir Serbinenko dc3286ade4 * grub-core/disk/efi/efidisk.c (name_devices): Skip Apple ghosts. 2013-12-24 20:32:14 +01:00
Andrey Borzenkov 46f8d358ef * util/grub-probe.c: Improve help message and simplify list handling. 2013-12-24 20:30:16 +01:00
Vladimir Serbinenko 09c479006c Fix buffer overflow in grub_efi_print_device_path. 2013-12-24 19:04:46 +01:00
Vladimir Serbinenko 4d6c69536e Show SATA device path. 2013-12-24 18:10:28 +01:00
Vladimir Serbinenko faf4a65e1e Revert grub-file usage in grub-mkconfig. 2013-12-24 17:47:27 +01:00
Vladimir Serbinenko e5fa26e573 Make newly-created files other than grub.cfg world-readable. 2013-12-24 17:36:10 +01:00
Andrey Borzenkov 569766e49b * util/grub.d/00_header.in: Improve compatibility with old config. 2013-12-24 17:26:05 +01:00
Vladimir Serbinenko 4127206896 Make rijndael.c respect aliasing rules.
Trivial backport of dfb4673da8ee52d95e0a62c9f49ca8599943f22e.
2013-12-24 16:57:28 +01:00
Vladimir Serbinenko f7c7c4d4ad Make grub_util_device_is_mapped_stat available in grub-emu core. 2013-12-24 16:56:14 +01:00
Vladimir Serbinenko 57bc5d431b Add -Qn to TARGET_CFLAGS if it's supported.
Fixes compilation on cygwin.

	Reported by: Andrey Borzenkov.
	Suggested by: Andrey Borzenkov.
2013-12-24 15:00:46 +01:00
Vladimir Serbinenko 6a7957f9f5 Save TARGET_CC version in modinfo.sh.
Suggested by: Andrey Borzenkov.
2013-12-24 14:47:44 +01:00
Vladimir Serbinenko e88f0420b9 Make grub_util_devmapper_part_to_disk and grub_util_find_partition_start
follow the same algorithm to avoid method mismatch. Don't assume
	DMRAID- UUID to mean full disk but instead check that mapping is linear.
2013-12-24 14:16:57 +01:00
Vladimir Serbinenko da98622662 Declare GRUB_EFI_VENDOR_APPLE_GUID. 2013-12-24 14:14:19 +01:00
Vladimir Serbinenko fba31b5f69 Dump type and vendor specific data when printing device path. 2013-12-24 14:05:48 +01:00
Vladimir Serbinenko 72f099578e Merge branch 'master' of git.sv.gnu.org:/srv/git/grub 2013-12-23 18:17:29 +01:00
Vladimir Serbinenko 808e97c4e7 ARM64 support for grub-mkrescue. 2013-12-23 18:17:09 +01:00
Vladimir Serbinenko e388db904c Install modinfo.sh to keep build information around. 2013-12-23 18:17:09 +01:00
Vladimir Serbinenko cef394032d * grub-core/modinfo.sh.in: Add build config information. 2013-12-23 18:17:09 +01:00
Vladimir Serbinenko a4d610026f ARM64 grub-file and grub-mkconfig support. 2013-12-23 18:17:09 +01:00
Vladimir Serbinenko 0c930a841e Remove leftover options defines. 2013-12-23 18:17:02 +01:00
Colin Watson 3d369a01ac Update some documentation to refer to Git rather than Bazaar.
* docs/grub.texi (Obtaining and Building GRUB): Refer to Git rather
than Bazaar.
* po/README: Likewise.  Fix spelling mistake.
2013-12-23 14:43:41 +00:00
Colin Watson 5b83ef97e5 Don't distribute config.h.
* Makefile.am (platform_HEADERS): Move to ...
(nodist_platform_HEADERS): ... here.  Fixes gettext_strings_test
failure when building from a distributed tarball.
2013-12-23 14:30:35 +00:00
Colin Watson 16f7455b04 * configure.ac: Fix spelling.
* grub-core/commands/parttool.c: Fix grammar.
* grub-core/disk/ldm.c: Use consistent capitalisation for "LDM
Embedding Partition".
2013-12-23 13:32:35 +00:00
Vladimir Serbinenko 74fa9ac1a6 * include/grub/arm64/linux.h: Remove leftovers. Add missing prefixes. 2013-12-23 05:56:31 +01:00
Vladimir Serbinenko 62956fe7b9 * grub-core/loader/arm64/linux.c: Add missing bracket. 2013-12-23 05:34:13 +01:00
Vladimir Serbinenko 260632161f Add arm64-efi recognition to grub-file. 2013-12-23 05:33:44 +01:00
Vladimir Serbinenko 4cd0b55fd0 Fix ia64-efi recognition in grub-file. 2013-12-23 05:27:04 +01:00
Vladimir Serbinenko 95b56e3a97 Recognize raspberry pi kernel in grub-file. 2013-12-23 05:19:42 +01:00
Vladimir Serbinenko bbc52c228f Enable cache on ARM U-Boot port.
Without it the port is reidiculously slow.
2013-12-23 05:01:58 +01:00
Vladimir Serbinenko 943981ff65 Fix ARM cache maintainance.
More code was converted from ASM to C for easier handling.
2013-12-23 04:27:53 +01:00
Vladimir Serbinenko adabfb5418 * grub-core/kern/arm/cache.c (grub_arm_disable_caches_mmu): Use v6
algorithm on v5.

	Suggested by: Leif Lindholm.
2013-12-22 22:33:35 +01:00
Andrey Borzenkov 77ec462a56 grub-mkconfig: fix Xen platform conditions 2013-12-22 23:47:26 +04:00
Andrey Borzenkov 3bf2db8959 split grub-mkresecue help text to facilitate translations
Split single string in help message into several strings used before in shell
grub-mkrescue to minimize changes to existing translations.

Reported by Benno Schulenberg
2013-12-22 22:51:54 +04:00
Leif Lindholm 30a9ab952f arm64: add EFI Linux loader
Signed-off-by: Leif Lindholm <leif.lindholm@linaro.org>
2013-12-22 18:38:44 +00:00
Leif Lindholm c415eaa98f fdt: additions required for arm64 Linux loader
- Add grub_fdt_create_empty_tree() function.
- Add 64-bit setprop.
2013-12-22 18:38:44 +00:00
Vladimir Serbinenko 313fb3cef8 Add module loading and parsing boot time checkpoints. 2013-12-22 18:14:42 +01:00
Vladimir Serbinenko 37f617c025 * grub-core/loader/arm/linux.c: Pass arguments through on ATAG
platforms.
2013-12-22 18:14:00 +01:00
Lars Wendler 3deedfc033 * util/grub-mkconfig.in: Skip non-executable files. 2013-12-22 16:38:28 +01:00
Vladimir Serbinenko 5ad9f728eb Workaround buggy timer in raspberry pie by using our own timer
implementation.
2013-12-22 02:48:42 +01:00
Vladimir Serbinenko eeb8499721 * include/grub/arm/uboot/kernel.h (GRUB_KERNEL_MACHINE_HEAP_SIZE):
Increase to 16 MiB to allow loading the whole memdisk.
2013-12-22 00:32:55 +01:00
Vladimir Serbinenko 0d8b81f89a Fix ARM Linux Loader on non-FDT platforms. 2013-12-22 00:30:19 +01:00
Vladimir Serbinenko bf082198e2 * configure.ac: Choose link format based on host_os on emu. 2013-12-21 20:19:34 +01:00
Vladimir Serbinenko 0b602bf9ad * grub-core/osdep/unix/getroot.c: Non-unix build fix. 2013-12-21 18:10:05 +01:00
Vladimir Serbinenko 96650a82ec * grub-core/kern/emu/main.c: Build fix for emu. 2013-12-21 18:09:19 +01:00
Vladimir Serbinenko ca3e20886e Build fixes for argp.h with older gcc. 2013-12-21 18:08:25 +01:00
Vladimir Serbinenko 27db1a9b64 * util/grub-glue-efi.c: Use "universal binary" rather "fat binary"
in strings.

	Suggested by: David Prévot.
2013-12-21 16:12:24 +01:00
Vladimir Serbinenko 8a913e664e * include/grub/crypto.h (grub_crypto_xor): Fix cast-align warning. 2013-12-21 15:35:15 +01:00
Vladimir Serbinenko ae558c2ccf Enable -Wformat=2 if it's supported. 2013-12-21 15:28:28 +01:00
Vladimir Serbinenko bbac6789aa * configure.ac: Add -Wmissing-include-dirs -Wmissing-prototypes
-Wmissing-declarations if supported.
2013-12-21 14:47:55 +01:00
Vladimir Serbinenko ab216512d7 * grub-core/commands/macbless.c (grub_mac_bless_inode): Pass inode as u32
as both HFS and HFS+ have 32-bit inodes.
2013-12-21 14:40:53 +01:00
Vladimir Serbinenko 0d4aa91d0d * include/grub/misc.h (grub_strtol): Fix overflow. 2013-12-21 14:35:46 +01:00
Vladimir Serbinenko a997af68e3 * include/grub/term.h (grub_unicode_estimate_width): Use grub_size_t
as return type in both conditionals.
2013-12-21 14:33:36 +01:00
Vladimir Serbinenko 36bcaf2903 * include/grub/video.h (grub_video_rgba_color_rgb): Fix prototype
to use uint8_t for color.
2013-12-21 14:31:47 +01:00
Vladimir Serbinenko 74763e9615 * util/misc.c (grub_util_get_image_size): Check for overflow. 2013-12-21 14:28:14 +01:00
Vladimir Serbinenko 80b29fc9b4 * grub-core/disk/raid6_recover.c (grub_raid_block_mulx): Use grub_size_t
for size.
2013-12-21 14:16:49 +01:00
Vladimir Serbinenko 6e327fcd4c * grub-core/disk/lvm.c: Use grub_size_t for sizes and grub_ssize_t
for pointer difference.
2013-12-21 14:15:04 +01:00
Vladimir Serbinenko 62ce03cf40 * util/import_gcry.py: Skip sample keys. 2013-12-21 14:07:42 +01:00
Vladimir Serbinenko f4d70fd02b * util/misc.c (grub_qsort_strcmp): Don't discard const attribute. 2013-12-21 14:04:50 +01:00
Vladimir Serbinenko 93bf55e616 * configure.ac: Remove duplicate warning arguments. 2013-12-21 13:53:42 +01:00
Vladimir Serbinenko 579ee114b1 Add missing static qualifiers. 2013-12-21 13:50:13 +01:00
Vladimir Serbinenko ee5283d66b Add missing includes. 2013-12-21 13:47:27 +01:00
Vladimir Serbinenko 5dbde526a8 Inline printf templates when possible to enable format checking. 2013-12-21 13:40:18 +01:00
Vladimir Serbinenko d88ae4f0a4 * include/grub/crypto.h: Don't discard const attribute. 2013-12-21 13:36:42 +01:00
Vladimir Serbinenko 17b4355943 * grub-core/net/bootp.c (grub_cmd_dhcpopt): Use snprintf where it
was intended.
2013-12-21 13:35:28 +01:00
Vladimir Serbinenko 76a2a43011 * grub-core/lib/crypto.c: Don't discard const attribute. 2013-12-21 13:34:03 +01:00
Vladimir Serbinenko 0d26164edd * grub-core/lib/disk.c: Fix potential overflow. 2013-12-21 13:32:39 +01:00
Vladimir Serbinenko 2622b1e8a8 * grub-core/lib/arg.c: Don't discard const attribute. 2013-12-21 13:28:52 +01:00
Vladimir Serbinenko 05126706b0 * grub-core/kern/dl.c: Don't discard const attribute. 2013-12-21 13:26:27 +01:00
Vladimir Serbinenko 2f9c48041a * grub-core/kern/disk.c: Fix potential overflow. 2013-12-21 13:23:37 +01:00
Vladimir Serbinenko 0438ebf1c3 * conf/Makefile.common: Don't include non-existing directory
grub-core/lib/libgcrypt-grub/include.
2013-12-21 13:21:42 +01:00
Vladimir Serbinenko 065adc346c Clarify several translatable messages. 2013-12-21 03:21:45 +01:00
David Prévot 496a6b3024 Correct some translatable strings. 2013-12-21 03:03:31 +01:00
Colin Watson 971038be55 * util/grub-mkrescue.c: Rephrase mkrescue description. 2013-12-21 02:37:14 +01:00
Vladimir Serbinenko bfdfeb2508 Clarify several translatable messages. 2013-12-21 01:41:16 +01:00
Vladimir Serbinenko c00c34efe1 Merge branch 'master' of git.sv.gnu.org:/srv/git/grub 2013-12-20 17:13:24 +01:00
Colin Watson d642d76197 Be more verbose about some configure failures. 2013-12-20 16:09:43 +00:00
Vladimir Serbinenko 871aa709af * util/grub-install.c: Inform user about install platform. 2013-12-20 16:57:48 +01:00
Colin Watson 3bc1b2daab Fix various build problems on GNU/Hurd.
* grub-core/osdep/unix/getroot.c (strip_extra_slashes): Move inside
!defined (__GNU__).
(xgetcwd): Likewise.
* include/grub/emu/hostdisk.h (grub_util_hurd_get_disk_info)
[__GNU__]: Add prototype.
* util/getroot.c (grub_util_biosdisk_get_grub_dev) [__GNU__]: Format
long int using %ld rather than %d.
2013-12-20 14:02:27 +00:00
Vladimir Serbinenko 2fa5a58ca3 * configure.ac: Set version to 2.02~beta1. 2013-12-19 01:54:43 +01:00
Allen Pais ee281fd0c6 * grub-core/boot/sparc64/ieee1275/boot.S: Fix order of fields.
Also-By: Bob Picco <bob.picco@oracle.com>
2013-12-19 01:53:56 +01:00
Vladimir Serbinenko 2e238b3708 Make grub_zlib_decompress handle incomplete chunks.
Fixes squash4.
2013-12-18 23:39:49 +01:00
Vladimir Serbinenko 2984035e1a * grub-core/Makefile.am: Don't attempt to export grub_bios_interrupt on i386-multiboot. 2013-12-18 21:19:11 +01:00
Aleš Nesrsta b9f03772b5 * grub-core/disk/usbms.c: Retry on unknown errors.
Reuse the same tag on retries.
2013-12-18 19:00:45 +01:00
Aleš Nesrsta e3ef0d30cf * grub-core/bus/usb/ehci.c: Fix handling of newborn transfers.
Avoid confusing them with already completed transfers.
2013-12-18 18:59:49 +01:00
Vladimir Serbinenko 72c9a50773 Remove xen VFB.
Due to XEN bug it prevents Linux boot. Remove it at least, until
	workaround is found.
2013-12-18 18:43:09 +01:00
Vladimir Serbinenko 8445567046 * po/exclude.pot: Add 2 missing excludes. 2013-12-18 17:12:13 +01:00
Vladimir Serbinenko 64dd5fdc00 Add missing license section in macbless.mod and macho.mod. 2013-12-18 17:11:11 +01:00
Vladimir Serbinenko a29f317af1 Allow compilation without thumb-interwork as long as no thumb is
involved or only thumb2 is used.
2013-12-18 13:33:39 +01:00
Vladimir Serbinenko 063f2a04d1 Use -Wl,--no-relax rather than -mno-relax for uniformity. 2013-12-18 13:13:23 +01:00
Vladimir Serbinenko 113f786989 * INSTALL: Update comment as to why sparc64 clang isn't usable. 2013-12-18 13:11:29 +01:00
Vladimir Serbinenko eba2afeda1 Add __attribute__ ((sysv_abi)) only if it's really needed.
Some compilers don't support it.
2013-12-18 13:09:39 +01:00
Vladimir Serbinenko 1962ed95cc * grub-core/lib/syslinux_parse.c: Declare timeout unsigned. 2013-12-18 12:29:30 +01:00
Vladimir Serbinenko c2be6f7ef8 Remove -Wold-style-definition.
Not very useful and interaction of it with regexp depends on GCC
	version.
2013-12-18 07:48:09 +01:00
Vladimir Serbinenko 7a7f52388b Make grub_util_get_windows_path_real static. 2013-12-18 07:45:15 +01:00
Vladimir Serbinenko 9246d5c8a4 * grub-core/commands/fileXX.c: Silence cast-align.
* grub-core/loader/i386/xen_fileXX.c: Likewise.
2013-12-18 07:40:43 +01:00
Vladimir Serbinenko b3aea1bc26 * include/grub/efi/api.h (GRUB_EFI_ERROR_CODE): Use explicit cast
rather than LL suffix.
2013-12-18 07:39:15 +01:00
Vladimir Serbinenko e8c360ca4a * include/grub/efi/api.h (PRIxGRUB_EFI_UINTN_T): Remove leftover. 2013-12-18 07:35:51 +01:00
Vladimir Serbinenko bc8dd11952 * grub-core/loader/arm/linux.c: Use common initrd functions. 2013-12-18 07:34:28 +01:00
Vladimir Serbinenko 57a691b7e7 Decrease number of strings to translate. 2013-12-18 07:26:13 +01:00
Vladimir Serbinenko 74fa9417e5 * grub-core/kern/arm/dl.c: Remove unnecessarry execution mode check. 2013-12-18 07:06:23 +01:00
Vladimir Serbinenko 636977b089 Mark strings for translation and add remaining ones to exclude list. 2013-12-18 06:50:24 +01:00
Vladimir Serbinenko ee4450eb6f * util/grub-file.c (main): Fix sizeof usage. 2013-12-18 06:20:20 +01:00
Vladimir Serbinenko a43b3e5d8e Silence spurious warning. 2013-12-18 06:19:16 +01:00
Vladimir Serbinenko 81294aff98 Remove check_nt_hiberfil as it's been superseeded by file command. 2013-12-18 06:03:23 +01:00
Vladimir Serbinenko a99c0a328f * docs/osdetect.cfg: Add isolinux config to detected OSes. 2013-12-18 05:34:17 +01:00
Vladimir Serbinenko 8f5add13ff Implement syslinux parser. 2013-12-18 05:28:05 +01:00
Vladimir Serbinenko 8ff35d0a1b * grub-core/commands/legacycfg.c: Use 32-bit Linux protocol on non-BIOS. 2013-12-18 05:21:06 +01:00
Vladimir Serbinenko ba14476051 Support cpuid --pae. 2013-12-17 23:40:49 +01:00
Vladimir Serbinenko daaa89dbe5 Use AT keyboard on Yeeloong 3A. 2013-12-17 22:54:30 +01:00
Vladimir Serbinenko 25a7863d77 Add Yeeloong 3A reboot and halt. 2013-12-17 22:53:18 +01:00
Vladimir Serbinenko 184c61ddce Add Radeon Yeeloong 3A support. 2013-12-17 22:52:04 +01:00
Vladimir Serbinenko fd4650a556 Add bonito 3A support. 2013-12-17 22:49:27 +01:00
Vladimir Serbinenko 3e88fbfa6e * grub-core/loader/machoXX.c: Fix compilation on non-i386. 2013-12-17 22:44:46 +01:00
Vladimir Serbinenko 1123bed944 * grub-core/loader/i386/xen_fileXX.c: Silence cast-align. 2013-12-17 20:47:31 +01:00
Vladimir Serbinenko ebda165f3a * grub-core/loader/macho.c: Fix compilation on non-i386. 2013-12-17 20:46:33 +01:00
Vladimir Serbinenko fe7c20bf9e Add missing format_arg attribute to check that printf with translated
messages has proper arguments.
2013-12-17 16:42:01 +01:00
Vladimir Serbinenko f4dab3d1ac Use grub_xasprintf to format translated error messages containing
64-bit quantity.
2013-12-17 16:41:09 +01:00
Jon McCune 24d5934daa Fix double-free introduced by commit 33d02a42d6
To reproduce the problem, make sure you have a GPG public key available, build and install GRUB:
grub-install --debug --debug-image="all" --pubkey=/boot/pubkey.gpg --modules="serial terminfo gzio search search_label search_fs_uuid search_fs_file linux vbe video_fb video mmap relocator verify gcry_rsa gcry_dsa gcry_sha256 hashsum gcry_sha1 mpi echo loadenv boottime" /dev/sda
Sign all the files in /boot/grub/* and reboot.

'make check' results identical before and after this change.

TESTED: In a QEMU VM using an i386 target.
2013-12-17 07:32:07 -08:00
Vladimir Serbinenko d6c2782a90 Unify message for unsupported relocation. 2013-12-17 16:17:46 +01:00
Vladimir Serbinenko 50d2e9596f Mark miscompile error for translation. 2013-12-17 16:05:39 +01:00
Vladimir Serbinenko 18e76955be Use %I64 and not %ll when using OS printf if compiling for windows. 2013-12-17 16:04:47 +01:00
Vladimir Serbinenko d218ec9738 Update Mac code to match new register_efi prototype. 2013-12-17 16:02:36 +01:00
Vladimir Serbinenko b8765fa082 Implement better integration with Mac firmware. 2013-12-17 15:21:02 +01:00
Vladimir Serbinenko 1f032575bb * grub-core/loader/multiboot_mbi2.c: Implement special value for load_addr. 2013-12-17 15:14:50 +01:00
Vladimir Serbinenko 1482975549 Include serial module in default_payload.elf. 2013-12-17 14:52:36 +01:00
Vladimir Serbinenko d45067a290 Add explicit thumb interwork bx in asm files.
Shouldn't matter for armv >= 5 but let's be safe.
2013-12-17 14:50:44 +01:00
Vladimir Serbinenko 3086175489 Implement Truecrypt ISO loader. 2013-12-17 14:45:46 +01:00
Vladimir Serbinenko e14d409b6f * grub-core/lib/arg.c: Ensure at least a single space between commands. 2013-12-17 14:42:02 +01:00
Vladimir Serbinenko ec824e0f2a Implement grub_file tool and use it to implement generating of config
in separate root.
2013-12-17 14:39:48 +01:00
Vladimir Serbinenko 296f76068d Change to v1 xen grants. 2013-12-17 13:55:47 +01:00
Vladimir Serbinenko 2c384f1e6e * 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 13:40:52 +01:00
Vladimir Serbinenko d16ff5897f * 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 13:19:58 +01:00
Vladimir Serbinenko 71669c3b76 Implement XEN VFB support. 2013-12-17 13:07:26 +01:00
Vladimir Serbinenko 60d1dd3d72 Remove grub_bios_interrupt on coreboot.
It's not used currently and cannot be used safely currently.
2013-12-17 12:54:11 +01:00
Vladimir Serbinenko a82010503e Update exclude.pot and mark few strings for translation. 2013-12-17 01:18:09 +01:00
Vladimir Serbinenko 6cc8959712 * util/grub-mkrescue.c: Fix incorrect file usage in fallback code.
Reported by: Jon McCune
2013-12-17 00:33:55 +01:00
Vladimir Serbinenko dd05b91f6b Merge branch 'master' of git.sv.gnu.org:/srv/git/grub 2013-12-16 20:33:19 +01:00
Vladimir Serbinenko 2a123f4c58 * grub-core/tests/sleep_test.c: Silence spurious warning. 2013-12-16 20:32:43 +01:00
Andrey Borzenkov 840a2c0592 add verbose information to linux platform check
As suggested by Vladimir Serbienko, add additional verbose output to inform
why we selected this specific platform.
2013-12-16 23:17:40 +04:00
Andrey Borzenkov 35248820ea ChangeLog for previous two commits. 2013-12-16 22:56:48 +04:00
Andrey Borzenkov d770e63557 use grub_util_exec_redirect_all to silence "moprobe efivars"
modprobe -q still prints error on non-EFI. Redirect stderr instead.

Reported by Javier Vasquez.
2013-12-16 22:41:16 +04:00
Andrey Borzenkov 396311f0f6 consolidate grub_util_exec code
We need to hide "modprobe efivars" error output to avoid confusion. So
consolidate grub_util_exec_* into single function that can optionally redirect
all three standard descriptors and make all other functions compatibility
wrappers.

Also remove include/grub/osdep/exec_unix.h which does not appear to be used
anywhere.
2013-12-16 22:41:15 +04:00
Vladimir Serbinenko 316c8d9a18 Make grub_xen_hypercall on i386 cdecl rather than stdcall to avoid
linker trying to "fixup" the code.
2013-12-16 18:10:50 +01:00
Vladimir Serbinenko 8fcce8d50f * grub-core/kern/x86_64/xen/startup.S: Align stack. 2013-12-16 17:44:10 +01:00
Vladimir Serbinenko 6f1f6a0c82 Add support for converting PE+ to Elf64. 2013-12-16 15:30:50 +01:00
Vladimir Serbinenko 66a07ce2f8 * grub-core/commands/minicmd.c (grub_mini_cmd_dump): Handle LLP case. 2013-12-16 15:28:07 +01:00
Vladimir Serbinenko cc6fb517de 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 14:49:11 +01:00
Vladimir Serbinenko f009f07c95 * include/grub/x86_64/types.h: Define sizeof (long) as 4 when compiling
with mingw.
2013-12-16 14:41:12 +01:00
Vladimir Serbinenko 9fdec226ff * include/grub/efi/api.h: Don't use call wrappers when compiled with
mingw or cygwin as API already matches.
2013-12-16 14:39:06 +01:00
Vladimir Serbinenko d87cb3ae3c * grub-core/lib/posix_wrap/errno.h: Undefine errno before redefining. 2013-12-16 14:36:48 +01:00
Vladimir Serbinenko 3e38c31a4b * include/grub/efi/api.h: Define (u)intn_t based on pointer size and
not on long.
2013-12-16 14:34:23 +01:00
Vladimir Serbinenko f4171ebd34 Handle X86_64_PC64 relocation.
Those are generated by some cygwin compilers.
2013-12-16 14:24:19 +01:00
Vladimir Serbinenko 252a289cb3 Determine the need for mingw-related stubs at compile time rather than
using not very significant $target_os.
2013-12-16 14:18:15 +01:00
Vladimir Serbinenko fadddc260a Merge branch 'master' of git.sv.gnu.org:/srv/git/grub
Conflicts:
	ChangeLog
2013-12-16 14:15:37 +01:00
Vladimir Serbinenko 23d2abc33c * grub-core/genmod.sh.in: Strip before converting to ELF as strip
may not work with ELF.
2013-12-16 13:18:48 +01:00
Vladimir Serbinenko 4f979ccbf1 Use unix functions for temporary files and special files on cygwin. 2013-12-16 13:16:37 +01:00
Vladimir Serbinenko 37378f748a Define functions explicitly rather than using --defsym in tests
whenever possible. Respect locality in remaining cases.
2013-12-16 13:07:28 +01:00
Vladimir Serbinenko 6a09d83e12 * grub-core/genmoddep.awk: Remove explicit getline < /dev/stdin. 2013-12-16 13:02:19 +01:00
Andrey Borzenkov e477187bf4 small fixes for Windows EFI install code
Fix potential crash caused by signed vs. unsigned comparison. Negative
length compares as very large unsigned number causing subsequent NULL access.

Make exhaustive search for all BootNNNN variables to find one matching
requested efi_distributor.
2013-12-15 22:00:15 +04:00
Ian Campbell 80b865bdc8 * grub-core/kern/uboot/init.c: Fix units of uboot timer. 2013-12-15 17:59:40 +01:00
Vladimir Serbinenko 04b0285701 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 17:57:58 +01:00
Vladimir Serbinenko 39711101fd Add explicit sysv_abi on amd64 asm routines. 2013-12-15 14:48:42 +01:00
Vladimir Serbinenko d99af4f0e8 * grub-core/commands/efi/lsefisystab.c: Use %lld to show num_table_entries. 2013-12-15 14:42:19 +01:00
Vladimir Serbinenko 7104368446 * include/grub/test.h: Use gnu_printf rather than printf on GRUB
functions.
2013-12-15 14:39:21 +01:00
Vladimir Serbinenko 111bf5db8b * grub-core/loader/i386/linux.c: Use grub_addr_t rather than long when
appropriate.
2013-12-15 14:37:12 +01:00
Vladimir Serbinenko 24ca71c93b * grub-core/loader/i386/linux.c: Use %p rather than %lx for pointers. 2013-12-15 14:35:18 +01:00
Vladimir Serbinenko 48ba5c0c86 * grub-core/kern/elfXX.c: Use grub_addr_t rather than long when
appropriate.
2013-12-15 14:33:22 +01:00
Vladimir Serbinenko 8ae6704517 * 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 14:31:21 +01:00
Vladimir Serbinenko ed55931073 * grub-core/commands/acpi.c: Use grub_addr_t rather than long when
appropriate.
2013-12-15 14:27:04 +01:00
Vladimir Serbinenko 8fa2627942 * grub-core/kern/i386/coreboot/cbtable.c: Use char * arithmetic rather
than converting to long.
2013-12-15 14:24:34 +01:00
Vladimir Serbinenko 6f5f3337d8 * grub-core/disk/cryptodisk.c: Rename "n" to "last_cryptodisk_id". 2013-12-15 14:21:14 +01:00
Vladimir Serbinenko e7c418c58f * util/grub-mkimagexx.c (relocate_addresses): Display offset rather
than almost useless pointer.
2013-12-15 14:18:30 +01:00
Vladimir Serbinenko 7e47e27bd8 Add gcc_struct to all packed structures when compiling with mingw.
Just "packed" doesn't always pack the way we expect.
2013-12-15 14:14:30 +01:00
Vladimir Serbinenko ae8159b9ca * include/grub/i386/coreboot/lbio.h: Add missing attribute (packed). 2013-12-15 00:56:11 +01:00
Vladimir Serbinenko 74e7ad6604 * util/grub-pe2elf.c: Fix handling of .bss. 2013-12-15 00:55:17 +01:00
Vladimir Serbinenko 814442ba69 Implement windows flavour of EFI install routines. 2013-12-14 23:35:58 +01:00
Vladimir Serbinenko 5f5bb10748 * conf/Makefile.extra-dist: Adjust path to conf/i386-cygwin-img-ld.sc. 2013-12-14 23:33:05 +01:00
Vladimir Serbinenko a24725cc6e Change grub_install_register_efi interface to pass GRUB device.
This allows grub_install_register_efi to request partition info
	directly.
2013-12-14 23:31:56 +01:00
Vladimir Serbinenko 38933cee85 Workaround cygwin bug when using \\?\Volume{GUID} syntax. 2013-12-14 23:28:34 +01:00
Vladimir Serbinenko 6d3cfe5063 Do not use TCHAR string functions as they are not available on cygwin. 2013-12-14 23:25:30 +01:00
Vladimir Serbinenko 4bad23a15f Workaround windows bug when querying EFI system partition parameters. 2013-12-14 23:23:11 +01:00
Vladimir Serbinenko 6a5fe1328b * grub-core/kern/i386/qemu/init.c (resource): Decrease struct size
by using bitfields.
2013-12-14 23:15:47 +01:00
Vladimir Serbinenko bc8fcf4bd3 * grub-core/boot/i386/qemu/boot.S: Add missing EXT_C. 2013-12-14 23:13:42 +01:00
Vladimir Serbinenko 60b967be7e Make i386-* other than i386-pc compileable under cygwin. 2013-12-14 23:12:53 +01:00
Vladimir Serbinenko 6dc3337774 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 22:04:02 +01:00
Vladimir Serbinenko f2c6ff15e5 * grub-core/osdep/windows/hostdisk.c: Fix cygwin compilation. 2013-12-14 21:55:44 +01:00
Vladimir Serbinenko 6b8a162516 * grub-core/osdep/windows/blocklist.c: Add missing cast in printf
invocation.
2013-12-14 21:54:37 +01:00
Vladimir Serbinenko 954c723acc * util/config.c: Remove trailing newline from distributor in simple
parsing.
2013-12-14 21:50:36 +01:00
Vladimir Serbinenko 607a39f9f0 * include/grub/efi/api.h: Rename protocol and interface to avoid
conflict.
2013-12-14 21:48:46 +01:00
Vladimir Serbinenko df6fedcab1 * .gitignore: Add .exe variants. Add missing files. Remove few outdated
entries.
2013-12-14 21:45:17 +01:00
Vladimir Serbinenko f684d7e1a9 * grub-core/osdep/exec.c: Use unix version on cygwin. 2013-12-14 21:39:03 +01:00
Vladimir Serbinenko 0df77d793c Implement multiboot2 EFI BS specification. 2013-12-13 12:56:14 +01:00
Vladimir Serbinenko dafff9ce44 * 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 17:06:00 +01:00
Vladimir Serbinenko 6644d9733d * include/grub/efiemu/efiemu.h: Sync configuration table declaration
with EFI counterpart.
2013-12-11 16:16:21 +01:00
Vladimir Serbinenko 44bbfa33b8 Propagate the EFI commits to x86-efi specific parts. 2013-12-11 16:11:17 +01:00
Vladimir Serbinenko 3e3dff249f * grub-core/commands/efi/lssal.c: Fix terminating condition. 2013-12-11 15:59:12 +01:00
Vladimir Serbinenko 316dda716c Introduce grub_efi_packed_guid and use it where alignment is not
guaranteed.
2013-12-11 15:57:08 +01:00
Vladimir Serbinenko 219401b8b9 * include/grub/efi/api.h (grub_efi_device_path): Define length as
unaligned u16 rather than u8[2].
2013-12-11 15:54:01 +01:00
Vladimir Serbinenko 30d0053799 * grub-core/kern/ia64/dl.c (grub_arch_dl_relocate_symbols): Add checks
for relocation range.
2013-12-11 11:29:35 +01:00
Vladimir Serbinenko 979742bc7e * grub-core/kern/ia64/dl.c (grub_arch_dl_relocate_symbols): Handle
non-function pcrel21b relocation. It happens with .text.unlikely
	section.
2013-12-11 11:28:48 +01:00
Leif Lindholm 16c8f78513 efi: mm: make MAX_USABLE_ADDRESS platform-specific 2013-12-10 18:05:29 +00:00
Leif Lindholm 3f1423e789 * grub-core/lib/fdt.c: change memcpy => grub_memcpy 2013-12-10 16:51:10 +00:00
Vladimir Serbinenko 0341da6019 Merge branch 'master' of git.sv.gnu.org:/srv/git/grub 2013-12-10 09:24:37 +01:00
Andrey Borzenkov 9f2f979bcf always define config_directory and config_file as full pathname
If configfile is relative pathname, extend it with current ($root) so its
interpretation does not change if $root is changed later.

Suggested by Vladimir Serbienko.
2013-12-10 09:55:27 +04:00
Jon McCune dd73313cba 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 16:52:12 -08:00
Vladimir Serbinenko eaf01c25fe Add missing compile and link options for sparc64-emu. 2013-12-10 00:05:28 +01:00
Vladimir Serbinenko 7a148da6dd Implement sparc64 trampolines (needed for sparc64-emu). 2013-12-10 00:01:27 +01:00
Vladimir Serbinenko 21eee750b7 * grub-core/kern/sparc64/dl.c (grub_arch_dl_relocate_symbols): Check
range of R_SPARC_HI22.
	Implement R_SPARC_LM22.
2013-12-09 15:51:12 +01:00
Vladimir Serbinenko 7b54b62682 * 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 15:43:27 +01:00
Vladimir Serbinenko 9a945e2a24 * 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 14:24:56 +01:00
Vladimir Serbinenko 4f4ea1b449 * 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 14:22:31 +01:00
Colin Watson fe4ae21331 * util/grub-mkconfig.in: Add missing newline to output. 2013-12-09 00:14:59 +00:00
Vladimir Serbinenko 78b2b0a1a0 * grub-core/kern/ia64/efi/init.c (grub_arch_sync_caches): Move to ...
* grub-core/kern/ia64/cache.c (grub_arch_sync_caches): ... here.
2013-12-08 18:27:40 +01:00
Vladimir Serbinenko d14772c455 * grub-core/kern/emu/main.c: Silence missing prototypes to allow emu
compilation with GCC <= 4.2.
	* grub-core/kern/emu/argp_common.c: Likewise.
2013-12-08 18:21:10 +01:00
Vladimir Serbinenko 388f3cd0d1 * include/grub/kernel.h [__sparc__]: Restrict sparc64-ieee1275 to
right platform rather than leaking to sparc64-emu.
2013-12-08 18:19:42 +01:00
Vladimir Serbinenko 11e4167a35 * grub-core/osdep/windows/emuconsole.c: Remove unsigned comparison >= 0.
But ensure that the variables in question are indeed unsigned.
2013-12-08 18:16:32 +01:00
Vladimir Serbinenko fa7eb63dec * grub-core/kern/emu/lite.c: Add missing include of ../ia64/dl_helper.c. 2013-12-08 18:14:32 +01:00
Vladimir Serbinenko 50b3a68db9 Remove grub_memalign on emu. 2013-12-08 18:12:20 +01:00
Vladimir Serbinenko fbbfb6ab11 * grub-core/kern/ia64/efi/init.c: Fix alignment code so it doesn't
truncate incomplete lines but instead flushes them.
2013-12-08 18:10:05 +01:00
Vladimir Serbinenko a19293cb75 Move OS-dependent mprotect for module loading to grub-core/osdep/*/dl.c
and implement windows variant.
2013-12-08 18:08:23 +01:00
Vladimir Serbinenko d5c14e1e26 Fix mips-emu compilation. 2013-12-08 17:49:02 +01:00
Vladimir Serbinenko b75db69ac1 * configure.ac: Check for freetype library usability. 2013-12-08 10:50:59 +01:00
Vladimir Serbinenko c311ced5d7 Make arm-emu work. 2013-12-08 02:59:21 +01:00
Vladimir Serbinenko c8fd2ddf6d * util/grub-mkfont.c: Replace stpcpy with grub_stpcpy. 2013-12-07 23:28:20 +01:00
Andrey Borzenkov c50e5f4543 Update color_normal and color_highlight defaults (light-gray instead of white) 2013-12-08 00:00:26 +04:00
Andrey Borzenkov bb05e313eb use light-gray as default color in normal.mod for consistency
Defalut font color on PC console seems to be light-gray; this is
what user also gets in rescue prompt and what is defined as
GRUB_TERM_DEFAULT_NORMAL_COLOR. But normal.mod defaults to white.
This makes unpleasant visual effect as colors are changed after kernel
is booted.

Use the same color eveywhere for consistency and default to light-gray
as this is also what at least Linux kernel is using by default.
2013-12-07 20:00:48 +04:00
Vladimir Serbinenko f23bc65103 Transform -C option to grub-mkstandalone to --core-compress available
in all grub-install flavours.
2013-12-07 16:18:22 +01:00
Vladimir Serbinenko 4c4ea9c7b5 Merge GRUBFS and GRUB_FS variables. 2013-12-07 16:09:39 +01:00
Andrey Borzenkov 92e9352ded second attempt to fix using grub device name as install device
grub-install already resolved passed install device to grub device. So do the
same as grub-setup and strip parenthesis if we get legacy (hdX).

I accidentally commited revert of 69ca97c820 and
this patch as part of f585c90505. So this commit
just adds ChangeLog entry and cosmetic whitespace fix.
2013-12-07 18:58:19 +04:00
Andrey Borzenkov f585c90505 fix partition module names when /boot is on diskfilter
/usr/local/grub2/sbin/grub-install: info: grub-mkimage --directory '/usr/local/grub2/lib/grub/i386-pc' --prefix '(mduuid/e6d1dcf06cea72140bafae74a8677f36)/grub' --output '/boot/grub/i386-pc/core.img' --format 'i386-pc' --compression 'auto'  'ext2' 'msdos' 'msdos' 'diskfilter' 'mdraid1x' 'biosdisk'
.
/usr/local/grub2/sbin/grub-install: error: cannot open `/usr/local/grub2/lib/grub/i386-pc/msdos.mod': No such file or directory.

Introduce common helper for both diskfilter and non-diskfilter case that
converts partition map names into module names.
2013-12-07 15:00:37 +04:00
Vladimir Serbinenko 5ff249072d * configure.ac: Make unifont mandatory on coreboot. 2013-12-07 11:47:19 +01:00
Vladimir Serbinenko 0277eab701 * configure.ac: Skip unifont 6.3 pcf and bdf. 2013-12-07 11:46:46 +01:00
Vladimir Serbinenko 4861b6c851 * Makefile.am: Remove partial font files if generation failed. 2013-12-07 11:39:35 +01:00
Andrey Borzenkov 3100cdc7f9 add grub_qsort_strcmp to use when sorting array of strings
Compare function used in qsort gets arguments by reference, so strcmp
cannot be used directly - it expects pointer to char, but gets pointer
to pointer to char.

Introduce new helper grub_qsort_strcmp and use it in grub-install.
This helper is going to be used in a couple more places as well so
add it to global file, not in grub-install.c.
2013-12-07 14:29:00 +04:00
Andrey Borzenkov ad73cc3312 fix use of grub-probe instead of ${grub_probe} 2013-12-07 14:24:25 +04:00
Vladimir Serbinenko 4182262560 Don't add -mlong-calls when compiling with clang. 2013-12-06 11:58:17 +01:00
Vladimir Serbinenko 896f483d49 * configure.ac: Fix a typo. 2013-12-06 10:02:24 +01:00
Vladimir Serbinenko 8c534b85f1 Revamp relocation handling.
Move more code to common dl.c. Add missing veneers for arm and arm64.
	Decreases kernel size by 70 bytes on i386-pc (40-50 compressed)
2013-12-06 09:18:55 +01:00
Vladimir Serbinenko a846dd4b3a * util/grub-mkimagexx.c: Fix reloc section generation for ia64. 2013-12-05 23:07:10 +01:00
Mike Gilbert aa437b5890 gentpl.py: Use python3-style print function 2013-12-05 16:07:15 +00:00
Vladimir Serbinenko b0f311f412 * util/grub-install.c: Mention Boot* variable. 2013-12-05 17:05:21 +01:00
Colin Watson 59b38922a1 Pacify compiler warning
* grub-core/osdep/linux/hostdisk.c
(grub_util_find_partition_start_os): Initialise start to avoid
spurious compiler warning.
2013-12-05 15:48:27 +00:00
Colin Watson 0480665b9d On Linux, read partition start offsets from sysfs if possible
This lets us cope with block device drivers that don't implement
HDIO_GETGEO.  Fixes Ubuntu bug #1237519.

* grub-core/osdep/linux/hostdisk.c (sysfs_partition_path): New
function.
(sysfs_partition_start): Likewise.
(grub_util_find_partition_start_os): Try sysfs_partition_start
before HDIO_GETGEO.
2013-12-05 13:51:52 +00:00
Leif Lindholm bbeee1c4a3 grub-core/lib/fdt.c: correctly update size_dt_struct in add_subnode() 2013-12-05 11:44:41 +00:00
Vladimir Serbinenko e5ed2f6947 Handle unaligned .bss on sparc64.
Current code improperly assumes that both __bss_start and _end are
	aligned to 8-bytes. Eliminating this assumption and explicitly align
	modules.
2013-12-05 06:35:19 +01:00
Vladimir Serbinenko 4a73746a04 * grub-core/boot/sparc64/ieee1275/boot.S [CDBOOT]: Move scratchpad
so it doesn't land in the middle of loaded image.
2013-12-04 19:54:37 +01:00
Vladimir Serbinenko 382b500ebe * configure.ac: Move all warning options that may be absent in
gcc >= 3.1 to optional.

	Note: while this allows to compile with older GCC, official requirements
	remain the same and no support for older GCC.
2013-12-04 14:53:25 +01:00
Colin Watson 3a82f8bb48 Fix grub-shell to avoid breaking "make distcheck"
Copying the themes directory in grub-shell isn't
parallel-test-friendly and breaks on the second test when the source
directory is read-only (as in "make distcheck").  Instead, add a
hidden --themes-directory option to grub-mkrescue et al, and use it
in grub-shell.
2013-12-04 13:36:34 +00:00
Vladimir Serbinenko e3046431da * conf/Makefile.common (CFLAGS_GNULIB): Remove -Wno-old-style-definition
as it's no longer necessarry.
2013-12-04 14:32:04 +01:00
Vladimir Serbinenko bdb6090d83 * configure.ac: Allow compilation with older GCC for ARM. 2013-12-04 12:42:09 +01:00
Vladimir Serbinenko b73b70ebca * configure.ac: Add -no-integrated-as if {addme|ame} isn't supported.
* INSTALL: Note that GRUBwas successfully compiled with clang 3.2 for
	ppc.
2013-12-04 12:20:56 +01:00
Vladimir Serbinenko 8a3f0a24b5 * grub-core/kern/emu/main.c: Ignore missing prototype for main. 2013-12-04 10:28:23 +01:00
Vladimir Serbinenko 6f07c4e407 Pass font config to config.h and not by TARGET_CFLAGS as adding
arguments doesn't work if TARGET_CFLAGS is specified on command
	line.
2013-12-04 10:25:53 +01:00
Vladimir Serbinenko 60d5e9cbd9 * configure.ac: Add -Wvla if compiler supports it. 2013-12-04 10:08:57 +01:00
Vladimir Serbinenko cd15c394cc * grub-core/osdep/windows/emuconsole.c (grub_console_putchar):
Remove variable length arrays.
	* grub-core/term/efi/console.c (grub_console_putchar): Likewise.
2013-12-04 10:05:33 +01:00
Vladimir Serbinenko bb6e299ccb * grub-core/kern/i386/qemu/init.c: Remove variable length arrays. 2013-12-04 09:48:36 +01:00
Vladimir Serbinenko 85eb579ad9 * include/grub/types.h: Declare all byteswaps as inline functions
except compile-time ones.

	Solves variable shadowing in constructions like
	cpu_to_le (le_to_cpu(x) + 1).
2013-12-04 08:42:35 +01:00
Vladimir Serbinenko 47f88cc94e * grub-core/kern/efi/efi.c: Remove variable length arrays. 2013-12-04 08:39:22 +01:00
Vladimir Serbinenko 40b5739ff9 * grub-core/kern/uboot/init.c (uboot_timer_ms): Fix overflow after 71
minutes.
2013-12-04 08:26:39 +01:00
Vladimir Serbinenko 234d93464a * grub-core/disk/ieee1275/ofdisk.c: Remove variable length arrays.
* grub-core/net/drivers/ieee1275/ofnet.c: Likewise.
2013-12-04 08:10:01 +01:00
Colin Watson 0c0eab527f * grub-core/Makefile.core.def (setjmp): Distribute
lib/arm64/setjmp.S.
2013-12-03 18:11:18 +00:00
Colin Watson 44d4884779 Merge branch 'cjwatson/timeout-style' 2013-12-03 16:15:45 +00:00
Colin Watson 10955cda06 Credit and bug reference. 2013-12-03 16:14:01 +00:00
Colin Watson f315b508ae Reduce nesting level. 2013-12-03 16:11:00 +00:00
Vladimir Serbinenko 9e4e6ddfbf * util/config.c: Add missing pointer adjustment.
Reported by: qwertial
2013-12-02 06:51:13 +01:00
Andrey Borzenkov 5037aa9a7b fix libgrub.pp build post arm64 merge
grub-core/kern/arm64/dl_helper.c:26:28: fatal error: grub/cpu/reloc.h: No such file or directory
2013-11-30 22:36:10 +04:00
Vladimir Serbinenko 8a952d20d1 Missing ChangeLog entry 2013-11-30 16:51:35 +01:00
Leif Lindholm b29b77fee2 New port arm64-efi 2013-11-30 16:50:31 +01:00
Andrey Borzenkov be0d45555e document sleep command exit codes 2013-11-30 14:57:11 +04:00
Vladimir Serbinenko d74b9a1d1a Ensure that -mno-unaligned-access or some equivalent option is used. 2013-11-30 11:31:14 +01:00
Vladimir Serbinenko 35de6d4bac * grub-core/lib/libgcrypt/mpi/longlong.h: Fix compilation error with
-march=armv3.
2013-11-30 11:19:06 +01:00
Vladimir Serbinenko ce55ed0389 Remove leftover GRUB_IA64_DL_TRAMP_SIZE. 2013-11-30 11:14:30 +01:00
Colin Watson f70ab525f9 Remove a few references to GRUB_HIDDEN_TIMEOUT*
Reported by Andrey Borzenkov.
2013-11-29 17:19:37 +00:00
Colin Watson 9b70860ecc Consolidate timeout generation code a bit. 2013-11-29 16:11:53 +00:00
Colin Watson 095588ef34 Consistently ignore GRUB_TIMEOUT if GRUB_HIDDEN_TIMEOUT is set
Pointed out by Vladimir Serbinenko.
2013-11-29 15:30:44 +00:00
Colin Watson 2dbda2215c Fix documentation of behaviour after pressing ESC
Pointed out by Andrey Borzenkov.
2013-11-29 15:25:43 +00:00
Colin Watson 53cc63bf85 Add GRUB_TIMEOUT_STYLE_BUTTON support
Suggested by Vladimir Serbinenko.
2013-11-29 15:18:05 +00:00
Colin Watson 471b2683e7 Move deprecated grub-mkconfig options to a separate table
Suggested by Andrey Borzenkov.
2013-11-29 14:59:25 +00:00
Colin Watson 8ddf84bfb8 Fix "make -C docs dvi"
* docs/grub-dev.texi (Font Metrics): Exclude @image command from DVI
builds, since we don't have an EPS version of font_char_metrics.png.
Add leading dot to image extension per the Texinfo documentation.
2013-11-29 13:48:23 +00:00
Colin Watson fd0df6d098 Fix build with FreeType 2.5.1
* util/grub-gen-asciih.c: Include FT_SYNTHESIS_H rather than
<freetype/ftsynth.h>, fixing build with FreeType 2.5.1.
* util/grub-gen-widthspec.c: Likewise.
* util/grub-mkfont.c: Likewise.
2013-11-29 12:19:36 +00:00
Andrey Borzenkov 69ca97c820 fix using grub device name as install device
Shell version of grub-install called grub-setup which resolved
install device name and called main setup routine. C version of
grub-install calls main setup routine directly, which leads
to the error:

grub2-install: info: grub-bios-setup  --verbose  --force  --skip-fs-probe --directory='/boot/grub2/i386-pc' --device-map='/boot/grub2/device.map' '(hd2)'.
grub2-install: info: reading /boot/grub2/i386-pc/boot.img.
grub2-install: info: reading /boot/grub2/i386-pc/core.img.
grub2-install: info: root is `(null)', dest is `(hd2)'.
grub2-install: info: Opening dest.
grub2-install: info: drive = -1.
grub2-install: error: disk `(hd2)' not found.

Move resolving of destination device name into main setup routine
so it is done consistently in both cases.
2013-11-29 11:32:34 +04:00
Vladimir Serbinenko eec893ae49 * grub-core/kern/emu/hostfs.c (is_dir): Remove variable length arrays. 2013-11-29 05:52:20 +01:00
Vladimir Serbinenko 621e167fd6 * util/grub-fstest.c: Remove variable length arrays. 2013-11-29 05:50:32 +01:00
Vladimir Serbinenko d54f647a4a * grub-core/osdep/linux/ofpath.c: Check return value of read. 2013-11-29 05:46:19 +01:00
Vladimir Serbinenko c8a0f1b229 * util/mkimage.c (grub_install_generate_image): Use grub_crypto_hash for
computing crc32 rather than handling with md fundtions directly.
2013-11-29 04:14:26 +01:00
Vladimir Serbinenko 726409a513 * util/mkimage.c (grub_install_generate_image): Use grub_crypto_hash for
checking fwstart.img rather than md fundtions directly.
2013-11-29 04:05:44 +01:00
Vladimir Serbinenko 422e6e886c * util/grub-mkrescue.c (main): Check that fread succeeded. 2013-11-29 03:54:21 +01:00
Vladimir Serbinenko af1faca3f8 * conf/Makefile.common: Remove -mexplicit-relocs and -DUSE_ASCII_FALLBACK on yeeloong.
-DUSE_ASCII_FALLBACK is already added by font snippets.
	-mexplicit-relocs isn't needed is compiler/assemblera are
	configured properly.
	If they're not we shouldn't attempt to fix it by ourselves.
	Binary compare between before and after shows no difference.
2013-11-29 03:45:50 +01:00
Vladimir Serbinenko 469021b4b3 Remove libgnulib.a and use its sources in dependencies directly.
This was the only instance of "library" in core config. A bug was
	reported that -fno-stack-protector wasn't passed to it. Instead of
	figuring out why it failed just remove this construction used
	needlessly.
2013-11-29 03:36:50 +01:00
Vladimir Serbinenko 83c256ba42 * grub-core/osdep/unix/password.c (grub_password_get): Check that
fgets succeeded.
2013-11-29 03:32:57 +01:00
Francesco Lavra b67422d33d Fix command description in case of a device name passed as argument. 2013-11-28 17:25:52 +04:00
Colin Watson 827d87e9d6 Fix documentation of timeout expiry. 2013-11-28 11:01:53 +00:00
Colin Watson 8f236c1419 Revamp hidden timeout handling
Add a new timeout_style environment variable and a corresponding
GRUB_TIMEOUT_STYLE configuration key for grub-mkconfig.  This
controls hidden-timeout handling more simply than the previous
arrangements, and pressing any hotkeys associated with menu entries
during the hidden timeout will now boot the corresponding menu entry
immediately.

GRUB_HIDDEN_TIMEOUT=<non-empty> + GRUB_TIMEOUT=<non-zero> now
generates a warning, and if it shows the menu it will do so as if
the second timeout were not present.  Other combinations are
translated into reasonable equivalents.
2013-11-28 02:29:15 +00:00
Vladimir Serbinenko 2d76b4d81e Eliminate variable length arrays in grub_vsnprintf_real.
A bit tricky because this function has to continue to work without
	heap for short strings. Fixing prealloc to 32 arguments is reasonable
	but make all stack references use 32-bit offset rather than 8-bit one.
	So split va_args preparsing to separate function and put the prealloc
	into the caller.
2013-11-27 15:16:09 +01:00
Vladimir Serbinenko 4f9541226c Introduce grub_util_file_sync and use it instead of fsync(fileno(f)).
Fixes build for windows.
2013-11-27 14:13:50 +01:00
Vladimir Serbinenko b1f742c103 * gentpl.py: Don't generate platform-dependent conditionals for
platform-independent targets.
2013-11-27 14:10:04 +01:00
Colin Watson 16ef26fd3a * grub-core/osdep/unix/exec.c (grub_util_exec_redirect): Remove
references to mdadm from otherwise generic code.
(grub_util_exec_pipe): Likewise.
(grub_util_exec_pipe_stderr): Likewise.
* grub-core/osdep/unix/getroot.c (grub_util_pull_lvm_by_command):
This function calls vgs, not mdadm; adjust variable names
accordingly.
2013-11-27 11:22:31 +00:00
Colin Watson cf8c80ff77 Merge branch 'new-autogen' 2013-11-27 10:57:27 +00:00
Colin Watson 5c7206e45e Speed up test suite by avoiding fsync
Add grub_util_disable_fd_syncs call to turn grub_util_fd_sync calls into
no-ops, and use it in programs that copy files but do not need to take
special care to sync writes (grub-mknetdir, grub-rescue,
grub-mkstandalone).

On my laptop, this reduces partmap_test's runtime from 1236 seconds to
204 seconds.
2013-11-27 10:10:22 +00:00
Colin Watson fc3f2b72cd * tests/util/grub-fs-tester.in: Execute xorriso from $PATH rather
than hardcoding /usr/local/bin/xorriso.
2013-11-26 23:51:48 +00:00
Colin Watson 34b2003def Handle #if/#endif and C-style comments in AutoGen definitions files. 2013-11-26 17:48:20 +00:00
Colin Watson 7e90f5ad25 Show file name in error messages from AutogenParser. 2013-11-26 17:42:56 +00:00
Colin Watson ab4f15013a Generate Makefile.*.am directly from gentpl.py, eliminating the use of Autogen. The Autogen definitions files remain intact as they offer a useful abstraction. 2013-11-26 17:13:01 +00:00
Vladimir Serbinenko 1e4b358720 Add PCI command activation to all PCI drivers as required for coreboot
and maybe some other firmwares.
2013-11-26 14:21:11 +01:00
Vladimir Serbinenko 9208367d3f * grub-core/Makefile.am: Reduce gratuituous differences between Apple
and non-Apple variants of efiemu compile.
2013-11-26 11:38:12 +01:00
Andrey Borzenkov 67b9b7afd7 Add ChangeLog entry for previous commit 2013-11-25 23:14:04 +04:00
Andrey Borzenkov c2b70d0981 Explicitly check for linking format to use for efiemu64 module
Similar to check for target linking format, also check for efiemu64
instead of hardcoding -melf_x86_64. This fixes compilation on *BSD
variants. We cannot easily reuse main target check because platforms
are different (main target is 32 bit and efiemu64 - 64 bit).

This commit adds EFIEMU64_LINK_FORMAT that contains detected
link option and is used in efiemu64.o linking instead of hardcoded
value.

Reported-By: Beeblebrox <zaphod@berentweb.com>
2013-11-25 22:32:55 +04:00
Vladimir Serbinenko bee1b5ce3f * util/grub-mknetdir.c: Look for platform directories under pkglibdir
and not pkgdatadir.
2013-11-25 19:16:05 +01:00
Colin Watson 07e3b04742 Add a --locale-directory option to grub-install and related tools.
* include/grub/util/install.h (GRUB_INSTALL_OPTIONS): Add
--locale-directory option.
(enum grub_install_options): Add
GRUB_INSTALL_OPTIONS_LOCALE_DIRECTORY.
* util/grub-install-common.c (grub_install_help_filter): Handle
GRUB_INSTALL_OPTIONS_LOCALE_DIRECTORY.
(grub_install_parse): Likewise.
(get_localedir): New function to check for a user-provided option
before trying grub_util_get_localedir.
(copy_locales): Use get_localedir rather than
grub_util_get_localedir.  Handle differing locale directory layouts.
(grub_install_copy_files): Likewise.
2013-11-25 18:04:50 +00:00
475 changed files with 19289 additions and 5452 deletions

No files matched your search

+37 -14
View File
@@ -11,7 +11,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
@@ -32,48 +31,63 @@ 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-file
/grub-file.exe
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-macbless
/grub-macbless.exe
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
@@ -104,17 +118,20 @@ 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
/grub-syslinux2cfg
/grub-syslinux2cfg.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
@@ -159,7 +176,6 @@ GPATH
GRTAGS GRTAGS
GSYMS GSYMS
GTAGS GTAGS
Makefile.tpl
compile compile
depcomp depcomp
mdate-sh mdate-sh
@@ -182,7 +198,9 @@ 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
grub-core/kernel.img.bin
util/bash-completion.d/grub util/bash-completion.d/grub
grub-core/gnulib/alloca.h grub-core/gnulib/alloca.h
grub-core/gnulib/arg-nonnull.h grub-core/gnulib/arg-nonnull.h
@@ -203,7 +221,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
@@ -217,9 +235,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
+2310
View File
File diff suppressed because it is too large. Load diff
+13 -12
View File
@@ -17,16 +17,16 @@ 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
Note: clang 3.3 or later works for mips(el) Note: clang 3.3 or later works for mips(el)
earlier versions fail to generate .reginfo and hence gprel relocations earlier versions fail to generate .reginfo and hence gprel relocations
fail. fail.
Note: clang 3.4 or later works for powerpc Note: clang 3.2 or later works for powerpc
earlier versions suffer from vacopy bug (#15286) 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
@@ -35,6 +35,7 @@ configuring the GRUB.
* GNU binutils 2.9.1.0.23 or later * GNU binutils 2.9.1.0.23 or later
* Flex 2.5.35 or later * Flex 2.5.35 or later
* Other standard GNU/Unix tools * Other standard GNU/Unix tools
* a libc with large file support (e.g. glibc 2.1 or later)
On GNU/Linux, you also need: On GNU/Linux, you also need:
@@ -54,10 +55,9 @@ To build GRUB's graphical terminal (gfxterm), you need:
If you use a development snapshot or want to hack on GRUB you may If you use a development snapshot or want to hack on GRUB you may
need the following. need the following.
* Python 2.5.2 or later * Python 2.6 or later
* Autoconf 2.60 or later * Autoconf 2.60 or later
* Automake 1.10.1 or later * Automake 1.10.1 or later
* Autogen 5.10 or later
Prerequisites for make-check: Prerequisites for make-check:
@@ -141,7 +141,7 @@ If build and host are different make check isn't available.
If build and host are different man pages are not generated. If build and host are different man pages are not generated.
As an example imagine you have a build system running on FreeBSD on sparc As an example imagine you have a build system running on FreeBSD on sparc
which prepares packages for developpers running amd64 GNU/Linux laptop and which prepares packages for developers running amd64 GNU/Linux laptop and
they need to make images for ARM board running U-boot. In this case: they need to make images for ARM board running U-boot. In this case:
build=sparc64-freebsd build=sparc64-freebsd
@@ -150,7 +150,7 @@ target=arm-uboot
For this example the configure line might look like (more details below) For this example the configure line might look like (more details below)
(some options are optional and included here for completeness but some rarely (some options are optional and included here for completeness but some rarely
used options are omited): used options are omitted):
./configure BUILD_CC=gcc BUILD_FREETYPE=freetype-config --host=amd64-linux-gnu ./configure BUILD_CC=gcc BUILD_FREETYPE=freetype-config --host=amd64-linux-gnu
CC=amd64-linux-gnu-gcc CFLAGS="-g -O2" FREETYPE=amd64-linux-gnu-freetype-config CC=amd64-linux-gnu-gcc CFLAGS="-g -O2" FREETYPE=amd64-linux-gnu-freetype-config
@@ -169,7 +169,8 @@ corresponding platform are not needed for the platform in question.
generate sin and cos tables. generate sin and cos tables.
2. BUILD_CFLAGS= for C options for build. 2. BUILD_CFLAGS= for C options for build.
3. BUILD_CPPFLAGS= for C preprocessor options for build. 3. BUILD_CPPFLAGS= for C preprocessor options for build.
4. BUILD_FREETYPE= for freetype-config for build (optional). 4. BUILD_LDFLAGS= for linker options for build.
5. BUILD_FREETYPE= for freetype-config for build (optional).
- For host - For host
1. --host= to autoconf name of host. 1. --host= to autoconf name of host.
@@ -197,9 +198,9 @@ corresponding platform are not needed for the platform in question.
11. TARGET_RANLIB= for ranlib for target. 11. TARGET_RANLIB= for ranlib for target.
- Additionally for emu, for host and target. - Additionally for emu, for host and target.
1. SDL is looked for in stadard linker directories (-lSDL) (optional) 1. SDL is looked for in standard linker directories (-lSDL) (optional)
2. libpciaccess is looked for in stadard linker directories (-lpciaccess) (optional) 2. libpciaccess is looked for in standard linker directories (-lpciaccess) (optional)
3. libusb is looked for in stadard linker directories (-lusb) (optional) 3. libusb is looked for in standard linker directories (-lusb) (optional)
- Platform-agnostic tools and data. - Platform-agnostic tools and data.
1. make is the tool you execute after ./configure. 1. make is the tool you execute after ./configure.
+34 -22
View File
@@ -1,7 +1,11 @@
AUTOMAKE_OPTIONS = subdir-objects -Wno-portability AUTOMAKE_OPTIONS = subdir-objects -Wno-portability
DEPDIR = .deps-util DEPDIR = .deps-util
SUBDIRS = grub-core/gnulib . grub-core po docs util/bash-completion.d SUBDIRS = grub-core/gnulib .
if COND_real_platform
SUBDIRS += grub-core
endif
SUBDIRS += po docs util/bash-completion.d
include $(top_srcdir)/conf/Makefile.common include $(top_srcdir)/conf/Makefile.common
include $(top_srcdir)/conf/Makefile.extra-dist include $(top_srcdir)/conf/Makefile.extra-dist
@@ -66,22 +70,22 @@ endif
starfield_theme_files = $(srcdir)/themes/starfield/blob_w.png $(srcdir)/themes/starfield/boot_menu_c.png $(srcdir)/themes/starfield/boot_menu_e.png $(srcdir)/themes/starfield/boot_menu_ne.png $(srcdir)/themes/starfield/boot_menu_n.png $(srcdir)/themes/starfield/boot_menu_nw.png $(srcdir)/themes/starfield/boot_menu_se.png $(srcdir)/themes/starfield/boot_menu_s.png $(srcdir)/themes/starfield/boot_menu_sw.png $(srcdir)/themes/starfield/boot_menu_w.png $(srcdir)/themes/starfield/slider_c.png $(srcdir)/themes/starfield/slider_n.png $(srcdir)/themes/starfield/slider_s.png $(srcdir)/themes/starfield/starfield.png $(srcdir)/themes/starfield/terminal_box_c.png $(srcdir)/themes/starfield/terminal_box_e.png $(srcdir)/themes/starfield/terminal_box_ne.png $(srcdir)/themes/starfield/terminal_box_n.png $(srcdir)/themes/starfield/terminal_box_nw.png $(srcdir)/themes/starfield/terminal_box_se.png $(srcdir)/themes/starfield/terminal_box_s.png $(srcdir)/themes/starfield/terminal_box_sw.png $(srcdir)/themes/starfield/terminal_box_w.png $(srcdir)/themes/starfield/theme.txt $(srcdir)/themes/starfield/README $(srcdir)/themes/starfield/COPYING.CC-BY-SA-3.0 starfield_theme_files = $(srcdir)/themes/starfield/blob_w.png $(srcdir)/themes/starfield/boot_menu_c.png $(srcdir)/themes/starfield/boot_menu_e.png $(srcdir)/themes/starfield/boot_menu_ne.png $(srcdir)/themes/starfield/boot_menu_n.png $(srcdir)/themes/starfield/boot_menu_nw.png $(srcdir)/themes/starfield/boot_menu_se.png $(srcdir)/themes/starfield/boot_menu_s.png $(srcdir)/themes/starfield/boot_menu_sw.png $(srcdir)/themes/starfield/boot_menu_w.png $(srcdir)/themes/starfield/slider_c.png $(srcdir)/themes/starfield/slider_n.png $(srcdir)/themes/starfield/slider_s.png $(srcdir)/themes/starfield/starfield.png $(srcdir)/themes/starfield/terminal_box_c.png $(srcdir)/themes/starfield/terminal_box_e.png $(srcdir)/themes/starfield/terminal_box_ne.png $(srcdir)/themes/starfield/terminal_box_n.png $(srcdir)/themes/starfield/terminal_box_nw.png $(srcdir)/themes/starfield/terminal_box_se.png $(srcdir)/themes/starfield/terminal_box_s.png $(srcdir)/themes/starfield/terminal_box_sw.png $(srcdir)/themes/starfield/terminal_box_w.png $(srcdir)/themes/starfield/theme.txt $(srcdir)/themes/starfield/README $(srcdir)/themes/starfield/COPYING.CC-BY-SA-3.0
build-grub-mkfont: util/grub-mkfont.c grub-core/unidata.c grub-core/kern/emu/misc.c util/misc.c build-grub-mkfont$(BUILD_EXEEXT): util/grub-mkfont.c grub-core/unidata.c grub-core/kern/emu/misc.c util/misc.c
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-mkfont\" $^ $(build_freetype_cflags) $(build_freetype_libs) $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-mkfont\" $^ $(build_freetype_cflags) $(build_freetype_libs)
CLEANFILES += build-grub-mkfont CLEANFILES += build-grub-mkfont$(BUILD_EXEEXT)
garbage-gen: util/garbage-gen.c garbage-gen$(BUILD_EXEEXT): util/garbage-gen.c
$(BUILD_CC) -o $@ $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $^ $(BUILD_CC) -o $@ $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $^
CLEANFILES += garbage-gen CLEANFILES += garbage-gen$(BUILD_EXEEXT)
EXTRA_DIST += util/garbage-gen.c EXTRA_DIST += util/garbage-gen.c
build-grub-gen-asciih: util/grub-gen-asciih.c build-grub-gen-asciih$(BUILD_EXEEXT): util/grub-gen-asciih.c
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror
CLEANFILES += build-grub-gen-asciih CLEANFILES += build-grub-gen-asciih$(BUILD_EXEEXT)
build-grub-gen-widthspec: util/grub-gen-widthspec.c build-grub-gen-widthspec$(BUILD_EXEEXT): util/grub-gen-widthspec.c
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror
CLEANFILES += build-grub-gen-widthspec CLEANFILES += build-grub-gen-widthspec$(BUILD_EXEEXT)
if COND_STARFIELD if COND_STARFIELD
starfield_DATA = dejavu_10.pf2 dejavu_12.pf2 dejavu_bold_14.pf2 dejavu_14.pf2 dejavu_16.pf2 $(starfield_theme_files) starfield_DATA = dejavu_10.pf2 dejavu_12.pf2 dejavu_bold_14.pf2 dejavu_14.pf2 dejavu_16.pf2 $(starfield_theme_files)
@@ -103,7 +107,7 @@ EXTRA_DIST += $(starfield_theme_files)
EXTRA_DIST += $(srcdir)/themes/starfield/src/slider_s.xcf $(srcdir)/themes/starfield/src/slider_n.xcf $(srcdir)/themes/starfield/src/slider_c.xcf $(srcdir)/themes/starfield/src/blob_nw.xcf $(srcdir)/themes/starfield/src/bootmenu/center.xcf $(srcdir)/themes/starfield/src/bootmenu/corner.xcf $(srcdir)/themes/starfield/src/bootmenu/side.xcf $(srcdir)/themes/starfield/src/terminalbox/side.xcf $(srcdir)/themes/starfield/src/terminalbox/corner.xcf $(srcdir)/themes/starfield/src/terminalbox/center.xcf EXTRA_DIST += $(srcdir)/themes/starfield/src/slider_s.xcf $(srcdir)/themes/starfield/src/slider_n.xcf $(srcdir)/themes/starfield/src/slider_c.xcf $(srcdir)/themes/starfield/src/blob_nw.xcf $(srcdir)/themes/starfield/src/bootmenu/center.xcf $(srcdir)/themes/starfield/src/bootmenu/corner.xcf $(srcdir)/themes/starfield/src/bootmenu/side.xcf $(srcdir)/themes/starfield/src/terminalbox/side.xcf $(srcdir)/themes/starfield/src/terminalbox/corner.xcf $(srcdir)/themes/starfield/src/terminalbox/center.xcf
unicode.pf2: $(FONT_SOURCE) build-grub-mkfont unicode.pf2: $(FONT_SOURCE) build-grub-mkfont
./build-grub-mkfont -o $@ $(FONT_SOURCE) ./build-grub-mkfont -o $@ $(FONT_SOURCE) || (rm -f $@; exit 1)
CLEANFILES += unicode.pf2 CLEANFILES += unicode.pf2
# Arrows and lines are needed to draw the menu, so always include them # Arrows and lines are needed to draw the menu, so always include them
@@ -111,27 +115,29 @@ UNICODE_ARROWS=0x2190-0x2193
UNICODE_LINES=0x2501-0x251B UNICODE_LINES=0x2501-0x251B
ascii.pf2: $(FONT_SOURCE) build-grub-mkfont ascii.pf2: $(FONT_SOURCE) build-grub-mkfont
./build-grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES) ./build-grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x7f,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1)
CLEANFILES += ascii.pf2 CLEANFILES += ascii.pf2
euro.pf2: $(FONT_SOURCE) build-grub-mkfont euro.pf2: $(FONT_SOURCE) build-grub-mkfont
./build-grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x4ff,0x1e00-0x1fff,$(UNICODE_ARROWS),$(UNICODE_LINES) ./build-grub-mkfont -o $@ $(FONT_SOURCE) -r 0x0-0x4ff,0x1e00-0x1fff,$(UNICODE_ARROWS),$(UNICODE_LINES) || (rm -f $@; exit 1)
CLEANFILES += euro.pf2 CLEANFILES += euro.pf2
ascii.h: $(FONT_SOURCE) build-grub-gen-asciih ascii.h: $(FONT_SOURCE) build-grub-gen-asciih
./build-grub-gen-asciih $(FONT_SOURCE) $@ ./build-grub-gen-asciih $(FONT_SOURCE) $@ || (rm -f $@; exit 1)
CLEANFILES += ascii.h CLEANFILES += ascii.h
widthspec.h: $(FONT_SOURCE) build-grub-gen-widthspec widthspec.h: $(FONT_SOURCE) build-grub-gen-widthspec
./build-grub-gen-widthspec $(FONT_SOURCE) $@ ./build-grub-gen-widthspec $(FONT_SOURCE) $@ || (rm -f $@; exit 1)
CLEANFILES += widthspec.h CLEANFILES += widthspec.h
# Install config.h into platformdir # Install config.h into platformdir
platform_HEADERS = config.h nodist_platform_HEADERS = config.h
pkgdata_DATA += grub-mkconfig_lib pkgdata_DATA += grub-mkconfig_lib
if COND_real_platform
if COND_i386_coreboot if COND_i386_coreboot
QEMU32=qemu-system-i386 QEMU32=qemu-system-i386
endif endif
@@ -383,8 +389,6 @@ if COND_powerpc_ieee1275
BOOTCHECKS = bootcheck-linux-ppc BOOTCHECKS = bootcheck-linux-ppc
endif endif
EXTRA_DIST += grub-core/tests/boot/kbsd.init-i386.S grub-core/tests/boot/kbsd.init-x86_64.S grub-core/tests/boot/kbsd.spec.txt grub-core/tests/boot/kernel-8086.S grub-core/tests/boot/kernel-i386.S grub-core/tests/boot/kfreebsd-aout.cfg grub-core/tests/boot/kfreebsd.cfg grub-core/tests/boot/kfreebsd.init-i386.S grub-core/tests/boot/kfreebsd.init-x86_64.S grub-core/tests/boot/knetbsd.cfg grub-core/tests/boot/kopenbsd.cfg grub-core/tests/boot/kopenbsdlabel.txt grub-core/tests/boot/linux16.cfg grub-core/tests/boot/linux.cfg grub-core/tests/boot/linux.init-i386.S grub-core/tests/boot/linux.init-mips.S grub-core/tests/boot/linux.init-ppc.S grub-core/tests/boot/linux.init-x86_64.S grub-core/tests/boot/linux-ppc.cfg grub-core/tests/boot/multiboot2.cfg grub-core/tests/boot/multiboot.cfg grub-core/tests/boot/ntldr.cfg grub-core/tests/boot/pc-chainloader.cfg grub-core/tests/boot/qemu-shutdown-x86.S
.PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \ .PHONY: bootcheck-linux-i386 bootcheck-linux-x86_64 \
bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \ bootcheck-kfreebsd-i386 bootcheck-kfreebsd-x86_64 \
bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 \ bootcheck-knetbsd-i386 bootcheck-knetbsd-x86_64 \
@@ -399,9 +403,13 @@ bootcheck: $(BOOTCHECKS)
if COND_i386_coreboot if COND_i386_coreboot
default_payload.elf: grub-mkstandalone grub-mkimage default_payload.elf: grub-mkstandalone grub-mkimage
pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos xfs ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos xfs ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial multiboot cbmemc linux16 gzio echo help' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
endif endif
endif
EXTRA_DIST += grub-core/tests/boot/kbsd.init-i386.S grub-core/tests/boot/kbsd.init-x86_64.S grub-core/tests/boot/kbsd.spec.txt grub-core/tests/boot/kernel-8086.S grub-core/tests/boot/kernel-i386.S grub-core/tests/boot/kfreebsd-aout.cfg grub-core/tests/boot/kfreebsd.cfg grub-core/tests/boot/kfreebsd.init-i386.S grub-core/tests/boot/kfreebsd.init-x86_64.S grub-core/tests/boot/knetbsd.cfg grub-core/tests/boot/kopenbsd.cfg grub-core/tests/boot/kopenbsdlabel.txt grub-core/tests/boot/linux16.cfg grub-core/tests/boot/linux.cfg grub-core/tests/boot/linux.init-i386.S grub-core/tests/boot/linux.init-mips.S grub-core/tests/boot/linux.init-ppc.S grub-core/tests/boot/linux.init-x86_64.S grub-core/tests/boot/linux-ppc.cfg grub-core/tests/boot/multiboot2.cfg grub-core/tests/boot/multiboot.cfg grub-core/tests/boot/ntldr.cfg grub-core/tests/boot/pc-chainloader.cfg grub-core/tests/boot/qemu-shutdown-x86.S
windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows
windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA) windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA)
test -d $(windowsdir) && rm -rf $(windowsdir) || true test -d $(windowsdir) && rm -rf $(windowsdir) || true
@@ -420,10 +428,14 @@ windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA)
for x in $(starfield_DATA); do \ for x in $(starfield_DATA); do \
cp -fp $$x $(windowsdir)/themes/starfield/$$(basename $$x); \ cp -fp $$x $(windowsdir)/themes/starfield/$$(basename $$x); \
done done
for x in $(GRUB_WINDOWS_EXTRA_DIST); do \
cp -fp $$x $(windowsdir); \
done
windowszip=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows.zip windowszip=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows.zip
windowszip: windowsdir windowszip: windowsdir
test -f $(windowszip) && rm $(windowszip) || true test -f $(windowszip) && rm $(windowszip) || true
zip -r $(windowszip) $(windowsdir) zip -r $(windowszip) $(windowsdir)
rm -rf $(windowsdir)
EXTRA_DIST += linguas.sh EXTRA_DIST += linguas.sh
+76 -2
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;
@@ -382,7 +384,7 @@ program = {
ldadd = libgrubgcry.a; ldadd = libgrubgcry.a;
ldadd = libgrubkern.a; ldadd = libgrubkern.a;
ldadd = grub-core/gnulib/libgnu.a; ldadd = grub-core/gnulib/libgnu.a;
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBGEOM)'; ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBUTIL) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
}; };
program = { program = {
@@ -400,6 +402,21 @@ program = {
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
}; };
program = {
name = grub-macbless;
installdir = sbin;
mansection = 8;
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;
@@ -544,6 +561,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;
@@ -590,6 +608,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;
@@ -687,7 +708,7 @@ script = {
name = grub-fs-tester; name = grub-fs-tester;
common = tests/util/grub-fs-tester.in; common = tests/util/grub-fs-tester.in;
installdir = noinst; installdir = noinst;
dependencies = garbage-gen; dependencies = 'garbage-gen$(BUILD_EXEEXT)';
}; };
script = { script = {
@@ -1129,6 +1150,12 @@ script = {
common = tests/grub_cmd_tr.in; common = tests/grub_cmd_tr.in;
}; };
script = {
testcase;
name = file_filter_test;
common = tests/file_filter_test.in;
};
program = { program = {
testcase; testcase;
name = example_unit_test; name = example_unit_test;
@@ -1221,6 +1248,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;
@@ -1254,3 +1299,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)';
};
+149 -2
View File
@@ -1,3 +1,151 @@
New in 2.02:
* New/improved filesystem and disk support:
* Big-endian UFS1.
* Experimental 64-bit ext2 support.
* Various fixes for non-512-byte sector devices.
* New `proc' filesystem framework, used by LUKS disks.
* Fix DM-RAID partition handling.
* New `nativedisk' command to switch from firmware to native disk drivers.
* Compressed HFS+.
* DragonFly BSD labels.
* CBFS (coreboot).
* Handle partitioned LVM properly.
* Use LVM UUIDs whenever possible.
* GPT PReP.
* New `progress' module that shows progress information while reading
files.
* ZFS features support.
* ZFS LZ4 support.
* New/improved terminal and video support:
* Monochrome text (matching `hercules' in GRUB Legacy).
* Morse code output using system speaker.
* `spkmodem' output (simple data protocol using system speaker).
* Handle Japanese special keys.
* coreboot framebuffer.
* Serial on ARC.
* Native vt100 handling for grub-emu, replacing the use of the curses
library.
* New gfxmenu options for terminal window positioning, theme background
image handling, and scrollbar padding, plus `item_pixmap_style' and
`highlight_overlay'.
* Support several more image types (paletted and greyscale).
* Boot protocol improvements:
* Support Apple FAT binaries on non-Apple platforms.
* Improve FreeDOS direct loading support compatibility.
* Enable `linux16' on all x86 platforms, not just BIOS.
* New TrueCrypt ISO loader.
* multiboot2 boot-services EFI specification.
* multiboot2 EFI memory map specification.
* multiboot2 full-file specfication.
* New/improved network support:
* New variables `net_default_*' containing properties of the default
interface.
* Autoload `http' and `tftp' modules if necessary.
* Improve TFTP robustness.
* Parse `nd' disk names in GRUB Legacy configuration files.
* Issue separate DNS queries for IPv4 and IPv6.
* Coreboot improvements:
* CBFS support both in on-disk images (loopback) and flash.
* Ability to launch another payload from flash or disk
* Coreboot framebuffer
* CBMEMC support (both logging and inspecting logs)
* Command for inspecting coreboot timestamps (`coreboot_boottime').
* Command for inspecting coreboot tables (`lscoreboot').
* New target default_payload.elf.
* Increased maximal core size.
* New/improved platform support:
* New `efifwsetup' and `lsefi' commands on EFI platforms.
* New `cmosdump' and `cmosset' commands on platforms with CMOS support.
* New command `pcidump' for PCI platforms.
* Improve opcode parsing in ACPI halt implementation.
* Use the TSC as a possible time source on i386-ieee1275.
* Merge PowerPC grub-mkrescue implementation with the common one.
* Support grub-mkrescue on i386-ieee1275, sparc64, bootinfo machines such
as pSeries, and mips-arc.
* Make grub-mkrescue better support Apple Intel Macs on CD.
* Enable GRUB Legacy configuration file parsing on EFI.
* Support halt for Loongson 2E.
* ARM U-Boot and EFI ports.
* Reorganise platform-dependent code in utilities to avoid #ifdef mess.
* AROS and Haiku support for userspace utilities.
* Xen PV port.
* Fix EFI stack alignment.
* ARM64 EFI port.
* On Linux, read partition start offsets from sysfs if possible.
* New grub-macbless utility, and better integration with Mac firmware in
grub-install.
* Support Yeeloong 3A.
* Add `cpuid --pae' option to detect Physical Address Extension on x86.
* Support for USB debug dongles.
* Support for *-emu on all platforms (previously only i386/x86_64 worked).
* Support *-emu on Windows.
* Security:
* Add optional facility to enforce that all files read by the core image
from disk have a valid detached digital signature.
* Performance:
* Avoid costly division operations in many places.
* New boot time analysis framework (`./configure --enable-boot-time').
* Initialise USB ports in parallel.
* New `testspeed' command to test file read speed.
* Speed-up gfxterm by storing intermediate results in more compact format.
* Lazy LVM/mdraid scan.
* Disk hints.
* Scripting:
* New `eval' and `tr' commands.
* grub-script-check fails on scripts containing no commands.
* Installation and other utility improvements:
* Add option to compress files on installation or image creation.
* Using grub-reboot no longer requires setting `GRUB_DEFAULT=saved'.
* Support probing EFI System Partition (requires os-prober >= 1.58).
* Fix inconsistent use of `GRUB_CRYPTODISK_ENABLE' and
`GRUB_ENABLE_CRYPTODISK'; the latter is now used consistently.
* grub-mount handles symbolic links to directories.
* Support disabling submenus with `GRUB_DISABLE_SUBMENU' configuration key
for grub-mkconfig.
* grub-install, grub-mknetdir, grub-mkrescue, and grub-mkstandalone
rewritten in C. They should now work in supported non-Unix-like
environments.
* Native mingw support.
* Ability to install on EFI under windows.
* Reorganise timeout handling using new `timeout_style' environment
variable and `GRUB_TIMEOUT_STYLE' configuration key for grub-mkconfig.
Menu hotkeys pressed during a hidden timeout now boot the corresponding
menu entry immediately.
* New `file' command and grub-file utility to check file types.
* New syslinux configuration file parser.
* Build system:
* Remove all uses of nested functions; GRUB no longer requires an
executable stack.
* Fix documentation build with Texinfo >= 5.1.
* More robust and documented cross-compiling support.
* Partial clang support for some platforms (experimental).
* Partial mingw64 x86_64-efi compile support (highly experimental).
* Partial mingw32 i386-* (other than already present i386-pc)
compile support (highly experimental).
* Support for grub-mkpasswd on Windows.
* Eliminate the use of AutoGen. This allowed some performance
improvements to the build system.
* Remove variable length arrays.
* OpenBSD compile and tools support (NetBSD and FreeBSD were already supported).
* Fix build with FreeType >= 2.5.1.
* Make gentpl.py compatible with Python 3. It now requires at least
Python 2.6.
* modinfo.sh contains build information now.
* Added many new tests to improve robustness.
* Revision control moved to git.
New in 2.00: New in 2.00:
* Appearance: * Appearance:
@@ -24,7 +172,6 @@ New in 2.00:
* IEEE1275 serial. * IEEE1275 serial.
* EFI serial. * EFI serial.
* Network stack for BIOS, IEEE1275, EMU and EFI, including TFTP, HTTP and DNS. * Network stack for BIOS, IEEE1275, EMU and EFI, including TFTP, HTTP and DNS.
* VBE on coreboot support.
* New filesystem, filters and disks formats: * New filesystem, filters and disks formats:
* DVH partition map. * DVH partition map.
@@ -48,7 +195,7 @@ New in 2.00:
* multidevice, mirrored and raidz(2,3) ZFS support. * multidevice, mirrored and raidz(2,3) ZFS support.
* RAID LVM (internal RAIDing) support. * RAID LVM (internal RAIDing) support.
* ZFS crypto support. * ZFS crypto support.
* ZLE and GZIP on ZFS support. * ZLE, LZ4 and GZIP on ZFS support.
* Support ZFS up to 33. * Support ZFS up to 33.
* HFS string is now treated like mac-roman and not UTF-8 * HFS string is now treated like mac-roman and not UTF-8
* HFS mtime support. * HFS mtime support.
+31 -28
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])])
@@ -395,15 +418,15 @@ else
[fi] [fi]
]) ])
dnl Check if ln can handle directories properly (mingw). dnl Check if ln -s can handle directories properly (mingw).
AC_DEFUN([grub_CHECK_LINK_DIR],[ AC_DEFUN([grub_CHECK_LINK_DIR],[
AC_MSG_CHECKING([whether ln can handle directories properly]) AC_MSG_CHECKING([whether ln -s can handle directories properly])
[mkdir testdir 2>/dev/null [mkdir testdir 2>/dev/null
case $srcdir in case $srcdir in
[\\/$]* | ?:[\\/]* ) reldir=$srcdir/include/grub/util ;; [\\/$]* | ?:[\\/]* ) reldir=$srcdir/include/grub/util ;;
*) reldir=../$srcdir/include/grub/util ;; *) reldir=../$srcdir/include/grub/util ;;
esac esac
if ln -s $reldir testdir/util 2>/dev/null ; then] if ln -s $reldir testdir/util 2>/dev/null && rm -f testdir/util 2>/dev/null ; then]
AC_MSG_RESULT([yes]) AC_MSG_RESULT([yes])
[link_dir=yes [link_dir=yes
else else
@@ -474,23 +497,3 @@ dnl program.
AC_DEFUN([grub_TRANSFORM],[dnl AC_DEFUN([grub_TRANSFORM],[dnl
AC_SUBST(AS_TR_SH([$1]), [`AS_ECHO([$1]) | sed "$program_transform_name"`])dnl AC_SUBST(AS_TR_SH([$1]), [`AS_ECHO([$1]) | sed "$program_transform_name"`])dnl
]) ])
dnl Check if the C compiler supports `-mno-unaligned-access'.
AC_DEFUN([grub_CHECK_NO_UNALIGNED_ACCESS],[
[# foobar
nua_possible=yes]
AC_MSG_CHECKING([whether `$CC' supports `-mno-unaligned-access'])
AC_LANG_CONFTEST([AC_LANG_SOURCE([[
int main() {
return 0;
}
]])])
[if eval "$ac_compile -S -mno-unaligned-access -o conftest.s" 2> /dev/null; then]
AC_MSG_RESULT([yes])
[rm -f conftest.s
else
nua_possible=no]
AC_MSG_RESULT([no])
[fi]
])
+3 -8
View File
@@ -8,8 +8,6 @@ unset LC_ALL
find . -iname '*.[ch]' ! -ipath './grub-core/lib/libgcrypt-grub/*' ! -ipath './build-aux/*' ! -ipath './grub-core/lib/libgcrypt/src/misc.c' ! -ipath './grub-core/lib/libgcrypt/src/global.c' ! -ipath './grub-core/lib/libgcrypt/src/secmem.c' ! -ipath './util/grub-gen-widthspec.c' ! -ipath './util/grub-gen-asciih.c' |sort > po/POTFILES.in find . -iname '*.[ch]' ! -ipath './grub-core/lib/libgcrypt-grub/*' ! -ipath './build-aux/*' ! -ipath './grub-core/lib/libgcrypt/src/misc.c' ! -ipath './grub-core/lib/libgcrypt/src/global.c' ! -ipath './grub-core/lib/libgcrypt/src/secmem.c' ! -ipath './util/grub-gen-widthspec.c' ! -ipath './util/grub-gen-asciih.c' |sort > po/POTFILES.in
find util -iname '*.in' ! -name Makefile.in |sort > po/POTFILES-shell.in find util -iname '*.in' ! -name Makefile.in |sort > po/POTFILES-shell.in
autogen --version >/dev/null || exit 1
echo "Importing unicode..." echo "Importing unicode..."
python util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c python util/import_unicode.py unicode/UnicodeData.txt unicode/BidiMirroring.txt unicode/ArabicShaping.txt grub-core/unidata.c
@@ -32,10 +30,7 @@ for x in mpi-asm-defs.h mpih-add1.c mpih-sub1.c mpih-mul1.c mpih-mul2.c mpih-mul
ln -s generic/"$x" grub-core/lib/libgcrypt-grub/mpi/"$x" ln -s generic/"$x" grub-core/lib/libgcrypt-grub/mpi/"$x"
done done
echo "Creating Makefile.tpl..." echo "Generating Automake input..."
python gentpl.py | sed -e '/^$/{N;/^\n$/D;}' > Makefile.tpl
echo "Running autogen..."
# Automake doesn't like including files from a path outside the project. # Automake doesn't like including files from a path outside the project.
rm -f contrib grub-core/contrib rm -f contrib grub-core/contrib
@@ -59,8 +54,8 @@ for extra in contrib/*/Makefile.core.def; do
fi fi
done done
cat $UTIL_DEFS | autogen -T Makefile.tpl | sed -e '/^$/{N;/^\n$/D;}' > Makefile.util.am python gentpl.py $UTIL_DEFS > Makefile.util.am
cat $CORE_DEFS | autogen -T Makefile.tpl | sed -e '/^$/{N;/^\n$/D;}' > grub-core/Makefile.core.am python gentpl.py $CORE_DEFS > grub-core/Makefile.core.am
for extra in contrib/*/Makefile.common; do for extra in contrib/*/Makefile.common; do
if test -e "$extra"; then if test -e "$extra"; then
+13 -23
View File
@@ -6,19 +6,19 @@ export LC_COLLATE := C
unexport LC_ALL unexport LC_ALL
# Platform specific options # Platform specific options
if COND_mips_loongson
CFLAGS_PLATFORM += -mexplicit-relocs
CPPFLAGS_PLATFORM = -DUSE_ASCII_FALLBACK
endif
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 -mno-relax
endif endif
if COND_sparc64_emu
CFLAGS_PLATFORM += -mno-app-regs
LDFLAGS_PLATFORM = -Wl,--no-relax
endif
if COND_arm if COND_arm
CFLAGS_PLATFORM += -mthumb-interwork -mlong-calls if !COND_emu
CCASFLAGS_PLATFORM = -mthumb-interwork
LDFLAGS_PLATFORM = -Wl,--wrap=__clear_cache LDFLAGS_PLATFORM = -Wl,--wrap=__clear_cache
endif endif
endif
if COND_arm64 if COND_arm64
CFLAGS_PLATFORM += -mcmodel=large CFLAGS_PLATFORM += -mcmodel=large
endif endif
@@ -35,7 +35,6 @@ CPPFLAGS_DEFAULT += -I$(top_builddir)
CPPFLAGS_DEFAULT += -I$(top_srcdir) CPPFLAGS_DEFAULT += -I$(top_srcdir)
CPPFLAGS_DEFAULT += -I$(top_srcdir)/include CPPFLAGS_DEFAULT += -I$(top_srcdir)/include
CPPFLAGS_DEFAULT += -I$(top_builddir)/include CPPFLAGS_DEFAULT += -I$(top_builddir)/include
CPPFLAGS_DEFAULT += -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/include
CPPFLAGS_DEFAULT += -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/src/ CPPFLAGS_DEFAULT += -I$(top_srcdir)/grub-core/lib/libgcrypt-grub/src/
CCASFLAGS_DEFAULT = $(CPPFLAGS_DEFAULT) -DASM_FILE=1 CCASFLAGS_DEFAULT = $(CPPFLAGS_DEFAULT) -DASM_FILE=1
BUILD_CPPFLAGS += $(CPPFLAGS_DEFAULT) BUILD_CPPFLAGS += $(CPPFLAGS_DEFAULT)
@@ -46,11 +45,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
@@ -77,7 +72,7 @@ grubconfdir = $(sysconfdir)/grub.d
platformdir = $(pkglibdir)/$(target_cpu)-$(platform) platformdir = $(pkglibdir)/$(target_cpu)-$(platform)
starfielddir = $(pkgdatadir)/themes/starfield starfielddir = $(pkgdatadir)/themes/starfield
CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -Wno-unused-parameter -Wno-redundant-decls -Wno-unreachable-code -Wno-conversion -Wno-old-style-definition CFLAGS_GNULIB = -Wno-undef -Wno-sign-compare -Wno-unused -Wno-unused-parameter -Wno-redundant-decls -Wno-unreachable-code -Wno-conversion
CPPFLAGS_GNULIB = -I$(top_builddir)/grub-core/gnulib -I$(top_srcdir)/grub-core/gnulib CPPFLAGS_GNULIB = -I$(top_builddir)/grub-core/gnulib -I$(top_srcdir)/grub-core/gnulib
CFLAGS_POSIX = -fno-builtin CFLAGS_POSIX = -fno-builtin
@@ -134,20 +129,15 @@ EXTRA_DIST =
CLEANFILES = CLEANFILES =
BUILT_SOURCES = BUILT_SOURCES =
# Rules for autogen definition files # Rules for Automake input
.PRECIOUS: $(top_srcdir)/Makefile.tpl
$(top_srcdir)/Makefile.tpl: $(top_srcdir)/gentpl.py
python $< | sed -e '/^$$/{N;/^\\n$$/D;}' > $@.new || (rm -f $@.new; exit 1)
mv $@.new $@
.PRECIOUS: $(top_srcdir)/Makefile.util.am .PRECIOUS: $(top_srcdir)/Makefile.util.am
$(top_srcdir)/Makefile.util.am: $(top_srcdir)/Makefile.util.def $(top_srcdir)/Makefile.utilgcry.def $(top_srcdir)/Makefile.tpl $(top_srcdir)/Makefile.util.am: $(top_srcdir)/gentpl.py $(top_srcdir)/Makefile.util.def $(top_srcdir)/Makefile.utilgcry.def
cat $(top_srcdir)/Makefile.util.def $(top_srcdir)/Makefile.utilgcry.def | autogen -T $(top_srcdir)/Makefile.tpl | sed -e '/^$$/{N;/^\\n$$/D;}' > $@.new || (rm -f $@.new; exit 1) python $^ > $@.new || (rm -f $@.new; exit 1)
mv $@.new $@ mv $@.new $@
.PRECIOUS: $(top_srcdir)/grub-core/Makefile.core.am .PRECIOUS: $(top_srcdir)/grub-core/Makefile.core.am
$(top_srcdir)/grub-core/Makefile.core.am: $(top_srcdir)/grub-core/Makefile.core.def $(top_srcdir)/grub-core/Makefile.gcry.def $(top_srcdir)/Makefile.tpl $(top_srcdir)/grub-core/Makefile.core.am: $(top_srcdir)/gentpl.py $(top_srcdir)/grub-core/Makefile.core.def $(top_srcdir)/grub-core/Makefile.gcry.def
if [ "x$$GRUB_CONTRIB" != x ]; then echo "You need to run ./autogen.sh manually." >&2; exit 1; fi if [ "x$$GRUB_CONTRIB" != x ]; then echo "You need to run ./autogen.sh manually." >&2; exit 1; fi
cat $(top_srcdir)/grub-core/Makefile.core.def $(top_srcdir)/grub-core/Makefile.gcry.def | autogen -T $(top_srcdir)/Makefile.tpl | sed -e '/^$$/{N;/^\\n$$/D;}' > $@.new || (rm -f $@.new; exit 1) python $^ > $@.new || (rm -f $@.new; exit 1)
mv $@.new $@ mv $@.new $@
+12 -2
View File
@@ -2,7 +2,6 @@ EXTRA_DIST += autogen.sh
EXTRA_DIST += geninit.sh EXTRA_DIST += geninit.sh
EXTRA_DIST += gentpl.py EXTRA_DIST += gentpl.py
EXTRA_DIST += Makefile.tpl
EXTRA_DIST += Makefile.util.def EXTRA_DIST += Makefile.util.def
EXTRA_DIST += Makefile.utilgcry.def EXTRA_DIST += Makefile.utilgcry.def
@@ -16,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
@@ -111,3 +110,14 @@ EXTRA_DIST += tests/dfly-mbr-mbexample.mbr.img.gz
EXTRA_DIST += tests/dfly-mbr-mbexample.dfly.img.gz EXTRA_DIST += tests/dfly-mbr-mbexample.dfly.img.gz
EXTRA_DIST += coreboot.cfg EXTRA_DIST += coreboot.cfg
EXTRA_DIST += tests/file_filter/file
EXTRA_DIST += tests/file_filter/file.gz
EXTRA_DIST += tests/file_filter/file.gz.sig
EXTRA_DIST += tests/file_filter/file.lzop
EXTRA_DIST += tests/file_filter/file.lzop.sig
EXTRA_DIST += tests/file_filter/file.xz
EXTRA_DIST += tests/file_filter/file.xz.sig
EXTRA_DIST += tests/file_filter/keys
EXTRA_DIST += tests/file_filter/keys.pub
EXTRA_DIST += tests/file_filter/test.cfg
@@ -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 :
{ {
+1 -6
View File
@@ -28,6 +28,7 @@
#elif defined (GRUB_UTIL) || !defined (GRUB_MACHINE) #elif defined (GRUB_UTIL) || !defined (GRUB_MACHINE)
#include <config-util.h> #include <config-util.h>
#else #else
#define HAVE_FONT_SOURCE @HAVE_FONT_SOURCE@
/* Define if C symbols get an underscore after compilation. */ /* Define if C symbols get an underscore after compilation. */
#define HAVE_ASM_USCORE @HAVE_ASM_USCORE@ #define HAVE_ASM_USCORE @HAVE_ASM_USCORE@
/* Define it to \"addr32\" or \"addr32;\" to make GAS happy. */ /* Define it to \"addr32\" or \"addr32;\" to make GAS happy. */
@@ -50,12 +51,6 @@
#define PACKAGE_NAME "@PACKAGE_NAME@" #define PACKAGE_NAME "@PACKAGE_NAME@"
/* Define to the address where bug reports for this package should be sent. */ /* Define to the address where bug reports for this package should be sent. */
#define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@" #define PACKAGE_BUGREPORT "@PACKAGE_BUGREPORT@"
/* Default boot directory name" */
#define GRUB_BOOT_DIR_NAME "@bootdirname@"
/* Default grub directory name */
#define GRUB_DIR_NAME "@grubdirname@"
/* Define to 1 if GCC generates calls to __register_frame_info(). */
#define NEED_REGISTER_FRAME_INFO @NEED_REGISTER_FRAME_INFO@
#define GRUB_TARGET_CPU "@GRUB_TARGET_CPU@" #define GRUB_TARGET_CPU "@GRUB_TARGET_CPU@"
#define GRUB_PLATFORM "@GRUB_PLATFORM@" #define GRUB_PLATFORM "@GRUB_PLATFORM@"
+348 -99
View File
@@ -26,20 +26,20 @@ dnl This is necessary because the target type in autoconf does not
dnl describe such a system very well. dnl describe such a system very well.
dnl dnl
dnl The current strategy is to use variables with no prefix (such as dnl The current strategy is to use variables with no prefix (such as
dnl CC, CFLAGS, etc.) for the host type as well as the build type, dnl CC, CFLAGS, etc.) for the host type, variables with prefix "BUILD_"
dnl because GRUB does not need to use those variables for the build dnl (such as BUILD_CC, BUILD_CFLAGS, etc.) for the build type and variables
dnl type, so there is no conflict. Variables with the prefix "TARGET_" dnl with the prefix "TARGET_" (such as TARGET_CC, TARGET_CFLAGS, etc.) are
dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target dnl used for the target type. See INSTALL for full list of variables.
dnl type.
AC_INIT([GRUB],[2.00],[bug-grub@gnu.org]) AC_INIT([GRUB],[2.02~beta2],[bug-grub@gnu.org])
AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_AUX_DIR([build-aux])
# We don't want -g -O2 by default in CFLAGS # We don't want -g -O2 by default in CFLAGS
: ${CFLAGS=""} : ${CFLAGS=""}
# Checks for host and target systems. # Checks for build, host and target systems.
AC_CANONICAL_BUILD
AC_CANONICAL_HOST AC_CANONICAL_HOST
save_program_prefix="${program_prefix}" save_program_prefix="${program_prefix}"
AC_CANONICAL_TARGET AC_CANONICAL_TARGET
@@ -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
@@ -89,18 +90,18 @@ case "$target_cpu" in
amd64) target_cpu=x86_64 ;; amd64) target_cpu=x86_64 ;;
sparc) target_cpu=sparc64 ;; sparc) target_cpu=sparc64 ;;
mipsel|mips64el) mipsel|mips64el)
target_cpu=mipsel; target_cpu=mipsel
machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPSEL=1"; machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPSEL=1"
;; ;;
mips|mips64) mips|mips64)
target_cpu=mips; target_cpu=mips
machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPS=1"; machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_CPU_MIPS=1"
;; ;;
arm*) arm*)
target_cpu=arm; target_cpu=arm
;; ;;
aarch64*) aarch64*)
target_cpu=arm64; target_cpu=arm64
;; ;;
esac esac
@@ -118,13 +119,17 @@ if test "x$with_platform" = x; then
x86_64-*) platform=pc ;; x86_64-*) platform=pc ;;
powerpc-*) platform=ieee1275 ;; powerpc-*) platform=ieee1275 ;;
powerpc64-*) platform=ieee1275 ;; powerpc64-*) platform=ieee1275 ;;
powerpc64le-*) platform=ieee1275 ;;
sparc64-*) platform=ieee1275 ;; sparc64-*) platform=ieee1275 ;;
mipsel-*) platform=loongson ;; mipsel-*) platform=loongson ;;
mips-*) platform=arc ;; mips-*) platform=arc ;;
ia64-*) platform=efi ;; ia64-*) platform=efi ;;
arm-*) platform=uboot ;; arm-*) platform=uboot ;;
arm64-*) platform=efi ;; arm64-*) platform=efi ;;
*) AC_MSG_ERROR([unsupported CPU: "$target_cpu"]) ;; *)
AC_MSG_WARN([unsupported CPU: "$target_cpu" - only building utilities])
platform=none
;;
esac esac
else else
platform="$with_platform" platform="$with_platform"
@@ -134,8 +139,10 @@ case "$target_cpu"-"$platform" in
x86_64-efi) ;; x86_64-efi) ;;
x86_64-emu) ;; x86_64-emu) ;;
x86_64-xen) ;; x86_64-xen) ;;
x86_64-none) ;;
x86_64-*) target_cpu=i386 ;; x86_64-*) target_cpu=i386 ;;
powerpc64-ieee1275) target_cpu=powerpc ;; powerpc64-ieee1275) target_cpu=powerpc ;;
powerpc64le-ieee1275) target_cpu=powerpc ;;
esac esac
# Check if the platform is supported, make final adjustments. # Check if the platform is supported, make final adjustments.
@@ -166,6 +173,7 @@ case "$target_cpu"-"$platform" in
arm-efi) ;; arm-efi) ;;
arm64-efi) ;; arm64-efi) ;;
*-emu) ;; *-emu) ;;
*-none) ;;
*) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;; *) AC_MSG_ERROR([platform "$platform" is not supported for target CPU "$target_cpu"]) ;;
esac esac
@@ -176,6 +184,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
@@ -209,20 +221,14 @@ case "$platform" in
qemu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_QEMU=1" ;; qemu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_QEMU=1" ;;
pc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_PCBIOS=1" ;; pc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_PCBIOS=1" ;;
emu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EMU=1" ;; emu) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_EMU=1" ;;
loongson) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_LOONGSON=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; loongson) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_LOONGSON=1" ;;
qemu_mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_QEMU_MIPS=1 -DGRUB_MACHINE_MIPS_BONITO=1" ;; qemu_mips) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS_QEMU_MIPS=1" ;;
arc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARC=1" ;; arc) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARC=1" ;;
esac esac
case "$target_cpu" in
arm) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARM=1" ;;
arm64) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_ARM64=1" ;;
mips |mipsel) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_MIPS=1" ;;
sparc64) machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE_SPARC64=1" ;;
esac
if test x${target_cpu} = xmipsel ; then if test x${target_cpu} = xmipsel ; then
machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo mips_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`" machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo mips_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
else else
machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,` -DGRUB_TARGET_CPU_`echo ${target_cpu} | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`=1" machine_CPPFLAGS="$machine_CPPFLAGS -DGRUB_MACHINE=`echo ${target_cpu}_$platform | sed y,abcdefghijklmnopqrstuvwxyz,ABCDEFGHIJKLMNOPQRSTUVWXYZ,`"
fi fi
case "${target_cpu}-$platform" in case "${target_cpu}-$platform" in
@@ -345,6 +351,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)
@@ -357,6 +368,14 @@ case "$host_os" in
;; ;;
esac esac
case "$host_os" in
cygwin | windows* | mingw32* | aros*)
;;
*)
AC_CHECK_SIZEOF(off_t)
test x"$ac_cv_sizeof_off_t" = x8 || AC_MSG_ERROR([Large file support is required]);;
esac
if test x$USE_NLS = xno; then if test x$USE_NLS = xno; then
HOST_CFLAGS="$HOST_CFLAGS -fno-builtin-gettext" HOST_CFLAGS="$HOST_CFLAGS -fno-builtin-gettext"
fi fi
@@ -419,9 +438,39 @@ case "$build_os" in
haiku*) BUILD_LIBM= ;; haiku*) BUILD_LIBM= ;;
*) BUILD_LIBM=-lm ;; *) BUILD_LIBM=-lm ;;
esac esac
dnl FIXME proper test seems to require too deep dive into Autoconf internals.
dnl For now just list known platforms that we support.
case "$build_os" in
cygwin*|mingw32*|mingw64*) BUILD_EXEEXT=.exe ;;
*) BUILD_EXEEXT= ;;
esac
AC_SUBST(BUILD_EXEEXT)
# For gnulib. # For gnulib.
gl_INIT gl_INIT
WARN_FLAGS="-Wall -W -Wshadow -Wpointer-arith -Wundef -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Wmain -Wmissing-braces -Wmissing-format-attribute -Wmultichar -Wparentheses -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wswitch -Wtrigraphs -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wwrite-strings -Wnested-externs -Wstrict-prototypes"
EXTRA_WARN_FLAGS="-Wextra -Wattributes -Wendif-labels -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmissing-field-initializers -Wnonnull -Woverflow -Wvla -Wpointer-to-int-cast -Wstrict-aliasing -Wvariadic-macros -Wvolatile-register-var -Wpointer-sign -Wmissing-include-dirs -Wmissing-prototypes -Wmissing-declarations -Wformat=2"
HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align"
AC_CACHE_CHECK([which extra warnings work], [grub_cv_cc_w_extra_flags], [
SAVED_CFLAGS="$CFLAGS"
grub_cv_cc_w_extra_flags=
for x in $EXTRA_WARN_FLAGS; do
CFLAGS="$HOST_CFLAGS $x -Werror"
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
if test x$flag = x1 ; then
grub_cv_cc_w_extra_flags="$grub_cv_cc_w_extra_flags $x"
fi
done
CFLAGS="$SAVED_CFLAGS"
])
HOST_CFLAGS="$HOST_CFLAGS $grub_cv_cc_w_extra_flags"
# #
# Check for target programs. # Check for target programs.
# #
@@ -453,6 +502,7 @@ AC_SUBST(HOST_CC)
AC_SUBST(BUILD_CC) AC_SUBST(BUILD_CC)
AC_SUBST(BUILD_CFLAGS) AC_SUBST(BUILD_CFLAGS)
AC_SUBST(BUILD_CPPFLAGS) AC_SUBST(BUILD_CPPFLAGS)
AC_SUBST(BUILD_LDFLAGS)
AC_SUBST(TARGET_CC) AC_SUBST(TARGET_CC)
AC_SUBST(TARGET_NM) AC_SUBST(TARGET_NM)
AC_SUBST(TARGET_RANLIB) AC_SUBST(TARGET_RANLIB)
@@ -472,8 +522,6 @@ LDFLAGS="$TARGET_LDFLAGS"
LIBS="" LIBS=""
# debug flags. # debug flags.
WARN_FLAGS="-Wall -W -Wshadow -Wold-style-definition -Wpointer-arith -Wundef -Wextra -Wattributes -Wchar-subscripts -Wcomment -Wdeprecated-declarations -Wdisabled-optimization -Wdiv-by-zero -Wendif-labels -Wfloat-equal -Wformat-extra-args -Wformat-security -Wformat-y2k -Wimplicit -Wimplicit-function-declaration -Wimplicit-int -Winit-self -Wint-to-pointer-cast -Winvalid-pch -Wmain -Wmissing-braces -Wmissing-field-initializers -Wmissing-format-attribute -Wmultichar -Wnonnull -Woverflow -Wparentheses -Wpointer-arith -Wpointer-to-int-cast -Wreturn-type -Wsequence-point -Wshadow -Wsign-compare -Wstrict-aliasing -Wswitch -Wtrigraphs -Wundef -Wunknown-pragmas -Wunused -Wunused-function -Wunused-label -Wunused-parameter -Wunused-value -Wunused-variable -Wvariadic-macros -Wvolatile-register-var -Wwrite-strings -Wnested-externs -Wstrict-prototypes -Wpointer-sign"
HOST_CFLAGS="$HOST_CFLAGS $WARN_FLAGS -Wcast-align"
TARGET_CFLAGS="$TARGET_CFLAGS $WARN_FLAGS -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations" TARGET_CFLAGS="$TARGET_CFLAGS $WARN_FLAGS -g -Wredundant-decls -Wmissing-prototypes -Wmissing-declarations"
TARGET_CCASFLAGS="$TARGET_CCASFLAGS -g" TARGET_CCASFLAGS="$TARGET_CCASFLAGS -g"
@@ -481,8 +529,32 @@ if test "x$target_cpu" != xi386 && test "x$target_cpu" != xx86_64; then
TARGET_CFLAGS="$TARGET_CFLAGS -Wcast-align" TARGET_CFLAGS="$TARGET_CFLAGS -Wcast-align"
fi fi
TARGET_CC_VERSION="$(LC_ALL=C $TARGET_CC --version | head -n1)"
AC_CACHE_CHECK([which extra warnings work], [grub_cv_target_cc_w_extra_flags], [
LDFLAGS="$TARGET_LDFLAGS -nostdlib -static"
grub_cv_target_cc_w_extra_flags=
for x in $EXTRA_WARN_FLAGS; do
CFLAGS="$TARGET_CFLAGS $x -Werror"
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
grub_cv_target_cc_w_extra_flags="$grub_cv_target_cc_w_extra_flags $x"
fi
done
])
TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_w_extra_flags"
AC_CACHE_CHECK([if compiling with clang], [grub_cv_cc_target_clang] AC_CACHE_CHECK([if compiling with clang], [grub_cv_cc_target_clang]
[AC_COMPILE_IFELSE( [
CFLAGS="$TARGET_CFLAGS"
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([], [[ [AC_LANG_PROGRAM([], [[
#ifdef __clang__ #ifdef __clang__
#error "is clang" #error "is clang"
@@ -500,10 +572,36 @@ if test "x$grub_cv_cc_target_clang" = xyes && ( test "x$target_cpu" = xi386 \
TARGET_CCASFLAGS="$TARGET_CCASFLAGS -no-integrated-as" TARGET_CCASFLAGS="$TARGET_CCASFLAGS -no-integrated-as"
fi fi
if test "x$grub_cv_cc_target_clang" = xyes && test "x$target_cpu" = xpowerpc; then
AC_CACHE_CHECK([if clang can handle ame instruction], [grub_cv_cc_target_clang_ame]
[
CFLAGS="$TARGET_CFLAGS"
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM([], [[
unsigned int a = 0, b = 0;
asm volatile ("{ame|addme} %0,%1" : "=r" (a) : "r" (b));
if (a)
return 1;
]])],
[grub_cv_cc_target_clang_ame=yes], [grub_cv_cc_target_clang_ame=no])])
# clang <= 3.3 doesn't handle most of ppc assembly, not even inline assembly
# used by gcrypt
if test x$grub_cv_cc_target_clang_ame = xno ; then
TARGET_CCASFLAGS="$TARGET_CCASFLAGS -no-integrated-as"
TARGET_CFLAGS="$TARGET_CFLAGS -no-integrated-as"
fi
fi
if test "x$target_cpu" = xi386 && test "x$platform" != xemu; then if test "x$target_cpu" = xi386 && test "x$platform" != xemu; then
TARGET_CFLAGS="$TARGET_CFLAGS -march=i386" TARGET_CFLAGS="$TARGET_CFLAGS -march=i386"
fi fi
if test x$target_cpu = xpowerpc && test x$ac_cv_c_bigendian = xno; then
TARGET_CFLAGS="$TARGET_CFLAGS -mbig-endian"
TARGET_CCASFLAGS="$TARGET_CCASFLAGS -mbig-endian"
TARGET_LDFLAGS="$TARGET_LDFLAGS -static -mbig-endian"
fi
if test "x$target_m32" = x1; then if test "x$target_m32" = x1; then
# Force 32-bit mode. # Force 32-bit mode.
TARGET_CFLAGS="$TARGET_CFLAGS -m32" TARGET_CFLAGS="$TARGET_CFLAGS -m32"
@@ -624,23 +722,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
@@ -660,8 +748,32 @@ if test x"$efiemu_excuse" = x ; then
efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib" efiemu_excuse="cannot compile with -m64 -mcmodel=large -mno-red-zone -nostdlib"
fi fi
fi fi
if test x"$efiemu_excuse" = x ; then
AC_CACHE_CHECK([for efiemu64 linking format], [grub_cv_target_cc_efiemu64_link_format], [
grub_cv_target_cc_efiemu64_link_format=unknown
for format in -melf_x86_64 -melf_x86_64_fbsd -melf_x86_64_obsd -melf_x86_64_haiku -arch,x86_64; do
CFLAGS="-m64 -nostdlib -O2 -mcmodel=large -mno-red-zone"
LDFLAGS="-m64 -Wl,$format -nostdlib -static"
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
asm (".globl start; start:");
asm (".globl _start; _start:");
asm (".globl __start; __start:");
void __main (void);
void __main (void) {}
]], [[]])], [flag=1], [flag=0])
if test x"$flag" = x1; then
grub_cv_target_cc_efiemu64_link_format="$format"
break
fi
done])
if test x"$grub_cv_target_cc_efiemu64_link_format" = xunknown; then
efiemu_excuse="no suitable link format for efiemu64 found"
else
EFIEMU64_LINK_FORMAT="-Wl,$grub_cv_target_cc_efiemu64_link_format"
fi
fi
if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then if test x"$enable_efiemu" = xyes && test x"$efiemu_excuse" != x ; then
AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled]) AC_MSG_ERROR([efiemu runtime was explicitly requested but can't be compiled ($efiemu_excuse)])
fi fi
if test x"$efiemu_excuse" = x ; then if test x"$efiemu_excuse" = x ; then
enable_efiemu=yes enable_efiemu=yes
@@ -669,14 +781,39 @@ else
enable_efiemu=no enable_efiemu=no
fi fi
AC_SUBST([enable_efiemu]) AC_SUBST([enable_efiemu])
AC_SUBST([EFIEMU64_LINK_FORMAT])
CFLAGS="$TARGET_CFLAGS" CFLAGS="$TARGET_CFLAGS"
if test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
AC_CACHE_CHECK([for linking format], [grub_cv_target_cc_link_format], [ if test x"$platform" = xemu ; then
TARGET_OBJ2ELF=
grub_cv_target_cc_link_format=
case "$host_os" in
*darwin* | *mac*)
grub_cv_target_cc_link_format="-arch,${target_cpu}"
TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
;;
*windows* | *cygwin* | *mingw*)
if test x${target_cpu} = xi386 ; then
grub_cv_target_cc_link_format=-mi386pe
TARGET_OBJ2ELF='./build-grub-pe2elf$(BUILD_EXEEXT)'
fi
if test x${target_cpu} = xx86_64 ; then
grub_cv_target_cc_link_format=-mi386pep
TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
fi
TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
;;
esac
elif test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
AC_CACHE_CHECK([for target linking format], [grub_cv_target_cc_link_format], [
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 = x-mi386pe; then
continue
fi
if test x${target_cpu} != xx86_64 && test x$format = x-mi386pep; then
continue continue
fi fi
CFLAGS="$TARGET_CFLAGS" CFLAGS="$TARGET_CFLAGS"
@@ -687,18 +824,21 @@ if test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
asm (".globl __start; __start:"); asm (".globl __start; __start:");
void __main (void); void __main (void);
void __main (void) {} void __main (void) {}
]], [[]])], [flag=1], []) ]], [[]])], [flag=1], [flag=0])
if test x"$flag" = x1; then if test x"$flag" = x1; then
grub_cv_target_cc_link_format="$format" grub_cv_target_cc_link_format="$format"
break; break
fi fi
done]) done])
if test x"$grub_cv_target_cc_link_format" = xunknown; then if test x"$grub_cv_target_cc_link_format" = xunknown; then
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$(BUILD_EXEEXT)'
fi
if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
TARGET_OBJ2ELF='./build-grub-pep2elf$(BUILD_EXEEXT)'
fi fi
fi fi
@@ -717,12 +857,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
@@ -740,23 +880,25 @@ 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 -mcmodel=large"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_mcmodel=yes], [grub_cv_cc_mcmodel=yes],
[grub_cv_cc_mcmodel=no]) [grub_cv_cc_mcmodel=no])
]) ])
if test "x$grub_cv_cc_mcmodel" = xyes; then if test "x$grub_cv_cc_mcmodel" = xyes; then
TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large" TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
elif test "$target_cpu-$platform" = sparc64-emu; then
TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
fi fi
fi fi
if test "$target_cpu"-"$platform" = x86_64-efi; then if test "$target_cpu"-"$platform" = x86_64-efi; then
# EFI writes to stack below %rsp, we must not use the red zone # EFI writes to stack below %rsp, we must not use the red zone
AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [ AC_CACHE_CHECK([whether option -mno-red-zone works], grub_cv_cc_no_red_zone, [
CFLAGS="$TARGET_CFLAGS -m64 -mno-red-zone" CFLAGS="$TARGET_CFLAGS -mno-red-zone"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_no_red_zone=yes], [grub_cv_cc_no_red_zone=yes],
[grub_cv_cc_no_red_zone=no]) [grub_cv_cc_no_red_zone=no])
@@ -768,6 +910,50 @@ if test "$target_cpu"-"$platform" = x86_64-efi; then
TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone" TARGET_CFLAGS="$TARGET_CFLAGS -mno-red-zone"
fi fi
if test "x$target_cpu" = xarm; then
AC_CACHE_CHECK([whether option -mlong-calls works], grub_cv_cc_mlong_calls, [
CFLAGS="$TARGET_CFLAGS -mlong-calls -Werror"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_cc_mlong_calls=yes],
[grub_cv_cc_mlong_calls=no])
])
if test "x$grub_cv_cc_mlong_calls" = xyes; then
TARGET_CFLAGS="$TARGET_CFLAGS -mlong-calls"
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
AC_CACHE_CHECK([whether option -Qn works], grub_cv_target_cc_qn, [
CFLAGS="$TARGET_CFLAGS -Qn -Werror"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
[grub_cv_target_cc_qn=yes],
[grub_cv_target_cc_qn=no])])
if test "x$grub_cv_target_cc_qn" = xyes; then
TARGET_CFLAGS="$TARGET_CFLAGS -Qn"
fi
# #
# Compiler features. # Compiler features.
# #
@@ -820,11 +1006,34 @@ fi
CFLAGS="$TARGET_CFLAGS" CFLAGS="$TARGET_CFLAGS"
# -mno-unaligned-access # -mno-unaligned-access -mstrict-align
if test "$target_cpu" = arm; then if test "$target_cpu" = arm; then
grub_CHECK_NO_UNALIGNED_ACCESS AC_CACHE_CHECK([for compile options to get strict alignment], [grub_cv_target_cc_strict_align], [
if test x"$nua_possible" = xyes; then grub_cv_target_cc_strict_align=
TARGET_CFLAGS="$TARGET_CFLAGS -mno-unaligned-access" for arg in -mno-unaligned-access "-Xclang -mstrict-align" -mstrict-align; do
CFLAGS="$TARGET_CFLAGS $arg -Werror"
LDFLAGS="$TARGET_LDFLAGS"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])], [flag=1], [flag=0])
if test x"$flag" = x1; then
grub_cv_target_cc_strict_align="$arg"
break
fi
done])
TARGET_CFLAGS="$TARGET_CFLAGS $grub_cv_target_cc_strict_align"
if test x"$grub_cv_target_cc_strict_align" = x"-Xclang -mstrict-align"; then
TARGET_LDFLAGS="$TARGET_LDFLAGS -Qunused-arguments"
fi
AC_CACHE_CHECK([if compiler generates unaligned accesses], [grub_cv_cc_target_emits_unaligned],
[CFLAGS="$TARGET_CFLAGS"
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([], [[
#ifdef __ARM_FEATURE_UNALIGNED
#error "unaligned"
#endif
]])],
[grub_cv_cc_target_emits_unaligned=no], [grub_cv_cc_target_emits_unaligned=yes])])
if test x$grub_cv_cc_target_emits_unaligned = xyes; then
AC_MSG_ERROR([compiler generates unaligned accesses])
fi fi
fi fi
@@ -833,10 +1042,10 @@ 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$target_cpu = xpowerpc || test "x$grub_cv_cc_target_clang" = xyes; then
TARGET_LIBGCC= TARGET_LIBGCC=
else else
TARGET_LIBGCC=-lgcc TARGET_LIBGCC=-lgcc
@@ -847,19 +1056,22 @@ 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 if ! test x$target_cpu = xpowerpc; then
AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __ucmpdi2 _restgpr_14_x) # Check for libgcc symbols
AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __ucmpdi2 _restgpr_14_x)
fi
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=""
@@ -873,7 +1085,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
@@ -992,7 +1204,7 @@ AC_CHECK_LIB([usb], [usb_claim_interface], [LIBUSB="-lusb"],
[grub_emu_usb_excuse=["need libusb headers"]]) [grub_emu_usb_excuse=["need libusb headers"]])
[fi] [fi]
if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then if test x"$enable_grub_emu_usb" = xyes && test x"$grub_emu_usb_excuse" != x ; then
AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled]) AC_MSG_ERROR([USB support for grub-emu was explicitly requested but can't be compiled ($grub_emu_usb_excuse)])
fi fi
if test x"$grub_emu_usb_excuse" = x ; then if test x"$grub_emu_usb_excuse" = x ; then
enable_grub_emu_usb=yes enable_grub_emu_usb=yes
@@ -1001,7 +1213,7 @@ enable_grub_emu_usb=no
fi fi
if test x"$enable_grub_emu_sdl" = xno ; then if test x"$enable_grub_emu_sdl" = xno ; then
grub_emu_sdl_excuse="explicitely disabled" grub_emu_sdl_excuse="explicitly disabled"
fi fi
[if [ x"$grub_emu_sdl_excuse" = x ]; then [if [ x"$grub_emu_sdl_excuse" = x ]; then
# Check for libSDL libraries.] # Check for libSDL libraries.]
@@ -1017,7 +1229,7 @@ AC_CHECK_LIB([SDL], [SDL_Init], [LIBSDL="-lSDL"],
[fi] [fi]
if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then if test x"enable_grub_emu_sdl" = xyes && test x"$grub_emu_sdl_excuse" != x ; then
AC_MSG_ERROR([SDL support for grub-emu was explicitely requested but can't be compiled]) AC_MSG_ERROR([SDL support for grub-emu was explicitly requested but can't be compiled ($grub_emu_sdl_excuse)])
fi fi
if test x"$grub_emu_sdl_excuse" = x ; then if test x"$grub_emu_sdl_excuse" = x ; then
enable_grub_emu_sdl=yes enable_grub_emu_sdl=yes
@@ -1086,14 +1298,18 @@ if test x"$grub_mkfont_excuse" = x ; then
freetype_cflags=`$FREETYPE --cflags` freetype_cflags=`$FREETYPE --cflags`
freetype_libs=`$FREETYPE --libs` freetype_libs=`$FREETYPE --libs`
SAVED_CPPFLAGS="$CPPFLAGS" SAVED_CPPFLAGS="$CPPFLAGS"
SAVED_LIBS="$LIBS"
CPPFLAGS="$CPPFLAGS $freetype_cflags" CPPFLAGS="$CPPFLAGS $freetype_cflags"
LIBS="$LIBS $freetype_libs"
AC_CHECK_HEADERS([ft2build.h], [], AC_CHECK_HEADERS([ft2build.h], [],
[grub_mkfont_excuse=["need freetype2 headers"]]) [grub_mkfont_excuse=["need freetype2 headers"]])
AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_mkfont_excuse=["freetype2 library unusable"]])
CPPFLAGS="$SAVED_CPPFLAGS" CPPFLAGS="$SAVED_CPPFLAGS"
LIBS="$SAVED_LIBS"
fi fi
if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then if test x"$enable_grub_mkfont" = xyes && test x"$grub_mkfont_excuse" != x ; then
AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled]) AC_MSG_ERROR([grub-mkfont was explicitly requested but can't be compiled ($grub_mkfont_excuse)])
fi fi
if test x"$grub_mkfont_excuse" = x ; then if test x"$grub_mkfont_excuse" = x ; then
enable_grub_mkfont=yes enable_grub_mkfont=yes
@@ -1108,10 +1324,12 @@ SAVED_CC="$CC"
SAVED_CPP="$CPP" SAVED_CPP="$CPP"
SAVED_CFLAGS="$CFLAGS" SAVED_CFLAGS="$CFLAGS"
SAVED_CPPFLAGS="$CPPFLAGS" SAVED_CPPFLAGS="$CPPFLAGS"
SAVED_LDFLAGS="$LDFLAGS"
CC="$BUILD_CC" CC="$BUILD_CC"
CPP="$BUILD_CPP" CPP="$BUILD_CPP"
CFLAGS="$BUILD_CFLAGS" CFLAGS="$BUILD_CFLAGS"
CPPFLAGS="$BUILD_CPPFLAGS" CPPFLAGS="$BUILD_CPPFLAGS"
LDFLAGS="$BUILD_LDFAGS"
unset ac_cv_c_bigendian unset ac_cv_c_bigendian
unset ac_cv_header_ft2build_h unset ac_cv_header_ft2build_h
@@ -1141,22 +1359,30 @@ if test x"$grub_build_mkfont_excuse" = x ; then
build_freetype_cflags=`$BUILD_FREETYPE --cflags` build_freetype_cflags=`$BUILD_FREETYPE --cflags`
build_freetype_libs=`$BUILD_FREETYPE --libs` build_freetype_libs=`$BUILD_FREETYPE --libs`
SAVED_CPPFLAGS_2="$CPPFLAGS" SAVED_CPPFLAGS_2="$CPPFLAGS"
SAVED_LIBS="$LIBS"
CPPFLAGS="$CPPFLAGS $build_freetype_cflags" CPPFLAGS="$CPPFLAGS $build_freetype_cflags"
LIBS="$LIBS $build_freetype_libs"
AC_CHECK_HEADERS([ft2build.h], [], AC_CHECK_HEADERS([ft2build.h], [],
[grub_build_mkfont_excuse=["need freetype2 headers"]]) [grub_build_mkfont_excuse=["need freetype2 headers"]])
AC_LINK_IFELSE([AC_LANG_CALL([], [FT_Load_Glyph])], [], [grub_build_mkfont_excuse=["freetype2 library unusable"]])
LIBS="$SAVED_LIBS"
CPPFLAGS="$SAVED_CPPFLAGS_2" CPPFLAGS="$SAVED_CPPFLAGS_2"
fi fi
if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then if test x"$enable_build_grub_mkfont" = xyes && test x"$grub_build_mkfont_excuse" != x ; then
AC_MSG_ERROR([build-grub-mkfont was explicitly requested but can't be compiled]) AC_MSG_ERROR([build-grub-mkfont was explicitly requested but can't be compiled ($grub_build_mkfont_excuse)])
fi fi
if test x"$grub_build_mkfont_excuse" = x ; then if test x"$grub_build_mkfont_excuse" = x ; then
enable_build_grub_mkfont=yes enable_build_grub_mkfont=yes
else else
enable_build_grub_mkfont=no enable_build_grub_mkfont=no
fi fi
if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 ); then if test x"$enable_build_grub_mkfont" = xno && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
AC_MSG_ERROR([qemu, powerpc-ieee1275 and loongson ports needs build-time grub-mkfont]) if test x"$grub_build_mkfont_excuse" = x ; then
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont])
else
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports needs build-time grub-mkfont ($grub_build_mkfont_excuse)])
fi
fi fi
AC_SUBST([build_freetype_cflags]) AC_SUBST([build_freetype_cflags])
@@ -1166,6 +1392,7 @@ CC="$SAVED_CC"
CPP="$SAVED_CPP" CPP="$SAVED_CPP"
CFLAGS="$SAVED_CFLAGS" CFLAGS="$SAVED_CFLAGS"
CPPFLAGS="$SAVED_CPPFLAGS" CPPFLAGS="$SAVED_CPPFLAGS"
LDFLAGS="$SAVED_LDFLAGS"
DJVU_FONT_SOURCE= DJVU_FONT_SOURCE=
@@ -1185,7 +1412,7 @@ fi
if test x"$starfield_excuse" = x; then if test x"$starfield_excuse" = x; then
for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu; do for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/truetype/ttf-dejavu /usr/share/fonts/dejavu /usr/share/fonts/truetype; do
if test -f "$dir/DejaVuSans.$ext"; then if test -f "$dir/DejaVuSans.$ext"; then
DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext" DJVU_FONT_SOURCE="$dir/DejaVuSans.$ext"
break 2 break 2
@@ -1199,7 +1426,7 @@ if test x"$starfield_excuse" = x; then
fi fi
if test x"$enable_grub_themes" = xyes && test x"$starfield_excuse" != x; then if test x"$enable_grub_themes" = xyes && test x"$starfield_excuse" != x; then
AC_MSG_ERROR([themes were explicitly requested but requirements are not satisfied]) AC_MSG_ERROR([themes were explicitly requested but requirements are not satisfied ($starfield_excuse)])
fi fi
AC_SUBST([DJVU_FONT_SOURCE]) AC_SUBST([DJVU_FONT_SOURCE])
@@ -1209,6 +1436,11 @@ FONT_SOURCE=
for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do for ext in pcf pcf.gz bdf bdf.gz ttf ttf.gz; do
for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont /usr/share/fonts/uni /usr/share/fonts/truetype/unifont /usr/share/fonts/misc; do for dir in . /usr/src /usr/share/fonts/X11/misc /usr/share/fonts/unifont /usr/share/fonts/uni /usr/share/fonts/truetype/unifont /usr/share/fonts/misc; do
if test -f "$dir/unifont.$ext"; then if test -f "$dir/unifont.$ext"; then
md5="$(md5sum "$dir/unifont.$ext"|awk '{ print $1; }')"
# PCF and BDF from version 6.3 isn't hanled properly by libfreetype.
if test "$md5" = 0a54834d2788c83886a3e1785a6a1e61 || test "$md5" = 28f2565c7a41d8d407e2551159385edb || test "$md5" = dae5e588461b3b92b87b6ffee734f936 || test "$md5" = 4a3d687aa5bb329ed05f4263a1016791 ; then
continue
fi
FONT_SOURCE="$dir/unifont.$ext" FONT_SOURCE="$dir/unifont.$ext"
break 2 break 2
fi fi
@@ -1219,8 +1451,12 @@ if test x"$enable_build_grub_mkfont" = xno ; then
FONT_SOURCE= FONT_SOURCE=
fi fi
if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 ); then if test "x$FONT_SOURCE" = x && ( test "x$platform" = xqemu || test "x$platform" = xloongson || test "x$platform" = xqemu_mips || test "x$target_cpu"-"$platform" = xpowerpc-ieee1275 || test "x$platform" = xcoreboot ); then
AC_MSG_ERROR([qemu, powerpc-ieee1275 and loongson ports need unifont]) if test x"$grub_build_mkfont_excuse" = x ; then
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont])
else
AC_MSG_ERROR([qemu, powerpc-ieee1275, coreboot and loongson ports need unifont ($grub_build_mkfont_excuse)])
fi
fi fi
AC_SUBST([FONT_SOURCE]) AC_SUBST([FONT_SOURCE])
@@ -1252,7 +1488,7 @@ if test x"$grub_mount_excuse" = x ; then
fi fi
if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then if test x"$enable_grub_mount" = xyes && test x"$grub_mount_excuse" != x ; then
AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled]) AC_MSG_ERROR([grub-mount was explicitly requested but can't be compiled ($grub_mount_excuse)])
fi fi
if test x"$grub_mount_excuse" = x ; then if test x"$grub_mount_excuse" = x ; then
enable_grub_mount=yes enable_grub_mount=yes
@@ -1288,7 +1524,7 @@ if test x"$device_mapper_excuse" = x ; then
fi fi
if test x"$device_mapper_excuse" = x ; then if test x"$device_mapper_excuse" = x ; then
LIBDEVMAPPER="-ldevmapper"; LIBDEVMAPPER="-ldevmapper"
AC_DEFINE([HAVE_DEVICE_MAPPER], [1], AC_DEFINE([HAVE_DEVICE_MAPPER], [1],
[Define to 1 if you have the devmapper library.]) [Define to 1 if you have the devmapper library.])
fi fi
@@ -1320,7 +1556,7 @@ AC_CHECK_HEADER([lzma.h], [], [liblzma_excuse="need lzma header"])
fi fi
if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then if test x"$enable_liblzma" = xyes && test x"$liblzma_excuse" != x ; then
AC_MSG_ERROR([liblzma support was explicitly requested but requirements are not satisfied]) AC_MSG_ERROR([liblzma support was explicitly requested but requirements are not satisfied ($liblzma_excuse)])
fi fi
@@ -1357,7 +1593,7 @@ if test x"$libzfs_excuse" = x ; then
fi fi
if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then if test x"$enable_libzfs" = xyes && test x"$libzfs_excuse" != x ; then
AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied]) AC_MSG_ERROR([libzfs support was explicitly requested but requirements are not satisfied ($libzfs_excuse)])
fi fi
if test x"$libzfs_excuse" = x ; then if test x"$libzfs_excuse" = x ; then
@@ -1386,7 +1622,6 @@ AC_SUBST(BSS_START_SYMBOL)
AC_SUBST(END_SYMBOL) AC_SUBST(END_SYMBOL)
AC_SUBST(PACKAGE) AC_SUBST(PACKAGE)
AC_SUBST(VERSION) AC_SUBST(VERSION)
AC_SUBST(NEED_REGISTER_FRAME_INFO)
AC_ARG_ENABLE([werror], AC_ARG_ENABLE([werror],
[AS_HELP_STRING([--disable-werror], [AS_HELP_STRING([--disable-werror],
@@ -1396,7 +1631,7 @@ if test x"$enable_werror" != xno ; then
HOST_CFLAGS="$HOST_CFLAGS -Werror" HOST_CFLAGS="$HOST_CFLAGS -Werror"
fi fi
if test "x$grub_cv_cc_target_clang" = xno; then if test "x$grub_cv_cc_target_clang" = xno && test x$target_cpu != xpowerpc; then
TARGET_LDFLAGS_STATIC_LIBGCC="-static-libgcc" TARGET_LDFLAGS_STATIC_LIBGCC="-static-libgcc"
else else
TARGET_LDFLAGS_STATIC_LIBGCC= TARGET_LDFLAGS_STATIC_LIBGCC=
@@ -1418,13 +1653,13 @@ AC_SUBST(TARGET_CPP)
AC_SUBST(TARGET_CCAS) AC_SUBST(TARGET_CCAS)
AC_SUBST(TARGET_OBJ2ELF) AC_SUBST(TARGET_OBJ2ELF)
AC_SUBST(TARGET_MODULE_FORMAT) AC_SUBST(TARGET_MODULE_FORMAT)
AC_SUBST(TARGET_CC_VERSION)
AC_SUBST(TARGET_CFLAGS) AC_SUBST(TARGET_CFLAGS)
AC_SUBST(TARGET_LDFLAGS) AC_SUBST(TARGET_LDFLAGS)
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)
@@ -1441,6 +1676,7 @@ AC_SUBST(BUILD_LIBM)
# Automake conditionals # Automake conditionals
# #
AM_CONDITIONAL([COND_real_platform], [test x$platform != xnone])
AM_CONDITIONAL([COND_emu], [test x$platform = xemu]) AM_CONDITIONAL([COND_emu], [test x$platform = xemu])
AM_CONDITIONAL([COND_clang], [test x$grub_cv_cc_target_clang = xyes]) AM_CONDITIONAL([COND_clang], [test x$grub_cv_cc_target_clang = xyes])
AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc]) AM_CONDITIONAL([COND_i386_pc], [test x$target_cpu = xi386 -a x$platform = xpc])
@@ -1457,6 +1693,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])
@@ -1482,6 +1719,12 @@ AM_CONDITIONAL([COND_GRUB_EMU_PCI], [test x$enable_grub_emu_pci = xyes])
AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes]) AM_CONDITIONAL([COND_GRUB_MKFONT], [test x$enable_grub_mkfont = xyes])
AM_CONDITIONAL([COND_GRUB_MOUNT], [test x$enable_grub_mount = xyes]) AM_CONDITIONAL([COND_GRUB_MOUNT], [test x$enable_grub_mount = xyes])
AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x]) AM_CONDITIONAL([COND_HAVE_FONT_SOURCE], [test x$FONT_SOURCE != x])
if test x$FONT_SOURCE != x ; then
HAVE_FONT_SOURCE=1
else
HAVE_FONT_SOURCE=0
fi
AC_SUBST(HAVE_FONT_SOURCE)
AM_CONDITIONAL([COND_APPLE_LINKER], [test x$TARGET_APPLE_LINKER = x1]) AM_CONDITIONAL([COND_APPLE_LINKER], [test x$TARGET_APPLE_LINKER = x1])
AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes]) AM_CONDITIONAL([COND_ENABLE_EFIEMU], [test x$enable_efiemu = xyes])
AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1]) AM_CONDITIONAL([COND_ENABLE_CACHE_STATS], [test x$DISK_CACHE_STATS = x1])
@@ -1490,7 +1733,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])
@@ -1508,24 +1750,30 @@ AC_DEFINE_UNQUOTED(GRUB_SYSCONFDIR, "$grub_sysconfdir", [Configuration dir])
# Output files. # Output files.
cpudir="${target_cpu}" if test "$platform" != none; then
if test x${cpudir} = xmipsel; then cpudir="${target_cpu}"
cpudir=mips; if test x${cpudir} = xmipsel; then
fi cpudir=mips;
grub_CHECK_LINK_DIR fi
if test x"$link_dir" = xyes ; then grub_CHECK_LINK_DIR
AC_CONFIG_LINKS([include/grub/cpu:include/grub/$cpudir]) if test x"$link_dir" = xyes ; then
if test "$platform" != emu ; then AC_CONFIG_LINKS([include/grub/cpu:include/grub/$cpudir])
AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform]) if test "$platform" != emu ; then
AC_CONFIG_LINKS([include/grub/machine:include/grub/$cpudir/$platform])
fi
else
mkdir -p include/grub 2>/dev/null
rm -rf include/grub/cpu
cp -rp $srcdir/include/grub/$cpudir include/grub/cpu 2>/dev/null
if test "$platform" != emu ; then
rm -rf include/grub/machine
cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null
fi
fi fi
else else
mkdir -p include/grub 2>/dev/null # Just enough to stop the compiler failing with -I$(srcdir)/include.
rm -rf include/grub/cpu mkdir -p include 2>/dev/null
cp -rp $srcdir/include/grub/$cpudir include/grub/cpu 2>/dev/null rm -rf include/grub/cpu include/grub/machine
if test "$platform" != emu ; then
rm -rf include/grub/machine
cp -rp $srcdir/include/grub/$cpudir/$platform include/grub/machine 2>/dev/null
fi
fi fi
AC_CONFIG_FILES([Makefile]) AC_CONFIG_FILES([Makefile])
@@ -1598,6 +1846,7 @@ echo grub-mount: No "($grub_mount_excuse)"
fi fi
if [ x"$starfield_excuse" = x ]; then if [ x"$starfield_excuse" = x ]; then
echo starfield theme: Yes echo starfield theme: Yes
echo With DejaVuSans font from $DJVU_FONT_SOURCE
else else
echo starfield theme: No "($starfield_excuse)" echo starfield theme: No "($starfield_excuse)"
fi fi
+10 -8
View File
@@ -108,16 +108,16 @@ The branches available are:
@table @samp @table @samp
@item master @item master
Main developpement branch. Main development branch.
@item grub-legacy @item grub-legacy
GRUB 0.97 codebase. Kept for reference and legal reasons GRUB 0.97 codebase. Kept for reference and legal reasons
@item multiboot @item multiboot
Multiboot specfication Multiboot specfication
@item multiboot2 @item multiboot2
Multiboot2 specfication Multiboot2 specfication
@item developper branches @item developer branches
Prefixed with developper name. Every developper of a team manages his own branches. Prefixed with developer name. Every developer of a team manages his own branches.
Developper branches do not need changelog entries. Developer branches do not need changelog entries.
@end table @end table
Once you have used @kbd{git clone} to fetch an initial copy of a branch, you Once you have used @kbd{git clone} to fetch an initial copy of a branch, you
@@ -228,12 +228,12 @@ The opening @samp{/*} and closing @samp{*/} should be placed together on a line
Here is a brief map of the GRUB code base. Here is a brief map of the GRUB code base.
GRUB uses Autoconf and Automake, with most of the Automake input generated GRUB uses Autoconf and Automake, with most of the Automake input generated
by AutoGen. The top-level build rules are in @file{configure.ac}, by a Python script. The top-level build rules are in @file{configure.ac},
@file{grub-core/Makefile.core.def}, and @file{Makefile.util.def}. Each @file{grub-core/Makefile.core.def}, and @file{Makefile.util.def}. Each
block in a @file{*.def} file represents a build target, and specifies the block in a @file{*.def} file represents a build target, and specifies the
source files used to build it on various platforms. The @file{*.def} files source files used to build it on various platforms. The @file{*.def} files
are processed into AutoGen input by @file{gentpl.py} (which you only need to are processed into Automake input by @file{gentpl.py} (which you only need
look at if you are extending the build system). If you are adding a new to look at if you are extending the build system). If you are adding a new
module which follows an existing pattern, such as a new command or a new module which follows an existing pattern, such as a new command or a new
filesystem implementation, it is usually easiest to grep filesystem implementation, it is usually easiest to grep
@file{grub-core/Makefile.core.def} and @file{Makefile.util.def} for an @file{grub-core/Makefile.core.def} and @file{Makefile.util.def} for an
@@ -1812,7 +1812,9 @@ right edges of two adjacent glyphs. The @strong{device width} field determines
the effective leading value that is used to render the font. the effective leading value that is used to render the font.
@end itemize @end itemize
@image{font_char_metrics,,,,png} @ifnottex
@image{font_char_metrics,,,,.png}
@end ifnottex
An illustration of how the various font metrics apply to characters. An illustration of how the various font metrics apply to characters.
+98 -29
View File
@@ -1298,23 +1298,26 @@ a key is pressed. The default is @samp{5}. Set to @samp{0} to boot
immediately without displaying the menu, or to @samp{-1} to wait immediately without displaying the menu, or to @samp{-1} to wait
indefinitely. indefinitely.
@item GRUB_HIDDEN_TIMEOUT If @samp{GRUB_TIMEOUT_STYLE} is set to @samp{countdown} or @samp{hidden},
Wait this many seconds for @key{ESC} to be pressed before displaying the menu. the timeout is instead counted before the menu is displayed.
If no @key{ESC} is pressed during that time, display the menu for the number of
seconds specified in GRUB_TIMEOUT before booting the default entry. We expect
that most people who use GRUB_HIDDEN_TIMEOUT will want to have GRUB_TIMEOUT set
to @samp{0} so that the menu is not displayed at all unless @key{ESC} is
pressed.
Unset by default.
@item GRUB_HIDDEN_TIMEOUT_QUIET @item GRUB_TIMEOUT_STYLE
In conjunction with @samp{GRUB_HIDDEN_TIMEOUT}, set this to @samp{true} to If this option is unset or set to @samp{menu}, then GRUB will display the
suppress the verbose countdown while waiting for a key to be pressed before menu and then wait for the timeout set by @samp{GRUB_TIMEOUT} to expire
displaying the menu. Unset by default. before booting the default entry. Pressing a key interrupts the timeout.
If this option is set to @samp{countdown} or @samp{hidden}, then, before
displaying the menu, GRUB will wait for the timeout set by
@samp{GRUB_TIMEOUT} to expire. If @key{ESC} is pressed during that time, it
will display the menu and wait for input. If a hotkey associated with a
menu entry is pressed, it will boot the associated menu entry immediately.
If the timeout expires before either of these happens, it will boot the
default entry. In the @samp{countdown} case, it will show a one-line
indication of the remaining time.
@item GRUB_DEFAULT_BUTTON @item GRUB_DEFAULT_BUTTON
@itemx GRUB_TIMEOUT_BUTTON @itemx GRUB_TIMEOUT_BUTTON
@itemx GRUB_HIDDEN_TIMEOUT_BUTTON @itemx GRUB_TIMEOUT_STYLE_BUTTON
@itemx GRUB_BUTTON_CMOS_ADDRESS @itemx GRUB_BUTTON_CMOS_ADDRESS
Variants of the corresponding variables without the @samp{_BUTTON} suffix, Variants of the corresponding variables without the @samp{_BUTTON} suffix,
used to support vendor-specific power buttons. @xref{Vendor power-on keys}. used to support vendor-specific power buttons. @xref{Vendor power-on keys}.
@@ -1489,6 +1492,44 @@ Each module will be loaded as early as possible, at the start of
@end table @end table
The following options are still accepted for compatibility with existing
configurations, but have better replacements:
@table @samp
@item GRUB_HIDDEN_TIMEOUT
Wait this many seconds before displaying the menu. If @key{ESC} is pressed
during that time, display the menu and wait for input according to
@samp{GRUB_TIMEOUT}. If a hotkey associated with a menu entry is pressed,
boot the associated menu entry immediately. If the timeout expires before
either of these happens, display the menu for the number of seconds
specified in @samp{GRUB_TIMEOUT} before booting the default entry.
If you set @samp{GRUB_HIDDEN_TIMEOUT}, you should also set
@samp{GRUB_TIMEOUT=0} so that the menu is not displayed at all unless
@key{ESC} is pressed.
This option is unset by default, and is deprecated in favour of the less
confusing @samp{GRUB_TIMEOUT_STYLE=countdown} or
@samp{GRUB_TIMEOUT_STYLE=hidden}.
@item GRUB_HIDDEN_TIMEOUT_QUIET
In conjunction with @samp{GRUB_HIDDEN_TIMEOUT}, set this to @samp{true} to
suppress the verbose countdown while waiting for a key to be pressed before
displaying the menu.
This option is unset by default, and is deprecated in favour of the less
confusing @samp{GRUB_TIMEOUT_STYLE=countdown}.
@item GRUB_HIDDEN_TIMEOUT_BUTTON
Variant of @samp{GRUB_HIDDEN_TIMEOUT}, used to support vendor-specific power
buttons. @xref{Vendor power-on keys}.
This option is unset by default, and is deprecated in favour of the less
confusing @samp{GRUB_TIMEOUT_STYLE=countdown} or
@samp{GRUB_TIMEOUT_STYLE=hidden}.
@end table
For more detailed customisation of @command{grub-mkconfig}'s output, you may For more detailed customisation of @command{grub-mkconfig}'s output, you may
edit the scripts in @file{/etc/grub.d} directly. edit the scripts in @file{/etc/grub.d} directly.
@file{/etc/grub.d/40_custom} is particularly useful for adding entire custom @file{/etc/grub.d/40_custom} is particularly useful for adding entire custom
@@ -2477,15 +2518,16 @@ menu requires several fancy features of your terminal.
@node Vendor power-on keys @node Vendor power-on keys
@chapter Using GRUB with vendor power-on keys @chapter Using GRUB with vendor power-on keys
Some laptop vendors provide an additional power-on button which boots another Some laptop vendors provide an additional power-on button which boots
OS. GRUB supports such buttons with the @samp{GRUB_TIMEOUT_BUTTON}, another OS. GRUB supports such buttons with the @samp{GRUB_TIMEOUT_BUTTON},
@samp{GRUB_DEFAULT_BUTTON}, @samp{GRUB_HIDDEN_TIMEOUT_BUTTON} and @samp{GRUB_TIMEOUT_STYLE_BUTTON}, @samp{GRUB_DEFAULT_BUTTON}, and
@samp{GRUB_BUTTON_CMOS_ADDRESS} variables in default/grub (@pxref{Simple @samp{GRUB_BUTTON_CMOS_ADDRESS} variables in default/grub (@pxref{Simple
configuration}). @samp{GRUB_TIMEOUT_BUTTON}, @samp{GRUB_DEFAULT_BUTTON} and configuration}). @samp{GRUB_TIMEOUT_BUTTON},
@samp{GRUB_HIDDEN_TIMEOUT_BUTTON} are used instead of the corresponding @samp{GRUB_TIMEOUT_STYLE_BUTTON}, and @samp{GRUB_DEFAULT_BUTTON} are used
variables without the @samp{_BUTTON} suffix when powered on using the special instead of the corresponding variables without the @samp{_BUTTON} suffix
button. @samp{GRUB_BUTTON_CMOS_ADDRESS} is vendor-specific and partially when powered on using the special button. @samp{GRUB_BUTTON_CMOS_ADDRESS}
model-specific. Values known to the GRUB team are: is vendor-specific and partially model-specific. Values known to the GRUB
team are:
@table @key @table @key
@item Dell XPS M1330M @item Dell XPS M1330M
@@ -3030,6 +3072,7 @@ These variables have special meaning to GRUB.
* superusers:: * superusers::
* theme:: * theme::
* timeout:: * timeout::
* timeout_style::
@end menu @end menu
@@ -3080,7 +3123,7 @@ This variable contains the ``highlight'' foreground and background terminal
colors, separated by a slash (@samp{/}). Setting this variable changes colors, separated by a slash (@samp{/}). Setting this variable changes
those colors. For the available color names, @pxref{color_normal}. those colors. For the available color names, @pxref{color_normal}.
The default is @samp{black/white}. The default is @samp{black/light-gray}.
@node color_normal @node color_normal
@@ -3109,7 +3152,7 @@ those colors. Each color must be a name from the following list:
@item white @item white
@end itemize @end itemize
The default is @samp{white/black}. The default is @samp{light-gray/black}.
The color support support varies from terminal to terminal. The color support support varies from terminal to terminal.
@@ -3462,8 +3505,21 @@ keyboard input before booting the default menu entry. A timeout of @samp{0}
means to boot the default entry immediately without displaying the menu; a means to boot the default entry immediately without displaying the menu; a
timeout of @samp{-1} (or unset) means to wait indefinitely. timeout of @samp{-1} (or unset) means to wait indefinitely.
This variable is often set by @samp{GRUB_TIMEOUT} or If @samp{timeout_style} (@pxref{timeout_style}) is set to @samp{countdown}
@samp{GRUB_HIDDEN_TIMEOUT} (@pxref{Simple configuration}). or @samp{hidden}, the timeout is instead counted before the menu is
displayed.
This variable is often set by @samp{GRUB_TIMEOUT} (@pxref{Simple
configuration}).
@node timeout_style
@subsection timeout_style
This variable may be set to @samp{menu}, @samp{countdown}, or @samp{hidden}
to control the way in which the timeout (@pxref{timeout}) interacts with
displaying the menu. See the documentation of @samp{GRUB_TIMEOUT_STYLE}
(@pxref{Simple configuration}) for details.
@node Environment block @node Environment block
@@ -4420,7 +4476,7 @@ List devices or files.
With no arguments, print all devices known to GRUB. With no arguments, print all devices known to GRUB.
If the argument is a device name enclosed in parentheses (@pxref{Device If the argument is a device name enclosed in parentheses (@pxref{Device
syntax}), then list all files at the root directory of that device. syntax}), then print the name of the filesystem of that device.
If the argument is a directory given as an absolute file name (@pxref{File If the argument is a directory given as an absolute file name (@pxref{File
name syntax}), then list the contents of that directory. name syntax}), then list the contents of that directory.
@@ -4883,7 +4939,8 @@ Alias for @code{hashsum --hash sha512 arg @dots{}}. See command @command{hashsum
@deffn Command sleep [@option{--verbose}] [@option{--interruptible}] count @deffn Command sleep [@option{--verbose}] [@option{--interruptible}] count
Sleep for @var{count} seconds. If option @option{--interruptible} is given, Sleep for @var{count} seconds. If option @option{--interruptible} is given,
allow @key{ESC} to interrupt sleep. With @option{--verbose} show countdown allow @key{ESC} to interrupt sleep. With @option{--verbose} show countdown
of remaining seconds. of remaining seconds. Exit code is set to 0 if timeout expired and to 1
if timeout was interrupted by @key{ESC}.
@end deffn @end deffn
@@ -5937,8 +5994,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
@@ -6316,7 +6385,7 @@ just do:
@end group @end group
@end example @end example
Also, the latest version is available using Bazaar. See Also, the latest version is available using Git. See
@uref{http://www.gnu.org/software/grub/grub-download.html} for more @uref{http://www.gnu.org/software/grub/grub-download.html} for more
information. information.
+2
View File
@@ -0,0 +1,2 @@
[NAME]
grub-file \- check file type
+4
View File
@@ -0,0 +1,4 @@
[NAME]
grub-macbless \- bless a mac file/directory
[SEE ALSO]
.BR grub-install (1)
+4
View File
@@ -0,0 +1,4 @@
[NAME]
grub-syslinux2cfg \- transform syslinux config into grub.cfg
[SEE ALSO]
.BR grub-menulst2cfg (8)
+6
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
+635 -381
View File
File diff suppressed because it is too large. Load diff
+35 -41
View File
@@ -10,10 +10,6 @@ CCAS=$(TARGET_CC)
RANLIB=$(TARGET_RANLIB) RANLIB=$(TARGET_RANLIB)
STRIP=$(TARGET_STRIP) STRIP=$(TARGET_STRIP)
if COND_HAVE_FONT_SOURCE
TARGET_CFLAGS += -DUSE_ASCII_FALLBACK=1 -DHAVE_UNIFONT_WIDTHSPEC=1
endif
MACHO2IMG=$(top_builddir)/grub-macho2img MACHO2IMG=$(top_builddir)/grub-macho2img
AM_CFLAGS = $(TARGET_CFLAGS) AM_CFLAGS = $(TARGET_CFLAGS)
@@ -30,17 +26,22 @@ CFLAGS_LIBRARY += $(CFLAGS_PLATFORM) -fno-builtin
CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM) CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM)
CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM) CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM)
build-grub-pe2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c build-grub-pep2elf$(BUILD_EXEEXT): $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^ $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=64 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pep2elf\" $^
CLEANFILES += build-grub-pep2elf$(BUILD_EXEEXT)
build-grub-pe2elf$(BUILD_EXEEXT): $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=32 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^
CLEANFILES += build-grub-pe2elf$(BUILD_EXEEXT)
# gentrigtables # gentrigtables
gentrigtables: gentrigtables.c gentrigtables$(BUILD_EXEEXT): gentrigtables.c
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $< $(BUILD_LIBM) $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $(BUILD_LDFLAGS) $< $(BUILD_LIBM)
CLEANFILES += gentrigtables CLEANFILES += gentrigtables$(BUILD_EXEEXT)
# trigtables.c # trigtables.c
trigtables.c: gentrigtables gentrigtables.c $(top_srcdir)/configure.ac trigtables.c: gentrigtables$(BUILD_EXEEXT) gentrigtables.c $(top_srcdir)/configure.ac
./gentrigtables > $@ ./gentrigtables$(BUILD_EXEEXT) > $@
CLEANFILES += trigtables.c CLEANFILES += trigtables.c
# XXX Use Automake's LEX & YACC support # XXX Use Automake's LEX & YACC support
@@ -75,6 +76,7 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i18n.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/kernel.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/kernel.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/list.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/list.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/misc.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/misc.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/compiler-rt.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/mm.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/parser.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/parser.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/partition.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/partition.h
@@ -104,7 +106,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
@@ -114,7 +115,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
@@ -173,7 +173,6 @@ endif
if COND_mips_qemu_mips if COND_mips_qemu_mips
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/cache.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/serial.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/serial.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/loader.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/terminfo.h
@@ -185,7 +184,6 @@ if COND_mips_loongson
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h KERNEL_HEADER_FILES += $(top_builddir)/include/grub/keyboard_layouts.h
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/kernel.h
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/time.h KERNEL_HEADER_FILES += $(top_builddir)/include/grub/machine/time.h
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/cpu/cache.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
@@ -226,12 +224,14 @@ KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/uboot/uboot.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/uboot/disk.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/uboot/disk.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/extcmd.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/lib/arg.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h
endif endif
if COND_arm_efi if COND_arm_efi
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/efi/loader.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/efi/loader.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/efi.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/efi/disk.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/arm/system.h
endif endif
if COND_arm64_efi if COND_arm64_efi
@@ -295,12 +295,12 @@ grub_emu-grub_emu_init.$(OBJEXT):grub_emu_init.h
kern/emu/grub_emu_dyn-main.$(OBJEXT):grub_emu_init.h kern/emu/grub_emu_dyn-main.$(OBJEXT):grub_emu_init.h
grub_emu_dyn-grub_emu_init.$(OBJEXT):grub_emu_init.h grub_emu_dyn-grub_emu_init.$(OBJEXT):grub_emu_init.h
grub_emu_init.h: genemuinitheader.sh $(MOD_FILES) grub_emu_init.h: genemuinitheader.sh $(MODULE_FILES)
rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinitheader.sh $(TARGET_NM) > $@ rm -f $@; echo $(MODULE_FILES) | sh $(srcdir)/genemuinitheader.sh $(TARGET_NM) > $@
CLEANFILES += grub_emu_init.h CLEANFILES += grub_emu_init.h
grub_emu_init.c: grub_emu_init.h genemuinit.sh $(MOD_FILES) grub_emu_init.c: grub_emu_init.h genemuinit.sh $(MODULE_FILES)
rm -f $@; echo $(MOD_FILES) | sh $(srcdir)/genemuinit.sh $(TARGET_NM) > $@ rm -f $@; echo $(MODULE_FILES) | sh $(srcdir)/genemuinit.sh $(TARGET_NM) > $@
CLEANFILES += grub_emu_init.c CLEANFILES += grub_emu_init.c
endif endif
@@ -393,41 +393,35 @@ CLEANFILES += $(MOD_FILES)
if COND_ENABLE_EFIEMU if COND_ENABLE_EFIEMU
efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF) efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF)
-rm -f $@; \ -rm -f $@
-rm -f $@.bin
$(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m32 -Wall -Werror -nostdlib -static -O2 -c -o $@.bin $<
if test "x$(TARGET_APPLE_LINKER)" = x1; then \ if test "x$(TARGET_APPLE_LINKER)" = x1; then \
$(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m32 -Wall -Werror -nostdlib -O2 -c -o $@.bin $< || exit 1; \
$(TARGET_OBJCONV) -felf32 -nu -nd $@.bin $@ || exit 1; \ $(TARGET_OBJCONV) -felf32 -nu -nd $@.bin $@ || exit 1; \
rm -f $@.bin; \ rm -f $@.bin ; \
elif test ! -z "$(TARGET_OBJ2ELF)"; then \
$(TARGET_OBJ2ELF) $@.bin || (rm -f $@.bin; exit 1); \
mv $@.bin $@ ; \
else \ else \
$(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m32 -Wall -Werror -nostdlib -O2 -c -o $@ $< || exit 1; \ mv $@.bin $@ ; \
if test ! -z "$(TARGET_OBJ2ELF)"; then $(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi; \
fi fi
# Link format -arch,x86_64 means Apple linker
efiemu64_c.o: efiemu/runtime/efiemu.c efiemu64_c.o: efiemu/runtime/efiemu.c
if test "x$(TARGET_APPLE_LINKER)" = x1; then \ $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m64 -nostdlib -Wall -Werror -O2 -mcmodel=large -mno-red-zone -c -o $@ $<
$(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m64 -nostdlib -Wall -Werror -mno-red-zone -c -o $@ $< || exit 1; \
else \
$(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m64 -nostdlib -Wall -Werror -O2 -mcmodel=large -mno-red-zone -c -o $@ $< || exit 1; \
fi
efiemu64_s.o: efiemu/runtime/efiemu.S efiemu64_s.o: efiemu/runtime/efiemu.S
-rm -f $@ $(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m64 -Wall -Werror -nostdlib -O2 -mcmodel=large -mno-red-zone -c -o $@ $<
if test "x$(TARGET_APPLE_LINKER)" = x1; then \
$(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m64 -Wall -Werror -nostdlib -O2 -mno-red-zone -c -o $@ $< || exit 1; \
else \
$(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m64 -Wall -Werror -nostdlib -O2 -mcmodel=large -mno-red-zone -c -o $@ $< || exit 1; \
fi
efiemu64.o: efiemu64_c.o efiemu64_s.o $(TARGET_OBJ2ELEF) efiemu64.o: efiemu64_c.o efiemu64_s.o $(TARGET_OBJ2ELEF)
-rm -f $@; \ -rm -f $@
if test "x$(TARGET_APPLE_LINKER)" = x1; then \ -rm -f $@.bin
rm -f $@.bin; \ $(TARGET_CC) -m64 $(EFIEMU64_LINK_FORMAT) -nostdlib -static -Wl,-r -o $@.bin $^
$(TARGET_CC) -m64 -Wl,-r -nostdlib -o $@.bin $^ || exit 1; \ if test "x$(EFIEMU64_LINK_FORMAT)" = x-arch,x86_64; then \
$(TARGET_OBJCONV) -felf64 -nu -nd $@.bin $@ || exit 1; \ $(TARGET_OBJCONV) -felf64 -nu -nd $@.bin $@ || exit 1; \
rm -f $@.bin; \ rm -f $@.bin; \
else \ else \
$(TARGET_CC) -m64 -Wl,-melf_x86_64 -nostdlib -Wl,-r -o $@ $^ || exit 1; \ mv $@.bin $@ ; \
if test ! -z "$(TARGET_OBJ2ELF)"; then $(TARGET_OBJ2ELF) $@ || (rm -f $@; exit 1); fi; \
fi fi
platform_DATA += efiemu32.o efiemu64.o platform_DATA += efiemu32.o efiemu64.o
+69 -32
View File
@@ -59,28 +59,32 @@ 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';
arm_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; arm_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
arm64_efi_ldflags = '-Wl,-r,-d'; arm64_efi_ldflags = '-Wl,-r,-d';
arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; arm64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version -R .eh_frame';
i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000'; i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
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';
@@ -88,7 +92,6 @@ kernel = {
mips_qemu_mips_ldflags = '-Wl,-Ttext,0x80200000'; mips_qemu_mips_ldflags = '-Wl,-Ttext,0x80200000';
mips_arc_cppflags = '-DGRUB_DECOMPRESSOR_LINK_ADDR=$(TARGET_DECOMPRESSOR_LINK_ADDR)'; mips_arc_cppflags = '-DGRUB_DECOMPRESSOR_LINK_ADDR=$(TARGET_DECOMPRESSOR_LINK_ADDR)';
mips_loongson_cppflags = '-DUSE_ASCII_FALLBACK';
i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)'; i386_qemu_cppflags = '-DGRUB_BOOT_MACHINE_LINK_ADDR=$(GRUB_BOOT_MACHINE_LINK_ADDR)';
emu_cflags = '$(CFLAGS_GNULIB)'; emu_cflags = '$(CFLAGS_GNULIB)';
emu_cppflags = '$(CPPFLAGS_GNULIB)'; emu_cppflags = '$(CPPFLAGS_GNULIB)';
@@ -129,6 +132,7 @@ kernel = {
common = kern/rescue_reader.c; common = kern/rescue_reader.c;
common = kern/term.c; common = kern/term.c;
noemu = kern/compiler-rt.c;
noemu = kern/mm.c; noemu = kern/mm.c;
noemu = kern/time.c; noemu = kern/time.c;
noemu = kern/generic/millisleep.c; noemu = kern/generic/millisleep.c;
@@ -194,6 +198,7 @@ kernel = {
ia64_efi = kern/ia64/efi/init.c; ia64_efi = kern/ia64/efi/init.c;
ia64_efi = kern/ia64/dl.c; ia64_efi = kern/ia64/dl.c;
ia64_efi = kern/ia64/dl_helper.c; ia64_efi = kern/ia64/dl_helper.c;
ia64_efi = kern/ia64/cache.c;
arm_efi = kern/arm/efi/init.c; arm_efi = kern/arm/efi/init.c;
arm_efi = kern/arm/efi/misc.c; arm_efi = kern/arm/efi/misc.c;
@@ -241,12 +246,14 @@ 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;
powerpc_ieee1275 = kern/powerpc/cache.S; powerpc_ieee1275 = kern/powerpc/cache.S;
powerpc_ieee1275 = kern/powerpc/dl.c; powerpc_ieee1275 = kern/powerpc/dl.c;
powerpc_ieee1275 = kern/powerpc/compiler-rt.S;
sparc64_ieee1275 = kern/sparc64/cache.S; sparc64_ieee1275 = kern/sparc64/cache.S;
sparc64_ieee1275 = kern/sparc64/dl.c; sparc64_ieee1275 = kern/sparc64/dl.c;
@@ -283,6 +290,9 @@ kernel = {
emu = osdep/emuconsole.c; emu = osdep/emuconsole.c;
extra_dist = osdep/unix/emuconsole.c; extra_dist = osdep/unix/emuconsole.c;
extra_dist = osdep/windows/emuconsole.c; extra_dist = osdep/windows/emuconsole.c;
emu = osdep/dl.c;
extra_dist = osdep/unix/dl.c;
extra_dist = osdep/windows/dl.c;
emu = osdep/sleep.c; emu = osdep/sleep.c;
emu = osdep/init.c; emu = osdep/init.c;
emu = osdep/emunet.c; emu = osdep/emunet.c;
@@ -615,18 +625,6 @@ module = {
enable = xen; enable = xen;
}; };
module = {
name = check_nt_hiberfil;
common = commands/i386/nthibr.c;
};
library = {
name = libgnulib.a;
common = gnulib/regex.c;
cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)';
cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)';
};
module = { module = {
name = cmostest; name = cmostest;
common = commands/i386/cmostest.c; common = commands/i386/cmostest.c;
@@ -678,8 +676,7 @@ module = {
name = regexp; name = regexp;
common = commands/regexp.c; common = commands/regexp.c;
common = commands/wildcard.c; common = commands/wildcard.c;
ldadd = libgnulib.a; common = gnulib/regex.c;
dependencies = libgnulib.a;
cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)'; cflags = '$(CFLAGS_POSIX) $(CFLAGS_GNULIB)';
cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)'; cppflags = '$(CPPFLAGS_POSIX) $(CPPFLAGS_GNULIB)';
}; };
@@ -1448,6 +1445,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;
@@ -1579,6 +1581,7 @@ module = {
extra_dist = lib/ia64/setjmp.S; extra_dist = lib/ia64/setjmp.S;
extra_dist = lib/ia64/longjmp.S; extra_dist = lib/ia64/longjmp.S;
extra_dist = lib/arm/setjmp.S; extra_dist = lib/arm/setjmp.S;
extra_dist = lib/arm64/setjmp.S;
}; };
module = { module = {
@@ -1620,6 +1623,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;
@@ -1656,10 +1667,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;
@@ -1667,7 +1674,8 @@ module = {
sparc64_ieee1275 = loader/sparc64/ieee1275/linux.c; sparc64_ieee1275 = loader/sparc64/ieee1275/linux.c;
ia64_efi = loader/ia64/efi/linux.c; ia64_efi = loader/ia64/efi/linux.c;
arm = loader/arm/linux.c; arm = loader/arm/linux.c;
arm = lib/fdt.c; arm64 = loader/arm64/linux.c;
fdt = lib/fdt.c;
common = loader/linux.c; common = loader/linux.c;
common = lib/cmdline.c; common = lib/cmdline.c;
enable = noemu; enable = noemu;
@@ -1677,16 +1685,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;
@@ -1743,6 +1756,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;
@@ -1932,6 +1946,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;
@@ -2119,6 +2138,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;
@@ -2261,3 +2286,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;
};
+1 -1
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"
+41 -41
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:
+6 -2
View File
@@ -44,11 +44,11 @@ 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) #define boot_path (_start + 512 + SCRATCH_PAD_BOOT_SIZE)
#define boot_path_end (_start + 1024) #define boot_path_end (_start + 1024)
#include <grub/offsets.h> #include <grub/offsets.h>
@@ -140,7 +140,11 @@ prom_call:
boot_continue: boot_continue:
mov %o7, PIC_REG /* PIC base */ mov %o7, PIC_REG /* PIC base */
#ifndef CDBOOT
sethi %hi(SCRATCH_PAD_BOOT), %l1 /* OF argument slots */ sethi %hi(SCRATCH_PAD_BOOT), %l1 /* OF argument slots */
#else
GET_ABS(_start + 512, %l1) /* OF argument slots */
#endif
/* Find the /chosen node so we can fetch the stdout handle, /* Find the /chosen node so we can fetch the stdout handle,
* and thus perform console output. * and thus perform console output.
+113 -36
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,38 +97,54 @@ 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)
{ {
int i; if (grub_bonito_type == GRUB_BONITO_2F)
grub_addr_t newbase; {
int i;
grub_addr_t newbase;
/* First try already used registers. */ /* First try already used registers. */
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++) for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
if (usage_win[i] && base_win[i] <= base if (usage_win[i] && base_win[i] <= base
&& base_win[i] + sizes_win[i] > base + size) && base_win[i] + sizes_win[i] > base + size)
{ {
usage_win[i]++; usage_win[i]++;
return (void *) return (void *)
(addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK)); (addr_win[i] | (base & GRUB_MACHINE_PCI_WIN_OFFSET_MASK));
} }
/* Map new register. */ /* Map new register. */
newbase = base & ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK; newbase = base & ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK;
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++) for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
if (!usage_win[i] && newbase <= base if (!usage_win[i] && newbase <= base
&& newbase + sizes_win[i] > base + size) && newbase + sizes_win[i] > base + size)
{ {
usage_win[i]++; usage_win[i]++;
base_win[i] = newbase; base_win[i] = newbase;
write_bases (); 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,14 +160,17 @@ 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)))
{ {
int i; if (grub_bonito_type == GRUB_BONITO_2F)
for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++) {
if (usage_win[i] && addr_win[i] int i;
== (((grub_addr_t) mem | 0x20000000) for (i = 0; i < GRUB_MACHINE_PCI_NUM_WIN; i++)
& ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK)) if (usage_win[i] && addr_win[i]
{ == (((grub_addr_t) mem | 0x20000000)
usage_win[i]--; & ~GRUB_MACHINE_PCI_WIN_OFFSET_MASK))
return; {
} usage_win[i]--;
grub_fatal ("Tried to unmap not mapped region"); return;
}
grub_fatal ("Tried to unmap not mapped region");
}
} }
+39 -25
View File
@@ -534,11 +534,20 @@ grub_ehci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
"EHCI grub_ehci_pci_iter: registers above 4G are not supported\n"); "EHCI grub_ehci_pci_iter: registers above 4G are not supported\n");
return 0; return 0;
} }
base &= GRUB_PCI_ADDR_MEM_MASK;
if (!base)
{
grub_dprintf ("ehci",
"EHCI: EHCI is not mapped\n");
return 0;
}
/* Set bus master - needed for coreboot, VMware, broken BIOSes etc. */ /* Set bus master - needed for coreboot, VMware, broken BIOSes etc. */
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND); addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
grub_pci_write_word(addr, grub_pci_write_word(addr,
GRUB_PCI_COMMAND_BUS_MASTER | grub_pci_read_word(addr)); GRUB_PCI_COMMAND_MEM_ENABLED
| GRUB_PCI_COMMAND_BUS_MASTER
| grub_pci_read_word(addr));
grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: 32-bit EHCI OK\n"); grub_dprintf ("ehci", "EHCI grub_ehci_pci_iter: 32-bit EHCI OK\n");
} }
@@ -661,23 +670,23 @@ grub_ehci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
for (i = 0; i < (GRUB_EHCI_N_TD - 1); i++) for (i = 0; i < (GRUB_EHCI_N_TD - 1); i++)
{ {
e->td_virt[i].link_td = e->td_phys + (i + 1) * sizeof (struct grub_ehci_td); e->td_virt[i].link_td = e->td_phys + (i + 1) * sizeof (struct grub_ehci_td);
e->td_virt[i].next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE); e->td_virt[i].next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
e->td_virt[i].alt_next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE); e->td_virt[i].alt_next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
} }
e->td_virt[GRUB_EHCI_N_TD - 1].next_td = e->td_virt[GRUB_EHCI_N_TD - 1].next_td =
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE); grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
e->td_virt[GRUB_EHCI_N_TD - 1].alt_next_td = e->td_virt[GRUB_EHCI_N_TD - 1].alt_next_td =
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE); grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
e->tdfree_virt = e->td_virt; e->tdfree_virt = e->td_virt;
/* Set Terminate in first QH, which is used in framelist */ /* Set Terminate in first QH, which is used in framelist */
e->qh_virt[0].qh_hptr = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE | GRUB_EHCI_HPTR_TYPE_QH); e->qh_virt[0].qh_hptr = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE | GRUB_EHCI_HPTR_TYPE_QH);
e->qh_virt[0].td_overlay.next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE); e->qh_virt[0].td_overlay.next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
e->qh_virt[0].td_overlay.alt_next_td = e->qh_virt[0].td_overlay.alt_next_td =
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE); grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
/* Also set Halted bit in token */ /* Also set Halted bit in token */
e->qh_virt[0].td_overlay.token = grub_cpu_to_le32 (GRUB_EHCI_STATUS_HALTED); e->qh_virt[0].td_overlay.token = grub_cpu_to_le32_compile_time (GRUB_EHCI_STATUS_HALTED);
/* Set the H bit in first QH used for AL */ /* Set the H bit in first QH used for AL */
e->qh_virt[1].ep_char = grub_cpu_to_le32 (GRUB_EHCI_H); e->qh_virt[1].ep_char = grub_cpu_to_le32_compile_time (GRUB_EHCI_H);
/* Set Terminate into TD in rest of QHs and set horizontal link /* Set Terminate into TD in rest of QHs and set horizontal link
* pointer to itself - these QHs will be used for asynchronous * pointer to itself - these QHs will be used for asynchronous
* schedule and they should have valid value in horiz. link */ * schedule and they should have valid value in horiz. link */
@@ -688,12 +697,12 @@ grub_ehci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
e->qh_chunk) & e->qh_chunk) &
GRUB_EHCI_POINTER_MASK) | GRUB_EHCI_HPTR_TYPE_QH); GRUB_EHCI_POINTER_MASK) | GRUB_EHCI_HPTR_TYPE_QH);
e->qh_virt[i].td_overlay.next_td = e->qh_virt[i].td_overlay.next_td =
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE); grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
e->qh_virt[i].td_overlay.alt_next_td = e->qh_virt[i].td_overlay.alt_next_td =
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE); grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
/* Also set Halted bit in token */ /* Also set Halted bit in token */
e->qh_virt[i].td_overlay.token = e->qh_virt[i].td_overlay.token =
grub_cpu_to_le32 (GRUB_EHCI_STATUS_HALTED); grub_cpu_to_le32_compile_time (GRUB_EHCI_STATUS_HALTED);
} }
/* Note: QH 0 and QH 1 are reserved and must not be used anywhere. /* Note: QH 0 and QH 1 are reserved and must not be used anywhere.
@@ -982,7 +991,7 @@ grub_ehci_find_qh (struct grub_ehci *e, grub_usb_transfer_t transfer)
target = ((transfer->endpoint << GRUB_EHCI_EP_NUM_OFF) | target = ((transfer->endpoint << GRUB_EHCI_EP_NUM_OFF) |
transfer->devaddr) & GRUB_EHCI_TARGET_MASK; transfer->devaddr) & GRUB_EHCI_TARGET_MASK;
target = grub_cpu_to_le32 (target); target = grub_cpu_to_le32 (target);
mask = grub_cpu_to_le32 (GRUB_EHCI_TARGET_MASK); mask = grub_cpu_to_le32_compile_time (GRUB_EHCI_TARGET_MASK);
/* low speed interrupt transfers are linked to the periodic */ /* low speed interrupt transfers are linked to the periodic */
/* schedule, everything else to the asynchronous schedule */ /* schedule, everything else to the asynchronous schedule */
@@ -1191,7 +1200,7 @@ grub_ehci_transaction (struct grub_ehci *e,
grub_memset ((void *) td, 0, sizeof (struct grub_ehci_td)); grub_memset ((void *) td, 0, sizeof (struct grub_ehci_td));
/* Don't point to any TD yet, just terminate. */ /* Don't point to any TD yet, just terminate. */
td->next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE); td->next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
/* Set alternate pointer. When short packet occurs, alternate TD /* Set alternate pointer. When short packet occurs, alternate TD
* will not be really fetched because it is not active. But don't * will not be really fetched because it is not active. But don't
* forget, EHCI will try to fetch alternate TD every scan of AL * forget, EHCI will try to fetch alternate TD every scan of AL
@@ -1316,9 +1325,9 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
/* Fill whole alternate TD by zeros (= inactive) and set /* Fill whole alternate TD by zeros (= inactive) and set
* Terminate bits and Halt bit */ * Terminate bits and Halt bit */
grub_memset ((void *) cdata->td_alt_virt, 0, sizeof (struct grub_ehci_td)); grub_memset ((void *) cdata->td_alt_virt, 0, sizeof (struct grub_ehci_td));
cdata->td_alt_virt->next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE); cdata->td_alt_virt->next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
cdata->td_alt_virt->alt_next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE); cdata->td_alt_virt->alt_next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
cdata->td_alt_virt->token = grub_cpu_to_le32 (GRUB_EHCI_STATUS_HALTED); cdata->td_alt_virt->token = grub_cpu_to_le32_compile_time (GRUB_EHCI_STATUS_HALTED);
/* Allocate appropriate number of TDs and set */ /* Allocate appropriate number of TDs and set */
for (i = 0; i < transfer->transcnt; i++) for (i = 0; i < transfer->transcnt; i++)
@@ -1355,7 +1364,7 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
cdata->td_last_virt = td; cdata->td_last_virt = td;
cdata->td_last_phys = grub_dma_virt2phys (td, e->td_chunk); cdata->td_last_phys = grub_dma_virt2phys (td, e->td_chunk);
/* Last TD should not have set alternate TD */ /* Last TD should not have set alternate TD */
cdata->td_last_virt->alt_next_td = grub_cpu_to_le32 (GRUB_EHCI_TERMINATE); cdata->td_last_virt->alt_next_td = grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
grub_dprintf ("ehci", "setup_transfer: cdata=%p, qh=%p\n", grub_dprintf ("ehci", "setup_transfer: cdata=%p, qh=%p\n",
cdata,cdata->qh_virt); cdata,cdata->qh_virt);
@@ -1368,14 +1377,14 @@ grub_ehci_setup_transfer (grub_usb_controller_t dev,
/* Start transfer: */ /* Start transfer: */
/* Unlink possible alternate pointer in QH */ /* Unlink possible alternate pointer in QH */
cdata->qh_virt->td_overlay.alt_next_td = cdata->qh_virt->td_overlay.alt_next_td =
grub_cpu_to_le32 (GRUB_EHCI_TERMINATE); grub_cpu_to_le32_compile_time (GRUB_EHCI_TERMINATE);
/* Link new TDs with QH via next_td */ /* Link new TDs with QH via next_td */
cdata->qh_virt->td_overlay.next_td = cdata->qh_virt->td_overlay.next_td =
grub_cpu_to_le32 (grub_dma_virt2phys grub_cpu_to_le32 (grub_dma_virt2phys
(cdata->td_first_virt, e->td_chunk)); (cdata->td_first_virt, e->td_chunk));
/* Reset Active and Halted bits in QH to activate Advance Queue, /* Reset Active and Halted bits in QH to activate Advance Queue,
* i.e. reset token */ * i.e. reset token */
cdata->qh_virt->td_overlay.token = grub_cpu_to_le32 (0); cdata->qh_virt->td_overlay.token = grub_cpu_to_le32_compile_time (0);
/* Finito */ /* Finito */
transfer->controller_data = cdata; transfer->controller_data = cdata;
@@ -1399,9 +1408,9 @@ grub_ehci_pre_finish_transfer (grub_usb_transfer_t transfer)
* safely manipulate with QH TD part. */ * safely manipulate with QH TD part. */
cdata->qh_virt->td_overlay.token = (cdata->qh_virt->td_overlay.token cdata->qh_virt->td_overlay.token = (cdata->qh_virt->td_overlay.token
| |
grub_cpu_to_le32 grub_cpu_to_le32_compile_time
(GRUB_EHCI_STATUS_HALTED)) & (GRUB_EHCI_STATUS_HALTED)) &
grub_cpu_to_le32 (~GRUB_EHCI_STATUS_ACTIVE); grub_cpu_to_le32_compile_time (~GRUB_EHCI_STATUS_ACTIVE);
/* Print debug data here if necessary */ /* Print debug data here if necessary */
@@ -1504,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",
@@ -1532,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)
+17 -13
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;
@@ -265,16 +265,20 @@ grub_ohci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0); addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG0);
base = grub_pci_read (addr); base = grub_pci_read (addr);
#if 0 base &= GRUB_PCI_ADDR_MEM_MASK;
/* Stop if there is no IO space base address defined. */ if (!base)
if (! (base & 1)) {
return 0; grub_dprintf ("ehci",
#endif "EHCI: EHCI is not mapper\n");
return 0;
}
/* Set bus master - needed for coreboot, VMware, broken BIOSes etc. */ /* Set bus master - needed for coreboot, VMware, broken BIOSes etc. */
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND); addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
grub_pci_write_word(addr, grub_pci_write_word(addr,
GRUB_PCI_COMMAND_BUS_MASTER | grub_pci_read_word(addr)); GRUB_PCI_COMMAND_MEM_ENABLED
| GRUB_PCI_COMMAND_BUS_MASTER
| grub_pci_read_word(addr));
grub_dprintf ("ohci", "class=0x%02x 0x%02x interface 0x%02x\n", grub_dprintf ("ohci", "class=0x%02x 0x%02x interface 0x%02x\n",
class, subclass, interf); class, subclass, interf);
@@ -310,7 +314,7 @@ grub_ohci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
grub_memset ((void *) o->ed_ctrl, 0, sizeof (struct grub_ohci_ed) grub_memset ((void *) o->ed_ctrl, 0, sizeof (struct grub_ohci_ed)
* GRUB_OHCI_CTRL_EDS); * GRUB_OHCI_CTRL_EDS);
for (j=0; j < GRUB_OHCI_CTRL_EDS; j++) for (j=0; j < GRUB_OHCI_CTRL_EDS; j++)
o->ed_ctrl[j].target = grub_cpu_to_le32 (1 << 14); /* skip */ o->ed_ctrl[j].target = grub_cpu_to_le32_compile_time (1 << 14); /* skip */
grub_dprintf ("ohci", "EDs-C: chunk=%p, virt=%p, phys=0x%02x\n", grub_dprintf ("ohci", "EDs-C: chunk=%p, virt=%p, phys=0x%02x\n",
o->ed_ctrl_chunk, o->ed_ctrl, o->ed_ctrl_addr); o->ed_ctrl_chunk, o->ed_ctrl, o->ed_ctrl_addr);
@@ -325,7 +329,7 @@ grub_ohci_pci_iter (grub_pci_device_t dev, grub_pci_id_t pciid,
/* Preset EDs */ /* Preset EDs */
grub_memset ((void*)o->ed_bulk, 0, sizeof(struct grub_ohci_ed) * GRUB_OHCI_BULK_EDS); grub_memset ((void*)o->ed_bulk, 0, sizeof(struct grub_ohci_ed) * GRUB_OHCI_BULK_EDS);
for (j=0; j < GRUB_OHCI_BULK_EDS; j++) for (j=0; j < GRUB_OHCI_BULK_EDS; j++)
o->ed_bulk[j].target = grub_cpu_to_le32 (1 << 14); /* skip */ o->ed_bulk[j].target = grub_cpu_to_le32_compile_time (1 << 14); /* skip */
grub_dprintf ("ohci", "EDs-B: chunk=%p, virt=%p, phys=0x%02x\n", grub_dprintf ("ohci", "EDs-B: chunk=%p, virt=%p, phys=0x%02x\n",
o->ed_bulk_chunk, o->ed_bulk, o->ed_bulk_addr); o->ed_bulk_chunk, o->ed_bulk, o->ed_bulk_addr);
@@ -1345,10 +1349,10 @@ grub_ohci_fini_hw (int noreturn __attribute__ ((unused)))
/* Set skip in all EDs */ /* Set skip in all EDs */
if (o->ed_bulk) if (o->ed_bulk)
for (i=0; i < GRUB_OHCI_BULK_EDS; i++) for (i=0; i < GRUB_OHCI_BULK_EDS; i++)
o->ed_bulk[i].target |= grub_cpu_to_le32 (1 << 14); /* skip */ o->ed_bulk[i].target |= grub_cpu_to_le32_compile_time (1 << 14); /* skip */
if (o->ed_ctrl) if (o->ed_ctrl)
for (i=0; i < GRUB_OHCI_CTRL_EDS; i++) for (i=0; i < GRUB_OHCI_CTRL_EDS; i++)
o->ed_ctrl[i].target |= grub_cpu_to_le32 (1 << 14); /* skip */ o->ed_ctrl[i].target |= grub_cpu_to_le32_compile_time (1 << 14); /* skip */
/* We should wait for next SOF to be sure that all EDs are /* We should wait for next SOF to be sure that all EDs are
* unaccessed by OHCI. But OHCI can be non-functional, so * unaccessed by OHCI. But OHCI can be non-functional, so
+1 -1
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)
+9 -8
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;
@@ -217,12 +217,6 @@ grub_uhci_pci_iter (grub_pci_device_t dev,
if (class != 0x0c || subclass != 0x03 || interf != 0x00) if (class != 0x0c || subclass != 0x03 || interf != 0x00)
return 0; return 0;
/* Set bus master - needed for coreboot or broken BIOSes */
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
grub_pci_write_word(addr, GRUB_PCI_COMMAND_IO_ENABLED
| GRUB_PCI_COMMAND_BUS_MASTER
| grub_pci_read_word (addr));
/* Determine IO base address. */ /* Determine IO base address. */
addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG4); addr = grub_pci_make_address (dev, GRUB_PCI_REG_ADDRESS_REG4);
base = grub_pci_read (addr); base = grub_pci_read (addr);
@@ -233,6 +227,13 @@ grub_uhci_pci_iter (grub_pci_device_t dev,
if ((base & GRUB_UHCI_IOMASK) == 0) if ((base & GRUB_UHCI_IOMASK) == 0)
return 0; return 0;
/* Set bus master - needed for coreboot or broken BIOSes */
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
grub_pci_write_word(addr, GRUB_PCI_COMMAND_IO_ENABLED
| GRUB_PCI_COMMAND_BUS_MASTER
| GRUB_PCI_COMMAND_MEM_ENABLED
| grub_pci_read_word (addr));
grub_dprintf ("uhci", "base = %x\n", base); grub_dprintf ("uhci", "base = %x\n", base);
/* Allocate memory for the controller and register it. */ /* Allocate memory for the controller and register it. */
+1 -1
View File
@@ -31,7 +31,7 @@ grub_usb_bulk_maxpacket (grub_usb_device_t dev,
struct grub_usb_desc_endp *endpoint) struct grub_usb_desc_endp *endpoint)
{ {
/* Use the maximum packet size given in the endpoint descriptor. */ /* Use the maximum packet size given in the endpoint descriptor. */
if (dev->initialized && endpoint) if (dev->initialized && endpoint && (unsigned int) endpoint->maxpacket)
return endpoint->maxpacket; return endpoint->maxpacket;
return 64; return 64;
+5 -5
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;
+59 -4
View File
@@ -135,6 +135,49 @@ skip_data_ref_object (const grub_uint8_t *ptr, const grub_uint8_t *end)
} }
} }
static inline grub_uint32_t
skip_term (const grub_uint8_t *ptr, const grub_uint8_t *end)
{
grub_uint32_t add;
const grub_uint8_t *ptr0 = ptr;
switch(*ptr)
{
case GRUB_ACPI_OPCODE_ADD:
case GRUB_ACPI_OPCODE_AND:
case GRUB_ACPI_OPCODE_CONCAT:
case GRUB_ACPI_OPCODE_CONCATRES:
case GRUB_ACPI_OPCODE_DIVIDE:
case GRUB_ACPI_OPCODE_INDEX:
case GRUB_ACPI_OPCODE_LSHIFT:
case GRUB_ACPI_OPCODE_MOD:
case GRUB_ACPI_OPCODE_MULTIPLY:
case GRUB_ACPI_OPCODE_NAND:
case GRUB_ACPI_OPCODE_NOR:
case GRUB_ACPI_OPCODE_OR:
case GRUB_ACPI_OPCODE_RSHIFT:
case GRUB_ACPI_OPCODE_SUBTRACT:
case GRUB_ACPI_OPCODE_TOSTRING:
case GRUB_ACPI_OPCODE_XOR:
/*
* Parameters for these opcodes: TermArg, TermArg Target, see ACPI
* spec r5.0, page 828f.
*/
ptr++;
ptr += add = skip_term (ptr, end);
if (!add)
return 0;
ptr += add = skip_term (ptr, end);
if (!add)
return 0;
ptr += skip_name_string (ptr, end);
break;
default:
return skip_data_ref_object (ptr, end);
}
return ptr - ptr0;
}
static inline grub_uint32_t static inline grub_uint32_t
skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end) skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end)
{ {
@@ -156,10 +199,10 @@ skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end)
ptr++; ptr++;
ptr += skip_name_string (ptr, end); ptr += skip_name_string (ptr, end);
ptr++; ptr++;
ptr += add = skip_data_ref_object (ptr, end); ptr += add = skip_term (ptr, end);
if (!add) if (!add)
return 0; return 0;
ptr += add = skip_data_ref_object (ptr, end); ptr += add = skip_term (ptr, end);
if (!add) if (!add)
return 0; return 0;
break; break;
@@ -180,6 +223,7 @@ skip_ext_op (const grub_uint8_t *ptr, const grub_uint8_t *end)
return ptr - ptr0; return ptr - ptr0;
} }
static int static int
get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end, get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
grub_uint8_t *scope, int scope_len) grub_uint8_t *scope, int scope_len)
@@ -214,8 +258,8 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
} }
case GRUB_ACPI_OPCODE_NAME: case GRUB_ACPI_OPCODE_NAME:
ptr++; ptr++;
if ((!scope || memcmp (scope, "\\", scope_len) == 0) && if ((!scope || grub_memcmp (scope, "\\", scope_len) == 0) &&
(memcmp (ptr, "_S5_", 4) == 0 || memcmp (ptr, "\\_S5_", 4) == 0)) (grub_memcmp (ptr, "_S5_", 4) == 0 || grub_memcmp (ptr, "\\_S5_", 4) == 0))
{ {
int ll; int ll;
grub_uint8_t *ptr2 = ptr; grub_uint8_t *ptr2 = ptr;
@@ -250,6 +294,17 @@ get_sleep_type (grub_uint8_t *table, grub_uint8_t *ptr, grub_uint8_t *end,
if (!add) if (!add)
return -1; return -1;
break; break;
case GRUB_ACPI_OPCODE_ALIAS:
ptr++;
/* We need to skip two name strings */
ptr += add = skip_name_string (ptr, end);
if (!add)
return -1;
ptr += add = skip_name_string (ptr, end);
if (!add)
return -1;
break;
case GRUB_ACPI_OPCODE_SCOPE: case GRUB_ACPI_OPCODE_SCOPE:
{ {
int scope_sleep_type; int scope_sleep_type;
+1 -1
View File
@@ -56,7 +56,7 @@ GRUB_MOD_INIT(boottime)
{ {
cmd_boottime = cmd_boottime =
grub_register_command ("boottime", grub_cmd_boottime, grub_register_command ("boottime", grub_cmd_boottime,
0, N_("Get boot time statistics.")); 0, N_("Show boot time statistics."));
} }
GRUB_MOD_FINI(boottime) GRUB_MOD_FINI(boottime)
+6 -6
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;
} }
+1 -1
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)))
+1 -1
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);
+2 -1
View File
@@ -52,6 +52,7 @@ grub_cmd_lsefisystab (struct grub_command *cmd __attribute__ ((unused)),
grub_efi_configuration_table_t *t; grub_efi_configuration_table_t *t;
unsigned int i; unsigned int i;
grub_printf ("Address: %p\n", st);
grub_printf ("Signature: %016" PRIxGRUB_UINT64_T " revision: %08x\n", grub_printf ("Signature: %016" PRIxGRUB_UINT64_T " revision: %08x\n",
st->hdr.signature, st->hdr.revision); st->hdr.signature, st->hdr.revision);
{ {
@@ -71,7 +72,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++)
{ {
+8 -4
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;
+678
View File
@@ -0,0 +1,678 @@
/*
* 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 unprivileged guest kernel"),
0, 0},
{"is-x86_64-xen-domu", 0, 0,
N_("Check if FILE can be booted as x86_64 Xen unprivileged guest kernel"), 0, 0},
{"is-x86-xen-dom0", 0, 0,
N_("Check if FILE can be used as Xen x86 privileged 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-arm64-linux", 0, 0,
N_("Check if FILE is ARM64 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-arm64-efi", 0, 0,
N_("Check if FILE is ARM64 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_ARM64_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_ARM64_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, sig_pi;
if (grub_file_read (file, &sig_pi, 4) != 4)
break;
/* Raspberry pi. */
if (sig_pi == grub_cpu_to_le32_compile_time (0xea000006))
{
ret = 1;
break;
}
if (grub_file_seek (file, 0x24) == (grub_size_t) -1)
break;
if (grub_file_read (file, &sig, 4) != 4)
break;
if (sig == grub_cpu_to_le32_compile_time (0x016f2818))
{
ret = 1;
break;
}
break;
}
case IS_ARM64_LINUX:
{
grub_uint32_t sig;
if (grub_file_seek (file, 0x38) == (grub_size_t) -1)
break;
if (grub_file_read (file, &sig, 4) != 4)
break;
if (sig == grub_cpu_to_le32_compile_time (0x644d5241))
{
ret = 1;
break;
}
break;
}
case IS_PAE_DOMU ... IS_DOM0:
{
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_ARM64_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_ARM64_EFI
&& coff_head.machine !=
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_ARM64))
break;
if (type == IS_ARM_EFI
&& coff_head.machine !=
grub_cpu_to_le16_compile_time (GRUB_PE32_MACHINE_ARMTHUMB_MIXED))
break;
if (type == IS_IA_EFI || type == IS_64_EFI || type == IS_ARM64_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);
}
+5
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"
+5
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"
+71
View File
@@ -0,0 +1,71 @@
/*
* 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>
#include <grub/misc.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;
}
+3 -3
View File
@@ -101,7 +101,7 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
} }
/* Check if it is valid. */ /* Check if it is valid. */
if (mbr.signature != grub_cpu_to_le16 (GRUB_PC_PARTITION_SIGNATURE)) if (mbr.signature != grub_cpu_to_le16_compile_time (GRUB_PC_PARTITION_SIGNATURE))
{ {
grub_device_close (dev); grub_device_close (dev);
return grub_error (GRUB_ERR_BAD_PART_TABLE, "no signature"); return grub_error (GRUB_ERR_BAD_PART_TABLE, "no signature");
@@ -216,7 +216,7 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
first_sector--; first_sector--;
mbr.entries[0].flag = 0; mbr.entries[0].flag = 0;
mbr.entries[0].type = GRUB_PC_PARTITION_TYPE_GPT_DISK; mbr.entries[0].type = GRUB_PC_PARTITION_TYPE_GPT_DISK;
mbr.entries[0].start = grub_cpu_to_le32 (1); mbr.entries[0].start = grub_cpu_to_le32_compile_time (1);
lba_to_chs (1, lba_to_chs (1,
&(mbr.entries[0].start_sector), &(mbr.entries[0].start_sector),
&(mbr.entries[0].start_cylinder), &(mbr.entries[0].start_cylinder),
@@ -227,7 +227,7 @@ grub_cmd_gptsync (grub_command_t cmd __attribute__ ((unused)),
&(mbr.entries[0].end_head)); &(mbr.entries[0].end_head));
mbr.entries[0].length = grub_cpu_to_le32 (first_sector); mbr.entries[0].length = grub_cpu_to_le32 (first_sector);
mbr.signature = grub_cpu_to_le16 (GRUB_PC_PARTITION_SIGNATURE); mbr.signature = grub_cpu_to_le16_compile_time (GRUB_PC_PARTITION_SIGNATURE);
if (grub_disk_write (dev->disk, 0, 0, sizeof (mbr), &mbr)) if (grub_disk_write (dev->disk, 0, 0, sizeof (mbr), &mbr))
{ {
+1 -1
View File
@@ -55,7 +55,7 @@ GRUB_MOD_INIT(cmosdump)
{ {
cmd = grub_register_command ("cmosdump", grub_cmd_cmosdump, cmd = grub_register_command ("cmosdump", grub_cmd_cmosdump,
0, 0,
N_("Dump CMOS contents.")); N_("Show raw dump of the CMOS contents."));
} }
GRUB_MOD_FINI(cmosdump) GRUB_MOD_FINI(cmosdump)
+2 -1
View File
@@ -109,9 +109,10 @@ GRUB_MOD_INIT(cmostest)
N_("Test bit at BYTE:BIT in CMOS.")); N_("Test bit at BYTE:BIT in CMOS."));
cmd_clean = grub_register_command ("cmosclean", grub_cmd_cmosclean, cmd_clean = grub_register_command ("cmosclean", grub_cmd_cmosclean,
N_("BYTE:BIT"), N_("BYTE:BIT"),
N_("Clean bit at BYTE:BIT in CMOS.")); N_("Clear bit at BYTE:BIT in CMOS."));
cmd_set = grub_register_command ("cmosset", grub_cmd_cmosset, cmd_set = grub_register_command ("cmosset", grub_cmd_cmosset,
N_("BYTE:BIT"), N_("BYTE:BIT"),
/* TRANSLATORS: A bit may be either set (1) or clear (0). */
N_("Set bit at BYTE:BIT in CMOS.")); N_("Set bit at BYTE:BIT in CMOS."));
} }
@@ -109,7 +109,7 @@ GRUB_MOD_INIT(cbtime)
{ {
cmd_boottime = cmd_boottime =
grub_register_command ("coreboot_boottime", grub_cmd_coreboot_boottime, grub_register_command ("coreboot_boottime", grub_cmd_coreboot_boottime,
0, N_("Get coreboot boot time statistics.")); 0, N_("Show coreboot boot time statistics."));
} }
GRUB_MOD_FINI(cbtime) GRUB_MOD_FINI(cbtime)
+30 -4
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)
-79
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);
}
+1 -1
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;
+15
View File
@@ -107,6 +107,14 @@ grub_cmd_play (grub_command_t cmd __attribute__ ((unused)),
return grub_errno; return grub_errno;
} }
if (!tempo)
{
grub_file_close (file);
grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid tempo in %s"),
args[0]);
return grub_errno;
}
tempo = grub_le_to_cpu32 (tempo); tempo = grub_le_to_cpu32 (tempo);
grub_dprintf ("play","tempo = %d\n", tempo); grub_dprintf ("play","tempo = %d\n", tempo);
@@ -131,6 +139,13 @@ grub_cmd_play (grub_command_t cmd __attribute__ ((unused)),
tempo = grub_strtoul (args[0], &end, 0); tempo = grub_strtoul (args[0], &end, 0);
if (!tempo)
{
grub_error (GRUB_ERR_BAD_ARGUMENT, N_("Invalid tempo in %s"),
args[0]);
return grub_errno;
}
if (*end) if (*end)
/* Was not a number either, assume it was supposed to be a file name. */ /* Was not a number either, assume it was supposed to be a file name. */
return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), args[0]); return grub_error (GRUB_ERR_FILE_NOT_FOUND, N_("file `%s' not found"), args[0]);
+4 -6
View File
@@ -292,7 +292,7 @@ find_key_code (char *key)
{ {
unsigned i; unsigned i;
for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++) for (i = 0; i < ARRAY_SIZE(keysym_table); i++)
{ {
if (keysym_table[i].unshifted_name if (keysym_table[i].unshifted_name
&& grub_strcmp (key, keysym_table[i].unshifted_name) == 0) && grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
@@ -311,7 +311,7 @@ find_ascii_code (char *key)
{ {
unsigned i; unsigned i;
for (i = 0; i < sizeof (keysym_table) / sizeof (keysym_table[0]); i++) for (i = 0; i < ARRAY_SIZE(keysym_table); i++)
{ {
if (keysym_table[i].unshifted_name if (keysym_table[i].unshifted_name
&& grub_strcmp (key, keysym_table[i].unshifted_name) == 0) && grub_strcmp (key, keysym_table[i].unshifted_name) == 0)
@@ -352,15 +352,13 @@ grub_cmd_sendkey (grub_extcmd_context_t ctxt, int argc, char **args)
{ {
unsigned i; unsigned i;
for (i = 0; i < sizeof (simple_flag_offsets) for (i = 0; i < ARRAY_SIZE(simple_flag_offsets); i++)
/ sizeof (simple_flag_offsets[0]); i++)
grub_sendkey_set_simple_flag (simple_flag_offsets[i], grub_sendkey_set_simple_flag (simple_flag_offsets[i],
grub_sendkey_parse_op(state[i])); grub_sendkey_parse_op(state[i]));
} }
/* Set noled. */ /* Set noled. */
noled = (state[sizeof (simple_flag_offsets) noled = (state[ARRAY_SIZE(simple_flag_offsets)].set);
/ sizeof (simple_flag_offsets[0])].set);
return GRUB_ERR_NONE; return GRUB_ERR_NONE;
} }
+3 -1
View File
@@ -173,8 +173,10 @@ grub_term_map_key (grub_keyboard_key_t code, int status)
key = map_key_core (code, status, &alt_gr_consumed); key = map_key_core (code, status, &alt_gr_consumed);
if (key == 0 || key == GRUB_TERM_SHIFT) if (key == 0 || key == GRUB_TERM_SHIFT) {
grub_printf ("Unknown key 0x%x detected\n", code); grub_printf ("Unknown key 0x%x detected\n", code);
return GRUB_TERM_NO_KEY;
}
if (status & GRUB_TERM_STATUS_CAPS) if (status & GRUB_TERM_STATUS_CAPS)
{ {
+16 -3
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);
} }
@@ -567,7 +580,7 @@ check_password_md5_real (const char *entered,
GRUB_MD_MD5->write (ctx, entered, enteredlen); GRUB_MD_MD5->write (ctx, entered, enteredlen);
digest = GRUB_MD_MD5->read (ctx); digest = GRUB_MD_MD5->read (ctx);
GRUB_MD_MD5->final (ctx); GRUB_MD_MD5->final (ctx);
memcpy (alt_result, digest, MD5_HASHLEN); grub_memcpy (alt_result, digest, MD5_HASHLEN);
GRUB_MD_MD5->init (ctx); GRUB_MD_MD5->init (ctx);
GRUB_MD_MD5->write (ctx, entered, enteredlen); GRUB_MD_MD5->write (ctx, entered, enteredlen);
@@ -583,7 +596,7 @@ check_password_md5_real (const char *entered,
for (i = 0; i < 1000; i++) for (i = 0; i < 1000; i++)
{ {
memcpy (alt_result, digest, 16); grub_memcpy (alt_result, digest, 16);
GRUB_MD_MD5->init (ctx); GRUB_MD_MD5->init (ctx);
if ((i & 1) != 0) if ((i & 1) != 0)
+3 -12
View File
@@ -263,7 +263,7 @@ check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
for (q = p->next; q; q = q->next) for (q = p->next; q; q = q->next)
{ {
grub_disk_addr_t s1, s2; grub_disk_addr_t s1, s2;
grub_disk_addr_t e1, e2, t; grub_disk_addr_t e1, e2;
s1 = p->sector; s1 = p->sector;
e1 = s1 + ((p->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS); e1 = s1 + ((p->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS);
@@ -271,16 +271,7 @@ check_blocklists (grub_envblk_t envblk, struct blocklist *blocklists,
s2 = q->sector; s2 = q->sector;
e2 = s2 + ((q->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS); e2 = s2 + ((q->length + GRUB_DISK_SECTOR_SIZE - 1) >> GRUB_DISK_SECTOR_BITS);
if (s2 > s1) if (s1 < e2 && s2 < e1)
{
t = s2;
s2 = s1;
s1 = t;
t = e2;
e2 = e1;
e1 = t;
}
if (e1 > s2)
{ {
/* This might be actually valid, but it is unbelievable that /* This might be actually valid, but it is unbelievable that
any filesystem makes such a silly allocation. */ any filesystem makes such a silly allocation. */
@@ -455,7 +446,7 @@ GRUB_MOD_INIT(loadenv)
{ {
cmd_load = cmd_load =
grub_register_extcmd ("load_env", grub_cmd_load_env, 0, grub_register_extcmd ("load_env", grub_cmd_load_env, 0,
N_("[-f FILE] [-s|--skip-sig] [whitelisted_variable_name] [...]"), N_("[-f FILE] [-s|--skip-sig] [variable_name_to_whitelist] [...]"),
N_("Load variables from environment block file."), N_("Load variables from environment block file."),
options); options);
cmd_list = cmd_list =
+236
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
{ FOUND_NONE, FOUND_FILE, FOUND_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 ? FOUND_DIR : FOUND_FILE;
}
return 0;
}
grub_err_t
grub_mac_bless_inode (grub_device_t dev, grub_uint32_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, (grub_uint32_t) ctx.inode_found,
(ctx.found == 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);
}
+8 -2
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--)
{ {
+1 -1
View File
@@ -133,7 +133,7 @@ show_help (grub_device_t dev)
} }
} }
if (! found) if (! found)
grub_printf_ (N_("Sorry no parttool is available for %s\n"), grub_printf_ (N_("Sorry, no parttool is available for %s\n"),
dev->disk->partition->partmap->name); dev->disk->partition->partmap->name);
return GRUB_ERR_NONE; return GRUB_ERR_NONE;
} }
+1 -1
View File
@@ -166,7 +166,7 @@ GRUB_MOD_INIT(pcidump)
{ {
cmd = grub_register_extcmd ("pcidump", grub_cmd_pcidump, 0, cmd = grub_register_extcmd ("pcidump", grub_cmd_pcidump, 0,
N_("[-s POSITION] [-d DEVICE]"), N_("[-s POSITION] [-d DEVICE]"),
N_("Dump PCI configuration space."), options); N_("Show raw dump of the PCI configuration space."), options);
} }
GRUB_MOD_FINI(pcidump) GRUB_MOD_FINI(pcidump)
+214
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_("current directory of syslinux [default is parent directory of input file]."),
N_("DIR"), ARG_TYPE_STRING},
{"isolinux", 'i', 0, N_("assume input is an isolinux configuration file."), 0, 0},
{"pxelinux", 'p', 0, N_("assume input is a pxelinux configuration file."), 0, 0},
{"syslinux", 's', 0, N_("assume input is a syslinux configuration file."), 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_("Execute syslinux config in same context"),
options);
cmd_configfile
= grub_register_extcmd ("syslinux_configfile",
grub_cmd_syslinux_source, 0,
N_("FILE"),
N_("Execute syslinux config in new context"),
options);
cmd_source_extract
= grub_register_extcmd ("extract_syslinux_entries_source",
grub_cmd_syslinux_source, 0,
N_("FILE"),
N_("Execute 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_("Execute 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);
}
+1 -1
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 }
+71 -20
View File
@@ -33,6 +33,13 @@
GRUB_MOD_LICENSE ("GPLv3+"); GRUB_MOD_LICENSE ("GPLv3+");
struct grub_verified
{
grub_file_t file;
void *buf;
};
typedef struct grub_verified *grub_verified_t;
enum enum
{ {
OPTION_SKIP_SIG = 0 OPTION_SKIP_SIG = 0
@@ -41,7 +48,7 @@ enum
static const struct grub_arg_option options[] = static const struct grub_arg_option options[] =
{ {
{"skip-sig", 's', 0, {"skip-sig", 's', 0,
N_("Skip signature-checking of the signature file."), 0, ARG_TYPE_NONE}, N_("Skip signature-checking of the public key file."), 0, ARG_TYPE_NONE},
{0, 0, 0, 0, 0, 0} {0, 0, 0, 0, 0, 0}
}; };
@@ -133,7 +140,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",
@@ -802,19 +809,39 @@ grub_cmd_verify_signature (grub_extcmd_context_t ctxt,
static int sec = 0; static int sec = 0;
static void
verified_free (grub_verified_t verified)
{
if (verified)
{
grub_free (verified->buf);
grub_free (verified);
}
}
static grub_ssize_t static grub_ssize_t
verified_read (struct grub_file *file, char *buf, grub_size_t len) verified_read (struct grub_file *file, char *buf, grub_size_t len)
{ {
grub_memcpy (buf, (char *) file->data + file->offset, len); grub_verified_t verified = file->data;
grub_memcpy (buf, (char *) verified->buf + file->offset, len);
return len; return len;
} }
static grub_err_t static grub_err_t
verified_close (struct grub_file *file) verified_close (struct grub_file *file)
{ {
grub_free (file->data); grub_verified_t verified = file->data;
grub_file_close (verified->file);
verified_free (verified);
file->data = 0; file->data = 0;
return GRUB_ERR_NONE;
/* device and name are freed by parent */
file->device = 0;
file->name = 0;
return grub_errno;
} }
struct grub_fs verified_fs = struct grub_fs verified_fs =
@@ -832,10 +859,13 @@ grub_pubkey_open (grub_file_t io, const char *filename)
grub_err_t err; grub_err_t err;
grub_file_filter_t curfilt[GRUB_FILE_FILTER_MAX]; grub_file_filter_t curfilt[GRUB_FILE_FILTER_MAX];
grub_file_t ret; grub_file_t ret;
grub_verified_t verified;
if (!sec) if (!sec)
return io; return io;
if (io->device->disk && io->device->disk->id == GRUB_DISK_DEVICE_MEMDISK_ID) if (io->device->disk &&
(io->device->disk->dev->id == GRUB_DISK_DEVICE_MEMDISK_ID
|| io->device->disk->dev->id == GRUB_DISK_DEVICE_PROCFS_ID))
return io; return io;
fsuf = grub_malloc (grub_strlen (filename) + sizeof (".sig")); fsuf = grub_malloc (grub_strlen (filename) + sizeof (".sig"));
if (!fsuf) if (!fsuf)
@@ -855,7 +885,10 @@ grub_pubkey_open (grub_file_t io, const char *filename)
ret = grub_malloc (sizeof (*ret)); ret = grub_malloc (sizeof (*ret));
if (!ret) if (!ret)
return NULL; {
grub_file_close (sig);
return NULL;
}
*ret = *io; *ret = *io;
ret->fs = &verified_fs; ret->fs = &verified_fs;
@@ -864,28 +897,46 @@ grub_pubkey_open (grub_file_t io, const char *filename)
{ {
grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET, grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
"big file signature isn't implemented yet"); "big file signature isn't implemented yet");
return NULL; grub_file_close (sig);
}
ret->data = grub_malloc (ret->size);
if (!ret->data)
{
grub_free (ret); grub_free (ret);
return NULL; return NULL;
} }
if (grub_file_read (io, ret->data, ret->size) != (grub_ssize_t) ret->size) verified = grub_malloc (sizeof (*verified));
if (!verified)
{
grub_file_close (sig);
grub_free (ret);
return NULL;
}
verified->buf = grub_malloc (ret->size);
if (!verified->buf)
{
grub_file_close (sig);
grub_free (verified);
grub_free (ret);
return NULL;
}
if (grub_file_read (io, verified->buf, ret->size) != (grub_ssize_t) ret->size)
{ {
if (!grub_errno) if (!grub_errno)
grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"), grub_error (GRUB_ERR_FILE_READ_ERROR, N_("premature end of file %s"),
filename); filename);
grub_file_close (sig);
verified_free (verified);
grub_free (ret);
return NULL; return NULL;
} }
err = grub_verify_signature_real (ret->data, ret->size, 0, sig, NULL); err = grub_verify_signature_real (verified->buf, ret->size, 0, sig, NULL);
grub_file_close (sig); grub_file_close (sig);
if (err) if (err)
return NULL; {
io->device = 0; verified_free (verified);
grub_file_close (io); grub_free (ret);
return NULL;
}
verified->file = io;
ret->data = verified;
return ret; return ret;
} }
@@ -965,14 +1016,14 @@ GRUB_MOD_INIT(verify)
options); options);
cmd_trust = grub_register_extcmd ("trust", grub_cmd_trust, 0, cmd_trust = grub_register_extcmd ("trust", grub_cmd_trust, 0,
N_("[-s|--skip-sig] PUBKEY_FILE"), N_("[-s|--skip-sig] PUBKEY_FILE"),
N_("Add PKFILE to trusted keys."), N_("Add PUBKEY_FILE to trusted keys."),
options); options);
cmd_list = grub_register_command ("list_trusted", grub_cmd_list, cmd_list = grub_register_command ("list_trusted", grub_cmd_list,
0, 0,
N_("List trusted keys.")); N_("Show the list of trusted keys."));
cmd_distrust = grub_register_command ("distrust", grub_cmd_distrust, cmd_distrust = grub_register_command ("distrust", grub_cmd_distrust,
N_("PUBKEY_ID"), N_("PUBKEY_ID"),
N_("Remove KEYID from trusted keys.")); N_("Remove PUBKEY_ID from trusted keys."));
} }
GRUB_MOD_FINI(verify) GRUB_MOD_FINI(verify)
+4 -4
View File
@@ -77,10 +77,10 @@ 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."));
} }
GRUB_MOD_FINI (lsxen) GRUB_MOD_FINI (lsxen)
+1 -1
View File
@@ -76,7 +76,7 @@ AF_merge (const gcry_md_spec_t * hash, grub_uint8_t * src, grub_uint8_t * dst,
if (bufblock == NULL) if (bufblock == NULL)
return GPG_ERR_OUT_OF_MEMORY; return GPG_ERR_OUT_OF_MEMORY;
if (hash->mdlen > GRUB_CRYPTO_MAX_MDLEN) if (hash->mdlen > GRUB_CRYPTO_MAX_MDLEN || hash->mdlen == 0)
return GPG_ERR_INV_ARG; return GPG_ERR_INV_ARG;
grub_memset (bufblock, 0, blocksize); grub_memset (bufblock, 0, blocksize);
+30 -9
View File
@@ -194,10 +194,8 @@ grub_ahci_pciinit (grub_pci_device_t dev,
return 0; return 0;
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND); addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
grub_pci_write_word (addr, grub_pci_read_word (addr) | grub_pci_write_word (addr, grub_pci_read_word (addr)
GRUB_PCI_COMMAND_IO_ENABLED | GRUB_PCI_COMMAND_MEM_ENABLED);
| GRUB_PCI_COMMAND_MEM_ENABLED
| GRUB_PCI_COMMAND_BUS_MASTER);
hba = grub_pci_device_map_range (dev, bar & GRUB_PCI_ADDR_MEM_MASK, hba = grub_pci_device_map_range (dev, bar & GRUB_PCI_ADDR_MEM_MASK,
sizeof (hba)); sizeof (hba));
@@ -324,7 +322,7 @@ grub_ahci_pciinit (grub_pci_device_t dev,
grub_dprintf ("ahci", "GLC:%x\n", hba->global_control); grub_dprintf ("ahci", "GLC:%x\n", hba->global_control);
nports = (hba->cap & GRUB_AHCI_HBA_CAP_NPORTS_MASK) + 1; nports = (GRUB_AHCI_HBA_CAP_NPORTS_MASK) + 1;
grub_dprintf ("ahci", "%d AHCI ports, PI = 0x%x\n", nports, grub_dprintf ("ahci", "%d AHCI ports, PI = 0x%x\n", nports,
hba->ports_implemented); hba->ports_implemented);
@@ -360,7 +358,7 @@ grub_ahci_pciinit (grub_pci_device_t dev,
grub_dprintf ("ahci", "err: %x\n", grub_dprintf ("ahci", "err: %x\n",
adevs[i]->hba->ports[adevs[i]->port].sata_error); adevs[i]->hba->ports[adevs[i]->port].sata_error);
adevs[i]->command_list_chunk = grub_memalign_dma32 (1024, sizeof (struct grub_ahci_cmd_head)); adevs[i]->command_list_chunk = grub_memalign_dma32 (1024, sizeof (struct grub_ahci_cmd_head) * 32);
if (!adevs[i]->command_list_chunk) if (!adevs[i]->command_list_chunk)
{ {
adevs[i] = 0; adevs[i] = 0;
@@ -378,6 +376,12 @@ grub_ahci_pciinit (grub_pci_device_t dev,
adevs[i]->command_list = grub_dma_get_virt (adevs[i]->command_list_chunk); adevs[i]->command_list = grub_dma_get_virt (adevs[i]->command_list_chunk);
adevs[i]->command_table = grub_dma_get_virt (adevs[i]->command_table_chunk); adevs[i]->command_table = grub_dma_get_virt (adevs[i]->command_table_chunk);
grub_memset ((void *) adevs[i]->command_list, 0,
sizeof (struct grub_ahci_cmd_table));
grub_memset ((void *) adevs[i]->command_table, 0,
sizeof (struct grub_ahci_cmd_head) * 32);
adevs[i]->command_list->command_table_base adevs[i]->command_list->command_table_base
= grub_dma_get_phys (adevs[i]->command_table_chunk); = grub_dma_get_phys (adevs[i]->command_table_chunk);
@@ -450,6 +454,7 @@ grub_ahci_pciinit (grub_pci_device_t dev,
adevs[i]->hba->ports[adevs[i]->port].fis_base = grub_dma_get_phys (adevs[i]->rfis); adevs[i]->hba->ports[adevs[i]->port].fis_base = grub_dma_get_phys (adevs[i]->rfis);
adevs[i]->hba->ports[adevs[i]->port].command_list_base adevs[i]->hba->ports[adevs[i]->port].command_list_base
= grub_dma_get_phys (adevs[i]->command_list_chunk); = grub_dma_get_phys (adevs[i]->command_list_chunk);
adevs[i]->hba->ports[adevs[i]->port].command_issue = 0;
adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_FRE; adevs[i]->hba->ports[adevs[i]->port].command |= GRUB_AHCI_HBA_PORT_CMD_FRE;
} }
@@ -596,6 +601,9 @@ grub_ahci_pciinit (grub_pci_device_t dev,
failed_adevs[i] = adevs[i]; failed_adevs[i] = adevs[i];
adevs[i] = 0; adevs[i] = 0;
} }
grub_dprintf ("ahci", "cleaning up failed devs\n");
for (i = 0; i < nports; i++) for (i = 0; i < nports; i++)
if (failed_adevs[i] && (fr_running & (1 << i))) if (failed_adevs[i] && (fr_running & (1 << i)))
failed_adevs[i]->hba->ports[failed_adevs[i]->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_FRE; failed_adevs[i]->hba->ports[failed_adevs[i]->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_FRE;
@@ -621,6 +629,10 @@ grub_ahci_pciinit (grub_pci_device_t dev,
if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].sig >> 16) == 0xeb14) if (adevs[i] && (adevs[i]->hba->ports[adevs[i]->port].sig >> 16) == 0xeb14)
adevs[i]->atapi = 1; adevs[i]->atapi = 1;
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
grub_pci_write_word (addr, grub_pci_read_word (addr)
| GRUB_PCI_COMMAND_BUS_MASTER);
for (i = 0; i < nports; i++) for (i = 0; i < nports; i++)
if (adevs[i]) if (adevs[i])
{ {
@@ -847,6 +859,12 @@ grub_ahci_reset_port (struct grub_ahci_device *dev, int force)
{ {
struct grub_disk_ata_pass_through_parms parms2; struct grub_disk_ata_pass_through_parms parms2;
dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_ST; dev->hba->ports[dev->port].command &= ~GRUB_AHCI_HBA_PORT_CMD_ST;
dev->hba->ports[dev->port].command_issue = 0;
dev->command_list[0].config = 0;
dev->command_table[0].prdt[0].unused = 0;
dev->command_table[0].prdt[0].size = 0;
dev->command_table[0].prdt[0].data_base = 0;
endtime = grub_get_time_ms () + 1000; endtime = grub_get_time_ms () + 1000;
while ((dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_CR)) while ((dev->hba->ports[dev->port].command & GRUB_AHCI_HBA_PORT_CMD_CR))
if (grub_get_time_ms () > endtime) if (grub_get_time_ms () > endtime)
@@ -914,7 +932,10 @@ grub_ahci_readwrite_real (struct grub_ahci_device *dev,
if (parms->size > GRUB_AHCI_PRDT_MAX_CHUNK_LENGTH) if (parms->size > GRUB_AHCI_PRDT_MAX_CHUNK_LENGTH)
return grub_error (GRUB_ERR_BUG, "too big data buffer"); return grub_error (GRUB_ERR_BUG, "too big data buffer");
bufc = grub_memalign_dma32 (1024, parms->size + (parms->size & 1)); if (parms->size)
bufc = grub_memalign_dma32 (1024, parms->size + (parms->size & 1));
else
bufc = grub_memalign_dma32 (1024, 512);
grub_dprintf ("ahci", "AHCI tfd = %x, CL=%p\n", grub_dprintf ("ahci", "AHCI tfd = %x, CL=%p\n",
dev->hba->ports[dev->port].task_file_data, dev->hba->ports[dev->port].task_file_data,
@@ -924,7 +945,7 @@ grub_ahci_readwrite_real (struct grub_ahci_device *dev,
= (5 << GRUB_AHCI_CONFIG_CFIS_LENGTH_SHIFT) = (5 << GRUB_AHCI_CONFIG_CFIS_LENGTH_SHIFT)
// | GRUB_AHCI_CONFIG_CLEAR_R_OK // | GRUB_AHCI_CONFIG_CLEAR_R_OK
| (0 << GRUB_AHCI_CONFIG_PMP_SHIFT) | (0 << GRUB_AHCI_CONFIG_PMP_SHIFT)
| (1 << GRUB_AHCI_CONFIG_PRDT_LENGTH_SHIFT) | ((parms->size ? 1 : 0) << GRUB_AHCI_CONFIG_PRDT_LENGTH_SHIFT)
| (parms->cmdsize ? GRUB_AHCI_CONFIG_ATAPI : 0) | (parms->cmdsize ? GRUB_AHCI_CONFIG_ATAPI : 0)
| (parms->write ? GRUB_AHCI_CONFIG_WRITE : GRUB_AHCI_CONFIG_READ) | (parms->write ? GRUB_AHCI_CONFIG_WRITE : GRUB_AHCI_CONFIG_READ)
| (parms->taskfile.cmd == 8 ? (1 << 8) : 0); | (parms->taskfile.cmd == 8 ? (1 << 8) : 0);
@@ -1001,7 +1022,7 @@ grub_ahci_readwrite_real (struct grub_ahci_device *dev,
grub_dprintf ("ahci", "AHCI tfd = %x\n", grub_dprintf ("ahci", "AHCI tfd = %x\n",
dev->hba->ports[dev->port].task_file_data); dev->hba->ports[dev->port].task_file_data);
endtime = grub_get_time_ms () + (spinup ? 10000 : 5000); endtime = grub_get_time_ms () + (spinup ? 20000 : 20000);
while ((dev->hba->ports[dev->port].command_issue & 1)) while ((dev->hba->ports[dev->port].command_issue & 1))
if (grub_get_time_ms () > endtime) if (grub_get_time_ms () > endtime)
{ {
+6
View File
@@ -216,6 +216,12 @@ grub_ata_setaddress (struct grub_ata *dev,
unsigned int head; unsigned int head;
unsigned int sect; unsigned int sect;
if (dev->sectors_per_track == 0
|| dev->heads == 0)
return grub_error (GRUB_ERR_OUT_OF_RANGE,
"sector %d cannot be addressed "
"using CHS addressing", sector);
/* Calculate the sector, cylinder and head to use. */ /* Calculate the sector, cylinder and head to use. */
sect = ((grub_uint32_t) sector % dev->sectors_per_track) + 1; sect = ((grub_uint32_t) sector % dev->sectors_per_track) + 1;
cylinder = (((grub_uint32_t) sector / dev->sectors_per_track) cylinder = (((grub_uint32_t) sector / dev->sectors_per_track)
+13 -12
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;
@@ -762,25 +762,26 @@ grub_cryptodisk_cheat_insert (grub_cryptodisk_t newdev, const char *name,
void void
grub_util_cryptodisk_get_abstraction (grub_disk_t disk, grub_util_cryptodisk_get_abstraction (grub_disk_t disk,
void (*cb) (const char *val)) void (*cb) (const char *val, void *data),
void *data)
{ {
grub_cryptodisk_t dev = (grub_cryptodisk_t) disk->data; grub_cryptodisk_t dev = (grub_cryptodisk_t) disk->data;
cb ("cryptodisk"); cb ("cryptodisk", data);
cb (dev->modname); cb (dev->modname, data);
if (dev->cipher) if (dev->cipher)
cb (dev->cipher->cipher->modname); cb (dev->cipher->cipher->modname, data);
if (dev->secondary_cipher) if (dev->secondary_cipher)
cb (dev->secondary_cipher->cipher->modname); cb (dev->secondary_cipher->cipher->modname, data);
if (dev->essiv_cipher) if (dev->essiv_cipher)
cb (dev->essiv_cipher->cipher->modname); cb (dev->essiv_cipher->cipher->modname, data);
if (dev->hash) if (dev->hash)
cb (dev->hash->modname); cb (dev->hash->modname, data);
if (dev->essiv_hash) if (dev->essiv_hash)
cb (dev->essiv_hash->modname); cb (dev->essiv_hash->modname, data);
if (dev->iv_hash) if (dev->iv_hash)
cb (dev->iv_hash->modname); cb (dev->iv_hash->modname, data);
} }
const char * const char *
+123 -8
View File
@@ -354,7 +354,8 @@ grub_diskfilter_memberlist (grub_disk_t disk)
void void
grub_diskfilter_get_partmap (grub_disk_t disk, grub_diskfilter_get_partmap (grub_disk_t disk,
void (*cb) (const char *pm)) void (*cb) (const char *pm, void *data),
void *data)
{ {
struct grub_diskfilter_lv *lv = disk->data; struct grub_diskfilter_lv *lv = disk->data;
struct grub_diskfilter_pv *pv; struct grub_diskfilter_pv *pv;
@@ -376,7 +377,7 @@ grub_diskfilter_get_partmap (grub_disk_t disk,
continue; continue;
} }
for (s = 0; pv->partmaps[s]; s++) for (s = 0; pv->partmaps[s]; s++)
cb (pv->partmaps[s]); cb (pv->partmaps[s], data);
} }
} }
@@ -482,6 +483,96 @@ grub_diskfilter_read_node (const struct grub_diskfilter_node *node,
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown node '%s'", node->name); return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown node '%s'", node->name);
} }
static grub_err_t
validate_segment (struct grub_diskfilter_segment *seg);
static grub_err_t
validate_lv (struct grub_diskfilter_lv *lv)
{
unsigned int i;
if (!lv)
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown volume");
if (lv->vg->extent_size == 0)
return grub_error (GRUB_ERR_READ_ERROR, "invalid volume");
for (i = 0; i < lv->segment_count; i++)
{
grub_err_t err;
err = validate_segment (&lv->segments[1]);
if (err)
return err;
}
return GRUB_ERR_NONE;
}
static grub_err_t
validate_node (const struct grub_diskfilter_node *node)
{
/* Check whether we actually know the physical volume we want to
read from. */
if (node->pv)
return GRUB_ERR_NONE;
if (node->lv)
return validate_lv (node->lv);
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "unknown node '%s'", node->name);
}
static grub_err_t
validate_segment (struct grub_diskfilter_segment *seg)
{
grub_err_t err;
if (seg->stripe_size == 0 || seg->node_count == 0)
return grub_error(GRUB_ERR_BAD_FS, "invalid segment");
switch (seg->type)
{
case GRUB_DISKFILTER_RAID10:
{
grub_uint8_t near, far;
near = seg->layout & 0xFF;
far = (seg->layout >> 8) & 0xFF;
if ((seg->layout >> 16) == 0 && far == 0)
return grub_error(GRUB_ERR_BAD_FS, "invalid segment");
if (near > seg->node_count)
return grub_error(GRUB_ERR_BAD_FS, "invalid segment");
break;
}
case GRUB_DISKFILTER_STRIPED:
case GRUB_DISKFILTER_MIRROR:
break;
case GRUB_DISKFILTER_RAID4:
case GRUB_DISKFILTER_RAID5:
if (seg->node_count <= 1)
return grub_error(GRUB_ERR_BAD_FS, "invalid segment");
break;
case GRUB_DISKFILTER_RAID6:
if (seg->node_count <= 2)
return grub_error(GRUB_ERR_BAD_FS, "invalid segment");
break;
default:
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
"unsupported RAID level %d", seg->type);
}
unsigned i;
for (i = 0; i < seg->node_count; i++)
{
err = validate_node (&seg->nodes[i]);
if (err)
return err;
}
return GRUB_ERR_NONE;
}
static grub_err_t static grub_err_t
read_segment (struct grub_diskfilter_segment *seg, grub_disk_addr_t sector, read_segment (struct grub_diskfilter_segment *seg, grub_disk_addr_t sector,
grub_size_t size, char *buf) grub_size_t size, char *buf)
@@ -847,6 +938,32 @@ grub_diskfilter_vg_register (struct grub_diskfilter_vg *vg)
for (lv = vg->lvs; lv; lv = lv->next) for (lv = vg->lvs; lv; lv = lv->next)
{ {
/* RAID 1 and single-disk RAID 0 don't use a chunksize but code assumes one so set
one. */
for (i = 0; i < lv->segment_count; i++)
{
if (lv->segments[i].type == 1)
lv->segments[i].stripe_size = 64;
if (lv->segments[i].type == GRUB_DISKFILTER_STRIPED
&& lv->segments[i].node_count == 1
&& lv->segments[i].stripe_size == 0)
lv->segments[i].stripe_size = 64;
}
}
for (lv = vg->lvs; lv; lv = lv->next)
{
grub_err_t err;
/* RAID 1 doesn't use a chunksize but code assumes one so set
one. */
for (i = 0; i < lv->segment_count; i++)
if (lv->segments[i].type == 1)
lv->segments[i].stripe_size = 64;
err = validate_lv(lv);
if (err)
return err;
lv->number = lv_num++; lv->number = lv_num++;
if (lv->fullname) if (lv->fullname)
@@ -887,11 +1004,6 @@ grub_diskfilter_vg_register (struct grub_diskfilter_vg *vg)
lv->fullname = tmp; lv->fullname = tmp;
} }
} }
/* RAID 1 doesn't use a chunksize but code assumes one so set
one. */
for (i = 0; i < lv->segment_count; i++)
if (lv->segments[i].type == 1)
lv->segments[i].stripe_size = 64;
lv->vg = vg; lv->vg = vg;
} }
/* Add our new array to the list. */ /* Add our new array to the list. */
@@ -925,6 +1037,8 @@ grub_diskfilter_make_raid (grub_size_t uuidlen, char *uuid, int nmemb,
n = layout & 0xFF; n = layout & 0xFF;
if (n == 1) if (n == 1)
n = (layout >> 8) & 0xFF; n = (layout >> 8) & 0xFF;
if (n == 0)
return NULL;
totsize = grub_divmod64 (nmemb * disk_size, n, 0); totsize = grub_divmod64 (nmemb * disk_size, n, 0);
} }
@@ -1057,7 +1171,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);
+7 -1
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,
@@ -129,6 +129,9 @@ grub_dmraid_nv_detect (grub_disk_t disk,
case NV_LEVEL_0: case NV_LEVEL_0:
level = 0; level = 0;
disk_size = sb.capacity / sb.array.total_volumes; disk_size = sb.capacity / sb.array.total_volumes;
if (sb.array.total_volumes == 0)
/* Not RAID. */
return NULL;
break; break;
case NV_LEVEL_1: case NV_LEVEL_1:
@@ -139,6 +142,9 @@ grub_dmraid_nv_detect (grub_disk_t disk,
case NV_LEVEL_5: case NV_LEVEL_5:
level = 5; level = 5;
disk_size = sb.capacity / (sb.array.total_volumes - 1); disk_size = sb.capacity / (sb.array.total_volumes - 1);
if (sb.array.total_volumes == 0 || sb.array.total_volumes == 1)
/* Not RAID. */
return NULL;
break; break;
default: default:
+33 -21
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);
@@ -335,6 +333,21 @@ name_devices (struct grub_efidisk_data *devices)
if (! dp) if (! dp)
continue; continue;
/* Ghosts proudly presented by Apple. */
if (GRUB_EFI_DEVICE_PATH_TYPE (dp) == GRUB_EFI_MEDIA_DEVICE_PATH_TYPE
&& GRUB_EFI_DEVICE_PATH_SUBTYPE (dp)
== GRUB_EFI_VENDOR_MEDIA_DEVICE_PATH_SUBTYPE)
{
grub_efi_vendor_device_path_t *vendor = (grub_efi_vendor_device_path_t *) dp;
const struct grub_efi_guid apple = GRUB_EFI_VENDOR_APPLE_GUID;
if (vendor->header.length == sizeof (*vendor)
&& grub_memcmp (&vendor->vendor_guid, &apple,
sizeof (vendor->vendor_guid)) == 0
&& find_parent_device (devices, d))
continue;
}
m = d->block_io->media; m = d->block_io->media;
if (GRUB_EFI_DEVICE_PATH_TYPE (dp) == GRUB_EFI_ACPI_DEVICE_PATH_TYPE if (GRUB_EFI_DEVICE_PATH_TYPE (dp) == GRUB_EFI_ACPI_DEVICE_PATH_TYPE
&& GRUB_EFI_DEVICE_PATH_SUBTYPE (dp) && GRUB_EFI_DEVICE_PATH_SUBTYPE (dp)
@@ -668,20 +681,20 @@ 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;
break; break;
@@ -747,7 +760,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,11 +772,11 @@ 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);
return 1; return 1;
@@ -816,8 +829,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,10 +846,10 @@ 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))
{ {
dev_name = grub_strdup (parent->name); dev_name = grub_strdup (parent->name);
+35 -11
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);
@@ -225,7 +225,7 @@ grub_util_get_geli_uuid (const char *dev)
/* Look for GELI magic sequence. */ /* Look for GELI magic sequence. */
if (grub_memcmp (header->magic, GELI_MAGIC, sizeof (GELI_MAGIC)) if (grub_memcmp (header->magic, GELI_MAGIC, sizeof (GELI_MAGIC))
|| grub_le_to_cpu32 (header->version) > 5 || grub_le_to_cpu32 (header->version) > 7
|| grub_le_to_cpu32 (header->version) < 1) || grub_le_to_cpu32 (header->version) < 1)
grub_util_error ("%s", _("wrong ELI magic or version")); grub_util_error ("%s", _("wrong ELI magic or version"));
@@ -265,7 +265,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
/* Look for GELI magic sequence. */ /* Look for GELI magic sequence. */
if (grub_memcmp (header.magic, GELI_MAGIC, sizeof (GELI_MAGIC)) if (grub_memcmp (header.magic, GELI_MAGIC, sizeof (GELI_MAGIC))
|| grub_le_to_cpu32 (header.version) > 5 || grub_le_to_cpu32 (header.version) > 7
|| grub_le_to_cpu32 (header.version) < 1) || grub_le_to_cpu32 (header.version) < 1)
{ {
grub_dprintf ("geli", "wrong magic %02x\n", header.magic[0]); grub_dprintf ("geli", "wrong magic %02x\n", header.magic[0]);
@@ -332,19 +332,29 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
{ {
secondary_cipher = grub_crypto_cipher_open (ciph); secondary_cipher = grub_crypto_cipher_open (ciph);
if (!secondary_cipher) if (!secondary_cipher)
return NULL; {
grub_crypto_cipher_close (cipher);
return NULL;
}
} }
if (grub_le_to_cpu16 (header.keylen) > 1024) if (grub_le_to_cpu16 (header.keylen) > 1024)
{ {
grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d", grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d",
grub_le_to_cpu16 (header.keylen)); grub_le_to_cpu16 (header.keylen));
grub_crypto_cipher_close (cipher);
grub_crypto_cipher_close (secondary_cipher);
return NULL; return NULL;
} }
newdev = grub_zalloc (sizeof (struct grub_cryptodisk)); newdev = grub_zalloc (sizeof (struct grub_cryptodisk));
if (!newdev) if (!newdev)
return NULL; {
grub_crypto_cipher_close (cipher);
grub_crypto_cipher_close (secondary_cipher);
return NULL;
}
newdev->cipher = cipher; newdev->cipher = cipher;
newdev->secondary_cipher = secondary_cipher; newdev->secondary_cipher = secondary_cipher;
newdev->offset = 0; newdev->offset = 0;
@@ -391,6 +401,7 @@ recover_key (grub_disk_t source, grub_cryptodisk_t dev)
grub_uint8_t geomkey[GRUB_CRYPTO_MAX_MDLEN]; grub_uint8_t geomkey[GRUB_CRYPTO_MAX_MDLEN];
grub_uint8_t verify_key[GRUB_CRYPTO_MAX_MDLEN]; grub_uint8_t verify_key[GRUB_CRYPTO_MAX_MDLEN];
grub_uint8_t zero[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE]; grub_uint8_t zero[GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE];
grub_uint8_t geli_cipher_key[64];
char passphrase[MAX_PASSPHRASE] = ""; char passphrase[MAX_PASSPHRASE] = "";
unsigned i; unsigned i;
gcry_err_code_t gcry_err; gcry_err_code_t gcry_err;
@@ -514,6 +525,19 @@ recover_key (grub_disk_t source, grub_cryptodisk_t dev)
continue; continue;
grub_printf_ (N_("Slot %d opened\n"), i); grub_printf_ (N_("Slot %d opened\n"), i);
if (grub_le_to_cpu32 (header.version) >= 7)
{
/* GELI >=7 uses the cipher_key */
grub_memcpy (geli_cipher_key, candidate_key.cipher_key,
sizeof (candidate_key.cipher_key));
}
else
{
/* GELI <=6 uses the iv_key */
grub_memcpy (geli_cipher_key, candidate_key.iv_key,
sizeof (candidate_key.iv_key));
}
/* Set the master key. */ /* Set the master key. */
if (!dev->rekey) if (!dev->rekey)
{ {
@@ -530,13 +554,13 @@ recover_key (grub_disk_t source, grub_cryptodisk_t dev)
grub_size_t real_keysize = keysize; grub_size_t real_keysize = keysize;
if (grub_le_to_cpu16 (header.alg) == 0x16) if (grub_le_to_cpu16 (header.alg) == 0x16)
real_keysize *= 2; real_keysize *= 2;
/* For a reason I don't know, the IV key is used in rekeying. */
grub_memcpy (dev->rekey_key, candidate_key.iv_key, grub_memcpy (dev->rekey_key, geli_cipher_key,
sizeof (candidate_key.iv_key)); sizeof (geli_cipher_key));
dev->rekey_derived_size = real_keysize; dev->rekey_derived_size = real_keysize;
dev->last_rekey = -1; dev->last_rekey = -1;
COMPILE_TIME_ASSERT (sizeof (dev->rekey_key) COMPILE_TIME_ASSERT (sizeof (dev->rekey_key)
>= sizeof (candidate_key.iv_key)); >= sizeof (geli_cipher_key));
} }
dev->iv_prefix_len = sizeof (candidate_key.iv_key); dev->iv_prefix_len = sizeof (candidate_key.iv_key);
+1 -1
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;
+13
View File
@@ -419,6 +419,11 @@ grub_biosdisk_open (const char *name, grub_disk_t disk)
} }
} }
if (data->sectors == 0)
data->sectors = 63;
if (data->heads == 0)
data->heads = 255;
if (! total_sectors) if (! total_sectors)
total_sectors = data->cylinders * data->heads * data->sectors; total_sectors = data->cylinders * data->heads * data->sectors;
} }
@@ -455,6 +460,14 @@ grub_biosdisk_rw (int cmd, grub_disk_t disk,
{ {
struct grub_biosdisk_data *data = disk->data; struct grub_biosdisk_data *data = disk->data;
/* VirtualBox fails with sectors above 2T on CDs.
Since even BD-ROMS are never that big anyway, return error. */
if ((data->flags & GRUB_BIOSDISK_FLAG_CDROM)
&& (sector >> 32))
return grub_error (GRUB_ERR_OUT_OF_RANGE,
N_("attempt to read or write outside of disk `%s'"),
disk->name);
if (data->flags & GRUB_BIOSDISK_FLAG_LBA) if (data->flags & GRUB_BIOSDISK_FLAG_LBA)
{ {
struct grub_biosdisk_dap *dap; struct grub_biosdisk_dap *dap;
+5
View File
@@ -113,6 +113,11 @@ grub_nand_open (const char *name, grub_disk_t disk)
} }
data->block_size = (args.size1 >> GRUB_DISK_SECTOR_BITS); data->block_size = (args.size1 >> GRUB_DISK_SECTOR_BITS);
if (!data->block_size)
{
grub_error (GRUB_ERR_UNKNOWN_DEVICE, "invalid block size");
goto fail;
}
INIT_IEEE1275_COMMON (&args.common, "call-method", 2, 3); INIT_IEEE1275_COMMON (&args.common, "call-method", 2, 3);
args.method = (grub_ieee1275_cell_t) "size"; args.method = (grub_ieee1275_cell_t) "size";
+51 -32
View File
@@ -31,11 +31,14 @@ static grub_ieee1275_ihandle_t last_ihandle;
struct ofdisk_hash_ent struct ofdisk_hash_ent
{ {
char *devpath; char *devpath;
char *open_path;
char *grub_devpath;
int is_boot; int is_boot;
int is_cdrom; int is_cdrom;
/* Pointer to shortest available name on nodes representing canonical names, /* Pointer to shortest available name on nodes representing canonical names,
otherwise NULL. */ otherwise NULL. */
const char *shortest; const char *shortest;
const char *grub_shortest;
struct ofdisk_hash_ent *next; struct ofdisk_hash_ent *next;
}; };
@@ -70,12 +73,50 @@ ofdisk_hash_add_real (char *devpath)
{ {
struct ofdisk_hash_ent *p; struct ofdisk_hash_ent *p;
struct ofdisk_hash_ent **head = &ofdisk_hash[ofdisk_hash_fn(devpath)]; struct ofdisk_hash_ent **head = &ofdisk_hash[ofdisk_hash_fn(devpath)];
const char *iptr;
char *optr;
p = grub_zalloc (sizeof (*p)); p = grub_zalloc (sizeof (*p));
if (!p) if (!p)
return NULL; return NULL;
p->devpath = devpath; p->devpath = devpath;
p->grub_devpath = grub_malloc (sizeof ("ieee1275/")
+ 2 * grub_strlen (p->devpath));
if (!p->grub_devpath)
{
grub_free (p);
return NULL;
}
if (! grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_PARTITION_0))
{
p->open_path = grub_malloc (grub_strlen (p->devpath) + 3);
if (!p->open_path)
{
grub_free (p->grub_devpath);
grub_free (p);
return NULL;
}
optr = grub_stpcpy (p->open_path, p->devpath);
*optr++ = ':';
*optr++ = '0';
*optr = '\0';
}
else
p->open_path = p->devpath;
optr = grub_stpcpy (p->grub_devpath, "ieee1275/");
for (iptr = p->devpath; *iptr; )
{
if (*iptr == ',')
*optr++ = '\\';
*optr++ = *iptr++;
}
*optr = 0;
p->next = *head; p->next = *head;
*head = p; *head = p;
return p; return p;
@@ -104,7 +145,8 @@ ofdisk_hash_add (char *devpath, char *curcan)
if (!curcan) if (!curcan)
{ {
p->shortest = devpath; p->shortest = p->devpath;
p->grub_shortest = p->grub_devpath;
if (check_string_cdrom (devpath)) if (check_string_cdrom (devpath))
p->is_cdrom = 1; p->is_cdrom = 1;
return p; return p;
@@ -125,7 +167,10 @@ ofdisk_hash_add (char *devpath, char *curcan)
{ {
if (!pcan->shortest if (!pcan->shortest
|| grub_strlen (pcan->shortest) > grub_strlen (devpath)) || grub_strlen (pcan->shortest) > grub_strlen (devpath))
pcan->shortest = devpath; {
pcan->shortest = p->devpath;
pcan->grub_shortest = p->grub_devpath;
}
} }
return p; return p;
@@ -288,21 +333,8 @@ grub_ofdisk_iterate (grub_disk_dev_iterate_hook_t hook, void *hook_data,
if (!ent->is_boot && ent->is_cdrom) if (!ent->is_boot && ent->is_cdrom)
continue; continue;
{ if (hook (ent->grub_shortest, hook_data))
char buffer[sizeof ("ieee1275/") + 2 * grub_strlen (ent->shortest)]; return 1;
const char *iptr;
char *optr;
optr = grub_stpcpy (buffer, "ieee1275/");
for (iptr = ent->shortest; *iptr; )
{
if (*iptr == ',')
*optr++ = '\\';
*optr++ = *iptr++;
}
*optr = 0;
if (hook (buffer, hook_data))
return 1;
}
} }
} }
return 0; return 0;
@@ -396,7 +428,7 @@ grub_ofdisk_open (const char *name, grub_disk_t disk)
if (!op) if (!op)
return grub_errno; return grub_errno;
disk->id = (unsigned long) op; disk->id = (unsigned long) op;
disk->data = op->devpath; disk->data = op->open_path;
} }
return 0; return 0;
@@ -428,20 +460,7 @@ grub_ofdisk_prepare (grub_disk_t disk, grub_disk_addr_t sector)
last_ihandle = 0; last_ihandle = 0;
last_devpath = NULL; last_devpath = NULL;
if (! grub_ieee1275_test_flag (GRUB_IEEE1275_FLAG_NO_PARTITION_0)) grub_ieee1275_open (disk->data, &last_ihandle);
{
char name2[grub_strlen (disk->data) + 3];
char *p;
grub_strcpy (name2, disk->data);
p = name2 + grub_strlen (name2);
*p++ = ':';
*p++ = '0';
*p = 0;
grub_ieee1275_open (name2, &last_ihandle);
}
else
grub_ieee1275_open (disk->data, &last_ihandle);
if (! last_ihandle) if (! last_ihandle)
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device"); return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "can't open device");
last_devpath = disk->data; last_devpath = disk->data;
+3 -3
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"
@@ -1012,7 +1012,7 @@ grub_util_ldm_embed (struct grub_disk *disk, unsigned int *nsectors,
usable for bootloaders (called generically usable for bootloaders (called generically
"embedding zone") and this operation is "embedding zone") and this operation is
called "embedding". */ called "embedding". */
N_("your LDM embedding Partition is too small;" N_("your LDM Embedding Partition is too small;"
" embedding won't be possible")); " embedding won't be possible"));
*nsectors = lv->size; *nsectors = lv->size;
if (*nsectors > max_nsectors) if (*nsectors > max_nsectors)
+4 -1
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;
+17 -4
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;
@@ -143,6 +143,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
{ {
grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d", grub_error (GRUB_ERR_BAD_ARGUMENT, "invalid keysize %d",
grub_be_to_cpu32 (header.keyBytes)); grub_be_to_cpu32 (header.keyBytes));
grub_crypto_cipher_close (cipher);
return NULL; return NULL;
} }
@@ -181,9 +182,10 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
} }
if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
{ {
grub_crypto_cipher_close (cipher);
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d", grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d",
cipher->cipher->blocksize); cipher->cipher->blocksize);
grub_crypto_cipher_close (cipher);
grub_crypto_cipher_close (secondary_cipher);
return NULL; return NULL;
} }
if (secondary_cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) if (secondary_cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
@@ -191,6 +193,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
grub_crypto_cipher_close (cipher); grub_crypto_cipher_close (cipher);
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d", grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported XTS block size: %d",
secondary_cipher->cipher->blocksize); secondary_cipher->cipher->blocksize);
grub_crypto_cipher_close (secondary_cipher);
return NULL; return NULL;
} }
} }
@@ -200,9 +203,9 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
cipheriv = ciphermode + sizeof ("lrw-") - 1; cipheriv = ciphermode + sizeof ("lrw-") - 1;
if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES) if (cipher->cipher->blocksize != GRUB_CRYPTODISK_GF_BYTES)
{ {
grub_crypto_cipher_close (cipher);
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported LRW block size: %d", grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported LRW block size: %d",
cipher->cipher->blocksize); cipher->cipher->blocksize);
grub_crypto_cipher_close (cipher);
return NULL; return NULL;
} }
} }
@@ -225,6 +228,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
|| cipher->cipher->blocksize == 0) || cipher->cipher->blocksize == 0)
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported benbi blocksize: %d", grub_error (GRUB_ERR_BAD_ARGUMENT, "Unsupported benbi blocksize: %d",
cipher->cipher->blocksize); cipher->cipher->blocksize);
/* FIXME should we return an error here? */
for (benbi_log = 0; for (benbi_log = 0;
(cipher->cipher->blocksize << benbi_log) < GRUB_DISK_SECTOR_SIZE; (cipher->cipher->blocksize << benbi_log) < GRUB_DISK_SECTOR_SIZE;
benbi_log++); benbi_log++);
@@ -243,6 +247,7 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
if (!essiv_hash) if (!essiv_hash)
{ {
grub_crypto_cipher_close (cipher); grub_crypto_cipher_close (cipher);
grub_crypto_cipher_close (secondary_cipher);
grub_error (GRUB_ERR_FILE_NOT_FOUND, grub_error (GRUB_ERR_FILE_NOT_FOUND,
"Couldn't load %s hash", hash_str); "Couldn't load %s hash", hash_str);
return NULL; return NULL;
@@ -251,12 +256,14 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
if (!essiv_cipher) if (!essiv_cipher)
{ {
grub_crypto_cipher_close (cipher); grub_crypto_cipher_close (cipher);
grub_crypto_cipher_close (secondary_cipher);
return NULL; return NULL;
} }
} }
else else
{ {
grub_crypto_cipher_close (cipher); grub_crypto_cipher_close (cipher);
grub_crypto_cipher_close (secondary_cipher);
grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown IV mode: %s", grub_error (GRUB_ERR_BAD_ARGUMENT, "Unknown IV mode: %s",
cipheriv); cipheriv);
return NULL; return NULL;
@@ -276,7 +283,12 @@ configure_ciphers (grub_disk_t disk, const char *check_uuid,
newdev = grub_zalloc (sizeof (struct grub_cryptodisk)); newdev = grub_zalloc (sizeof (struct grub_cryptodisk));
if (!newdev) if (!newdev)
return NULL; {
grub_crypto_cipher_close (cipher);
grub_crypto_cipher_close (essiv_cipher);
grub_crypto_cipher_close (secondary_cipher);
return NULL;
}
newdev->cipher = cipher; newdev->cipher = cipher;
newdev->offset = grub_be_to_cpu32 (header.payloadOffset); newdev->offset = grub_be_to_cpu32 (header.payloadOffset);
newdev->source_disk = NULL; newdev->source_disk = NULL;
@@ -451,6 +463,7 @@ luks_recover_key (grub_disk_t source,
return GRUB_ERR_NONE; return GRUB_ERR_NONE;
} }
grub_free (split_key);
return GRUB_ACCESS_DENIED; return GRUB_ACCESS_DENIED;
} }
+7 -6
View File
@@ -65,7 +65,7 @@ grub_lvm_checkvalue (char **p, char *str, char *tmpl)
static int static int
grub_lvm_check_flag (char *p, const char *str, const char *flag) grub_lvm_check_flag (char *p, const char *str, const char *flag)
{ {
int len_str = grub_strlen (str), len_flag = grub_strlen (flag); grub_size_t len_str = grub_strlen (str), len_flag = grub_strlen (flag);
while (1) while (1)
{ {
char *q; char *q;
@@ -111,7 +111,8 @@ grub_lvm_detect (grub_disk_t disk,
struct grub_lvm_disk_locn *dlocn; struct grub_lvm_disk_locn *dlocn;
struct grub_lvm_mda_header *mdah; struct grub_lvm_mda_header *mdah;
struct grub_lvm_raw_locn *rlocn; struct grub_lvm_raw_locn *rlocn;
unsigned int i, j, vgname_len; unsigned int i, j;
grub_size_t vgname_len;
struct grub_diskfilter_vg *vg; struct grub_diskfilter_vg *vg;
struct grub_diskfilter_pv *pv; struct grub_diskfilter_pv *pv;
@@ -273,7 +274,7 @@ grub_lvm_detect (grub_disk_t disk,
/* Add all the pvs to the volume group. */ /* Add all the pvs to the volume group. */
while (1) while (1)
{ {
int s; grub_ssize_t s;
while (grub_isspace (*p)) while (grub_isspace (*p))
p++; p++;
@@ -332,15 +333,15 @@ grub_lvm_detect (grub_disk_t disk,
} }
} }
p = grub_strstr (p, "logical_volumes"); p = grub_strstr (p, "logical_volumes {");
if (p) if (p)
{ {
p += sizeof ("logical_volumes = ") - 1; p += sizeof ("logical_volumes {") - 1;
/* And add all the lvs to the volume group. */ /* And add all the lvs to the volume group. */
while (1) while (1)
{ {
int s; grub_ssize_t s;
int skip_lv = 0; int skip_lv = 0;
struct grub_diskfilter_lv *lv; struct grub_diskfilter_lv *lv;
struct grub_diskfilter_segment *seg; struct grub_diskfilter_segment *seg;
+1 -1
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. */
+7 -7
View File
@@ -33,16 +33,16 @@ GRUB_MOD_LICENSE ("GPLv3+");
#define grub_md_to_cpu64 grub_be_to_cpu64 #define grub_md_to_cpu64 grub_be_to_cpu64
#define grub_md_to_cpu32 grub_be_to_cpu32 #define grub_md_to_cpu32 grub_be_to_cpu32
#define grub_md_to_cpu16 grub_be_to_cpu16 #define grub_md_to_cpu16 grub_be_to_cpu16
#define grub_cpu_to_md64_compile_time grub_cpu_to_be64 #define grub_cpu_to_md64_compile_time grub_cpu_to_be64_compile_time
#define grub_cpu_to_md32_compile_time grub_cpu_to_be32 #define grub_cpu_to_md32_compile_time grub_cpu_to_be32_compile_time
#define grub_cpu_to_md16_compile_time grub_cpu_to_be16 #define grub_cpu_to_md16_compile_time grub_cpu_to_be16_compile_time
#else #else
#define grub_md_to_cpu64 grub_le_to_cpu64 #define grub_md_to_cpu64 grub_le_to_cpu64
#define grub_md_to_cpu32 grub_le_to_cpu32 #define grub_md_to_cpu32 grub_le_to_cpu32
#define grub_md_to_cpu16 grub_le_to_cpu16 #define grub_md_to_cpu16 grub_le_to_cpu16
#define grub_cpu_to_md64_compile_time grub_cpu_to_le64 #define grub_cpu_to_md64_compile_time grub_cpu_to_le64_compile_time
#define grub_cpu_to_md32_compile_time grub_cpu_to_le32 #define grub_cpu_to_md32_compile_time grub_cpu_to_le32_compile_time
#define grub_cpu_to_md16_compile_time grub_cpu_to_le16 #define grub_cpu_to_md16_compile_time grub_cpu_to_le16_compile_time
#endif #endif
#define RESERVED_BYTES (64 * 1024) #define RESERVED_BYTES (64 * 1024)
@@ -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,
+1 -1
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;
} }
+7 -1
View File
@@ -402,9 +402,15 @@ grub_pata_pciinit (grub_pci_device_t dev,
bar2 = grub_pci_read (addr); bar2 = grub_pci_read (addr);
/* Check if the BARs describe an IO region. */ /* Check if the BARs describe an IO region. */
if ((bar1 & 1) && (bar2 & 1)) if ((bar1 & 1) && (bar2 & 1) && (bar1 & ~3))
{ {
rega = bar1 & ~3; rega = bar1 & ~3;
addr = grub_pci_make_address (dev, GRUB_PCI_REG_COMMAND);
grub_pci_write_word (addr, grub_pci_read_word (addr)
| GRUB_PCI_COMMAND_IO_ENABLED
| GRUB_PCI_COMMAND_MEM_ENABLED
| GRUB_PCI_COMMAND_BUS_MASTER);
} }
} }
+2 -2
View File
@@ -34,9 +34,9 @@ static unsigned powx_inv[256];
static const grub_uint8_t poly = 0x1d; static const grub_uint8_t poly = 0x1d;
static void static void
grub_raid_block_mulx (unsigned mul, char *buf, int size) grub_raid_block_mulx (unsigned mul, char *buf, grub_size_t size)
{ {
int i; grub_size_t i;
grub_uint8_t *p; grub_uint8_t *p;
p = (grub_uint8_t *) buf; p = (grub_uint8_t *) buf;
+1 -1
View File
@@ -201,7 +201,7 @@ grub_scsi_read_capacity16 (grub_scsi_t scsi)
rc.opcode = grub_scsi_cmd_read_capacity16; rc.opcode = grub_scsi_cmd_read_capacity16;
rc.lun = (scsi->lun << GRUB_SCSI_LUN_SHIFT) | 0x10; rc.lun = (scsi->lun << GRUB_SCSI_LUN_SHIFT) | 0x10;
rc.logical_block_addr = 0; rc.logical_block_addr = 0;
rc.alloc_len = grub_cpu_to_be32 (sizeof (rcd)); rc.alloc_len = grub_cpu_to_be32_compile_time (sizeof (rcd));
rc.PMI = 0; rc.PMI = 0;
rc.control = 0; rc.control = 0;
+8 -6
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)
@@ -305,8 +307,8 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
/* Setup the request. */ /* Setup the request. */
grub_memset (&cbw, 0, sizeof (cbw)); grub_memset (&cbw, 0, sizeof (cbw));
cbw.signature = grub_cpu_to_le32 (0x43425355); cbw.signature = grub_cpu_to_le32_compile_time (0x43425355);
cbw.tag = tag++; cbw.tag = tag;
cbw.transfer_length = grub_cpu_to_le32 (size); cbw.transfer_length = grub_cpu_to_le32 (size);
cbw.flags = (!read_write) << GRUB_USBMS_DIRECTION_BIT; cbw.flags = (!read_write) << GRUB_USBMS_DIRECTION_BIT;
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. */
@@ -412,7 +414,7 @@ CheckCSW:
/* If phase error or not valid signature, do bulk-only reset device. */ /* If phase error or not valid signature, do bulk-only reset device. */
if ((status.status == 2) || if ((status.status == 2) ||
(status.signature != grub_cpu_to_le32(0x53425355))) (status.signature != grub_cpu_to_le32_compile_time(0x53425355)))
{ /* Bulk-only reset device. */ { /* Bulk-only reset device. */
grub_dprintf ("usb", "Bulk-only reset device - bad status\n"); grub_dprintf ("usb", "Bulk-only reset device - bad status\n");
grub_usbms_reset (dev); grub_usbms_reset (dev);
+1
View File
@@ -21,6 +21,7 @@
#include <grub/err.h> #include <grub/err.h>
#include <grub/mm.h> #include <grub/mm.h>
#include <grub/types.h> #include <grub/types.h>
#include <grub/misc.h>
#include <grub/efiemu/efiemu.h> #include <grub/efiemu/efiemu.h>
#include <grub/crypto.h> #include <grub/crypto.h>
+3 -3
View File
@@ -33,7 +33,7 @@
GRUB_MOD_LICENSE ("GPLv3+"); GRUB_MOD_LICENSE ("GPLv3+");
#ifdef USE_ASCII_FALLBACK #if HAVE_FONT_SOURCE
#include "ascii.h" #include "ascii.h"
#endif #endif
@@ -110,14 +110,14 @@ static struct grub_font null_font;
/* Flag to ensure module is initialized only once. */ /* Flag to ensure module is initialized only once. */
static grub_uint8_t font_loader_initialized; static grub_uint8_t font_loader_initialized;
#ifdef USE_ASCII_FALLBACK #if HAVE_FONT_SOURCE
static struct grub_font_glyph *ascii_font_glyph[0x80]; static struct grub_font_glyph *ascii_font_glyph[0x80];
#endif #endif
static struct grub_font_glyph * static struct grub_font_glyph *
ascii_glyph_lookup (grub_uint32_t code) ascii_glyph_lookup (grub_uint32_t code)
{ {
#ifdef USE_ASCII_FALLBACK #if HAVE_FONT_SOURCE
static int ascii_failback_initialized = 0; static int ascii_failback_initialized = 0;
if (code >= 0x80) if (code >= 0x80)
+4 -4
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. */
+8 -8
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
{ {
+45 -28
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
@@ -680,6 +680,8 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr,
grub_uint64_t stripen; grub_uint64_t stripen;
grub_uint64_t stripe_offset; grub_uint64_t stripe_offset;
grub_uint64_t off = addr - grub_le_to_cpu64 (key->offset); grub_uint64_t off = addr - grub_le_to_cpu64 (key->offset);
grub_uint64_t chunk_stripe_length;
grub_uint16_t nstripes;
unsigned redundancy = 1; unsigned redundancy = 1;
unsigned i, j; unsigned i, j;
@@ -690,15 +692,17 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr,
"couldn't find the chunk descriptor"); "couldn't find the chunk descriptor");
} }
nstripes = grub_le_to_cpu16 (chunk->nstripes) ? : 1;
chunk_stripe_length = grub_le_to_cpu64 (chunk->stripe_length) ? : 512;
grub_dprintf ("btrfs", "chunk 0x%" PRIxGRUB_UINT64_T grub_dprintf ("btrfs", "chunk 0x%" PRIxGRUB_UINT64_T
"+0x%" PRIxGRUB_UINT64_T "+0x%" PRIxGRUB_UINT64_T
" (%d stripes (%d substripes) of %" " (%d stripes (%d substripes) of %"
PRIxGRUB_UINT64_T ")\n", PRIxGRUB_UINT64_T ")\n",
grub_le_to_cpu64 (key->offset), grub_le_to_cpu64 (key->offset),
grub_le_to_cpu64 (chunk->size), grub_le_to_cpu64 (chunk->size),
grub_le_to_cpu16 (chunk->nstripes), nstripes,
grub_le_to_cpu16 (chunk->nsubstripes), grub_le_to_cpu16 (chunk->nsubstripes),
grub_le_to_cpu64 (chunk->stripe_length)); chunk_stripe_length);
switch (grub_le_to_cpu64 (chunk->type) switch (grub_le_to_cpu64 (chunk->type)
& ~GRUB_BTRFS_CHUNK_TYPE_BITS_DONTCARE) & ~GRUB_BTRFS_CHUNK_TYPE_BITS_DONTCARE)
@@ -708,8 +712,10 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr,
grub_uint64_t stripe_length; grub_uint64_t stripe_length;
grub_dprintf ("btrfs", "single\n"); grub_dprintf ("btrfs", "single\n");
stripe_length = grub_divmod64 (grub_le_to_cpu64 (chunk->size), stripe_length = grub_divmod64 (grub_le_to_cpu64 (chunk->size),
grub_le_to_cpu16 (chunk->nstripes), nstripes,
NULL); NULL);
if (stripe_length == 0)
stripe_length = 512;
stripen = grub_divmod64 (off, stripe_length, &stripe_offset); stripen = grub_divmod64 (off, stripe_length, &stripe_offset);
csize = (stripen + 1) * stripe_length - off; csize = (stripen + 1) * stripe_length - off;
break; break;
@@ -730,33 +736,34 @@ grub_btrfs_read_logical (struct grub_btrfs_data *data, grub_disk_addr_t addr,
grub_uint64_t low; grub_uint64_t low;
grub_dprintf ("btrfs", "RAID0\n"); grub_dprintf ("btrfs", "RAID0\n");
middle = grub_divmod64 (off, middle = grub_divmod64 (off,
grub_le_to_cpu64 (chunk->stripe_length), chunk_stripe_length,
&low); &low);
high = grub_divmod64 (middle, grub_le_to_cpu16 (chunk->nstripes), high = grub_divmod64 (middle, nstripes,
&stripen); &stripen);
stripe_offset = stripe_offset =
low + grub_le_to_cpu64 (chunk->stripe_length) * high; low + chunk_stripe_length * high;
csize = grub_le_to_cpu64 (chunk->stripe_length) - low; csize = chunk_stripe_length - low;
break; break;
} }
case GRUB_BTRFS_CHUNK_TYPE_RAID10: case GRUB_BTRFS_CHUNK_TYPE_RAID10:
{ {
grub_uint64_t middle, high; grub_uint64_t middle, high;
grub_uint64_t low; grub_uint64_t low;
grub_uint16_t nsubstripes;
nsubstripes = grub_le_to_cpu16 (chunk->nsubstripes) ? : 1;
middle = grub_divmod64 (off, middle = grub_divmod64 (off,
grub_le_to_cpu64 (chunk->stripe_length), chunk_stripe_length,
&low); &low);
high = grub_divmod64 (middle, high = grub_divmod64 (middle,
grub_le_to_cpu16 (chunk->nstripes) nstripes / nsubstripes ? : 1,
/ grub_le_to_cpu16 (chunk->nsubstripes),
&stripen); &stripen);
stripen *= grub_le_to_cpu16 (chunk->nsubstripes); stripen *= nsubstripes;
redundancy = grub_le_to_cpu16 (chunk->nsubstripes); redundancy = nsubstripes;
stripe_offset = low + grub_le_to_cpu64 (chunk->stripe_length) stripe_offset = low + chunk_stripe_length
* high; * high;
csize = grub_le_to_cpu64 (chunk->stripe_length) - low; csize = chunk_stripe_length - low;
break; break;
} }
default: default:
@@ -1051,7 +1058,7 @@ grub_btrfs_extent_read (struct grub_btrfs_data *data,
data->extend = data->extstart + grub_le_to_cpu64 (data->extent->size); data->extend = data->extstart + grub_le_to_cpu64 (data->extent->size);
if (data->extent->type == GRUB_BTRFS_EXTENT_REGULAR if (data->extent->type == GRUB_BTRFS_EXTENT_REGULAR
&& (char *) &data->extent + elemsize && (char *) data->extent + elemsize
>= (char *) &data->extent->filled + sizeof (data->extent->filled)) >= (char *) &data->extent->filled + sizeof (data->extent->filled))
data->extend = data->extend =
data->extstart + grub_le_to_cpu64 (data->extent->filled); data->extstart + grub_le_to_cpu64 (data->extent->filled);
@@ -1104,7 +1111,12 @@ 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)
return -1; {
if (!grub_errno)
grub_error (GRUB_ERR_BAD_COMPRESSED_DATA,
"premature end of compressed");
return -1;
}
} }
else if (data->extent->compression == GRUB_BTRFS_COMPRESSION_LZO) else if (data->extent->compression == GRUB_BTRFS_COMPRESSION_LZO)
{ {
@@ -1158,7 +1170,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)
return -1; {
if (!grub_errno)
grub_error (GRUB_ERR_BAD_COMPRESSED_DATA,
"premature end of compressed");
return -1;
}
break; break;
} }
@@ -1191,7 +1208,7 @@ get_root (struct grub_btrfs_data *data, struct grub_btrfs_key *key,
struct grub_btrfs_key key_out, key_in; struct grub_btrfs_key key_out, key_in;
struct grub_btrfs_root_item ri; struct grub_btrfs_root_item ri;
key_in.object_id = GRUB_BTRFS_ROOT_VOL_OBJECTID; key_in.object_id = grub_cpu_to_le64_compile_time (GRUB_BTRFS_ROOT_VOL_OBJECTID);
key_in.offset = 0; key_in.offset = 0;
key_in.type = GRUB_BTRFS_ITEM_TYPE_ROOT_ITEM; key_in.type = GRUB_BTRFS_ITEM_TYPE_ROOT_ITEM;
err = lower_bound (data, &key_in, &key_out, err = lower_bound (data, &key_in, &key_out,
+4 -1
View File
@@ -149,6 +149,9 @@ grub_cbfs_mount (grub_disk_t disk)
grub_off_t header_off; grub_off_t header_off;
struct cbfs_header head; struct cbfs_header head;
if (grub_disk_get_size (disk) == GRUB_DISK_SIZE_UNKNOWN)
goto fail;
if (grub_disk_read (disk, grub_disk_get_size (disk) - 1, if (grub_disk_read (disk, grub_disk_get_size (disk) - 1,
GRUB_DISK_SECTOR_SIZE - sizeof (ptr), GRUB_DISK_SECTOR_SIZE - sizeof (ptr),
sizeof (ptr), &ptr)) sizeof (ptr), &ptr))
@@ -291,7 +294,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;
} }
+1 -1
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)
+1 -1
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)
+10 -1
View File
@@ -484,6 +484,10 @@ grub_ext2_read_block (grub_fshelp_node_t node, grub_disk_addr_t fileblock)
indirect: indirect:
do { do {
/* If the indirect block is zero, all child blocks are absent
(i.e. filled with zeros.) */
if (indir == 0)
return 0;
if (grub_disk_read (data->disk, if (grub_disk_read (data->disk,
((grub_disk_addr_t) grub_le_to_cpu32 (indir)) ((grub_disk_addr_t) grub_le_to_cpu32 (indir))
<< log2_blksz, << log2_blksz,
@@ -573,7 +577,12 @@ grub_ext2_mount (grub_disk_t disk)
/* Make sure this is an ext2 filesystem. */ /* Make sure this is an ext2 filesystem. */
if (data->sblock.magic != grub_cpu_to_le16_compile_time (EXT2_MAGIC) if (data->sblock.magic != grub_cpu_to_le16_compile_time (EXT2_MAGIC)
|| grub_le_to_cpu32 (data->sblock.log2_block_size) >= 16) || grub_le_to_cpu32 (data->sblock.log2_block_size) >= 16
|| data->sblock.inodes_per_group == 0
/* 20 already means 1GiB blocks. We don't want to deal with blocks overflowing int32. */
|| grub_le_to_cpu32 (data->sblock.log2_block_size) > 20
|| EXT2_INODE_SIZE (data) == 0
|| EXT2_BLOCK_SIZE (data) / EXT2_INODE_SIZE (data) == 0)
{ {
grub_error (GRUB_ERR_BAD_FS, "not an ext2 filesystem"); grub_error (GRUB_ERR_BAD_FS, "not an ext2 filesystem");
goto fail; goto fail;
+8 -8
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;
+7
View File
@@ -252,6 +252,13 @@ grub_fshelp_read_file (grub_disk_t disk, grub_fshelp_node_t node,
grub_disk_addr_t i, blockcnt; grub_disk_addr_t i, blockcnt;
int blocksize = 1 << (log2blocksize + GRUB_DISK_SECTOR_BITS); int blocksize = 1 << (log2blocksize + GRUB_DISK_SECTOR_BITS);
if (pos > filesize)
{
grub_error (GRUB_ERR_OUT_OF_RANGE,
N_("attempt to read past the end of file"));
return -1;
}
/* Adjust LEN so it we can't read past the end of the file. */ /* Adjust LEN so it we can't read past the end of the file. */
if (pos + len > filesize) if (pos + len > filesize)
len = filesize - pos; len = filesize - pos;
+18 -8
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. */
@@ -330,6 +330,7 @@ grub_hfs_mount (grub_disk_t disk)
/* Check if this is a HFS filesystem. */ /* Check if this is a HFS filesystem. */
if (grub_be_to_cpu16 (data->sblock.magic) != GRUB_HFS_MAGIC if (grub_be_to_cpu16 (data->sblock.magic) != GRUB_HFS_MAGIC
|| data->sblock.blksz == 0
|| (data->sblock.blksz & grub_cpu_to_be32_compile_time (0xc00001ff))) || (data->sblock.blksz & grub_cpu_to_be32_compile_time (0xc00001ff)))
{ {
grub_error (GRUB_ERR_BAD_FS, "not an HFS filesystem"); grub_error (GRUB_ERR_BAD_FS, "not an HFS filesystem");
@@ -367,9 +368,14 @@ grub_hfs_mount (grub_disk_t disk)
data->cat_root = grub_be_to_cpu32 (treehead.head.root_node); data->cat_root = grub_be_to_cpu32 (treehead.head.root_node);
data->cat_size = grub_be_to_cpu16 (treehead.head.node_size); data->cat_size = grub_be_to_cpu16 (treehead.head.node_size);
if (data->cat_size == 0
|| data->blksz < data->cat_size
|| data->blksz < data->ext_size)
goto fail;
/* Lookup the root directory node in the catalog tree using the /* Lookup the root directory node in the catalog tree using the
volume name. */ volume name. */
key.parent_dir = grub_cpu_to_be32 (1); key.parent_dir = grub_cpu_to_be32_compile_time (1);
key.strlen = data->sblock.volname[0]; key.strlen = data->sblock.volname[0];
grub_strcpy ((char *) key.str, (char *) (data->sblock.volname + 1)); grub_strcpy ((char *) key.str, (char *) (data->sblock.volname + 1));
@@ -712,7 +718,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 +1235,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);
} }
+4 -7
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);
+19 -9
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)
return grub_errno; != (grub_ssize_t) node->size)
{
if (!grub_errno)
grub_error (GRUB_ERR_BAD_COMPRESSED_DATA,
"premature end of compressed");
return grub_errno;
}
node->compressed = 1; node->compressed = 1;
return 0; return 0;
} }
Loaded 100 of 475 files, more files were not shown because too many files have changed in this diff. Show more