Compare commits

...
Author SHA1 Message Date
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
385 changed files with 15930 additions and 4713 deletions

No files matched your search

+30 -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,59 @@ docs/*.info
docs/stamp-vti docs/stamp-vti
docs/version.texi docs/version.texi
ehci_test ehci_test
*.elf
example_grub_script_test example_grub_script_test
example_scripted_test example_scripted_test
example_unit_test example_unit_test
*.exec *.exec
*.exec.exe
fddboot_test fddboot_test
genkernsyms.sh genkernsyms.sh
gensymlist.sh gensymlist.sh
gentrigtables gentrigtables
gentrigtables.exe
gettext_strings_test gettext_strings_test
grub-bin2h grub-bin2h
grub-bios-setup /grub-bios-setup
/grub-bios-setup.exe
grub_cmd_date grub_cmd_date
grub_cmd_echo grub_cmd_echo
grub_cmd_regexp grub_cmd_regexp
grub_cmd_set_date grub_cmd_set_date
grub_cmd_sleep grub_cmd_sleep
grub-editenv /grub-editenv
/grub-editenv.exe
grub-emu grub-emu
grub-emu-lite grub-emu-lite
grub-emu.exe
grub-emu-lite.exe
grub_emu_init.c grub_emu_init.c
grub_emu_init.h grub_emu_init.h
grub-fstest grub-fstest
grub-fstest.exe
grub_fstest_init.c grub_fstest_init.c
grub_fstest_init.h grub_fstest_init.h
grub_func_test grub_func_test
grub-install grub-install
grub-install.exe
grub-kbdcomp grub-kbdcomp
grub-macho2img grub-macho2img
grub-menulst2cfg /grub-menulst2cfg
/grub-menulst2cfg.exe
/grub-mk* /grub-mk*
grub-mount grub-mount
grub-ofpathname /grub-ofpathname
grub-pe2elf /grub-ofpathname.exe
grub-probe grub-core/build-grub-pe2elf.exe
/grub-probe
/grub-probe.exe
grub_probe_init.c grub_probe_init.c
grub_probe_init.h grub_probe_init.h
grub-reboot /grub-reboot
grub_script_blanklines grub_script_blanklines
grub_script_blockarg grub_script_blockarg
grub_script_break grub_script_break
grub-script-check grub-script-check
grub-script-check.exe
grub_script_check_init.c grub_script_check_init.c
grub_script_check_init.h grub_script_check_init.h
grub_script_comments grub_script_comments
@@ -104,17 +114,18 @@ grub_script.tab.h
grub_script.yy.c grub_script.yy.c
grub_script.yy.h grub_script.yy.h
grub-set-default grub-set-default
grub-setup
grub_setup_init.c grub_setup_init.c
grub_setup_init.h grub_setup_init.h
grub-shell grub-shell
grub-shell-tester grub-shell-tester
grub-sparc64-setup grub-sparc64-setup
grub-sparc64-setup.exe
gzcompress_test gzcompress_test
hddboot_test hddboot_test
help_test help_test
*.img *.img
*.image *.image
*.image.exe
include/grub/cpu include/grub/cpu
include/grub/machine include/grub/machine
install-sh install-sh
@@ -159,7 +170,6 @@ GPATH
GRTAGS GRTAGS
GSYMS GSYMS
GTAGS GTAGS
Makefile.tpl
compile compile
depcomp depcomp
mdate-sh mdate-sh
@@ -182,6 +192,7 @@ grub-core/gmodule.pl
grub-core/grub.chrp grub-core/grub.chrp
grub-core/modinfo.sh grub-core/modinfo.sh
grub-core/*.module grub-core/*.module
grub-core/*.module.exe
grub-core/*.pp grub-core/*.pp
util/bash-completion.d/grub util/bash-completion.d/grub
grub-core/gnulib/alloca.h grub-core/gnulib/alloca.h
@@ -203,7 +214,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 +228,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
+1437
View File
File diff suppressed because it is too large. Load diff
+5 -6
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
@@ -54,10 +54,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:
+7 -7
View File
@@ -103,7 +103,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,23 +111,23 @@ 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
@@ -399,7 +399,7 @@ bootcheck: $(BOOTCHECKS)
if COND_i386_coreboot if COND_i386_coreboot
default_payload.elf: grub-mkstandalone grub-mkimage default_payload.elf: grub-mkstandalone grub-mkimage
pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos xfs ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg pkgdatadir=. ./grub-mkstandalone --grub-mkimage=./grub-mkimage -O i386-coreboot -o $@ --modules='ahci pata ehci uhci ohci usb_keyboard usbms part_msdos xfs ext2 fat at_keyboard part_gpt usbserial_usbdebug cbfs' --install-modules='ls linux search configfile normal cbtime cbls memrw iorw minicmd lsmmap lspci halt reboot hexdump pcidump regexp setpci lsacpi chain test serial' --fonts= --themes= --locales= -d grub-core/ /boot/grub/grub.cfg=$(srcdir)/coreboot.cfg
endif endif
windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows windowsdir=$(top_builddir)/$(PACKAGE)-$(VERSION)-for-windows
+68
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;
@@ -400,6 +402,21 @@ program = {
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)'; ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
}; };
program = {
name = grub-macbless;
installdir = sbin;
mansection = 1;
common = util/grub-macbless.c;
common = grub-core/osdep/init.c;
common = grub-core/kern/emu/argp_common.c;
ldadd = libgrubmods.a;
ldadd = libgrubgcry.a;
ldadd = libgrubkern.a;
ldadd = grub-core/gnulib/libgnu.a;
ldadd = '$(LIBINTL) $(LIBDEVMAPPER) $(LIBZFS) $(LIBNVPAIR) $(LIBGEOM)';
};
data = { data = {
common = util/grub.d/README; common = util/grub.d/README;
installdir = grubconf; installdir = grubconf;
@@ -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;
@@ -1221,6 +1242,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 +1293,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)';
};
+28 -25
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])])
@@ -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
+14 -24
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 -Wl,--no-relax
endif
if COND_sparc64_emu
CFLAGS_PLATFORM += -mno-app-regs
LDFLAGS_PLATFORM = -Wl,--no-relax
endif endif
if COND_arm if COND_arm
CFLAGS_PLATFORM += -mthumb-interwork -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 $@
+1 -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
@@ -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@"
+264 -60
View File
@@ -32,7 +32,7 @@ dnl type, so there is no conflict. Variables with the prefix "TARGET_"
dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target dnl (such as TARGET_CC, TARGET_CFLAGS, etc.) are used for the target
dnl type. dnl type.
AC_INIT([GRUB],[2.00],[bug-grub@gnu.org]) AC_INIT([GRUB],[2.02~beta2],[bug-grub@gnu.org])
AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_AUX_DIR([build-aux])
@@ -69,6 +69,7 @@ grub_TRANSFORM([grub-script-check])
grub_TRANSFORM([grub-set-default]) grub_TRANSFORM([grub-set-default])
grub_TRANSFORM([grub-sparc64-setup]) grub_TRANSFORM([grub-sparc64-setup])
grub_TRANSFORM([grub-render-label]) grub_TRANSFORM([grub-render-label])
grub_TRANSFORM([grub-file])
# Optimization flag. Allow user to override. # Optimization flag. Allow user to override.
if test "x$TARGET_CFLAGS" = x; then if test "x$TARGET_CFLAGS" = x; then
@@ -176,6 +177,10 @@ if test x$platform != xemu ; then
esac esac
fi fi
if test x"$target_cpu-$platform" = xsparc64-emu ; then
target_m64=1 ;
fi
case "$target_os" in case "$target_os" in
windows* | mingw32*) target_os=cygwin ;; windows* | mingw32*) target_os=cygwin ;;
esac esac
@@ -209,20 +214,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 +344,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)
@@ -422,6 +426,26 @@ esac
# 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.
# #
@@ -472,8 +496,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 +503,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,6 +546,26 @@ 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
@@ -624,23 +690,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 +716,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 +749,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';
fi
if test x${target_cpu} = xx86_64 ; then
grub_cv_target_cc_link_format=-mi386pep;
TARGET_OBJ2ELF='./build-grub-pep2elf';
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,7 +792,7 @@ 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;
@@ -697,9 +802,12 @@ if test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
AC_MSG_ERROR([no suitable link format found]) AC_MSG_ERROR([no suitable link format found])
fi fi
TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format" TARGET_LDFLAGS="$TARGET_LDFLAGS -Wl,$grub_cv_target_cc_link_format"
if test x"$grub_cv_target_cc_link_format" = x-mi386pe; then if test x"$grub_cv_target_cc_link_format" = x-mi386pe ; then
TARGET_OBJ2ELF='./build-grub-pe2elf'; TARGET_OBJ2ELF='./build-grub-pe2elf';
fi fi
if test x"$grub_cv_target_cc_link_format" = x-mi386pep ; then
TARGET_OBJ2ELF='./build-grub-pep2elf';
fi
fi fi
if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_cc_link_format = x-arch,x86_64; then if test x$grub_cv_target_cc_link_format = x-arch,i386 || test x$grub_cv_target_cc_link_format = x-arch,x86_64; then
@@ -717,12 +825,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,7 +848,7 @@ AC_SUBST(TARGET_LDFLAGS_OLDMAGIC)
LDFLAGS="$TARGET_LDFLAGS" LDFLAGS="$TARGET_LDFLAGS"
if test "$target_cpu" = x86_64; then if test "$target_cpu" = x86_64 || test "$target_cpu-$platform" = sparc64-emu ; then
# Use large model to support 4G memory # Use large model to support 4G memory
AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [ AC_CACHE_CHECK([whether option -mcmodel=large works], grub_cv_cc_mcmodel, [
CFLAGS="$TARGET_CFLAGS -m64 -mcmodel=large" CFLAGS="$TARGET_CFLAGS -m64 -mcmodel=large"
@@ -750,6 +858,8 @@ if test "$target_cpu" = x86_64; then
]) ])
if test "x$grub_cv_cc_mcmodel" = xyes; then if test "x$grub_cv_cc_mcmodel" = xyes; then
TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large" TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
elif test "$target_cpu-$platform" = sparc64-emu; then
TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=medany"
fi fi
fi fi
@@ -768,6 +878,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 +974,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,7 +1010,7 @@ CC="$TARGET_CC"
if test "x$TARGET_APPLE_LINKER" = x1 ; then if test "x$TARGET_APPLE_LINKER" = x1 ; then
CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error" CFLAGS="$TARGET_CFLAGS -nostdlib -static -Wno-error"
else else
CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100 -Wno-error" CFLAGS="$TARGET_CFLAGS -nostdlib -Wno-error"
fi fi
CPPFLAGS="$TARGET_CPPFLAGS" CPPFLAGS="$TARGET_CPPFLAGS"
if test x$target_cpu = xi386 || test x$target_cpu = xx86_64 || test "x$grub_cv_cc_target_clang" = xyes ; then if test x$target_cpu = xi386 || test x$target_cpu = xx86_64 || test "x$grub_cv_cc_target_clang" = xyes ; then
@@ -847,10 +1024,11 @@ LIBS="$TARGET_LIBGCC"
grub_ASM_USCORE grub_ASM_USCORE
if test "x$TARGET_APPLE_LINKER" = x0 ; then if test "x$TARGET_APPLE_LINKER" = x0 ; then
if test x$grub_cv_asm_uscore = xyes; then if test x$grub_cv_asm_uscore = xyes; then
CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,_abort=_main" DEFSYM="-Wl,--defsym,_abort=_main -Wl,--defsym,__main=_main"
else else
CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,abort=main" DEFSYM="-Wl,--defsym,abort=main -Wl,--defsym,_main=main -Wl,--defsym,__main=main"
fi fi
CFLAGS="$TARGET_CFLAGS -nostdlib $DEFSYM"
fi fi
# Check for libgcc symbols # Check for libgcc symbols
@@ -859,7 +1037,7 @@ AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __ucmpdi2 _re
if test "x$TARGET_APPLE_LINKER" = x1 ; then if test "x$TARGET_APPLE_LINKER" = x1 ; then
CFLAGS="$TARGET_CFLAGS -nostdlib -static" CFLAGS="$TARGET_CFLAGS -nostdlib -static"
else else
CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100" CFLAGS="$TARGET_CFLAGS -nostdlib"
fi fi
LIBS="" LIBS=""
@@ -873,7 +1051,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 +1170,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 +1179,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 +1195,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 +1264,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
@@ -1141,22 +1323,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])
@@ -1199,7 +1389,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 +1399,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 +1414,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 +1451,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
@@ -1320,7 +1519,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 +1556,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 +1585,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],
@@ -1418,13 +1616,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)
@@ -1457,6 +1655,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 +1681,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 +1695,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])
+3 -1
View File
@@ -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
+22 -31
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,8 +26,11 @@ CFLAGS_LIBRARY += $(CFLAGS_PLATFORM) -fno-builtin
CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM) CPPFLAGS_LIBRARY += $(CPPFLAGS_PLATFORM)
CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM) CCASFLAGS_LIBRARY += $(CCASFLAGS_PLATFORM)
build-grub-pep2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=64 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pep2elf\" $^
build-grub-pe2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c build-grub-pe2elf: $(top_srcdir)/util/grub-pe2elf.c $(top_srcdir)/grub-core/kern/emu/misc.c $(top_srcdir)/util/misc.c
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^ $(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_BUILD=1 -DGRUB_TARGET_WORDSIZE=32 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-pe2elf\" $^
# gentrigtables # gentrigtables
gentrigtables: gentrigtables.c gentrigtables: gentrigtables.c
@@ -104,7 +103,6 @@ endif
if COND_i386_coreboot if COND_i386_coreboot
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/coreboot/lbio.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/coreboot/lbio.h
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/i386/pc/int.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/video_fb.h
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/gfxterm.h
@@ -114,7 +112,6 @@ endif
if COND_i386_multiboot if COND_i386_multiboot
KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h KERNEL_HEADER_FILES += $(top_srcdir)/include/grub/i386/tsc.h
KERNEL_HEADER_FILES += $(top_builddir)/include/grub/i386/pc/int.h
endif endif
if COND_i386_qemu if COND_i386_qemu
@@ -173,7 +170,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 +181,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 +221,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
@@ -393,41 +390,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
+66 -31
View File
@@ -59,9 +59,7 @@ kernel = {
ia64_efi_ldflags = '-Wl,-r,-d'; ia64_efi_ldflags = '-Wl,-r,-d';
ia64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version'; ia64_efi_stripflags = '--strip-unneeded -K start -R .note -R .comment -R .note.gnu.gold-version';
x86_64_xen_ldflags = '-Wl,-Ttext=0';
x86_64_xen_cppflags = '$(CPPFLAGS_XEN)'; x86_64_xen_cppflags = '$(CPPFLAGS_XEN)';
i386_xen_ldflags = '-Wl,-Ttext=0';
i386_xen_cppflags = '$(CPPFLAGS_XEN)'; i386_xen_cppflags = '$(CPPFLAGS_XEN)';
arm_efi_ldflags = '-Wl,-r,-d'; arm_efi_ldflags = '-Wl,-r,-d';
@@ -72,15 +70,21 @@ kernel = {
i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)'; i386_pc_ldflags = '$(TARGET_IMG_LDFLAGS)';
i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000'; i386_pc_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x9000';
i386_qemu_ldflags = '$(TARGET_IMG_LDFLAGS)'; i386_qemu_ldflags = '$(TARGET_IMG_LDFLAGS)';
i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200'; i386_qemu_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200';
i386_coreboot_ldflags = '$(TARGET_IMG_LDFLAGS)';
i386_coreboot_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200';
i386_multiboot_ldflags = '$(TARGET_IMG_LDFLAGS)';
i386_multiboot_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x8200';
i386_ieee1275_ldflags = '$(TARGET_IMG_LDFLAGS)';
i386_ieee1275_ldflags = '$(TARGET_IMG_BASE_LDOPT),0x10000';
i386_xen_ldflags = '$(TARGET_IMG_LDFLAGS)';
i386_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0';
x86_64_xen_ldflags = '$(TARGET_IMG_LDFLAGS)';
x86_64_xen_ldflags = '$(TARGET_IMG_BASE_LDOPT),0';
ldadd = '$(LDADD_KERNEL)'; ldadd = '$(LDADD_KERNEL)';
i386_coreboot_ldflags = '-Wl,-Ttext=0x8200';
i386_multiboot_ldflags = '-Wl,-Ttext=0x8200';
i386_ieee1275_ldflags = '-Wl,-Ttext=0x10000';
mips_loongson_ldflags = '-Wl,-Ttext,0x80200000'; mips_loongson_ldflags = '-Wl,-Ttext,0x80200000';
powerpc_ieee1275_ldflags = '-Wl,-Ttext,0x200000'; powerpc_ieee1275_ldflags = '-Wl,-Ttext,0x200000';
sparc64_ieee1275_ldflags = '-Wl,-Ttext,0x4400'; sparc64_ieee1275_ldflags = '-Wl,-Ttext,0x4400';
@@ -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)';
@@ -194,6 +197,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,6 +245,7 @@ kernel = {
mips_loongson = video/sm712.c; mips_loongson = video/sm712.c;
mips_loongson = video/sis315pro.c; mips_loongson = video/sis315pro.c;
mips_loongson = video/radeon_fuloong2e.c; mips_loongson = video/radeon_fuloong2e.c;
mips_loongson = video/radeon_yeeloong3a.c;
extra_dist = video/sm712_init.c; extra_dist = video/sm712_init.c;
extra_dist = video/sis315_init.c; extra_dist = video/sis315_init.c;
mips_loongson = commands/keylayouts.c; mips_loongson = commands/keylayouts.c;
@@ -283,6 +288,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 +623,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 +674,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 +1443,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 +1579,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 +1621,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 +1665,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 +1672,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 +1683,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 +1754,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 +1944,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 +2136,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 +2284,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");
}
} }
+17 -3
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");
} }
@@ -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)
+13 -9
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);
+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. */
+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;
+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);
+1 -1
View File
@@ -71,7 +71,7 @@ grub_cmd_lsefisystab (struct grub_command *cmd __attribute__ ((unused)),
grub_printf (", Version=%x\n", st->firmware_revision); grub_printf (", Version=%x\n", st->firmware_revision);
grub_printf ("%ld tables:\n", st->num_table_entries); grub_printf ("%lld tables:\n", (long long) st->num_table_entries);
t = st->configuration_table; t = st->configuration_table;
for (i = 0; i < st->num_table_entries; i++) for (i = 0; i < st->num_table_entries; i++)
{ {
+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"
+70
View File
@@ -0,0 +1,70 @@
/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2013 Free Software Foundation, Inc.
*
* GRUB is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* GRUB is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
*/
#include <grub/fileid.h>
#include <grub/elfload.h>
#pragma GCC diagnostic ignored "-Wcast-align"
int
grub_file_check_netbsdXX (grub_elf_t elf)
{
Elf_Shdr *s, *s0;
grub_size_t shnum = elf->ehdr.ehdrXX.e_shnum;
grub_size_t shentsize = elf->ehdr.ehdrXX.e_shentsize;
grub_size_t shsize = shnum * shentsize;
grub_off_t stroff;
if (!shnum || !shentsize)
return 0;
s0 = grub_malloc (shsize);
if (!s0)
return 0;
if (grub_file_seek (elf->file, elf->ehdr.ehdrXX.e_shoff) == (grub_off_t) -1)
return 0;
if (grub_file_read (elf->file, s0, shsize) != (grub_ssize_t) shsize)
return 0;
s = (Elf_Shdr *) ((char *) s0 + elf->ehdr.ehdrXX.e_shstrndx * shentsize);
stroff = s->sh_offset;
for (s = s0; s < (Elf_Shdr *) ((char *) s0 + shnum * shentsize);
s = (Elf_Shdr *) ((char *) s + shentsize))
{
char name[sizeof(".note.netbsd.ident")];
grub_memset (name, 0, sizeof (name));
if (grub_file_seek (elf->file, stroff + s->sh_name) == (grub_off_t) -1)
return grub_errno;
if (grub_file_read (elf->file, name, sizeof (name)) != (grub_ssize_t) sizeof (name))
{
if (grub_errno)
return grub_errno;
continue;
}
if (grub_memcmp (name, ".note.netbsd.ident",
sizeof(".note.netbsd.ident")) != 0)
continue;
return 1;
}
return 0;
}
+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;
+14 -1
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);
} }
+1 -1
View File
@@ -455,7 +455,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
{ NONE, FILE, DIR } found;
};
static int
find_inode (const char *filename,
const struct grub_dirhook_info *info, void *data)
{
struct find_node_context *ctx = data;
if (!info->inodeset)
return 0;
if ((grub_strcmp (ctx->dirname, filename) == 0
|| (info->case_insensitive
&& grub_strcasecmp (ctx->dirname, filename) == 0)))
{
ctx->inode_found = info->inode;
ctx->found = info->dir ? DIR : FILE;
}
return 0;
}
grub_err_t
grub_mac_bless_inode (grub_device_t dev, grub_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 == 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 the 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 }
+6 -5
View File
@@ -41,7 +41,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 +133,7 @@ struct signature_v4_header
grub_uint8_t pkeyalgo; grub_uint8_t pkeyalgo;
grub_uint8_t hash; grub_uint8_t hash;
grub_uint16_t hashed_sub; grub_uint16_t hashed_sub;
} __attribute__ ((packed)); } GRUB_PACKED;
const char *hashes[] = { const char *hashes[] = {
[0x01] = "md5", [0x01] = "md5",
@@ -885,6 +885,7 @@ grub_pubkey_open (grub_file_t io, const char *filename)
if (err) if (err)
return NULL; return NULL;
io->device = 0; io->device = 0;
io->name = 0;
grub_file_close (io); grub_file_close (io);
return ret; return ret;
} }
@@ -965,14 +966,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)
+3 -3
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;
+2 -1
View File
@@ -1057,7 +1057,8 @@ insert_array (grub_disk_t disk, const struct grub_diskfilter_pv_id *id,
(unsigned long long) grub_disk_get_size (disk), (unsigned long long) grub_disk_get_size (disk),
array->name, diskfilter->name); array->name, diskfilter->name);
#ifdef GRUB_UTIL #ifdef GRUB_UTIL
grub_util_info ("Inserting %s (+%lld,%lld) into %s (%s)\n", disk->name, grub_util_info ("Inserting %s (+%" GRUB_HOST_PRIuLONG_LONG ",%"
GRUB_HOST_PRIuLONG_LONG ") into %s (%s)\n", disk->name,
(unsigned long long) grub_partition_get_start (disk->partition), (unsigned long long) grub_partition_get_start (disk->partition),
(unsigned long long) grub_disk_get_size (disk), (unsigned long long) grub_disk_get_size (disk),
array->name, diskfilter->name); array->name, diskfilter->name);
+1 -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,
+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);
+3 -3
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);
+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;
+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;
+1 -1
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;
+5 -4
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++;
@@ -340,7 +341,7 @@ grub_lvm_detect (grub_disk_t disk,
/* 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. */
+1 -1
View File
@@ -175,7 +175,7 @@ struct grub_raid_super_09
* Active descriptor * Active descriptor
*/ */
struct grub_raid_disk_09 this_disk; struct grub_raid_disk_09 this_disk;
} __attribute__ ((packed)); } GRUB_PACKED;
static struct grub_diskfilter_vg * static struct grub_diskfilter_vg *
grub_mdraid_detect (grub_disk_t disk, grub_mdraid_detect (grub_disk_t disk,
+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;
+6 -4
View File
@@ -44,7 +44,7 @@ struct grub_usbms_cbw
grub_uint8_t lun; grub_uint8_t lun;
grub_uint8_t length; grub_uint8_t length;
grub_uint8_t cbwcb[16]; grub_uint8_t cbwcb[16];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_usbms_csw struct grub_usbms_csw
{ {
@@ -52,7 +52,7 @@ struct grub_usbms_csw
grub_uint32_t tag; grub_uint32_t tag;
grub_uint32_t residue; grub_uint32_t residue;
grub_uint8_t status; grub_uint8_t status;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_usbms_dev struct grub_usbms_dev
{ {
@@ -298,6 +298,8 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
grub_usb_err_t errCSW = GRUB_USB_ERR_NONE; grub_usb_err_t errCSW = GRUB_USB_ERR_NONE;
int retrycnt = 3 + 1; int retrycnt = 3 + 1;
tag++;
retry: retry:
retrycnt--; retrycnt--;
if (retrycnt == 0) if (retrycnt == 0)
@@ -306,7 +308,7 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
/* Setup the request. */ /* Setup the request. */
grub_memset (&cbw, 0, sizeof (cbw)); grub_memset (&cbw, 0, sizeof (cbw));
cbw.signature = grub_cpu_to_le32 (0x43425355); cbw.signature = grub_cpu_to_le32 (0x43425355);
cbw.tag = tag++; cbw.tag = tag;
cbw.transfer_length = grub_cpu_to_le32 (size); cbw.transfer_length = grub_cpu_to_le32 (size);
cbw.flags = (!read_write) << GRUB_USBMS_DIRECTION_BIT; cbw.flags = (!read_write) << GRUB_USBMS_DIRECTION_BIT;
cbw.lun = scsi->lun; /* In USB MS CBW are LUN bits on another place than in SCSI CDB, both should be set correctly. */ cbw.lun = scsi->lun; /* In USB MS CBW are LUN bits on another place than in SCSI CDB, both should be set correctly. */
@@ -335,7 +337,7 @@ grub_usbms_transfer_bo (struct grub_scsi *scsi, grub_size_t cmdsize, char *cmd,
grub_usb_clear_halt (dev->dev, dev->out->endp_addr); grub_usb_clear_halt (dev->dev, dev->out->endp_addr);
goto CheckCSW; goto CheckCSW;
} }
return grub_error (GRUB_ERR_IO, "USB Mass Storage request failed"); goto retry;
} }
/* Read/write the data, (maybe) according to specification. */ /* Read/write the data, (maybe) according to specification. */
+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
{ {
+22 -12
View File
@@ -53,7 +53,7 @@ struct grub_btrfs_device
grub_uint64_t device_id; grub_uint64_t device_id;
grub_uint64_t size; grub_uint64_t size;
grub_uint8_t dummy[0x62 - 0x10]; grub_uint8_t dummy[0x62 - 0x10];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_superblock struct grub_btrfs_superblock
{ {
@@ -71,7 +71,7 @@ struct grub_btrfs_superblock
char label[0x100]; char label[0x100];
grub_uint8_t dummy4[0x100]; grub_uint8_t dummy4[0x100];
grub_uint8_t bootstrap_mapping[0x800]; grub_uint8_t bootstrap_mapping[0x800];
} __attribute__ ((packed)); } GRUB_PACKED;
struct btrfs_header struct btrfs_header
{ {
@@ -80,7 +80,7 @@ struct btrfs_header
grub_uint8_t dummy[0x30]; grub_uint8_t dummy[0x30];
grub_uint32_t nitems; grub_uint32_t nitems;
grub_uint8_t level; grub_uint8_t level;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_device_desc struct grub_btrfs_device_desc
{ {
@@ -122,28 +122,28 @@ struct grub_btrfs_chunk_item
grub_uint8_t dummy2[0xc]; grub_uint8_t dummy2[0xc];
grub_uint16_t nstripes; grub_uint16_t nstripes;
grub_uint16_t nsubstripes; grub_uint16_t nsubstripes;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_chunk_stripe struct grub_btrfs_chunk_stripe
{ {
grub_uint64_t device_id; grub_uint64_t device_id;
grub_uint64_t offset; grub_uint64_t offset;
grub_btrfs_uuid_t device_uuid; grub_btrfs_uuid_t device_uuid;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_leaf_node struct grub_btrfs_leaf_node
{ {
struct grub_btrfs_key key; struct grub_btrfs_key key;
grub_uint32_t offset; grub_uint32_t offset;
grub_uint32_t size; grub_uint32_t size;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_internal_node struct grub_btrfs_internal_node
{ {
struct grub_btrfs_key key; struct grub_btrfs_key key;
grub_uint64_t addr; grub_uint64_t addr;
grub_uint64_t dummy; grub_uint64_t dummy;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_dir_item struct grub_btrfs_dir_item
{ {
@@ -156,7 +156,7 @@ struct grub_btrfs_dir_item
#define GRUB_BTRFS_DIR_ITEM_TYPE_SYMLINK 7 #define GRUB_BTRFS_DIR_ITEM_TYPE_SYMLINK 7
grub_uint8_t type; grub_uint8_t type;
char name[0]; char name[0];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_leaf_descriptor struct grub_btrfs_leaf_descriptor
{ {
@@ -183,7 +183,7 @@ struct grub_btrfs_inode
grub_uint64_t size; grub_uint64_t size;
grub_uint8_t dummy2[0x70]; grub_uint8_t dummy2[0x70];
struct grub_btrfs_time mtime; struct grub_btrfs_time mtime;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_btrfs_extent_data struct grub_btrfs_extent_data
{ {
@@ -204,7 +204,7 @@ struct grub_btrfs_extent_data
grub_uint64_t filled; grub_uint64_t filled;
}; };
}; };
} __attribute__ ((packed)); } GRUB_PACKED;
#define GRUB_BTRFS_EXTENT_INLINE 0 #define GRUB_BTRFS_EXTENT_INLINE 0
#define GRUB_BTRFS_EXTENT_REGULAR 1 #define GRUB_BTRFS_EXTENT_REGULAR 1
@@ -1104,7 +1104,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 +1163,12 @@ grub_btrfs_extent_read (struct grub_btrfs_data *data,
grub_free (tmp); grub_free (tmp);
if (ret != (grub_ssize_t) csize) if (ret != (grub_ssize_t) csize)
return -1; {
if (!grub_errno)
grub_error (GRUB_ERR_BAD_COMPRESSED_DATA,
"premature end of compressed");
return -1;
}
break; break;
} }
+1 -1
View File
@@ -291,7 +291,7 @@ grub_cbfsdisk_open (const char *name, grub_disk_t disk)
disk->total_sectors = cbfsdisk_size / GRUB_DISK_SECTOR_SIZE; disk->total_sectors = cbfsdisk_size / GRUB_DISK_SECTOR_SIZE;
disk->max_agglomerate = GRUB_DISK_MAX_MAX_AGGLOMERATE; disk->max_agglomerate = GRUB_DISK_MAX_MAX_AGGLOMERATE;
disk->id = (unsigned long) "cbfs"; disk->id = 0;
return GRUB_ERR_NONE; return GRUB_ERR_NONE;
} }
+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)
+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;
+11 -7
View File
@@ -65,7 +65,7 @@ struct grub_hfs_node
grub_uint8_t level; grub_uint8_t level;
grub_uint16_t reccnt; grub_uint16_t reccnt;
grub_uint16_t unused; grub_uint16_t unused;
} __attribute__ ((packed)); } GRUB_PACKED;
/* The head of the B*-Tree. */ /* The head of the B*-Tree. */
struct grub_hfs_treeheader struct grub_hfs_treeheader
@@ -81,7 +81,7 @@ struct grub_hfs_treeheader
grub_uint32_t nodes; grub_uint32_t nodes;
grub_uint32_t free_nodes; grub_uint32_t free_nodes;
grub_uint8_t unused[76]; grub_uint8_t unused[76];
} __attribute__ ((packed)); } GRUB_PACKED;
/* The state of a mounted HFS filesystem. */ /* The state of a mounted HFS filesystem. */
struct grub_hfs_data struct grub_hfs_data
@@ -112,7 +112,7 @@ struct grub_hfs_catalog_key
/* Filename. */ /* Filename. */
grub_uint8_t str[31]; grub_uint8_t str[31];
} __attribute__ ((packed)); } GRUB_PACKED;
/* The key as used on disk in a extent overflow tree. Using this key /* The key as used on disk in a extent overflow tree. Using this key
the extents can be looked up using a fileid and logical start block the extents can be looked up using a fileid and logical start block
@@ -125,7 +125,7 @@ struct grub_hfs_extent_key
grub_uint8_t forktype; grub_uint8_t forktype;
grub_uint32_t fileid; grub_uint32_t fileid;
grub_uint16_t first_block; grub_uint16_t first_block;
} __attribute__ ((packed)); } GRUB_PACKED;
/* A directory record. This is used to find out the directory ID. */ /* A directory record. This is used to find out the directory ID. */
struct grub_hfs_dirrec struct grub_hfs_dirrec
@@ -136,7 +136,7 @@ struct grub_hfs_dirrec
grub_uint32_t dirid; grub_uint32_t dirid;
grub_uint32_t ctime; grub_uint32_t ctime;
grub_uint32_t mtime; grub_uint32_t mtime;
} __attribute__ ((packed)); } GRUB_PACKED;
/* Information about a file. */ /* Information about a file. */
struct grub_hfs_filerec struct grub_hfs_filerec
@@ -154,7 +154,7 @@ struct grub_hfs_filerec
/* The first 3 extents of the file. The other extents can be found /* The first 3 extents of the file. The other extents can be found
in the extent overflow file. */ in the extent overflow file. */
grub_hfs_datarecord_t extents; grub_hfs_datarecord_t extents;
} __attribute__ ((packed)); } GRUB_PACKED;
/* A record descriptor, both key and data, used to pass to call back /* A record descriptor, both key and data, used to pass to call back
functions. */ functions. */
@@ -712,7 +712,7 @@ grub_hfs_iterate_records (struct grub_hfs_data *data, int type, int idx,
{ {
grub_uint8_t keylen; grub_uint8_t keylen;
grub_uint8_t key; grub_uint8_t key;
} __attribute__ ((packed)) *pnt; } GRUB_PACKED *pnt;
pnt = (struct pointer *) (grub_be_to_cpu16 (node->offsets[pos]) pnt = (struct pointer *) (grub_be_to_cpu16 (node->offsets[pos])
+ node->rawnode); + node->rawnode);
@@ -1229,14 +1229,18 @@ grub_hfs_dir_hook (struct grub_hfs_record *rec, void *hook_arg)
{ {
info.dir = 1; info.dir = 1;
info.mtimeset = 1; info.mtimeset = 1;
info.inodeset = 1;
info.mtime = grub_be_to_cpu32 (drec->mtime) - 2082844800; info.mtime = grub_be_to_cpu32 (drec->mtime) - 2082844800;
info.inode = grub_be_to_cpu32 (drec->dirid);
return ctx->hook (fname, &info, ctx->hook_data); return ctx->hook (fname, &info, ctx->hook_data);
} }
if (frec->type == GRUB_HFS_FILETYPE_FILE) if (frec->type == GRUB_HFS_FILETYPE_FILE)
{ {
info.dir = 0; info.dir = 0;
info.mtimeset = 1; info.mtimeset = 1;
info.inodeset = 1;
info.mtime = grub_be_to_cpu32 (frec->mtime) - 2082844800; info.mtime = grub_be_to_cpu32 (frec->mtime) - 2082844800;
info.inode = grub_be_to_cpu32 (frec->fileid);
return ctx->hook (fname, &info, ctx->hook_data); return ctx->hook (fname, &info, ctx->hook_data);
} }
+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;
} }
+8 -8
View File
@@ -54,7 +54,7 @@ struct grub_iso9660_voldesc
grub_uint8_t type; grub_uint8_t type;
grub_uint8_t magic[5]; grub_uint8_t magic[5];
grub_uint8_t version; grub_uint8_t version;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_iso9660_date2 struct grub_iso9660_date2
{ {
@@ -65,7 +65,7 @@ struct grub_iso9660_date2
grub_uint8_t minute; grub_uint8_t minute;
grub_uint8_t second; grub_uint8_t second;
grub_uint8_t offset; grub_uint8_t offset;
} __attribute__ ((packed)); } GRUB_PACKED;
/* A directory entry. */ /* A directory entry. */
struct grub_iso9660_dir struct grub_iso9660_dir
@@ -81,7 +81,7 @@ struct grub_iso9660_dir
grub_uint8_t unused2[6]; grub_uint8_t unused2[6];
#define MAX_NAMELEN 255 #define MAX_NAMELEN 255
grub_uint8_t namelen; grub_uint8_t namelen;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_iso9660_date struct grub_iso9660_date
{ {
@@ -93,7 +93,7 @@ struct grub_iso9660_date
grub_uint8_t second[2]; grub_uint8_t second[2];
grub_uint8_t hundredth[2]; grub_uint8_t hundredth[2];
grub_uint8_t offset; grub_uint8_t offset;
} __attribute__ ((packed)); } GRUB_PACKED;
/* The primary volume descriptor. Only little endian is used. */ /* The primary volume descriptor. Only little endian is used. */
struct grub_iso9660_primary_voldesc struct grub_iso9660_primary_voldesc
@@ -112,7 +112,7 @@ struct grub_iso9660_primary_voldesc
grub_uint8_t unused6[624]; grub_uint8_t unused6[624];
struct grub_iso9660_date created; struct grub_iso9660_date created;
struct grub_iso9660_date modified; struct grub_iso9660_date modified;
} __attribute__ ((packed)); } GRUB_PACKED;
/* A single entry in the path table. */ /* A single entry in the path table. */
struct grub_iso9660_path struct grub_iso9660_path
@@ -122,7 +122,7 @@ struct grub_iso9660_path
grub_uint32_t first_sector; grub_uint32_t first_sector;
grub_uint16_t parentdir; grub_uint16_t parentdir;
grub_uint8_t name[0]; grub_uint8_t name[0];
} __attribute__ ((packed)); } GRUB_PACKED;
/* An entry in the System Usage area of the directory entry. */ /* An entry in the System Usage area of the directory entry. */
struct grub_iso9660_susp_entry struct grub_iso9660_susp_entry
@@ -131,7 +131,7 @@ struct grub_iso9660_susp_entry
grub_uint8_t len; grub_uint8_t len;
grub_uint8_t version; grub_uint8_t version;
grub_uint8_t data[0]; grub_uint8_t data[0];
} __attribute__ ((packed)); } GRUB_PACKED;
/* The CE entry. This is used to describe the next block where data /* The CE entry. This is used to describe the next block where data
can be found. */ can be found. */
@@ -144,7 +144,7 @@ struct grub_iso9660_susp_ce
grub_uint32_t off_be; grub_uint32_t off_be;
grub_uint32_t len; grub_uint32_t len;
grub_uint32_t len_be; grub_uint32_t len_be;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_iso9660_data struct grub_iso9660_data
{ {
+16 -16
View File
@@ -70,7 +70,7 @@ struct grub_jfs_extent
/* The physical offset of the first block on the disk. */ /* The physical offset of the first block on the disk. */
grub_uint8_t blk1; grub_uint8_t blk1;
grub_uint32_t blk2; grub_uint32_t blk2;
} __attribute__ ((packed)); } GRUB_PACKED;
#define GRUB_JFS_IAG_INODES_OFFSET 3072 #define GRUB_JFS_IAG_INODES_OFFSET 3072
#define GRUB_JFS_IAG_INODES_COUNT 128 #define GRUB_JFS_IAG_INODES_COUNT 128
@@ -79,7 +79,7 @@ struct grub_jfs_iag
{ {
grub_uint8_t unused[GRUB_JFS_IAG_INODES_OFFSET]; grub_uint8_t unused[GRUB_JFS_IAG_INODES_OFFSET];
struct grub_jfs_extent inodes[GRUB_JFS_IAG_INODES_COUNT]; struct grub_jfs_extent inodes[GRUB_JFS_IAG_INODES_COUNT];
} __attribute__ ((packed)); } GRUB_PACKED;
/* The head of the tree used to find extents. */ /* The head of the tree used to find extents. */
@@ -94,7 +94,7 @@ struct grub_jfs_treehead
grub_uint16_t count; grub_uint16_t count;
grub_uint16_t max; grub_uint16_t max;
grub_uint8_t unused2[10]; grub_uint8_t unused2[10];
} __attribute__ ((packed)); } GRUB_PACKED;
/* A node in the extent tree. */ /* A node in the extent tree. */
struct grub_jfs_tree_extent struct grub_jfs_tree_extent
@@ -107,7 +107,7 @@ struct grub_jfs_tree_extent
grub_uint32_t offset2; grub_uint32_t offset2;
struct grub_jfs_extent extent; struct grub_jfs_extent extent;
} __attribute__ ((packed)); } GRUB_PACKED;
/* The tree of directory entries. */ /* The tree of directory entries. */
struct grub_jfs_tree_dir struct grub_jfs_tree_dir
@@ -128,7 +128,7 @@ struct grub_jfs_tree_dir
/* The location of the sorted array of pointers to dirents. */ /* The location of the sorted array of pointers to dirents. */
grub_uint8_t sindex; grub_uint8_t sindex;
grub_uint8_t unused[10]; grub_uint8_t unused[10];
} __attribute__ ((packed)); } GRUB_PACKED;
/* An internal node in the dirents tree. */ /* An internal node in the dirents tree. */
struct grub_jfs_internal_dirent struct grub_jfs_internal_dirent
@@ -137,7 +137,7 @@ struct grub_jfs_internal_dirent
grub_uint8_t next; grub_uint8_t next;
grub_uint8_t len; grub_uint8_t len;
grub_uint16_t namepart[11]; grub_uint16_t namepart[11];
} __attribute__ ((packed)); } GRUB_PACKED;
/* A leaf node in the dirents tree. */ /* A leaf node in the dirents tree. */
struct grub_jfs_leaf_dirent struct grub_jfs_leaf_dirent
@@ -150,7 +150,7 @@ struct grub_jfs_leaf_dirent
grub_uint8_t len; grub_uint8_t len;
grub_uint16_t namepart[11]; grub_uint16_t namepart[11];
grub_uint32_t index; grub_uint32_t index;
} __attribute__ ((packed)); } GRUB_PACKED;
/* A leaf in the dirents tree. This one is used if the previously /* A leaf in the dirents tree. This one is used if the previously
dirent was not big enough to store the name. */ dirent was not big enough to store the name. */
@@ -159,13 +159,13 @@ struct grub_jfs_leaf_next_dirent
grub_uint8_t next; grub_uint8_t next;
grub_uint8_t len; grub_uint8_t len;
grub_uint16_t namepart[15]; grub_uint16_t namepart[15];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_jfs_time struct grub_jfs_time
{ {
grub_int32_t sec; grub_int32_t sec;
grub_int32_t nanosec; grub_int32_t nanosec;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_jfs_inode struct grub_jfs_inode
{ {
@@ -185,7 +185,7 @@ struct grub_jfs_inode
union union
{ {
/* The tree describing the extents of the file. */ /* The tree describing the extents of the file. */
struct __attribute__ ((packed)) struct GRUB_PACKED
{ {
struct grub_jfs_treehead tree; struct grub_jfs_treehead tree;
struct grub_jfs_tree_extent extents[16]; struct grub_jfs_tree_extent extents[16];
@@ -206,15 +206,15 @@ struct grub_jfs_inode
grub_uint8_t sorted[8]; grub_uint8_t sorted[8];
} header; } header;
struct grub_jfs_leaf_dirent dirents[8]; struct grub_jfs_leaf_dirent dirents[8];
} dir __attribute__ ((packed)); } GRUB_PACKED dir;
/* Fast symlink. */ /* Fast symlink. */
struct struct
{ {
grub_uint8_t unused[32]; grub_uint8_t unused[32];
grub_uint8_t path[256]; grub_uint8_t path[256];
} symlink; } symlink;
} __attribute__ ((packed)); } GRUB_PACKED;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_jfs_data struct grub_jfs_data
{ {
@@ -226,7 +226,7 @@ struct grub_jfs_data
int pos; int pos;
int linknest; int linknest;
int namecomponentlen; int namecomponentlen;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_jfs_diropen struct grub_jfs_diropen
{ {
@@ -237,7 +237,7 @@ struct grub_jfs_diropen
struct grub_jfs_leaf_dirent dirent[0]; struct grub_jfs_leaf_dirent dirent[0];
struct grub_jfs_leaf_next_dirent next_dirent[0]; struct grub_jfs_leaf_next_dirent next_dirent[0];
grub_uint8_t sorted[0]; grub_uint8_t sorted[0];
} *dirpage __attribute__ ((packed)); } GRUB_PACKED *dirpage;
struct grub_jfs_data *data; struct grub_jfs_data *data;
struct grub_jfs_inode *inode; struct grub_jfs_inode *inode;
int count; int count;
@@ -251,7 +251,7 @@ struct grub_jfs_diropen
*/ */
char name[256 * GRUB_MAX_UTF8_PER_UTF16 + 1]; char name[256 * GRUB_MAX_UTF8_PER_UTF16 + 1];
grub_uint32_t ino; grub_uint32_t ino;
} __attribute__ ((packed)); } GRUB_PACKED;
static grub_dl_t my_mod; static grub_dl_t my_mod;
+1 -1
View File
@@ -38,7 +38,7 @@ struct head
char rdevminor[8]; char rdevminor[8];
char namesize[8]; char namesize[8];
char check[8]; char check[8];
} __attribute__ ((packed)); } GRUB_PACKED;
static inline unsigned long long static inline unsigned long long
read_number (const char *str, grub_size_t size) read_number (const char *str, grub_size_t size)
+1 -1
View File
@@ -143,7 +143,7 @@ struct grub_nilfs2_dir_entry
char name[NILFS_NAME_LEN]; char name[NILFS_NAME_LEN];
char pad; char pad;
#endif #endif
} __attribute__ ((packed)); } GRUB_PACKED;
enum enum
{ {
+1 -1
View File
@@ -643,7 +643,7 @@ struct symlink_descriptor
grub_uint16_t len1; grub_uint16_t len1;
grub_uint16_t off2; grub_uint16_t off2;
grub_uint16_t len2; grub_uint16_t len2;
} __attribute__ ((packed)); } GRUB_PACKED;
static char * static char *
grub_ntfs_read_symlink (grub_fshelp_node_t node) grub_ntfs_read_symlink (grub_fshelp_node_t node)
+1 -1
View File
@@ -35,7 +35,7 @@ struct head
char mtime[11]; char mtime[11];
char namesize[6]; char namesize[6];
char filesize[11]; char filesize[11];
} __attribute__ ((packed)); } GRUB_PACKED;
static inline unsigned long long static inline unsigned long long
read_number (const char *str, grub_size_t size) read_number (const char *str, grub_size_t size)
+1 -1
View File
@@ -44,7 +44,7 @@ grub_procdev_open (const char *name, grub_disk_t disk)
return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a procfs disk"); return grub_error (GRUB_ERR_UNKNOWN_DEVICE, "not a procfs disk");
disk->total_sectors = 0; disk->total_sectors = 0;
disk->id = (unsigned long) "proc"; disk->id = 0;
disk->data = 0; disk->data = 0;
+14 -14
View File
@@ -109,14 +109,14 @@ struct grub_reiserfs_superblock
grub_uint8_t unused[4]; grub_uint8_t unused[4];
grub_uint16_t uuid[8]; grub_uint16_t uuid[8];
char label[16]; char label[16];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_reiserfs_journal_header struct grub_reiserfs_journal_header
{ {
grub_uint32_t last_flush_uid; grub_uint32_t last_flush_uid;
grub_uint32_t unflushed_offset; grub_uint32_t unflushed_offset;
grub_uint32_t mount_id; grub_uint32_t mount_id;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_reiserfs_description_block struct grub_reiserfs_description_block
{ {
@@ -124,14 +124,14 @@ struct grub_reiserfs_description_block
grub_uint32_t len; grub_uint32_t len;
grub_uint32_t mount_id; grub_uint32_t mount_id;
grub_uint32_t real_blocks[0]; grub_uint32_t real_blocks[0];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_reiserfs_commit_block struct grub_reiserfs_commit_block
{ {
grub_uint32_t id; grub_uint32_t id;
grub_uint32_t len; grub_uint32_t len;
grub_uint32_t real_blocks[0]; grub_uint32_t real_blocks[0];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_reiserfs_stat_item_v1 struct grub_reiserfs_stat_item_v1
{ {
@@ -145,7 +145,7 @@ struct grub_reiserfs_stat_item_v1
grub_uint32_t ctime; grub_uint32_t ctime;
grub_uint32_t rdev; grub_uint32_t rdev;
grub_uint32_t first_direct_byte; grub_uint32_t first_direct_byte;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_reiserfs_stat_item_v2 struct grub_reiserfs_stat_item_v2
{ {
@@ -160,7 +160,7 @@ struct grub_reiserfs_stat_item_v2
grub_uint32_t ctime; grub_uint32_t ctime;
grub_uint32_t blocks; grub_uint32_t blocks;
grub_uint32_t first_direct_byte; grub_uint32_t first_direct_byte;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_reiserfs_key struct grub_reiserfs_key
{ {
@@ -172,13 +172,13 @@ struct grub_reiserfs_key
{ {
grub_uint32_t offset; grub_uint32_t offset;
grub_uint32_t type; grub_uint32_t type;
} v1 __attribute__ ((packed)); } GRUB_PACKED v1;
struct struct
{ {
grub_uint64_t offset_type; grub_uint64_t offset_type;
} v2 __attribute__ ((packed)); } GRUB_PACKED v2;
} u; } u;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_reiserfs_item_header struct grub_reiserfs_item_header
{ {
@@ -187,11 +187,11 @@ struct grub_reiserfs_item_header
{ {
grub_uint16_t free_space; grub_uint16_t free_space;
grub_uint16_t entry_count; grub_uint16_t entry_count;
} u __attribute__ ((packed)); } GRUB_PACKED u;
grub_uint16_t item_size; grub_uint16_t item_size;
grub_uint16_t item_location; grub_uint16_t item_location;
grub_uint16_t version; grub_uint16_t version;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_reiserfs_block_header struct grub_reiserfs_block_header
{ {
@@ -200,14 +200,14 @@ struct grub_reiserfs_block_header
grub_uint16_t free_space; grub_uint16_t free_space;
grub_uint16_t reserved; grub_uint16_t reserved;
struct grub_reiserfs_key block_right_delimiting_key; struct grub_reiserfs_key block_right_delimiting_key;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_reiserfs_disk_child struct grub_reiserfs_disk_child
{ {
grub_uint32_t block_number; grub_uint32_t block_number;
grub_uint16_t size; grub_uint16_t size;
grub_uint16_t reserved; grub_uint16_t reserved;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_reiserfs_directory_header struct grub_reiserfs_directory_header
{ {
@@ -216,7 +216,7 @@ struct grub_reiserfs_directory_header
grub_uint32_t object_id; grub_uint32_t object_id;
grub_uint16_t location; grub_uint16_t location;
grub_uint16_t state; grub_uint16_t state;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_fshelp_node struct grub_fshelp_node
{ {
+9 -9
View File
@@ -35,7 +35,7 @@ struct grub_sfs_bheader
grub_uint8_t magic[4]; grub_uint8_t magic[4];
grub_uint32_t chksum; grub_uint32_t chksum;
grub_uint32_t ipointtomyself; grub_uint32_t ipointtomyself;
} __attribute__ ((packed)); } GRUB_PACKED;
/* The sfs rootblock. */ /* The sfs rootblock. */
struct grub_sfs_rblock struct grub_sfs_rblock
@@ -50,7 +50,7 @@ struct grub_sfs_rblock
grub_uint8_t unused3[8]; grub_uint8_t unused3[8];
grub_uint32_t rootobject; grub_uint32_t rootobject;
grub_uint32_t btree; grub_uint32_t btree;
} __attribute__ ((packed)); } GRUB_PACKED;
enum enum
{ {
@@ -69,18 +69,18 @@ struct grub_sfs_obj
{ {
grub_uint32_t first_block; grub_uint32_t first_block;
grub_uint32_t size; grub_uint32_t size;
} file __attribute__ ((packed)); } GRUB_PACKED file;
struct struct
{ {
grub_uint32_t hashtable; grub_uint32_t hashtable;
grub_uint32_t dir_objc; grub_uint32_t dir_objc;
} dir __attribute__ ((packed)); } GRUB_PACKED dir;
} file_dir; } file_dir;
grub_uint32_t mtime; grub_uint32_t mtime;
grub_uint8_t type; grub_uint8_t type;
grub_uint8_t filename[1]; grub_uint8_t filename[1];
grub_uint8_t comment[1]; grub_uint8_t comment[1];
} __attribute__ ((packed)); } GRUB_PACKED;
#define GRUB_SFS_TYPE_DELETED 32 #define GRUB_SFS_TYPE_DELETED 32
#define GRUB_SFS_TYPE_SYMLINK 64 #define GRUB_SFS_TYPE_SYMLINK 64
@@ -95,13 +95,13 @@ struct grub_sfs_objc
grub_uint32_t prev; grub_uint32_t prev;
/* The amount of objects depends on the blocksize. */ /* The amount of objects depends on the blocksize. */
struct grub_sfs_obj objects[1]; struct grub_sfs_obj objects[1];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_sfs_btree_node struct grub_sfs_btree_node
{ {
grub_uint32_t key; grub_uint32_t key;
grub_uint32_t data; grub_uint32_t data;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_sfs_btree_extent struct grub_sfs_btree_extent
{ {
@@ -109,7 +109,7 @@ struct grub_sfs_btree_extent
grub_uint32_t next; grub_uint32_t next;
grub_uint32_t prev; grub_uint32_t prev;
grub_uint16_t size; grub_uint16_t size;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_sfs_btree struct grub_sfs_btree
{ {
@@ -120,7 +120,7 @@ struct grub_sfs_btree
/* Normally this can be kind of node, but just extents are /* Normally this can be kind of node, but just extents are
supported. */ supported. */
struct grub_sfs_btree_node node[1]; struct grub_sfs_btree_node node[1];
} __attribute__ ((packed)); } GRUB_PACKED;
+11 -11
View File
@@ -71,7 +71,7 @@ struct grub_squash_super
grub_uint64_t diroffset; grub_uint64_t diroffset;
grub_uint64_t unk1offset; grub_uint64_t unk1offset;
grub_uint64_t unk2offset; grub_uint64_t unk2offset;
} __attribute__ ((packed)); } GRUB_PACKED;
/* Chunk-based */ /* Chunk-based */
struct grub_squash_inode struct grub_squash_inode
@@ -89,7 +89,7 @@ struct grub_squash_inode
grub_uint32_t offset; grub_uint32_t offset;
grub_uint32_t size; grub_uint32_t size;
grub_uint32_t block_size[0]; grub_uint32_t block_size[0];
} __attribute__ ((packed)) file; } GRUB_PACKED file;
struct { struct {
grub_uint64_t chunk; grub_uint64_t chunk;
grub_uint64_t size; grub_uint64_t size;
@@ -98,13 +98,13 @@ struct grub_squash_inode
grub_uint32_t offset; grub_uint32_t offset;
grub_uint32_t dummy3; grub_uint32_t dummy3;
grub_uint32_t block_size[0]; grub_uint32_t block_size[0];
} __attribute__ ((packed)) long_file; } GRUB_PACKED long_file;
struct { struct {
grub_uint32_t chunk; grub_uint32_t chunk;
grub_uint32_t dummy; grub_uint32_t dummy;
grub_uint16_t size; grub_uint16_t size;
grub_uint16_t offset; grub_uint16_t offset;
} __attribute__ ((packed)) dir; } GRUB_PACKED dir;
struct { struct {
grub_uint32_t dummy1; grub_uint32_t dummy1;
grub_uint32_t size; grub_uint32_t size;
@@ -112,14 +112,14 @@ struct grub_squash_inode
grub_uint32_t dummy2; grub_uint32_t dummy2;
grub_uint16_t dummy3; grub_uint16_t dummy3;
grub_uint16_t offset; grub_uint16_t offset;
} __attribute__ ((packed)) long_dir; } GRUB_PACKED long_dir;
struct { struct {
grub_uint32_t dummy; grub_uint32_t dummy;
grub_uint32_t namelen; grub_uint32_t namelen;
char name[0]; char name[0];
} __attribute__ ((packed)) symlink; } GRUB_PACKED symlink;
} __attribute__ ((packed)); } GRUB_PACKED;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_squash_cache_inode struct grub_squash_cache_inode
{ {
@@ -137,7 +137,7 @@ struct grub_squash_dirent_header
grub_uint32_t nelems; grub_uint32_t nelems;
grub_uint32_t ino_chunk; grub_uint32_t ino_chunk;
grub_uint32_t dummy; grub_uint32_t dummy;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_squash_dirent struct grub_squash_dirent
{ {
@@ -147,7 +147,7 @@ struct grub_squash_dirent
/* Actually the value is the length of name - 1. */ /* Actually the value is the length of name - 1. */
grub_uint16_t namelen; grub_uint16_t namelen;
char name[0]; char name[0];
} __attribute__ ((packed)); } GRUB_PACKED;
enum enum
{ {
@@ -164,7 +164,7 @@ struct grub_squash_frag_desc
grub_uint64_t offset; grub_uint64_t offset;
grub_uint32_t size; grub_uint32_t size;
grub_uint32_t dummy; grub_uint32_t dummy;
} __attribute__ ((packed)); } GRUB_PACKED;
enum enum
{ {
+1 -1
View File
@@ -48,7 +48,7 @@ struct head
char devmajor[8]; char devmajor[8];
char devminor[8]; char devminor[8];
char prefix[155]; char prefix[155];
} __attribute__ ((packed)); } GRUB_PACKED;
static inline unsigned long long static inline unsigned long long
read_number (const char *str, grub_size_t size) read_number (const char *str, grub_size_t size)
+19 -19
View File
@@ -117,32 +117,32 @@ struct grub_udf_lb_addr
{ {
grub_uint32_t block_num; grub_uint32_t block_num;
grub_uint16_t part_ref; grub_uint16_t part_ref;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_short_ad struct grub_udf_short_ad
{ {
grub_uint32_t length; grub_uint32_t length;
grub_uint32_t position; grub_uint32_t position;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_long_ad struct grub_udf_long_ad
{ {
grub_uint32_t length; grub_uint32_t length;
struct grub_udf_lb_addr block; struct grub_udf_lb_addr block;
grub_uint8_t imp_use[6]; grub_uint8_t imp_use[6];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_extent_ad struct grub_udf_extent_ad
{ {
grub_uint32_t length; grub_uint32_t length;
grub_uint32_t start; grub_uint32_t start;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_charspec struct grub_udf_charspec
{ {
grub_uint8_t charset_type; grub_uint8_t charset_type;
grub_uint8_t charset_info[63]; grub_uint8_t charset_info[63];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_timestamp struct grub_udf_timestamp
{ {
@@ -156,14 +156,14 @@ struct grub_udf_timestamp
grub_uint8_t centi_seconds; grub_uint8_t centi_seconds;
grub_uint8_t hundreds_of_micro_seconds; grub_uint8_t hundreds_of_micro_seconds;
grub_uint8_t micro_seconds; grub_uint8_t micro_seconds;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_regid struct grub_udf_regid
{ {
grub_uint8_t flags; grub_uint8_t flags;
grub_uint8_t ident[23]; grub_uint8_t ident[23];
grub_uint8_t ident_suffix[8]; grub_uint8_t ident_suffix[8];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_tag struct grub_udf_tag
{ {
@@ -175,7 +175,7 @@ struct grub_udf_tag
grub_uint16_t desc_crc; grub_uint16_t desc_crc;
grub_uint16_t desc_crc_length; grub_uint16_t desc_crc_length;
grub_uint32_t tag_location; grub_uint32_t tag_location;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_fileset struct grub_udf_fileset
{ {
@@ -197,7 +197,7 @@ struct grub_udf_fileset
struct grub_udf_regid domain_ident; struct grub_udf_regid domain_ident;
struct grub_udf_long_ad next_ext; struct grub_udf_long_ad next_ext;
struct grub_udf_long_ad streamdir_icb; struct grub_udf_long_ad streamdir_icb;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_icbtag struct grub_udf_icbtag
{ {
@@ -209,7 +209,7 @@ struct grub_udf_icbtag
grub_uint8_t file_type; grub_uint8_t file_type;
struct grub_udf_lb_addr parent_idb; struct grub_udf_lb_addr parent_idb;
grub_uint16_t flags; grub_uint16_t flags;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_file_ident struct grub_udf_file_ident
{ {
@@ -220,7 +220,7 @@ struct grub_udf_file_ident
grub_uint8_t file_ident_length; grub_uint8_t file_ident_length;
struct grub_udf_long_ad icb; struct grub_udf_long_ad icb;
grub_uint16_t imp_use_length; grub_uint16_t imp_use_length;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_file_entry struct grub_udf_file_entry
{ {
@@ -245,7 +245,7 @@ struct grub_udf_file_entry
grub_uint32_t ext_attr_length; grub_uint32_t ext_attr_length;
grub_uint32_t alloc_descs_length; grub_uint32_t alloc_descs_length;
grub_uint8_t ext_attr[0]; grub_uint8_t ext_attr[0];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_extended_file_entry struct grub_udf_extended_file_entry
{ {
@@ -274,20 +274,20 @@ struct grub_udf_extended_file_entry
grub_uint32_t ext_attr_length; grub_uint32_t ext_attr_length;
grub_uint32_t alloc_descs_length; grub_uint32_t alloc_descs_length;
grub_uint8_t ext_attr[0]; grub_uint8_t ext_attr[0];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_vrs struct grub_udf_vrs
{ {
grub_uint8_t type; grub_uint8_t type;
grub_uint8_t magic[5]; grub_uint8_t magic[5];
grub_uint8_t version; grub_uint8_t version;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_avdp struct grub_udf_avdp
{ {
struct grub_udf_tag tag; struct grub_udf_tag tag;
struct grub_udf_extent_ad vds; struct grub_udf_extent_ad vds;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_pd struct grub_udf_pd
{ {
@@ -300,7 +300,7 @@ struct grub_udf_pd
grub_uint32_t access_type; grub_uint32_t access_type;
grub_uint32_t start; grub_uint32_t start;
grub_uint32_t length; grub_uint32_t length;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_partmap struct grub_udf_partmap
{ {
@@ -319,7 +319,7 @@ struct grub_udf_partmap
grub_uint8_t ident[62]; grub_uint8_t ident[62];
} type2; } type2;
}; };
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_lvd struct grub_udf_lvd
{ {
@@ -336,14 +336,14 @@ struct grub_udf_lvd
grub_uint8_t imp_use[128]; grub_uint8_t imp_use[128];
struct grub_udf_extent_ad integrity_seq_ext; struct grub_udf_extent_ad integrity_seq_ext;
grub_uint8_t part_maps[1608]; grub_uint8_t part_maps[1608];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_aed struct grub_udf_aed
{ {
struct grub_udf_tag tag; struct grub_udf_tag tag;
grub_uint32_t prev_ae; grub_uint32_t prev_ae;
grub_uint32_t ae_len; grub_uint32_t ae_len;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_udf_data struct grub_udf_data
{ {
+3 -3
View File
@@ -187,7 +187,7 @@ struct grub_ufs_inode
}; };
grub_uint8_t unused[24]; grub_uint8_t unused[24];
} __attribute__ ((packed)); } GRUB_PACKED;
#else #else
/* UFS inode. */ /* UFS inode. */
struct grub_ufs_inode struct grub_ufs_inode
@@ -217,7 +217,7 @@ struct grub_ufs_inode
grub_uint32_t gen; grub_uint32_t gen;
grub_uint32_t unused; grub_uint32_t unused;
grub_uint8_t pad[12]; grub_uint8_t pad[12];
} __attribute__ ((packed)); } GRUB_PACKED;
#endif #endif
/* Directory entry. */ /* Directory entry. */
@@ -234,7 +234,7 @@ struct grub_ufs_dirent
grub_uint8_t namelen_bsd; grub_uint8_t namelen_bsd;
}; };
}; };
} __attribute__ ((packed)); } GRUB_PACKED;
/* Information about a "mounted" ufs filesystem. */ /* Information about a "mounted" ufs filesystem. */
struct grub_ufs_data struct grub_ufs_data
+11 -11
View File
@@ -54,7 +54,7 @@ struct grub_xfs_sblock
grub_uint8_t log2_agblk; grub_uint8_t log2_agblk;
grub_uint8_t unused6[67]; grub_uint8_t unused6[67];
grub_uint8_t log2_dirblk; grub_uint8_t log2_dirblk;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_xfs_dir_header struct grub_xfs_dir_header
{ {
@@ -64,8 +64,8 @@ struct grub_xfs_dir_header
{ {
grub_uint32_t i4; grub_uint32_t i4;
grub_uint64_t i8; grub_uint64_t i8;
} parent __attribute__ ((packed)); } GRUB_PACKED parent;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_xfs_dir_entry struct grub_xfs_dir_entry
{ {
@@ -73,13 +73,13 @@ struct grub_xfs_dir_entry
grub_uint16_t offset; grub_uint16_t offset;
char name[1]; char name[1];
/* Inode number follows, 32 bits. */ /* Inode number follows, 32 bits. */
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_xfs_dir2_entry struct grub_xfs_dir2_entry
{ {
grub_uint64_t inode; grub_uint64_t inode;
grub_uint8_t len; grub_uint8_t len;
} __attribute__ ((packed)); } GRUB_PACKED;
typedef grub_uint32_t grub_xfs_extent[4]; typedef grub_uint32_t grub_xfs_extent[4];
@@ -91,20 +91,20 @@ struct grub_xfs_btree_node
grub_uint64_t left; grub_uint64_t left;
grub_uint64_t right; grub_uint64_t right;
grub_uint64_t keys[1]; grub_uint64_t keys[1];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_xfs_btree_root struct grub_xfs_btree_root
{ {
grub_uint16_t level; grub_uint16_t level;
grub_uint16_t numrecs; grub_uint16_t numrecs;
grub_uint64_t keys[1]; grub_uint64_t keys[1];
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_xfs_time struct grub_xfs_time
{ {
grub_uint32_t sec; grub_uint32_t sec;
grub_uint32_t nanosec; grub_uint32_t nanosec;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_xfs_inode struct grub_xfs_inode
{ {
@@ -133,14 +133,14 @@ struct grub_xfs_inode
} dir; } dir;
grub_xfs_extent extents[XFS_INODE_EXTENTS]; grub_xfs_extent extents[XFS_INODE_EXTENTS];
struct grub_xfs_btree_root btree; struct grub_xfs_btree_root btree;
} data __attribute__ ((packed)); } GRUB_PACKED data;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_xfs_dirblock_tail struct grub_xfs_dirblock_tail
{ {
grub_uint32_t leaf_count; grub_uint32_t leaf_count;
grub_uint32_t leaf_stale; grub_uint32_t leaf_stale;
} __attribute__ ((packed)); } GRUB_PACKED;
struct grub_fshelp_node struct grub_fshelp_node
{ {
+7 -3
View File
@@ -293,9 +293,13 @@ static grub_err_t
zlib_decompress (void *s, void *d, zlib_decompress (void *s, void *d,
grub_size_t slen, grub_size_t dlen) grub_size_t slen, grub_size_t dlen)
{ {
if (grub_zlib_decompress (s, slen, 0, d, dlen) < 0) if (grub_zlib_decompress (s, slen, 0, d, dlen) == (grub_ssize_t) dlen)
return grub_errno; return GRUB_ERR_NONE;
return GRUB_ERR_NONE;
if (!grub_errno)
grub_error (GRUB_ERR_BAD_COMPRESSED_DATA,
"premature end of compressed");
return grub_errno;
} }
static grub_err_t static grub_err_t
+3 -3
View File
@@ -77,13 +77,13 @@ typedef grub_size_t size_t;
typedef struct _U16_S { typedef struct _U16_S {
U16 v; U16 v;
} __attribute__ ((packed)) U16_S; } GRUB_PACKED U16_S;
typedef struct _U32_S { typedef struct _U32_S {
U32 v; U32 v;
} __attribute__ ((packed)) U32_S; } GRUB_PACKED U32_S;
typedef struct _U64_S { typedef struct _U64_S {
U64 v; U64 v;
} __attribute__ ((packed)) U64_S; } GRUB_PACKED U64_S;
#define A64(x) (((U64_S *)(x))->v) #define A64(x) (((U64_S *)(x))->v)
#define A32(x) (((U32_S *)(x))->v) #define A32(x) (((U32_S *)(x))->v)
Loaded 100 of 385 files, more files were not shown because too many files have changed in this diff. Show more