Merge branch 'master' into leiflindholm/arm64
Conflicts: include/grub/util/install.h
This commit is contained in:
commit
d6c92cdc34
82 changed files with 2897 additions and 353 deletions
283
ChangeLog
283
ChangeLog
|
@ -1,3 +1,286 @@
|
||||||
|
2013-11-25 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/osdep/unix/platform.c (get_ofpathname): Trim ending newline.
|
||||||
|
Don't rely on PATH_MAX.
|
||||||
|
|
||||||
|
2013-11-25 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/genmoddep.awk: Use more portable && rather than and.
|
||||||
|
|
||||||
|
2013-11-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/i386/pc/startup.S [__APPLE__]: Create _edata by placing
|
||||||
|
an object after data. While it doesn't seem right solution, it
|
||||||
|
works well enough and OSX isn't main compilation platform.
|
||||||
|
|
||||||
|
2013-11-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* gentpl.py: Add -ed2016 in order to make objconv accept our binary.
|
||||||
|
While it doesn't seem right solution, it works well enough and
|
||||||
|
OSX isn't main compilation platform.
|
||||||
|
|
||||||
|
2013-11-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* configure.ac: Add -static to LDFLAGS when using apple linker to
|
||||||
|
prevent it from pulling in dynamic linker.
|
||||||
|
|
||||||
|
2013-11-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Apple assembly doesn't handle symbol arithmetic well. So define an
|
||||||
|
offset symbol in boot.S and use it.
|
||||||
|
|
||||||
|
2013-11-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Apple assembly doesn't handle symbol arithmetic well. So instead
|
||||||
|
of getting addres of kernel_sector + 4 define kernel_sector_high.
|
||||||
|
It also makes code more readable.
|
||||||
|
|
||||||
|
2013-11-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
With Apple assembly in .macro environvemnt you have to use $$ instead
|
||||||
|
of $. So introduce new preprocessor macro MACRO_DOLLAR(x) which expands
|
||||||
|
to $$x on Apple and to $x on everything else.
|
||||||
|
|
||||||
|
2013-11-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/Makefile.am: Use correct TARGET_OBJCONV rather than
|
||||||
|
OBJCONV.
|
||||||
|
|
||||||
|
2013-11-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/gdb/i386/machdep.S: Use xorl %eax, %eax on both Apple
|
||||||
|
and non-Apple. This instruction is shorter and faster,
|
||||||
|
so no reason not to use it on both.
|
||||||
|
|
||||||
|
2013-11-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/lib/reed_solomon.c: Use section _text, _text rather than
|
||||||
|
.text when compiling for Apple.
|
||||||
|
|
||||||
|
2013-11-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/term/arc/console.c: Add missing cast to silence warning.
|
||||||
|
|
||||||
|
2013-11-24 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/boot/i386/pc/boot.S: Fix floppy probe. Due to missing
|
||||||
|
%dx restore the probe worked on non-existant drive. Reorganize the
|
||||||
|
code a little bit to free 2 bytes necessary for push/pop.
|
||||||
|
|
||||||
|
2013-11-23 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/mips/arc/init.c (grub_machine_get_bootlocation):
|
||||||
|
Add missing cast to silence warning.
|
||||||
|
|
||||||
|
2013-11-23 Keshav Padram Amburay <the.ridikulus.rat@gmail.com>
|
||||||
|
|
||||||
|
* util/grub-install.c (update_nvram): Support --no-nvram flag
|
||||||
|
for EFI targets.
|
||||||
|
|
||||||
|
2013-11-23 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* INSTALL: Add note about sparc64/ia64 with clang (unsupported).
|
||||||
|
|
||||||
|
2013-11-23 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* util/garbage-gen.c: Add missing include of sys/time.h.
|
||||||
|
|
||||||
|
2013-11-23 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Don't add -mflush-func if it's not supported by compiler.
|
||||||
|
|
||||||
|
2013-11-23 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Move common BIOS/coreboot memory map declarations to
|
||||||
|
include/grub/i386/memory_raw.h and eliminate duplicate declarations.
|
||||||
|
|
||||||
|
2013-11-22 Andrey Borzenkov <arvidjaar@gmail.com>
|
||||||
|
|
||||||
|
* Makefile.am: Add util/garbage-gen.c to EXTRA_DIST.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* INSTALL: Document why older clang versions aren't appropriate.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* INSTALL: Document about clang for mips.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/lib/libgcrypt/mpi/longlong.h: Use C version with mips
|
||||||
|
clang.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Add *-xen to the list of grub-install-common platforms.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* configure.ac: Do not enforce -mcmodel=large. It's not necessarry with
|
||||||
|
3 last commits.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/xen/init.c: Do not map more pages than we can address.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/efi/mm.c: Limit allocations to 2GiB when not compiling
|
||||||
|
with -mcmodel=large.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/x86_64/dl.c (grub_arch_dl_relocate_symbols): Add
|
||||||
|
range-checking for 32-bit quantities.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* configure.ac: Compile with -fPIC when compiling with clang on
|
||||||
|
mips.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* configure.ac: Add -no-integrated-as on mips(el) to TARGET_CCASFLAGS
|
||||||
|
when compiling with clang.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
clang emits calls to abort () under some unknown conditions.
|
||||||
|
Export abort () when compiling with clang.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* docs/grub-dev.texi: Document stack and heap sizes.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* include/grub/i386/pc/memory.h: Decrease
|
||||||
|
GRUB_MEMORY_MACHINE_SCRATCH_SIZE and increase
|
||||||
|
GRUB_MEMORY_MACHINE_PROT_STACK_SIZE.
|
||||||
|
The binary doesn't change (checked). It's more to better reflect actual
|
||||||
|
usage.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/disk/i386/pc/biosdisk.c (grub_biosdisk_open): Ensure
|
||||||
|
at compile time that enough of scratch size is available.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/kern/x86_64/efi/callwrap.S: Fix stack alignment.
|
||||||
|
Previously we misaligned stack by 8 in startup.S and compensated
|
||||||
|
for it in callwrap.S. According to ABI docs (EFI and sysv amd64)
|
||||||
|
right behaviour is to align stack in startup.S and keep it aligned
|
||||||
|
in callwrap.S. startup.S part was committed few commits before. This
|
||||||
|
takes care of callwrap.S.
|
||||||
|
Reported by: Gary Lin.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/boot/mips/startup_raw.S: Handle the case of gap between
|
||||||
|
.data and .bss. May happen if compiler and assembly use different
|
||||||
|
alignment.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
On MIPS handle got16 relocations to local symbols in an ABI-compliant
|
||||||
|
way.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Add support for a new magic symbol _gp_disp on mips to handle PIC
|
||||||
|
binaries.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Use $t9 for indirect calls from asm to C as PIC ABI requires.
|
||||||
|
|
||||||
|
2013-11-22 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Remove -march=mips3 from TARGET_CCASFLAGS as it creates linking problem
|
||||||
|
when rest of GRUB is compiled for hisher stepping. Instead use
|
||||||
|
.set mips3/.set mips1 around cache and sync opcodes.
|
||||||
|
|
||||||
|
2013-11-21 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Unify GOT/trampoline handling between PPC, MIPS and IA64 as they
|
||||||
|
do essentially the same thing, do it in similar way.
|
||||||
|
|
||||||
|
2013-11-21 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* util/grub-mkrescue.c (main): If a source directory is not
|
||||||
|
specified, read platform-specific files from subdirectories of
|
||||||
|
pkglibdir, not pkgdatadir.
|
||||||
|
|
||||||
|
2013-11-21 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* grub-core/normal/progress.c: Remove unused file.
|
||||||
|
|
||||||
|
2013-11-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* grub-core/lib/crypto.c (grub_crypto_hash): Remove variable length
|
||||||
|
array.
|
||||||
|
|
||||||
|
2013-11-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* util/grub-mkconfig.in: Say explicit "grub configuration" rather
|
||||||
|
than grub.cfg.
|
||||||
|
|
||||||
|
2013-11-20 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* coreboot.cfg: Add missing file.
|
||||||
|
|
||||||
|
2013-11-19 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
* Makefile.am: Allow STRIP to be empty when creating windowszip.
|
||||||
|
|
||||||
|
2013-11-19 Axel Kellermann <axel.kellermann@gmx.de>
|
||||||
|
|
||||||
|
* util/grub.d/30_os-prober.in: Add GRUB_OS_PROBER_SKIP_LIST to
|
||||||
|
selectively skipping systems.
|
||||||
|
|
||||||
|
2013-11-19 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* Makefile.util.def (grub-mkimage): Add
|
||||||
|
grub-core/osdep/aros/config.c to extra_dist.
|
||||||
|
* conf/Makefile.extra-dist (EXTRA_DIST): Add docs/autoiso.cfg,
|
||||||
|
docs/osdetect.cfg, grub-core/gnulib-fix-null-deref.diff,
|
||||||
|
grub-core/gnulib-fix-width.diff, grub-core/gnulib-no-abort.diff, and
|
||||||
|
grub-core/gnulib-no-gets.diff.
|
||||||
|
|
||||||
|
2013-11-19 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
|
Add automated filesystem checking based on scripts I've used now for
|
||||||
|
quite some time locally. Most of the test require root so they are
|
||||||
|
skipped when run without necessarry privelegies.
|
||||||
|
|
||||||
|
2013-11-19 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* util/grub-install.c (main): Adjust info messages to match
|
||||||
|
installed paths of grub-bios-setup and grub-sparc64-setup.
|
||||||
|
|
||||||
|
2013-11-19 Colin Watson <cjwatson@ubuntu.com>
|
||||||
|
|
||||||
|
* util/grub-install-common.c (copy_locales): Consistently use
|
||||||
|
grub_util_get_localedir () rather than LOCALEDIR.
|
||||||
|
(grub_install_copy_files): Likewise.
|
||||||
|
|
||||||
|
2013-11-19 Josh Triplett <josh@joshtriplett.org>
|
||||||
|
|
||||||
|
* grub-core/kern/x86_64/efi/startup.S (_start): Align the stack to a
|
||||||
|
16-byte boundary, as required by the x86-64 ABI, before calling
|
||||||
|
grub_main. In some cases, GCC emits code that assumes this
|
||||||
|
alignment, which crashes if not aligned. The EFI firmware is also
|
||||||
|
entitled to assume that stack alignment without checking.
|
||||||
|
|
||||||
|
2013-11-18 Josh Triplett <josh@joshtriplett.org>
|
||||||
|
|
||||||
|
* grub-core/mmap/efi/mmap.c (grub_mmap_register): Round up/down to
|
||||||
|
4k page boundaries as expected by firmware rather than 1k
|
||||||
|
boundaries.
|
||||||
|
(grub_mmap_malign_and_register): Likewise.
|
||||||
|
|
||||||
2013-11-18 Vladimir Serbinenko <phcoder@gmail.com>
|
2013-11-18 Vladimir Serbinenko <phcoder@gmail.com>
|
||||||
|
|
||||||
* tests/grub_func_test.in: Decrease RAM size to 512M. With less
|
* tests/grub_func_test.in: Decrease RAM size to 512M. With less
|
||||||
|
|
10
INSTALL
10
INSTALL
|
@ -15,8 +15,18 @@ configuring the GRUB.
|
||||||
Note: older versions may work but support is limited
|
Note: older versions may work but support is limited
|
||||||
Note: clang 3.2 or later works for i386 and x86_64 targets but results in
|
Note: clang 3.2 or later works for i386 and x86_64 targets but results in
|
||||||
much bigger binaries.
|
much bigger binaries.
|
||||||
|
earlier versions not tested
|
||||||
Note: clang 3.2 or later works for arm
|
Note: clang 3.2 or later works for arm
|
||||||
|
earlier versions not tested
|
||||||
|
Note: clang 3.3 or later works for mips(el)
|
||||||
|
earlier versions fail to generate .reginfo and hence gprel relocations
|
||||||
|
fail.
|
||||||
Note: clang 3.4 or later works for powerpc
|
Note: clang 3.4 or later works for powerpc
|
||||||
|
earlier versions suffer from vacopy bug (#15286)
|
||||||
|
Note: clang has no support for generating 64-bit sparc code and hence you
|
||||||
|
can't compile GRUB for sparc64 with clang
|
||||||
|
Note: clang has no support for ia64 and hence you can't compile GRUB
|
||||||
|
for ia64 with clang
|
||||||
* GNU Make
|
* GNU Make
|
||||||
* GNU Bison 2.3 or later
|
* GNU Bison 2.3 or later
|
||||||
* GNU gettext 0.17 or later
|
* GNU gettext 0.17 or later
|
||||||
|
|
|
@ -70,6 +70,11 @@ build-grub-mkfont: util/grub-mkfont.c grub-core/unidata.c grub-core/kern/emu/mis
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-mkfont\" $^ $(build_freetype_cflags) $(build_freetype_libs)
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 -DGRUB_BUILD_PROGRAM_NAME=\"build-grub-mkfont\" $^ $(build_freetype_cflags) $(build_freetype_libs)
|
||||||
CLEANFILES += build-grub-mkfont
|
CLEANFILES += build-grub-mkfont
|
||||||
|
|
||||||
|
garbage-gen: util/garbage-gen.c
|
||||||
|
$(BUILD_CC) -o $@ $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) $^
|
||||||
|
CLEANFILES += garbage-gen
|
||||||
|
EXTRA_DIST += util/garbage-gen.c
|
||||||
|
|
||||||
build-grub-gen-asciih: util/grub-gen-asciih.c
|
build-grub-gen-asciih: util/grub-gen-asciih.c
|
||||||
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror
|
$(BUILD_CC) -o $@ -I$(top_srcdir)/include $(BUILD_CFLAGS) $(BUILD_CPPFLAGS) -DGRUB_MKFONT=1 -DGRUB_BUILD=1 -DGRUB_UTIL=1 $^ $(build_freetype_cflags) $(build_freetype_libs) -Wall -Werror
|
||||||
CLEANFILES += build-grub-gen-asciih
|
CLEANFILES += build-grub-gen-asciih
|
||||||
|
@ -406,7 +411,8 @@ windowsdir: $(PROGRAMS) $(starfield_DATA) $(platform_DATA)
|
||||||
test -d $(windowsdir)/themes || mkdir $(windowsdir)/themes
|
test -d $(windowsdir)/themes || mkdir $(windowsdir)/themes
|
||||||
test -d $(windowsdir)/themes/starfield || mkdir $(windowsdir)/themes/starfield
|
test -d $(windowsdir)/themes/starfield || mkdir $(windowsdir)/themes/starfield
|
||||||
for x in $(PROGRAMS); do \
|
for x in $(PROGRAMS); do \
|
||||||
$(STRIP) $$x -o $(windowsdir)/$$x; \
|
if [ x$(STRIP) != x ]; then $(STRIP) $$x -o $(windowsdir)/$$x; \
|
||||||
|
else cp -fp $$x $(windowsdir)/$$x; fi; \
|
||||||
done
|
done
|
||||||
for x in $(pkgdata_DATA); do \
|
for x in $(pkgdata_DATA); do \
|
||||||
cp -fp $$x $(windowsdir)/$$x; \
|
cp -fp $$x $(windowsdir)/$$x; \
|
||||||
|
|
|
@ -174,6 +174,7 @@ program = {
|
||||||
common = grub-core/kern/emu/argp_common.c;
|
common = grub-core/kern/emu/argp_common.c;
|
||||||
common = grub-core/osdep/init.c;
|
common = grub-core/osdep/init.c;
|
||||||
common = grub-core/osdep/config.c;
|
common = grub-core/osdep/config.c;
|
||||||
|
extra_dist = grub-core/osdep/aros/config.c;
|
||||||
extra_dist = grub-core/osdep/windows/config.c;
|
extra_dist = grub-core/osdep/windows/config.c;
|
||||||
extra_dist = grub-core/osdep/unix/config.c;
|
extra_dist = grub-core/osdep/unix/config.c;
|
||||||
common = util/config.c;
|
common = util/config.c;
|
||||||
|
@ -682,6 +683,127 @@ script = {
|
||||||
installdir = noinst;
|
installdir = noinst;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
name = grub-fs-tester;
|
||||||
|
common = tests/util/grub-fs-tester.in;
|
||||||
|
installdir = noinst;
|
||||||
|
dependencies = garbage-gen;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = ext234_test;
|
||||||
|
common = tests/ext234_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = squashfs_test;
|
||||||
|
common = tests/squashfs_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = iso9660_test;
|
||||||
|
common = tests/iso9660_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = hfsplus_test;
|
||||||
|
common = tests/hfsplus_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = ntfs_test;
|
||||||
|
common = tests/ntfs_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = reiserfs_test;
|
||||||
|
common = tests/reiserfs_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = fat_test;
|
||||||
|
common = tests/fat_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = minixfs_test;
|
||||||
|
common = tests/minixfs_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = xfs_test;
|
||||||
|
common = tests/xfs_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = nilfs2_test;
|
||||||
|
common = tests/nilfs2_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = romfs_test;
|
||||||
|
common = tests/romfs_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = exfat_test;
|
||||||
|
common = tests/exfat_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = tar_test;
|
||||||
|
common = tests/tar_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = udf_test;
|
||||||
|
common = tests/udf_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = hfs_test;
|
||||||
|
common = tests/hfs_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = jfs_test;
|
||||||
|
common = tests/jfs_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = btrfs_test;
|
||||||
|
common = tests/btrfs_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = zfs_test;
|
||||||
|
common = tests/zfs_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
|
script = {
|
||||||
|
testcase;
|
||||||
|
name = cpio_test;
|
||||||
|
common = tests/cpio_test.in;
|
||||||
|
};
|
||||||
|
|
||||||
script = {
|
script = {
|
||||||
testcase;
|
testcase;
|
||||||
name = example_scripted_test;
|
name = example_scripted_test;
|
||||||
|
|
|
@ -10,10 +10,6 @@ if COND_mips_loongson
|
||||||
CFLAGS_PLATFORM += -mexplicit-relocs
|
CFLAGS_PLATFORM += -mexplicit-relocs
|
||||||
CPPFLAGS_PLATFORM = -DUSE_ASCII_FALLBACK
|
CPPFLAGS_PLATFORM = -DUSE_ASCII_FALLBACK
|
||||||
endif
|
endif
|
||||||
if COND_mips
|
|
||||||
CFLAGS_PLATFORM += -mflush-func=grub_red_herring
|
|
||||||
CCASFLAGS_PLATFORM = -march=mips3
|
|
||||||
endif
|
|
||||||
if COND_sparc64_ieee1275
|
if COND_sparc64_ieee1275
|
||||||
CFLAGS_PLATFORM += -mno-app-regs
|
CFLAGS_PLATFORM += -mno-app-regs
|
||||||
LDFLAGS_PLATFORM = -Wl,-melf64_sparc -mno-relax
|
LDFLAGS_PLATFORM = -Wl,-melf64_sparc -mno-relax
|
||||||
|
|
|
@ -12,7 +12,9 @@ EXTRA_DIST += util/import_gcry.py
|
||||||
EXTRA_DIST += util/import_unicode.py
|
EXTRA_DIST += util/import_unicode.py
|
||||||
|
|
||||||
EXTRA_DIST += docs/man
|
EXTRA_DIST += docs/man
|
||||||
|
EXTRA_DIST += docs/autoiso.cfg
|
||||||
EXTRA_DIST += docs/grub.cfg
|
EXTRA_DIST += docs/grub.cfg
|
||||||
|
EXTRA_DIST += docs/osdetect.cfg
|
||||||
|
|
||||||
EXTRA_DIST += conf/i386-pc-cygwin-img-ld.sc
|
EXTRA_DIST += conf/i386-pc-cygwin-img-ld.sc
|
||||||
|
|
||||||
|
@ -26,6 +28,11 @@ EXTRA_DIST += grub-core/gensymlist.sh
|
||||||
EXTRA_DIST += grub-core/genemuinit.sh
|
EXTRA_DIST += grub-core/genemuinit.sh
|
||||||
EXTRA_DIST += grub-core/genemuinitheader.sh
|
EXTRA_DIST += grub-core/genemuinitheader.sh
|
||||||
|
|
||||||
|
EXTRA_DIST += grub-core/gnulib-fix-null-deref.diff
|
||||||
|
EXTRA_DIST += grub-core/gnulib-fix-width.diff
|
||||||
|
EXTRA_DIST += grub-core/gnulib-no-abort.diff
|
||||||
|
EXTRA_DIST += grub-core/gnulib-no-gets.diff
|
||||||
|
|
||||||
EXTRA_DIST += grub-core/lib/libgcrypt
|
EXTRA_DIST += grub-core/lib/libgcrypt
|
||||||
EXTRA_DIST += grub-core/lib/libgcrypt-grub/mpi/generic
|
EXTRA_DIST += grub-core/lib/libgcrypt-grub/mpi/generic
|
||||||
EXTRA_DIST += $(shell find $(top_srcdir)/include -name '*.h')
|
EXTRA_DIST += $(shell find $(top_srcdir)/include -name '*.h')
|
||||||
|
@ -103,3 +110,4 @@ EXTRA_DIST += grub-core/osdep/windows/sleep.c
|
||||||
EXTRA_DIST += tests/dfly-mbr-mbexample.mbr.img.gz
|
EXTRA_DIST += tests/dfly-mbr-mbexample.mbr.img.gz
|
||||||
EXTRA_DIST += tests/dfly-mbr-mbexample.dfly.img.gz
|
EXTRA_DIST += tests/dfly-mbr-mbexample.dfly.img.gz
|
||||||
|
|
||||||
|
EXTRA_DIST += coreboot.cfg
|
||||||
|
|
48
configure.ac
48
configure.ac
|
@ -492,7 +492,11 @@ AC_CACHE_CHECK([if compiling with clang], [grub_cv_cc_target_clang]
|
||||||
|
|
||||||
# on x86 clang doesn't support .code16
|
# on x86 clang doesn't support .code16
|
||||||
# on arm clang doesn't support .arch directive
|
# on arm clang doesn't support .arch directive
|
||||||
if test "x$grub_cv_cc_target_clang" = xyes && ( test "x$target_cpu" = xi386 || test "x$target_cpu" = xx86_64 || test "x$target_cpu" = xarm ); then
|
# on mips clang doesn't support privilegied instructions, doubleword store/load
|
||||||
|
# and crashes with hand-written assembly
|
||||||
|
if test "x$grub_cv_cc_target_clang" = xyes && ( test "x$target_cpu" = xi386 \
|
||||||
|
|| test "x$target_cpu" = xx86_64 || test "x$target_cpu" = xarm \
|
||||||
|
|| test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ); then
|
||||||
TARGET_CCASFLAGS="$TARGET_CCASFLAGS -no-integrated-as"
|
TARGET_CCASFLAGS="$TARGET_CCASFLAGS -no-integrated-as"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -522,6 +526,21 @@ if test "x$grub_cv_cc_target_clang" = xno && test "x$target_cpu" = xi386 && test
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -mrtd -mregparm=3"
|
TARGET_CFLAGS="$TARGET_CFLAGS -mrtd -mregparm=3"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# on mips redirect cache flushing function to non-existant one.
|
||||||
|
if test "x$target_cpu" = xmips || test "x$target_cpu" = xmipsel ; then
|
||||||
|
AC_CACHE_CHECK([whether -mflush-func=grub_red_herring works], [grub_cv_cc_mflush_func], [
|
||||||
|
CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring -Werror"
|
||||||
|
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]], [[]])],
|
||||||
|
[grub_cv_cc_mflush_func=yes],
|
||||||
|
[grub_cv_cc_mflush_func=no])
|
||||||
|
])
|
||||||
|
|
||||||
|
if test "x$grub_cv_cc_mflush_func" = xyes; then
|
||||||
|
TARGET_CFLAGS="$TARGET_CFLAGS -mflush-func=grub_red_herring"
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
# Force no alignment to save space on i386.
|
# Force no alignment to save space on i386.
|
||||||
if test "x$target_cpu" = xi386; then
|
if test "x$target_cpu" = xi386; then
|
||||||
AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
|
AC_CACHE_CHECK([whether -falign-loops works], [grub_cv_cc_falign_loop], [
|
||||||
|
@ -660,8 +679,8 @@ if test x"$target_cpu" = xi386 || test x"$target_cpu" = xx86_64; then
|
||||||
if test x${target_cpu} != xi386 && test x$format = x${target_cpu}pe; then
|
if test x${target_cpu} != xi386 && test x$format = x${target_cpu}pe; then
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
CFLAGS="$TARGET_CFLAGS -static"
|
CFLAGS="$TARGET_CFLAGS"
|
||||||
LDFLAGS="$TARGET_LDFLAGS -Wl,$format -nostdlib"
|
LDFLAGS="$TARGET_LDFLAGS -Wl,$format -nostdlib -static"
|
||||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
|
||||||
asm (".globl start; start:");
|
asm (".globl start; start:");
|
||||||
asm (".globl _start; _start:");
|
asm (".globl _start; _start:");
|
||||||
|
@ -729,9 +748,7 @@ if test "$target_cpu" = x86_64; then
|
||||||
[grub_cv_cc_mcmodel=yes],
|
[grub_cv_cc_mcmodel=yes],
|
||||||
[grub_cv_cc_mcmodel=no])
|
[grub_cv_cc_mcmodel=no])
|
||||||
])
|
])
|
||||||
if test "x$grub_cv_cc_mcmodel" = xno; then
|
if test "x$grub_cv_cc_mcmodel" = xyes; then
|
||||||
AC_MSG_ERROR([-mcmodel=large not supported. Upgrade your gcc.])
|
|
||||||
else
|
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
|
TARGET_CFLAGS="$TARGET_CFLAGS -mcmodel=large"
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
@ -769,10 +786,17 @@ CFLAGS="$TARGET_CFLAGS"
|
||||||
|
|
||||||
# Position independent executable.
|
# Position independent executable.
|
||||||
grub_CHECK_PIC
|
grub_CHECK_PIC
|
||||||
[# Need that, because some distributions ship compilers that include
|
[# On most platforms we don't want PIC as it only makes relocations harder
|
||||||
# `-fPIC' in the default specs.
|
# and code less efficient. On mips we want to have one got table per module
|
||||||
if [ x"$pic_possible" = xyes ]; then
|
# and reload $gp in every function.
|
||||||
TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
|
# GCC implements it using symbol __gnu_local_gp in non-PIC as well.
|
||||||
|
# However with clang we need PIC for this reloading to happen.
|
||||||
|
# Since default varies across dictributions use either -fPIC or -fno-PIC
|
||||||
|
# explicitly.
|
||||||
|
if ( test x$target_cpu = xmips || test x$target_cpu = xmipsel ) && test "x$grub_cv_cc_target_clang" = xyes ; then
|
||||||
|
TARGET_CFLAGS="$TARGET_CFLAGS -fPIC"
|
||||||
|
elif [ x"$pic_possible" = xyes ]; then
|
||||||
|
TARGET_CFLAGS="$TARGET_CFLAGS -fno-PIC"
|
||||||
fi]
|
fi]
|
||||||
|
|
||||||
CFLAGS="$TARGET_CFLAGS"
|
CFLAGS="$TARGET_CFLAGS"
|
||||||
|
@ -807,7 +831,7 @@ fi
|
||||||
# Set them to their new values for the tests below.
|
# Set them to their new values for the tests below.
|
||||||
CC="$TARGET_CC"
|
CC="$TARGET_CC"
|
||||||
if test "x$TARGET_APPLE_LINKER" = x1 ; then
|
if test "x$TARGET_APPLE_LINKER" = x1 ; then
|
||||||
CFLAGS="$TARGET_CFLAGS -nostdlib -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 -Wl,--defsym,___main=0x8100 -Wno-error"
|
||||||
fi
|
fi
|
||||||
|
@ -833,7 +857,7 @@ fi
|
||||||
AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __ucmpdi2 _restgpr_14_x)
|
AC_CHECK_FUNCS(__bswapsi2 __bswapdi2 __ashldi3 __ashrdi3 __lshrdi3 __ucmpdi2 _restgpr_14_x)
|
||||||
|
|
||||||
if test "x$TARGET_APPLE_LINKER" = x1 ; then
|
if test "x$TARGET_APPLE_LINKER" = x1 ; then
|
||||||
CFLAGS="$TARGET_CFLAGS -nostdlib"
|
CFLAGS="$TARGET_CFLAGS -nostdlib -static"
|
||||||
else
|
else
|
||||||
CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100"
|
CFLAGS="$TARGET_CFLAGS -nostdlib -Wl,--defsym,___main=0x8100"
|
||||||
fi
|
fi
|
||||||
|
|
3
coreboot.cfg
Normal file
3
coreboot.cfg
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
if test -f (cbfsdisk)/etc/grub.cfg; then
|
||||||
|
source (cbfsdisk)/etc/grub.cfg
|
||||||
|
fi
|
|
@ -79,6 +79,7 @@ This edition documents version @value{VERSION}.
|
||||||
* Contributing Changes::
|
* Contributing Changes::
|
||||||
* Porting::
|
* Porting::
|
||||||
* Error Handling::
|
* Error Handling::
|
||||||
|
* Stack and heap size::
|
||||||
* BIOS port memory map::
|
* BIOS port memory map::
|
||||||
* Video Subsystem::
|
* Video Subsystem::
|
||||||
* PFF2 Font File Format::
|
* PFF2 Font File Format::
|
||||||
|
@ -906,6 +907,69 @@ if (grub_errno != GRUB_ERR_NONE)
|
||||||
grub_error_pop ();
|
grub_error_pop ();
|
||||||
@end example
|
@end example
|
||||||
|
|
||||||
|
@node Stack and heap size
|
||||||
|
@chapter Stack and heap size
|
||||||
|
|
||||||
|
On emu stack and heap are just normal host OS stack and heap. Stack is typically
|
||||||
|
8 MiB although it's OS-dependent.
|
||||||
|
|
||||||
|
On i386-pc, i386-coreboot, i386-qemu and i386-multiboot the stack is 60KiB.
|
||||||
|
All available space between 1MiB and 4GiB marks is part of heap.
|
||||||
|
|
||||||
|
On *-xen stack is 4MiB. If compiled for x86-64 with GCC 4.4 or later adressable
|
||||||
|
space is unlimited. When compiled for x86-64 with older GCC version adressable
|
||||||
|
space is limited to 2GiB. When compiling for i386 adressable space is limited
|
||||||
|
to 4GiB. All adressable pages except the ones for stack, GRUB binary, special
|
||||||
|
pages and page table are in the heap.
|
||||||
|
|
||||||
|
On *-efi GRUB uses same stack as EFI. If compiled for x86-64 with GCC 4.4 or
|
||||||
|
later adressable space is unlimited. When compiled for x86-64 with older GCC
|
||||||
|
version adressable space is limited to 2GiB. For all other platforms adressable
|
||||||
|
space is limited to 4GiB. GRUB allocates pages from EFI for its heap, at most
|
||||||
|
1.6 GiB.
|
||||||
|
|
||||||
|
On i386-ieee1275 and powerpc-ieee1275 GRUB uses same stack as IEEE1275.
|
||||||
|
It allocates at most 32MiB for its heap.
|
||||||
|
|
||||||
|
On sparc64-ieee1275 stack is 256KiB and heap is 2MiB.
|
||||||
|
|
||||||
|
On mips(el)-qemu_mips and mipsel-loongson stack is 2MiB (everything below
|
||||||
|
GRUB image) and everything above GRUB image (from 2MiB + kernel size)
|
||||||
|
until 256MiB is part of heap.
|
||||||
|
|
||||||
|
On mips-arc stack is 2MiB (everything below GRUB image) and everything above
|
||||||
|
GRUB image(from 2MiB + kernel size) until 128MiB is part of heap.
|
||||||
|
|
||||||
|
On mipsel-arc stack is 2MiB (everything below GRUB image which is not part
|
||||||
|
of ARC) and everything above GRUB image (from 7MiB + kernel size)
|
||||||
|
until 256MiB is part of heap.
|
||||||
|
|
||||||
|
On arm-uboot stack is 256KiB and heap is 2MiB.
|
||||||
|
|
||||||
|
In short:
|
||||||
|
|
||||||
|
@multitable @columnfractions .15 .25 .5
|
||||||
|
@headitem Platform @tab Stack @tab Heap
|
||||||
|
@item emu @tab 8 MiB @tab ?
|
||||||
|
@item i386-pc @tab 60 KiB @tab < 4 GiB
|
||||||
|
@item i386-coreboot @tab 60 KiB @tab < 4 GiB
|
||||||
|
@item i386-multiboot @tab 60 KiB @tab < 4 GiB
|
||||||
|
@item i386-qemu @tab 60 KiB @tab < 4 GiB
|
||||||
|
@item *-efi @tab ? @tab < 1.6 GiB
|
||||||
|
@item i386-ieee1275 @tab ? @tab < 32 MiB
|
||||||
|
@item powerpc-ieee1275 @tab ? @tab < 32 MiB
|
||||||
|
@item sparc64-ieee1275 @tab 256KiB @tab 2 MiB
|
||||||
|
@item arm-uboot @tab 256KiB @tab 2 MiB
|
||||||
|
@item mips(el)-qemu_mips @tab 2MiB @tab 253 MiB
|
||||||
|
@item mipsel-loongson @tab 2MiB @tab 253 MiB
|
||||||
|
@item mips-arc @tab 2MiB @tab 125 MiB
|
||||||
|
@item mipsel-arc @tab 2MiB @tab 248 MiB
|
||||||
|
@item x86_64-xen (GCC >= 4.4) @tab 4MiB @tab unlimited
|
||||||
|
@item x86_64-xen (GCC < 4.4) @tab 4MiB @tab < 2GiB
|
||||||
|
@item i386-xen @tab 4MiB @tab < 4GiB
|
||||||
|
@end multitable
|
||||||
|
|
||||||
|
|
||||||
@node BIOS port memory map
|
@node BIOS port memory map
|
||||||
@chapter BIOS port memory map
|
@chapter BIOS port memory map
|
||||||
@c By Yoshinori K Okuji
|
@c By Yoshinori K Okuji
|
||||||
|
@ -917,9 +981,8 @@ grub_error_pop ();
|
||||||
@item ? @tab 0x2000 - 1 @tab Real mode stack
|
@item ? @tab 0x2000 - 1 @tab Real mode stack
|
||||||
@item 0x7C00 @tab 0x7D00 - 1 @tab Boot sector
|
@item 0x7C00 @tab 0x7D00 - 1 @tab Boot sector
|
||||||
@item 0x8000 @tab ? @tab GRUB kernel
|
@item 0x8000 @tab ? @tab GRUB kernel
|
||||||
@item 0x68000 @tab 0x78000 - 1 @tab Disk buffer
|
@item 0x68000 @tab 0x71000 - 1 @tab Disk buffer
|
||||||
@item ? @tab 0x80000 - 1 @tab Protected mode stack
|
@item ? @tab 0x80000 - 1 @tab Protected mode stack
|
||||||
@item 0x80000 @tab ? @tab Heap
|
|
||||||
@item ? @tab 0xA0000 - 1 @tab Extended BIOS Data Area
|
@item ? @tab 0xA0000 - 1 @tab Extended BIOS Data Area
|
||||||
@item 0xA0000 @tab 0xC0000 - 1 @tab Video RAM
|
@item 0xA0000 @tab 0xC0000 - 1 @tab Video RAM
|
||||||
@item 0xC0000 @tab 0x100000 - 1 @tab BIOS
|
@item 0xC0000 @tab 0x100000 - 1 @tab BIOS
|
||||||
|
|
|
@ -1451,6 +1451,10 @@ Normally, @command{grub-mkconfig} will try to use the external
|
||||||
systems installed on the same system and generate appropriate menu entries
|
systems installed on the same system and generate appropriate menu entries
|
||||||
for them. Set this option to @samp{true} to disable this.
|
for them. Set this option to @samp{true} to disable this.
|
||||||
|
|
||||||
|
@item GRUB_OS_PROBER_SKIP_LIST
|
||||||
|
List of space-separated FS UUIDs of filesystems to be ignored from os-prober
|
||||||
|
output. For efi chainloaders it's <UUID>@@<EFI FILE>
|
||||||
|
|
||||||
@item GRUB_DISABLE_SUBMENU
|
@item GRUB_DISABLE_SUBMENU
|
||||||
Normally, @command{grub-mkconfig} will generate top level menu entry for
|
Normally, @command{grub-mkconfig} will generate top level menu entry for
|
||||||
the kernel with highest version number and put all other found kernels
|
the kernel with highest version number and put all other found kernels
|
||||||
|
|
|
@ -433,7 +433,7 @@ def kernel(platform):
|
||||||
else cp $< $@; fi""",
|
else cp $< $@; fi""",
|
||||||
"""if test x$(TARGET_APPLE_LINKER) = x1; then \
|
"""if test x$(TARGET_APPLE_LINKER) = x1; then \
|
||||||
$(TARGET_STRIP) -S -x $(""" + cname() + """) -o $@.bin $<; \
|
$(TARGET_STRIP) -S -x $(""" + cname() + """) -o $@.bin $<; \
|
||||||
$(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -wd1106 -nu -nd $@.bin $@; \
|
$(TARGET_OBJCONV) -f$(TARGET_MODULE_FORMAT) -nr:_grub_mod_init:grub_mod_init -nr:_grub_mod_fini:grub_mod_fini -ed2022 -ed2016 -wd1106 -nu -nd $@.bin $@; \
|
||||||
else """ + "$(TARGET_STRIP) $(" + cname() + "_STRIPFLAGS) -o $@ $<; \
|
else """ + "$(TARGET_STRIP) $(" + cname() + "_STRIPFLAGS) -o $@ $<; \
|
||||||
fi"""))
|
fi"""))
|
||||||
return r
|
return r
|
||||||
|
@ -542,8 +542,8 @@ def script(platform):
|
||||||
r += "[+ IF mansection +]" + manpage("grub-mkconfig_lib") + "[+ ENDIF +]"
|
r += "[+ IF mansection +]" + manpage("grub-mkconfig_lib") + "[+ ENDIF +]"
|
||||||
r += "[+ ENDIF +]"
|
r += "[+ ENDIF +]"
|
||||||
|
|
||||||
r += rule("[+ name +]", "$(top_builddir)/config.status " + platform_sources(platform), """
|
r += rule("[+ name +]", "$(top_builddir)/config.status " + platform_sources(platform) + platform_dependencies(platform), """
|
||||||
(skip=1; for x in $^; do if [ $$skip = 1 ]; then skip=0; else cat "$$x"; fi; done) | $(top_builddir)/config.status --file=$@:-
|
(for x in """ + platform_sources(platform) + """; do cat $(srcdir)/"$$x"; done) | $(top_builddir)/config.status --file=$@:-
|
||||||
chmod a+x [+ name +]
|
chmod a+x [+ name +]
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
|
|
@ -396,7 +396,7 @@ efiemu32.o: efiemu/runtime/efiemu.c $(TARGET_OBJ2ELF)
|
||||||
-rm -f $@; \
|
-rm -f $@; \
|
||||||
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_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m32 -Wall -Werror -nostdlib -O2 -c -o $@.bin $< || exit 1; \
|
||||||
$(OBJCONV) -felf32 -nu -nd $@.bin $@ || exit 1; \
|
$(TARGET_OBJCONV) -felf32 -nu -nd $@.bin $@ || exit 1; \
|
||||||
rm -f $@.bin; \
|
rm -f $@.bin; \
|
||||||
else \
|
else \
|
||||||
$(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m32 -Wall -Werror -nostdlib -O2 -c -o $@ $< || exit 1; \
|
$(TARGET_CC) $(DEFS) $(INCLUDES) $(CPPFLAGS_EFIEMU) $(CPPFLAGS_DEFAULT) -m32 -Wall -Werror -nostdlib -O2 -c -o $@ $< || exit 1; \
|
||||||
|
@ -423,7 +423,7 @@ efiemu64.o: efiemu64_c.o efiemu64_s.o $(TARGET_OBJ2ELEF)
|
||||||
if test "x$(TARGET_APPLE_LINKER)" = x1; then \
|
if test "x$(TARGET_APPLE_LINKER)" = x1; then \
|
||||||
rm -f $@.bin; \
|
rm -f $@.bin; \
|
||||||
$(TARGET_CC) -m64 -Wl,-r -nostdlib -o $@.bin $^ || exit 1; \
|
$(TARGET_CC) -m64 -Wl,-r -nostdlib -o $@.bin $^ || exit 1; \
|
||||||
$(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; \
|
$(TARGET_CC) -m64 -Wl,-melf_x86_64 -nostdlib -Wl,-r -o $@ $^ || exit 1; \
|
||||||
|
|
|
@ -31,27 +31,32 @@
|
||||||
.macro floppy
|
.macro floppy
|
||||||
part_start:
|
part_start:
|
||||||
|
|
||||||
probe_values:
|
LOCAL(probe_values):
|
||||||
.byte 36, 18, 15, 9, 0
|
.byte 36, 18, 15, 9, 0
|
||||||
|
|
||||||
LOCAL(floppy_probe):
|
LOCAL(floppy_probe):
|
||||||
|
pushw %dx
|
||||||
/*
|
/*
|
||||||
* Perform floppy probe.
|
* Perform floppy probe.
|
||||||
*/
|
*/
|
||||||
|
#ifdef __APPLE__
|
||||||
movw $probe_values - 1, %si
|
LOCAL(probe_values_minus_one) = LOCAL(probe_values) - 1
|
||||||
|
movw MACRO_DOLLAR(LOCAL(probe_values_minus_one)), %si
|
||||||
|
#else
|
||||||
|
movw MACRO_DOLLAR(LOCAL(probe_values)) - 1, %si
|
||||||
|
#endif
|
||||||
|
|
||||||
LOCAL(probe_loop):
|
LOCAL(probe_loop):
|
||||||
/* reset floppy controller INT 13h AH=0 */
|
/* reset floppy controller INT 13h AH=0 */
|
||||||
xorw %ax, %ax
|
xorw %ax, %ax
|
||||||
int $0x13
|
int MACRO_DOLLAR(0x13)
|
||||||
|
|
||||||
incw %si
|
incw %si
|
||||||
movb (%si), %cl
|
movb (%si), %cl
|
||||||
|
|
||||||
/* if number of sectors is 0, display error and die */
|
/* if number of sectors is 0, display error and die */
|
||||||
cmpb $0, %cl
|
testb %cl, %cl
|
||||||
jne 1f
|
jnz 1f
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Floppy disk probe failure.
|
* Floppy disk probe failure.
|
||||||
|
@ -64,20 +69,20 @@ fd_probe_error_string: .asciz "Floppy"
|
||||||
|
|
||||||
1:
|
1:
|
||||||
/* perform read */
|
/* perform read */
|
||||||
movw $GRUB_BOOT_MACHINE_BUFFER_SEG, %bx
|
movw MACRO_DOLLAR(GRUB_BOOT_MACHINE_BUFFER_SEG), %bx
|
||||||
movw %bx, %es
|
movw %bx, %es
|
||||||
xorw %bx, %bx
|
xorw %bx, %bx
|
||||||
movw $0x201, %ax
|
movw MACRO_DOLLAR(0x201), %ax
|
||||||
movb $0, %ch
|
movb MACRO_DOLLAR(0), %ch
|
||||||
movb $0, %dh
|
movb MACRO_DOLLAR(0), %dh
|
||||||
int $0x13
|
int MACRO_DOLLAR(0x13)
|
||||||
|
|
||||||
/* if error, jump to "LOCAL(probe_loop)" */
|
/* if error, jump to "LOCAL(probe_loop)" */
|
||||||
jc LOCAL(probe_loop)
|
jc LOCAL(probe_loop)
|
||||||
|
|
||||||
/* %cl is already the correct value! */
|
/* %cl is already the correct value! */
|
||||||
movb $1, %dh
|
movb MACRO_DOLLAR(1), %dh
|
||||||
movb $79, %ch
|
movb MACRO_DOLLAR(79), %ch
|
||||||
|
|
||||||
jmp LOCAL(final_init)
|
jmp LOCAL(final_init)
|
||||||
.endm
|
.endm
|
||||||
|
@ -180,7 +185,9 @@ kernel_address:
|
||||||
#ifndef HYBRID_BOOT
|
#ifndef HYBRID_BOOT
|
||||||
. = _start + GRUB_BOOT_MACHINE_KERNEL_SECTOR
|
. = _start + GRUB_BOOT_MACHINE_KERNEL_SECTOR
|
||||||
kernel_sector:
|
kernel_sector:
|
||||||
.long 1, 0
|
.long 1
|
||||||
|
kernel_sector_high:
|
||||||
|
.long 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
. = _start + GRUB_BOOT_MACHINE_BOOT_DRIVE
|
. = _start + GRUB_BOOT_MACHINE_BOOT_DRIVE
|
||||||
|
@ -285,7 +292,7 @@ lba_mode:
|
||||||
/* the absolute address */
|
/* the absolute address */
|
||||||
movl kernel_sector, %ebx
|
movl kernel_sector, %ebx
|
||||||
movl %ebx, 8(%si)
|
movl %ebx, 8(%si)
|
||||||
movl kernel_sector + 4, %ebx
|
movl kernel_sector_high, %ebx
|
||||||
movl %ebx, 12(%si)
|
movl %ebx, 12(%si)
|
||||||
|
|
||||||
/* the segment of buffer address */
|
/* the segment of buffer address */
|
||||||
|
@ -318,11 +325,12 @@ LOCAL(chs_mode):
|
||||||
int $0x13
|
int $0x13
|
||||||
jnc LOCAL(final_init)
|
jnc LOCAL(final_init)
|
||||||
|
|
||||||
|
popw %dx
|
||||||
/*
|
/*
|
||||||
* The call failed, so maybe use the floppy probe instead.
|
* The call failed, so maybe use the floppy probe instead.
|
||||||
*/
|
*/
|
||||||
testb $GRUB_BOOT_MACHINE_BIOS_HD_FLAG, %dl
|
testb %dl, %dl
|
||||||
jz LOCAL(floppy_probe)
|
jnb LOCAL(floppy_probe)
|
||||||
|
|
||||||
/* Nope, we definitely have a hard disk, and we're screwed. */
|
/* Nope, we definitely have a hard disk, and we're screwed. */
|
||||||
ERR(hd_probe_error_string)
|
ERR(hd_probe_error_string)
|
||||||
|
@ -353,7 +361,7 @@ LOCAL(final_init):
|
||||||
|
|
||||||
setup_sectors:
|
setup_sectors:
|
||||||
/* load logical sector start (top half) */
|
/* load logical sector start (top half) */
|
||||||
movl kernel_sector + 4, %eax
|
movl kernel_sector_high, %eax
|
||||||
|
|
||||||
orl %eax, %eax
|
orl %eax, %eax
|
||||||
jnz LOCAL(geometry_error)
|
jnz LOCAL(geometry_error)
|
||||||
|
@ -505,7 +513,9 @@ LOCAL(message):
|
||||||
#ifdef HYBRID_BOOT
|
#ifdef HYBRID_BOOT
|
||||||
. = _start + 0x1b0
|
. = _start + 0x1b0
|
||||||
kernel_sector:
|
kernel_sector:
|
||||||
.long 1, 0
|
.long 1
|
||||||
|
kernel_sector_high:
|
||||||
|
.long 0
|
||||||
#endif
|
#endif
|
||||||
. = _start + GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC
|
. = _start + GRUB_BOOT_MACHINE_WINDOWS_NT_MAGIC
|
||||||
nt_magic:
|
nt_magic:
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
|
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <grub/symbol.h>
|
#include <grub/symbol.h>
|
||||||
#include <grub/i386/pc/memory.h>
|
|
||||||
#include <grub/machine/memory.h>
|
#include <grub/machine/memory.h>
|
||||||
#include <grub/machine/boot.h>
|
#include <grub/machine/boot.h>
|
||||||
#include <grub/machine/kernel.h>
|
#include <grub/machine/kernel.h>
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
.extern __bss_start
|
.extern __bss_start
|
||||||
.extern _end
|
.extern _end
|
||||||
|
.extern _edata
|
||||||
|
|
||||||
.globl __start, _start, start
|
.globl __start, _start, start
|
||||||
.set noreorder
|
.set noreorder
|
||||||
|
@ -248,8 +249,9 @@ cmdlinedone:
|
||||||
#include "../../kern/mips/cache_flush.S"
|
#include "../../kern/mips/cache_flush.S"
|
||||||
|
|
||||||
/* Decompress the payload. */
|
/* Decompress the payload. */
|
||||||
lui $a0, %hi(__bss_start)
|
lui $a0, %hi(_edata)
|
||||||
addiu $a0, $a0, %lo(__bss_start)
|
addiu $a0, $a0, %lo(_edata)
|
||||||
|
|
||||||
lui $t0, %hi(base)
|
lui $t0, %hi(base)
|
||||||
addiu $t0, $t0, %lo(base)
|
addiu $t0, $t0, %lo(base)
|
||||||
subu $a0, $a0, $t0
|
subu $a0, $a0, $t0
|
||||||
|
@ -265,16 +267,16 @@ cmdlinedone:
|
||||||
*/
|
*/
|
||||||
move $s6, $a3
|
move $s6, $a3
|
||||||
|
|
||||||
lui $t0, %hi(EXT_C(grub_decompress_core))
|
lui $t9, %hi(EXT_C(grub_decompress_core))
|
||||||
addiu $t0, $t0, %lo(EXT_C(grub_decompress_core))
|
addiu $t9, $t9, %lo(EXT_C(grub_decompress_core))
|
||||||
|
|
||||||
#ifdef GRUB_MACHINE_ARC
|
#ifdef GRUB_MACHINE_ARC
|
||||||
lui $sp, %hi(_start - 512)
|
lui $sp, %hi(_start - 512)
|
||||||
jalr $t0
|
jalr $t9
|
||||||
addiu $sp, $sp, %lo(_start - 512)
|
addiu $sp, $sp, %lo(_start - 512)
|
||||||
#else
|
#else
|
||||||
lui $sp, %hi(_start - 256)
|
lui $sp, %hi(_start - 256)
|
||||||
jalr $t0
|
jalr $t9
|
||||||
addiu $sp, $sp, %lo(_start - 256)
|
addiu $sp, $sp, %lo(_start - 256)
|
||||||
#endif
|
#endif
|
||||||
move $a0, $s1
|
move $a0, $s1
|
||||||
|
@ -287,3 +289,11 @@ cmdlinedone:
|
||||||
|
|
||||||
jr $t1
|
jr $t1
|
||||||
nop
|
nop
|
||||||
|
/* Ensure that .data section is created. In code we suppose that _edata
|
||||||
|
is first location not in decompressor image. Strictly speaking it's
|
||||||
|
_edata only when .data is present and _etext otherwise. But checking
|
||||||
|
for .data presence would cost more in code than it is to ensure that
|
||||||
|
.data is created.
|
||||||
|
*/
|
||||||
|
.data
|
||||||
|
.long 0
|
||||||
|
|
|
@ -426,6 +426,10 @@ grub_biosdisk_open (const char *name, grub_disk_t disk)
|
||||||
disk->total_sectors = total_sectors;
|
disk->total_sectors = total_sectors;
|
||||||
/* Limit the max to 0x7f because of Phoenix EDD. */
|
/* Limit the max to 0x7f because of Phoenix EDD. */
|
||||||
disk->max_agglomerate = 0x7f >> GRUB_DISK_CACHE_BITS;
|
disk->max_agglomerate = 0x7f >> GRUB_DISK_CACHE_BITS;
|
||||||
|
COMPILE_TIME_ASSERT ((0x7f >> GRUB_DISK_CACHE_BITS
|
||||||
|
<< (GRUB_DISK_SECTOR_BITS + GRUB_DISK_CACHE_BITS))
|
||||||
|
+ sizeof (struct grub_biosdisk_dap)
|
||||||
|
< GRUB_MEMORY_MACHINE_SCRATCH_SIZE);
|
||||||
|
|
||||||
disk->data = data;
|
disk->data = data;
|
||||||
|
|
||||||
|
|
|
@ -71,11 +71,7 @@ VARIABLE(grub_gdb_stack)
|
||||||
#define REG \reg
|
#define REG \reg
|
||||||
#define NDX \ndx
|
#define NDX \ndx
|
||||||
#endif
|
#endif
|
||||||
#ifdef __APPLE__
|
|
||||||
xorl %eax, %eax
|
xorl %eax, %eax
|
||||||
#else
|
|
||||||
movl $0, %eax
|
|
||||||
#endif
|
|
||||||
movw REG, EXT_C(grub_gdb_regs)+(NDX * 4)
|
movw REG, EXT_C(grub_gdb_regs)+(NDX * 4)
|
||||||
movw %ax, EXT_C(grub_gdb_regs)+(NDX * 4 + 2)
|
movw %ax, EXT_C(grub_gdb_regs)+(NDX * 4 + 2)
|
||||||
movl EXT_C(grub_gdb_regs)+(EAX * 4), %eax
|
movl EXT_C(grub_gdb_regs)+(EAX * 4), %eax
|
||||||
|
@ -190,11 +186,7 @@ VARIABLE(grub_gdb_stack)
|
||||||
.text
|
.text
|
||||||
1:
|
1:
|
||||||
.if EC
|
.if EC
|
||||||
#ifdef __APPLE__
|
add MACRO_DOLLAR(4), %esp
|
||||||
add $$4, %esp
|
|
||||||
#else
|
|
||||||
add $4, %esp
|
|
||||||
#endif
|
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
save_context
|
save_context
|
||||||
|
|
|
@ -23,7 +23,7 @@ BEGIN {
|
||||||
} else if ($1 == "undefined") {
|
} else if ($1 == "undefined") {
|
||||||
if ($3 in symtab)
|
if ($3 in symtab)
|
||||||
modtab[$2] = modtab[$2] " " symtab[$3];
|
modtab[$2] = modtab[$2] " " symtab[$3];
|
||||||
else if ($3 != "__gnu_local_gp") {
|
else if ($3 != "__gnu_local_gp" && $3 != "_gp_disp") {
|
||||||
printf "%s in %s is not defined\n", $3, $2 >"/dev/stderr";
|
printf "%s in %s is not defined\n", $3, $2 >"/dev/stderr";
|
||||||
error++;
|
error++;
|
||||||
}
|
}
|
||||||
|
|
|
@ -229,9 +229,10 @@ grub_dl_load_segments (grub_dl_t mod, const Elf_Ehdr *e)
|
||||||
unsigned i;
|
unsigned i;
|
||||||
Elf_Shdr *s;
|
Elf_Shdr *s;
|
||||||
grub_size_t tsize = 0, talign = 1;
|
grub_size_t tsize = 0, talign = 1;
|
||||||
#if defined (__ia64__) || defined (__powerpc__)
|
#if defined (__ia64__) || defined (__powerpc__) || defined (__mips__)
|
||||||
grub_size_t tramp;
|
grub_size_t tramp;
|
||||||
grub_size_t got;
|
grub_size_t got;
|
||||||
|
grub_err_t err;
|
||||||
#endif
|
#endif
|
||||||
char *ptr;
|
char *ptr;
|
||||||
|
|
||||||
|
@ -244,10 +245,10 @@ grub_dl_load_segments (grub_dl_t mod, const Elf_Ehdr *e)
|
||||||
talign = s->sh_addralign;
|
talign = s->sh_addralign;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (__ia64__) || defined (__powerpc__)
|
#if defined (__ia64__) || defined (__powerpc__) || defined (__mips__)
|
||||||
grub_arch_dl_get_tramp_got_size (e, &tramp, &got);
|
err = grub_arch_dl_get_tramp_got_size (e, &tramp, &got);
|
||||||
tramp *= GRUB_ARCH_DL_TRAMP_SIZE;
|
if (err)
|
||||||
got *= sizeof (grub_uint64_t);
|
return err;
|
||||||
tsize += ALIGN_UP (tramp, GRUB_ARCH_DL_TRAMP_ALIGN);
|
tsize += ALIGN_UP (tramp, GRUB_ARCH_DL_TRAMP_ALIGN);
|
||||||
if (talign < GRUB_ARCH_DL_TRAMP_ALIGN)
|
if (talign < GRUB_ARCH_DL_TRAMP_ALIGN)
|
||||||
talign = GRUB_ARCH_DL_TRAMP_ALIGN;
|
talign = GRUB_ARCH_DL_TRAMP_ALIGN;
|
||||||
|
@ -313,7 +314,7 @@ grub_dl_load_segments (grub_dl_t mod, const Elf_Ehdr *e)
|
||||||
mod->segment = seg;
|
mod->segment = seg;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if defined (__ia64__) || defined (__powerpc__)
|
#if defined (__ia64__) || defined (__powerpc__) || defined (__mips__)
|
||||||
ptr = (char *) ALIGN_UP ((grub_addr_t) ptr, GRUB_ARCH_DL_TRAMP_ALIGN);
|
ptr = (char *) ALIGN_UP ((grub_addr_t) ptr, GRUB_ARCH_DL_TRAMP_ALIGN);
|
||||||
mod->tramp = ptr;
|
mod->tramp = ptr;
|
||||||
ptr += tramp;
|
ptr += tramp;
|
||||||
|
|
|
@ -32,6 +32,12 @@
|
||||||
#define BYTES_TO_PAGES(bytes) (((bytes) + 0xfff) >> 12)
|
#define BYTES_TO_PAGES(bytes) (((bytes) + 0xfff) >> 12)
|
||||||
#define PAGES_TO_BYTES(pages) ((pages) << 12)
|
#define PAGES_TO_BYTES(pages) ((pages) << 12)
|
||||||
|
|
||||||
|
#if defined (__code_model_large__) || !defined (__x86_64__)
|
||||||
|
#define MAX_USABLE_ADDRESS 0xffffffff
|
||||||
|
#else
|
||||||
|
#define MAX_USABLE_ADDRESS 0x7fffffff
|
||||||
|
#endif
|
||||||
|
|
||||||
/* The size of a memory map obtained from the firmware. This must be
|
/* The size of a memory map obtained from the firmware. This must be
|
||||||
a multiplier of 4KB. */
|
a multiplier of 4KB. */
|
||||||
#define MEMORY_MAP_SIZE 0x3000
|
#define MEMORY_MAP_SIZE 0x3000
|
||||||
|
@ -58,7 +64,7 @@ grub_efi_allocate_pages (grub_efi_physical_address_t address,
|
||||||
|
|
||||||
#if 1
|
#if 1
|
||||||
/* Limit the memory access to less than 4GB for 32-bit platforms. */
|
/* Limit the memory access to less than 4GB for 32-bit platforms. */
|
||||||
if (address > 0xffffffff)
|
if (address > MAX_USABLE_ADDRESS)
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -66,7 +72,7 @@ grub_efi_allocate_pages (grub_efi_physical_address_t address,
|
||||||
if (address == 0)
|
if (address == 0)
|
||||||
{
|
{
|
||||||
type = GRUB_EFI_ALLOCATE_MAX_ADDRESS;
|
type = GRUB_EFI_ALLOCATE_MAX_ADDRESS;
|
||||||
address = 0xffffffff;
|
address = MAX_USABLE_ADDRESS;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
type = GRUB_EFI_ALLOCATE_ADDRESS;
|
type = GRUB_EFI_ALLOCATE_ADDRESS;
|
||||||
|
@ -86,7 +92,7 @@ grub_efi_allocate_pages (grub_efi_physical_address_t address,
|
||||||
{
|
{
|
||||||
/* Uggh, the address 0 was allocated... This is too annoying,
|
/* Uggh, the address 0 was allocated... This is too annoying,
|
||||||
so reallocate another one. */
|
so reallocate another one. */
|
||||||
address = 0xffffffff;
|
address = MAX_USABLE_ADDRESS;
|
||||||
status = efi_call_4 (b->allocate_pages, type, GRUB_EFI_LOADER_DATA, pages, &address);
|
status = efi_call_4 (b->allocate_pages, type, GRUB_EFI_LOADER_DATA, pages, &address);
|
||||||
grub_efi_free_pages (0, pages);
|
grub_efi_free_pages (0, pages);
|
||||||
if (status != GRUB_EFI_SUCCESS)
|
if (status != GRUB_EFI_SUCCESS)
|
||||||
|
@ -319,7 +325,7 @@ filter_memory_map (grub_efi_memory_descriptor_t *memory_map,
|
||||||
{
|
{
|
||||||
if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY
|
if (desc->type == GRUB_EFI_CONVENTIONAL_MEMORY
|
||||||
#if 1
|
#if 1
|
||||||
&& desc->physical_start <= 0xffffffff
|
&& desc->physical_start <= MAX_USABLE_ADDRESS
|
||||||
#endif
|
#endif
|
||||||
&& desc->physical_start + PAGES_TO_BYTES (desc->num_pages) > 0x100000
|
&& desc->physical_start + PAGES_TO_BYTES (desc->num_pages) > 0x100000
|
||||||
&& desc->num_pages != 0)
|
&& desc->num_pages != 0)
|
||||||
|
@ -337,9 +343,9 @@ filter_memory_map (grub_efi_memory_descriptor_t *memory_map,
|
||||||
#if 1
|
#if 1
|
||||||
if (BYTES_TO_PAGES (filtered_desc->physical_start)
|
if (BYTES_TO_PAGES (filtered_desc->physical_start)
|
||||||
+ filtered_desc->num_pages
|
+ filtered_desc->num_pages
|
||||||
> BYTES_TO_PAGES (0x100000000LL))
|
> BYTES_TO_PAGES (MAX_USABLE_ADDRESS+1LL))
|
||||||
filtered_desc->num_pages
|
filtered_desc->num_pages
|
||||||
= (BYTES_TO_PAGES (0x100000000LL)
|
= (BYTES_TO_PAGES (MAX_USABLE_ADDRESS+1LL)
|
||||||
- BYTES_TO_PAGES (filtered_desc->physical_start));
|
- BYTES_TO_PAGES (filtered_desc->physical_start));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -46,7 +46,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
||||||
return GRUB_ERR_BAD_MODULE;
|
return GRUB_ERR_BAD_MODULE;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined (__ia64__) || defined (__powerpc__)
|
#if defined (__ia64__) || defined (__powerpc__) || defined (__mips__)
|
||||||
void grub_arch_dl_get_tramp_got_size (const void *ehdr __attribute__ ((unused)),
|
void grub_arch_dl_get_tramp_got_size (const void *ehdr __attribute__ ((unused)),
|
||||||
grub_size_t *tramp, grub_size_t *got)
|
grub_size_t *tramp, grub_size_t *got)
|
||||||
{
|
{
|
||||||
|
|
|
@ -17,8 +17,6 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <grub/symbol.h>
|
#include <grub/symbol.h>
|
||||||
/* For stack parameters. */
|
|
||||||
#include <grub/i386/pc/memory.h>
|
|
||||||
#include <grub/machine/memory.h>
|
#include <grub/machine/memory.h>
|
||||||
#include <grub/cpu/linux.h>
|
#include <grub/cpu/linux.h>
|
||||||
#include <grub/offsets.h>
|
#include <grub/offsets.h>
|
||||||
|
|
|
@ -161,13 +161,13 @@ mmap_iterate_hook (grub_uint64_t addr, grub_uint64_t size,
|
||||||
void *data __attribute__ ((unused)))
|
void *data __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
/* Avoid the lower memory. */
|
/* Avoid the lower memory. */
|
||||||
if (addr < 0x100000)
|
if (addr < GRUB_MEMORY_MACHINE_UPPER_START)
|
||||||
{
|
{
|
||||||
if (size <= 0x100000 - addr)
|
if (size <= GRUB_MEMORY_MACHINE_UPPER_START - addr)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
size -= 0x100000 - addr;
|
size -= GRUB_MEMORY_MACHINE_UPPER_START - addr;
|
||||||
addr = 0x100000;
|
addr = GRUB_MEMORY_MACHINE_UPPER_START;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ignore >4GB. */
|
/* Ignore >4GB. */
|
||||||
|
|
|
@ -19,7 +19,6 @@
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <grub/symbol.h>
|
#include <grub/symbol.h>
|
||||||
|
|
||||||
#include <grub/i386/pc/memory.h>
|
|
||||||
#include <grub/machine/memory.h>
|
#include <grub/machine/memory.h>
|
||||||
#include <grub/machine/kernel.h>
|
#include <grub/machine/kernel.h>
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <grub/i386/pc/memory.h>
|
#include <grub/machine/memory.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Note: These functions defined in this file may be called from C.
|
* Note: These functions defined in this file may be called from C.
|
||||||
|
@ -196,8 +196,6 @@ protcseg:
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <grub/i386/pc/memory.h>
|
|
||||||
|
|
||||||
prot_to_real:
|
prot_to_real:
|
||||||
/* just in case, set GDT */
|
/* just in case, set GDT */
|
||||||
lgdt gdtdesc
|
lgdt gdtdesc
|
||||||
|
|
|
@ -170,7 +170,7 @@ grub_ia64_make_trampoline (struct grub_ia64_trampoline *tr, grub_uint64_t addr)
|
||||||
grub_memcpy (tr->jump, jump, sizeof (tr->jump));
|
grub_memcpy (tr->jump, jump, sizeof (tr->jump));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
grub_err_t
|
||||||
grub_ia64_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
grub_ia64_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
||||||
grub_size_t *got)
|
grub_size_t *got)
|
||||||
{
|
{
|
||||||
|
@ -187,7 +187,7 @@ grub_ia64_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (i == grub_le_to_cpu16 (e->e_shnum))
|
if (i == grub_le_to_cpu16 (e->e_shnum))
|
||||||
return;
|
return GRUB_ERR_NONE;
|
||||||
|
|
||||||
for (i = 0, s = (Elf64_Shdr *) ((char *) e + grub_le_to_cpu64 (e->e_shoff));
|
for (i = 0, s = (Elf64_Shdr *) ((char *) e + grub_le_to_cpu64 (e->e_shoff));
|
||||||
i < grub_le_to_cpu16 (e->e_shnum);
|
i < grub_le_to_cpu16 (e->e_shnum);
|
||||||
|
@ -211,7 +211,9 @@ grub_ia64_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*tramp = cntt;
|
*tramp = cntt * sizeof (struct grub_ia64_trampoline);
|
||||||
*got = cntg;
|
*got = cntg * sizeof (grub_uint64_t);
|
||||||
|
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -396,8 +396,8 @@ grub_machine_get_bootlocation (char **device, char **path)
|
||||||
const char *syspart = 0;
|
const char *syspart = 0;
|
||||||
|
|
||||||
if (GRUB_ARC_SYSTEM_PARAMETER_BLOCK->firmware_vector_length
|
if (GRUB_ARC_SYSTEM_PARAMETER_BLOCK->firmware_vector_length
|
||||||
>= ((char *) (&GRUB_ARC_FIRMWARE_VECTOR->getenvironmentvariable + 1)
|
>= (unsigned) ((char *) (&GRUB_ARC_FIRMWARE_VECTOR->getenvironmentvariable + 1)
|
||||||
- (char *) GRUB_ARC_FIRMWARE_VECTOR)
|
- (char *) GRUB_ARC_FIRMWARE_VECTOR)
|
||||||
&& GRUB_ARC_FIRMWARE_VECTOR->getenvironmentvariable)
|
&& GRUB_ARC_FIRMWARE_VECTOR->getenvironmentvariable)
|
||||||
syspart = GRUB_ARC_FIRMWARE_VECTOR->getenvironmentvariable ("SystemPartition");
|
syspart = GRUB_ARC_FIRMWARE_VECTOR->getenvironmentvariable ("SystemPartition");
|
||||||
if (!syspart)
|
if (!syspart)
|
||||||
|
|
|
@ -20,11 +20,11 @@ FUNCTION (grub_arch_sync_dma_caches)
|
||||||
move $t0, $t2
|
move $t0, $t2
|
||||||
subu $t1, $t3, $t2
|
subu $t1, $t3, $t2
|
||||||
1:
|
1:
|
||||||
cache 1, 0($t0)
|
cache_op 1, 0($t0)
|
||||||
#ifdef GRUB_MACHINE_MIPS_LOONGSON
|
#ifdef GRUB_MACHINE_MIPS_LOONGSON
|
||||||
cache 1, 1($t0)
|
cache_op 1, 1($t0)
|
||||||
cache 1, 2($t0)
|
cache_op 1, 2($t0)
|
||||||
cache 1, 3($t0)
|
cache_op 1, 3($t0)
|
||||||
|
|
||||||
addiu $t1, $t1, -0x20
|
addiu $t1, $t1, -0x20
|
||||||
bne $t1, $zero, 1b
|
bne $t1, $zero, 1b
|
||||||
|
@ -34,36 +34,36 @@ FUNCTION (grub_arch_sync_dma_caches)
|
||||||
bne $t1, $zero, 1b
|
bne $t1, $zero, 1b
|
||||||
addiu $t0, $t0, 0x4
|
addiu $t0, $t0, 0x4
|
||||||
#endif
|
#endif
|
||||||
sync
|
sync_op
|
||||||
move $t0, $t2
|
move $t0, $t2
|
||||||
subu $t1, $t3, $t2
|
subu $t1, $t3, $t2
|
||||||
2:
|
2:
|
||||||
#ifdef GRUB_MACHINE_MIPS_LOONGSON
|
#ifdef GRUB_MACHINE_MIPS_LOONGSON
|
||||||
cache 0, 0($t0)
|
cache_op 0, 0($t0)
|
||||||
addiu $t1, $t1, -0x20
|
addiu $t1, $t1, -0x20
|
||||||
bne $t1, $zero, 2b
|
bne $t1, $zero, 2b
|
||||||
addiu $t0, $t0, 0x20
|
addiu $t0, $t0, 0x20
|
||||||
#else
|
#else
|
||||||
cache 0, 0($t0)
|
cache_op 0, 0($t0)
|
||||||
addiu $t1, $t1, -4
|
addiu $t1, $t1, -4
|
||||||
bne $t1, $zero, 2b
|
bne $t1, $zero, 2b
|
||||||
addiu $t0, $t0, 0x4
|
addiu $t0, $t0, 0x4
|
||||||
#endif
|
#endif
|
||||||
sync
|
sync_op
|
||||||
move $t0, $t2
|
move $t0, $t2
|
||||||
subu $t1, $t3, $t2
|
subu $t1, $t3, $t2
|
||||||
2:
|
2:
|
||||||
#ifdef GRUB_MACHINE_MIPS_LOONGSON
|
#ifdef GRUB_MACHINE_MIPS_LOONGSON
|
||||||
cache 23, 0($t0)
|
cache_op 23, 0($t0)
|
||||||
addiu $t1, $t1, -0x20
|
addiu $t1, $t1, -0x20
|
||||||
bne $t1, $zero, 2b
|
bne $t1, $zero, 2b
|
||||||
addiu $t0, $t0, 0x20
|
addiu $t0, $t0, 0x20
|
||||||
#else
|
#else
|
||||||
cache 23, 0($t0)
|
cache_op 23, 0($t0)
|
||||||
addiu $t1, $t1, -0x4
|
addiu $t1, $t1, -0x4
|
||||||
bne $t1, $zero, 2b
|
bne $t1, $zero, 2b
|
||||||
addiu $t0, $t0, 0x4
|
addiu $t0, $t0, 0x4
|
||||||
#endif
|
#endif
|
||||||
sync
|
sync_op
|
||||||
|
|
||||||
jr $ra
|
jr $ra
|
|
@ -1,3 +1,17 @@
|
||||||
|
#ifndef CACHE_OP_DEFINED
|
||||||
|
#define CACHE_OP_DEFINED 1
|
||||||
|
.macro cache_op op addr
|
||||||
|
.set mips3
|
||||||
|
cache \op, \addr
|
||||||
|
.set mips1
|
||||||
|
.endm
|
||||||
|
.macro sync_op
|
||||||
|
.set mips3
|
||||||
|
sync
|
||||||
|
.set mips1
|
||||||
|
.endm
|
||||||
|
#endif
|
||||||
|
|
||||||
move $t2, $a0
|
move $t2, $a0
|
||||||
addu $t3, $a0, $a1
|
addu $t3, $a0, $a1
|
||||||
srl $t2, $t2, 5
|
srl $t2, $t2, 5
|
||||||
|
@ -8,12 +22,12 @@
|
||||||
move $t0, $t2
|
move $t0, $t2
|
||||||
subu $t1, $t3, $t2
|
subu $t1, $t3, $t2
|
||||||
1:
|
1:
|
||||||
cache 1, 0($t0)
|
cache_op 1, 0($t0)
|
||||||
/* All four ways. */
|
/* All four ways. */
|
||||||
#ifdef GRUB_MACHINE_MIPS_LOONGSON
|
#ifdef GRUB_MACHINE_MIPS_LOONGSON
|
||||||
cache 1, 1($t0)
|
cache_op 1, 1($t0)
|
||||||
cache 1, 2($t0)
|
cache_op 1, 2($t0)
|
||||||
cache 1, 3($t0)
|
cache_op 1, 3($t0)
|
||||||
addiu $t1, $t1, -0x20
|
addiu $t1, $t1, -0x20
|
||||||
bne $t1, $zero, 1b
|
bne $t1, $zero, 1b
|
||||||
addiu $t0, $t0, 0x20
|
addiu $t0, $t0, 0x20
|
||||||
|
@ -23,11 +37,11 @@
|
||||||
bne $t1, $zero, 1b
|
bne $t1, $zero, 1b
|
||||||
addiu $t0, $t0, 0x4
|
addiu $t0, $t0, 0x4
|
||||||
#endif
|
#endif
|
||||||
sync
|
sync_op
|
||||||
move $t0, $t2
|
move $t0, $t2
|
||||||
subu $t1, $t3, $t2
|
subu $t1, $t3, $t2
|
||||||
2:
|
2:
|
||||||
cache 0, 0($t0)
|
cache_op 0, 0($t0)
|
||||||
#ifdef GRUB_MACHINE_MIPS_LOONGSON
|
#ifdef GRUB_MACHINE_MIPS_LOONGSON
|
||||||
addiu $t1, $t1, -0x20
|
addiu $t1, $t1, -0x20
|
||||||
bne $t1, $zero, 2b
|
bne $t1, $zero, 2b
|
||||||
|
@ -37,4 +51,4 @@
|
||||||
bne $t1, $zero, 2b
|
bne $t1, $zero, 2b
|
||||||
addiu $t0, $t0, 0x4
|
addiu $t0, $t0, 0x4
|
||||||
#endif
|
#endif
|
||||||
sync
|
sync_op
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
|
|
||||||
/* Dummy __gnu_local_gp. Resolved by linker. */
|
/* Dummy __gnu_local_gp. Resolved by linker. */
|
||||||
static char __gnu_local_gp_dummy;
|
static char __gnu_local_gp_dummy;
|
||||||
|
static char _gp_disp_dummy;
|
||||||
|
|
||||||
/* Check if EHDR is a valid ELF header. */
|
/* Check if EHDR is a valid ELF header. */
|
||||||
grub_err_t
|
grub_err_t
|
||||||
|
@ -51,6 +52,58 @@ grub_arch_dl_check_header (void *ehdr)
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wcast-align"
|
#pragma GCC diagnostic ignored "-Wcast-align"
|
||||||
|
|
||||||
|
grub_err_t
|
||||||
|
grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
||||||
|
grub_size_t *got)
|
||||||
|
{
|
||||||
|
const Elf_Ehdr *e = ehdr;
|
||||||
|
const Elf_Shdr *s;
|
||||||
|
unsigned i;
|
||||||
|
/* FIXME: suboptimal. */
|
||||||
|
grub_size_t gp_size = 0;
|
||||||
|
|
||||||
|
*tramp = 0;
|
||||||
|
*got = 0;
|
||||||
|
|
||||||
|
/* Find a symbol table. */
|
||||||
|
for (i = 0, s = (const Elf_Shdr *) ((const char *) e + e->e_shoff);
|
||||||
|
i < e->e_shnum;
|
||||||
|
i++, s = (const Elf_Shdr *) ((const char *) s + e->e_shentsize))
|
||||||
|
if (s->sh_type == SHT_SYMTAB)
|
||||||
|
break;
|
||||||
|
|
||||||
|
if (i == e->e_shnum)
|
||||||
|
return grub_error (GRUB_ERR_BAD_MODULE, N_("no symbol table"));
|
||||||
|
|
||||||
|
for (i = 0, s = (const Elf_Shdr *) ((const char *) e + e->e_shoff);
|
||||||
|
i < e->e_shnum;
|
||||||
|
i++, s = (const Elf_Shdr *) ((const char *) s + e->e_shentsize))
|
||||||
|
if (s->sh_type == SHT_REL)
|
||||||
|
{
|
||||||
|
const Elf_Rel *rel, *max;
|
||||||
|
|
||||||
|
for (rel = (const Elf_Rel *) ((const char *) e + s->sh_offset),
|
||||||
|
max = rel + s->sh_size / s->sh_entsize;
|
||||||
|
rel < max;
|
||||||
|
rel++)
|
||||||
|
switch (ELF_R_TYPE (rel->r_info))
|
||||||
|
{
|
||||||
|
case R_MIPS_GOT16:
|
||||||
|
case R_MIPS_CALL16:
|
||||||
|
case R_MIPS_GPREL32:
|
||||||
|
gp_size += 4;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (gp_size > 0x08000)
|
||||||
|
return grub_error (GRUB_ERR_OUT_OF_RANGE, "__gnu_local_gp is too big\n");
|
||||||
|
|
||||||
|
*got = gp_size;
|
||||||
|
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
/* Relocate symbols. */
|
/* Relocate symbols. */
|
||||||
grub_err_t
|
grub_err_t
|
||||||
grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
||||||
|
@ -59,7 +112,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
||||||
Elf_Shdr *s;
|
Elf_Shdr *s;
|
||||||
Elf_Word entsize;
|
Elf_Word entsize;
|
||||||
unsigned i;
|
unsigned i;
|
||||||
grub_size_t gp_size = 0;
|
|
||||||
/* FIXME: suboptimal. */
|
/* FIXME: suboptimal. */
|
||||||
grub_uint32_t *gp, *gpptr;
|
grub_uint32_t *gp, *gpptr;
|
||||||
grub_uint32_t gp0;
|
grub_uint32_t gp0;
|
||||||
|
@ -88,43 +140,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
||||||
|
|
||||||
gp0 = ((grub_uint32_t *)((char *) e + s->sh_offset))[5];
|
gp0 = ((grub_uint32_t *)((char *) e + s->sh_offset))[5];
|
||||||
|
|
||||||
for (i = 0, s = (Elf_Shdr *) ((char *) e + e->e_shoff);
|
gpptr = gp = mod->got;
|
||||||
i < e->e_shnum;
|
|
||||||
i++, s = (Elf_Shdr *) ((char *) s + e->e_shentsize))
|
|
||||||
if (s->sh_type == SHT_REL)
|
|
||||||
{
|
|
||||||
grub_dl_segment_t seg;
|
|
||||||
|
|
||||||
/* Find the target segment. */
|
|
||||||
for (seg = mod->segment; seg; seg = seg->next)
|
|
||||||
if (seg->section == s->sh_info)
|
|
||||||
break;
|
|
||||||
|
|
||||||
if (seg)
|
|
||||||
{
|
|
||||||
Elf_Rel *rel, *max;
|
|
||||||
|
|
||||||
for (rel = (Elf_Rel *) ((char *) e + s->sh_offset),
|
|
||||||
max = rel + s->sh_size / s->sh_entsize;
|
|
||||||
rel < max;
|
|
||||||
rel++)
|
|
||||||
switch (ELF_R_TYPE (rel->r_info))
|
|
||||||
{
|
|
||||||
case R_MIPS_GOT16:
|
|
||||||
case R_MIPS_CALL16:
|
|
||||||
case R_MIPS_GPREL32:
|
|
||||||
gp_size += 4;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (gp_size > 0x08000)
|
|
||||||
return grub_error (GRUB_ERR_OUT_OF_RANGE, "__gnu_local_gp is too big\n");
|
|
||||||
|
|
||||||
gpptr = gp = grub_malloc (gp_size);
|
|
||||||
if (!gp)
|
|
||||||
return grub_errno;
|
|
||||||
|
|
||||||
for (i = 0, s = (Elf_Shdr *) ((char *) e + e->e_shoff);
|
for (i = 0, s = (Elf_Shdr *) ((char *) e + e->e_shoff);
|
||||||
i < e->e_shnum;
|
i < e->e_shnum;
|
||||||
|
@ -149,6 +165,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
||||||
{
|
{
|
||||||
grub_uint8_t *addr;
|
grub_uint8_t *addr;
|
||||||
Elf_Sym *sym;
|
Elf_Sym *sym;
|
||||||
|
grub_uint32_t sym_value;
|
||||||
|
|
||||||
if (seg->size < rel->r_offset)
|
if (seg->size < rel->r_offset)
|
||||||
return grub_error (GRUB_ERR_BAD_MODULE,
|
return grub_error (GRUB_ERR_BAD_MODULE,
|
||||||
|
@ -157,9 +174,17 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
||||||
addr = (grub_uint8_t *) ((char *) seg->addr + rel->r_offset);
|
addr = (grub_uint8_t *) ((char *) seg->addr + rel->r_offset);
|
||||||
sym = (Elf_Sym *) ((char *) mod->symtab
|
sym = (Elf_Sym *) ((char *) mod->symtab
|
||||||
+ entsize * ELF_R_SYM (rel->r_info));
|
+ entsize * ELF_R_SYM (rel->r_info));
|
||||||
if (sym->st_value == (grub_addr_t) &__gnu_local_gp_dummy)
|
sym_value = sym->st_value;
|
||||||
sym->st_value = (grub_addr_t) gp;
|
if (sym_value == (grub_addr_t) &__gnu_local_gp_dummy)
|
||||||
|
sym_value = (grub_addr_t) gp;
|
||||||
|
else if (sym_value == (grub_addr_t) &_gp_disp_dummy)
|
||||||
|
{
|
||||||
|
sym_value = (grub_addr_t) gp - (grub_addr_t) addr;
|
||||||
|
if (ELF_R_TYPE (rel->r_info) == R_MIPS_LO16)
|
||||||
|
/* ABI mandates +4 even if partner lui doesn't
|
||||||
|
immediately precede addiu. */
|
||||||
|
sym_value += 4;
|
||||||
|
}
|
||||||
switch (ELF_R_TYPE (rel->r_info))
|
switch (ELF_R_TYPE (rel->r_info))
|
||||||
{
|
{
|
||||||
case R_MIPS_HI16:
|
case R_MIPS_HI16:
|
||||||
|
@ -175,7 +200,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
||||||
treated as signed. Hence add 0x8000 to compensate.
|
treated as signed. Hence add 0x8000 to compensate.
|
||||||
*/
|
*/
|
||||||
value = (*(grub_uint16_t *) addr << 16)
|
value = (*(grub_uint16_t *) addr << 16)
|
||||||
+ sym->st_value + 0x8000;
|
+ sym_value + 0x8000;
|
||||||
for (rel2 = rel + 1; rel2 < max; rel2++)
|
for (rel2 = rel + 1; rel2 < max; rel2++)
|
||||||
if (ELF_R_SYM (rel2->r_info)
|
if (ELF_R_SYM (rel2->r_info)
|
||||||
== ELF_R_SYM (rel->r_info)
|
== ELF_R_SYM (rel->r_info)
|
||||||
|
@ -196,13 +221,13 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
||||||
#ifdef GRUB_CPU_WORDS_BIGENDIAN
|
#ifdef GRUB_CPU_WORDS_BIGENDIAN
|
||||||
addr += 2;
|
addr += 2;
|
||||||
#endif
|
#endif
|
||||||
*(grub_uint16_t *) addr += (sym->st_value) & 0xffff;
|
*(grub_uint16_t *) addr += sym_value & 0xffff;
|
||||||
break;
|
break;
|
||||||
case R_MIPS_32:
|
case R_MIPS_32:
|
||||||
*(grub_uint32_t *) addr += sym->st_value;
|
*(grub_uint32_t *) addr += sym_value;
|
||||||
break;
|
break;
|
||||||
case R_MIPS_GPREL32:
|
case R_MIPS_GPREL32:
|
||||||
*(grub_uint32_t *) addr = sym->st_value
|
*(grub_uint32_t *) addr = sym_value
|
||||||
+ *(grub_uint32_t *) addr + gp0 - (grub_uint32_t)gp;
|
+ *(grub_uint32_t *) addr + gp0 - (grub_uint32_t)gp;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -212,7 +237,7 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
||||||
grub_uint32_t raw;
|
grub_uint32_t raw;
|
||||||
raw = (*(grub_uint32_t *) addr) & 0x3ffffff;
|
raw = (*(grub_uint32_t *) addr) & 0x3ffffff;
|
||||||
value = raw << 2;
|
value = raw << 2;
|
||||||
value += sym->st_value;
|
value += sym_value;
|
||||||
raw = (value >> 2) & 0x3ffffff;
|
raw = (value >> 2) & 0x3ffffff;
|
||||||
|
|
||||||
*(grub_uint32_t *) addr =
|
*(grub_uint32_t *) addr =
|
||||||
|
@ -220,12 +245,36 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case R_MIPS_GOT16:
|
case R_MIPS_GOT16:
|
||||||
|
if (ELF_ST_BIND (sym->st_info) == STB_LOCAL)
|
||||||
|
{
|
||||||
|
Elf_Rel *rel2;
|
||||||
|
/* Handle partner lo16 relocation. Lower part is
|
||||||
|
treated as signed. Hence add 0x8000 to compensate.
|
||||||
|
*/
|
||||||
|
sym_value += (*(grub_uint16_t *) addr << 16)
|
||||||
|
+ 0x8000;
|
||||||
|
for (rel2 = rel + 1; rel2 < max; rel2++)
|
||||||
|
if (ELF_R_SYM (rel2->r_info)
|
||||||
|
== ELF_R_SYM (rel->r_info)
|
||||||
|
&& ELF_R_TYPE (rel2->r_info) == R_MIPS_LO16)
|
||||||
|
{
|
||||||
|
sym_value += *(grub_int16_t *)
|
||||||
|
((char *) seg->addr + rel2->r_offset
|
||||||
|
#ifdef GRUB_CPU_WORDS_BIGENDIAN
|
||||||
|
+ 2
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
sym_value &= 0xffff0000;
|
||||||
|
*(grub_uint16_t *) addr = 0;
|
||||||
|
}
|
||||||
case R_MIPS_CALL16:
|
case R_MIPS_CALL16:
|
||||||
/* FIXME: reuse*/
|
/* FIXME: reuse*/
|
||||||
#ifdef GRUB_CPU_WORDS_BIGENDIAN
|
#ifdef GRUB_CPU_WORDS_BIGENDIAN
|
||||||
addr += 2;
|
addr += 2;
|
||||||
#endif
|
#endif
|
||||||
*gpptr = sym->st_value + *(grub_uint16_t *) addr;
|
*gpptr = sym_value + *(grub_uint16_t *) addr;
|
||||||
*(grub_uint16_t *) addr
|
*(grub_uint16_t *) addr
|
||||||
= sizeof (grub_uint32_t) * (gpptr - gp);
|
= sizeof (grub_uint32_t) * (gpptr - gp);
|
||||||
gpptr++;
|
gpptr++;
|
||||||
|
@ -234,7 +283,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
grub_free (gp);
|
|
||||||
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
N_("relocation 0x%x is not implemented yet"),
|
N_("relocation 0x%x is not implemented yet"),
|
||||||
ELF_R_TYPE (rel->r_info));
|
ELF_R_TYPE (rel->r_info));
|
||||||
|
@ -252,5 +300,6 @@ void
|
||||||
grub_arch_dl_init_linker (void)
|
grub_arch_dl_init_linker (void)
|
||||||
{
|
{
|
||||||
grub_dl_register_symbol ("__gnu_local_gp", &__gnu_local_gp_dummy, 0, 0);
|
grub_dl_register_symbol ("__gnu_local_gp", &__gnu_local_gp_dummy, 0, 0);
|
||||||
|
grub_dl_register_symbol ("_gp_disp", &_gp_disp_dummy, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -116,10 +116,10 @@ bsscont:
|
||||||
bne $t3, $0, bsscont
|
bne $t3, $0, bsscont
|
||||||
nop
|
nop
|
||||||
|
|
||||||
lui $t1, %hi(grub_main)
|
lui $t9, %hi(grub_main)
|
||||||
addiu $t1, %lo(grub_main)
|
addiu $t9, %lo(grub_main)
|
||||||
|
|
||||||
lui $sp, %hi(GRUB_MACHINE_MEMORY_STACK_HIGH)
|
lui $sp, %hi(GRUB_MACHINE_MEMORY_STACK_HIGH)
|
||||||
jr $t1
|
jr $t9
|
||||||
addiu $sp, $sp, %lo(GRUB_MACHINE_MEMORY_STACK_HIGH)
|
addiu $sp, $sp, %lo(GRUB_MACHINE_MEMORY_STACK_HIGH)
|
||||||
|
|
||||||
|
|
|
@ -1220,6 +1220,15 @@ grub_abort (void)
|
||||||
grub_exit ();
|
grub_exit ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined (__clang__) && !defined (GRUB_UTIL)
|
||||||
|
/* clang emits references to abort(). */
|
||||||
|
void __attribute__ ((noreturn))
|
||||||
|
abort (void)
|
||||||
|
{
|
||||||
|
grub_abort ();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void
|
void
|
||||||
grub_fatal (const char *fmt, ...)
|
grub_fatal (const char *fmt, ...)
|
||||||
{
|
{
|
||||||
|
|
|
@ -38,9 +38,26 @@ grub_arch_dl_check_header (void *ehdr)
|
||||||
return GRUB_ERR_NONE;
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* For low-endian reverse lis and addr_high as well as ori and addr_low. */
|
||||||
|
struct trampoline
|
||||||
|
{
|
||||||
|
grub_uint32_t lis;
|
||||||
|
grub_uint32_t ori;
|
||||||
|
grub_uint32_t mtctr;
|
||||||
|
grub_uint32_t bctr;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct trampoline trampoline_template =
|
||||||
|
{
|
||||||
|
0x3d800000,
|
||||||
|
0x618c0000,
|
||||||
|
0x7d8903a6,
|
||||||
|
0x4e800420,
|
||||||
|
};
|
||||||
|
|
||||||
#pragma GCC diagnostic ignored "-Wcast-align"
|
#pragma GCC diagnostic ignored "-Wcast-align"
|
||||||
|
|
||||||
void
|
grub_err_t
|
||||||
grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
||||||
grub_size_t *got)
|
grub_size_t *got)
|
||||||
{
|
{
|
||||||
|
@ -59,7 +76,7 @@ grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (i == e->e_shnum)
|
if (i == e->e_shnum)
|
||||||
return;
|
return GRUB_ERR_NONE;
|
||||||
|
|
||||||
for (i = 0, s = (const Elf_Shdr *) ((const char *) e + e->e_shoff);
|
for (i = 0, s = (const Elf_Shdr *) ((const char *) e + e->e_shoff);
|
||||||
i < e->e_shnum;
|
i < e->e_shnum;
|
||||||
|
@ -77,26 +94,11 @@ grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
*tramp *= sizeof (struct trampoline);
|
||||||
|
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* For low-endian reverse lis and addr_high as well as ori and addr_low. */
|
|
||||||
struct trampoline
|
|
||||||
{
|
|
||||||
grub_uint32_t lis;
|
|
||||||
grub_uint32_t ori;
|
|
||||||
grub_uint32_t mtctr;
|
|
||||||
grub_uint32_t bctr;
|
|
||||||
};
|
|
||||||
|
|
||||||
static const struct trampoline trampoline_template =
|
|
||||||
{
|
|
||||||
0x3d800000,
|
|
||||||
0x618c0000,
|
|
||||||
0x7d8903a6,
|
|
||||||
0x4e800420,
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Relocate symbols. */
|
/* Relocate symbols. */
|
||||||
grub_err_t
|
grub_err_t
|
||||||
grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
||||||
|
@ -167,8 +169,6 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
||||||
|
|
||||||
if (delta << 6 >> 6 != delta)
|
if (delta << 6 >> 6 != delta)
|
||||||
{
|
{
|
||||||
COMPILE_TIME_ASSERT (sizeof (struct trampoline)
|
|
||||||
== GRUB_ARCH_DL_TRAMP_SIZE);
|
|
||||||
grub_memcpy (tptr, &trampoline_template,
|
grub_memcpy (tptr, &trampoline_template,
|
||||||
sizeof (*tptr));
|
sizeof (*tptr));
|
||||||
delta = (grub_uint8_t *) tptr - (grub_uint8_t *) addr;
|
delta = (grub_uint8_t *) tptr - (grub_uint8_t *) addr;
|
||||||
|
|
|
@ -100,14 +100,32 @@ grub_arch_dl_relocate_symbols (grub_dl_t mod, void *ehdr)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case R_X86_64_PC32:
|
case R_X86_64_PC32:
|
||||||
*addr32 += rel->r_addend + sym->st_value -
|
{
|
||||||
(Elf64_Xword) seg->addr - rel->r_offset;
|
grub_int64_t value;
|
||||||
|
value = ((grub_int32_t) *addr32) + rel->r_addend + sym->st_value -
|
||||||
|
(Elf64_Xword) seg->addr - rel->r_offset;
|
||||||
|
if (value != (grub_int32_t) value)
|
||||||
|
return grub_error (GRUB_ERR_BAD_MODULE, "relocation out of range");
|
||||||
|
*addr32 = value;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case R_X86_64_32:
|
case R_X86_64_32:
|
||||||
|
{
|
||||||
|
grub_uint64_t value = *addr32 + rel->r_addend + sym->st_value;
|
||||||
|
if (value != (grub_uint32_t) value)
|
||||||
|
return grub_error (GRUB_ERR_BAD_MODULE, "relocation out of range");
|
||||||
|
*addr32 = value;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case R_X86_64_32S:
|
case R_X86_64_32S:
|
||||||
*addr32 += rel->r_addend + sym->st_value;
|
{
|
||||||
break;
|
grub_int64_t value = ((grub_int32_t) *addr32) + rel->r_addend + sym->st_value;
|
||||||
|
if (value != (grub_int32_t) value)
|
||||||
|
return grub_error (GRUB_ERR_BAD_MODULE, "relocation out of range");
|
||||||
|
*addr32 = value;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
|
|
|
@ -36,94 +36,94 @@
|
||||||
.text
|
.text
|
||||||
|
|
||||||
FUNCTION(efi_wrap_0)
|
FUNCTION(efi_wrap_0)
|
||||||
subq $48, %rsp
|
subq $40, %rsp
|
||||||
call *%rdi
|
call *%rdi
|
||||||
addq $48, %rsp
|
addq $40, %rsp
|
||||||
ret
|
ret
|
||||||
|
|
||||||
FUNCTION(efi_wrap_1)
|
FUNCTION(efi_wrap_1)
|
||||||
subq $48, %rsp
|
subq $40, %rsp
|
||||||
mov %rsi, %rcx
|
mov %rsi, %rcx
|
||||||
call *%rdi
|
call *%rdi
|
||||||
addq $48, %rsp
|
addq $40, %rsp
|
||||||
ret
|
ret
|
||||||
|
|
||||||
FUNCTION(efi_wrap_2)
|
FUNCTION(efi_wrap_2)
|
||||||
subq $48, %rsp
|
subq $40, %rsp
|
||||||
mov %rsi, %rcx
|
mov %rsi, %rcx
|
||||||
call *%rdi
|
call *%rdi
|
||||||
addq $48, %rsp
|
addq $40, %rsp
|
||||||
ret
|
ret
|
||||||
|
|
||||||
FUNCTION(efi_wrap_3)
|
FUNCTION(efi_wrap_3)
|
||||||
subq $48, %rsp
|
subq $40, %rsp
|
||||||
mov %rcx, %r8
|
mov %rcx, %r8
|
||||||
mov %rsi, %rcx
|
mov %rsi, %rcx
|
||||||
call *%rdi
|
call *%rdi
|
||||||
addq $48, %rsp
|
addq $40, %rsp
|
||||||
ret
|
ret
|
||||||
|
|
||||||
FUNCTION(efi_wrap_4)
|
FUNCTION(efi_wrap_4)
|
||||||
subq $48, %rsp
|
subq $40, %rsp
|
||||||
mov %r8, %r9
|
mov %r8, %r9
|
||||||
mov %rcx, %r8
|
mov %rcx, %r8
|
||||||
mov %rsi, %rcx
|
mov %rsi, %rcx
|
||||||
call *%rdi
|
call *%rdi
|
||||||
addq $48, %rsp
|
addq $40, %rsp
|
||||||
ret
|
ret
|
||||||
|
|
||||||
FUNCTION(efi_wrap_5)
|
FUNCTION(efi_wrap_5)
|
||||||
subq $48, %rsp
|
subq $40, %rsp
|
||||||
mov %r9, 32(%rsp)
|
mov %r9, 32(%rsp)
|
||||||
mov %r8, %r9
|
mov %r8, %r9
|
||||||
mov %rcx, %r8
|
mov %rcx, %r8
|
||||||
mov %rsi, %rcx
|
mov %rsi, %rcx
|
||||||
call *%rdi
|
call *%rdi
|
||||||
addq $48, %rsp
|
addq $40, %rsp
|
||||||
ret
|
ret
|
||||||
|
|
||||||
FUNCTION(efi_wrap_6)
|
FUNCTION(efi_wrap_6)
|
||||||
subq $64, %rsp
|
subq $56, %rsp
|
||||||
mov 64+8(%rsp), %rax
|
mov 56+8(%rsp), %rax
|
||||||
mov %rax, 40(%rsp)
|
mov %rax, 40(%rsp)
|
||||||
mov %r9, 32(%rsp)
|
mov %r9, 32(%rsp)
|
||||||
mov %r8, %r9
|
mov %r8, %r9
|
||||||
mov %rcx, %r8
|
mov %rcx, %r8
|
||||||
mov %rsi, %rcx
|
mov %rsi, %rcx
|
||||||
call *%rdi
|
call *%rdi
|
||||||
addq $64, %rsp
|
addq $56, %rsp
|
||||||
ret
|
ret
|
||||||
|
|
||||||
FUNCTION(efi_wrap_7)
|
FUNCTION(efi_wrap_7)
|
||||||
subq $96, %rsp
|
subq $88, %rsp
|
||||||
mov 96+16(%rsp), %rax
|
mov 88+16(%rsp), %rax
|
||||||
mov %rax, 48(%rsp)
|
mov %rax, 48(%rsp)
|
||||||
mov 96+8(%rsp), %rax
|
mov 88+8(%rsp), %rax
|
||||||
mov %rax, 40(%rsp)
|
mov %rax, 40(%rsp)
|
||||||
mov %r9, 32(%rsp)
|
mov %r9, 32(%rsp)
|
||||||
mov %r8, %r9
|
mov %r8, %r9
|
||||||
mov %rcx, %r8
|
mov %rcx, %r8
|
||||||
mov %rsi, %rcx
|
mov %rsi, %rcx
|
||||||
call *%rdi
|
call *%rdi
|
||||||
addq $96, %rsp
|
addq $88, %rsp
|
||||||
ret
|
ret
|
||||||
|
|
||||||
FUNCTION(efi_wrap_10)
|
FUNCTION(efi_wrap_10)
|
||||||
subq $96, %rsp
|
subq $88, %rsp
|
||||||
mov 96+40(%rsp), %rax
|
mov 88+40(%rsp), %rax
|
||||||
mov %rax, 72(%rsp)
|
mov %rax, 72(%rsp)
|
||||||
mov 96+32(%rsp), %rax
|
mov 88+32(%rsp), %rax
|
||||||
mov %rax, 64(%rsp)
|
mov %rax, 64(%rsp)
|
||||||
mov 96+24(%rsp), %rax
|
mov 88+24(%rsp), %rax
|
||||||
mov %rax, 56(%rsp)
|
mov %rax, 56(%rsp)
|
||||||
mov 96+16(%rsp), %rax
|
mov 88+16(%rsp), %rax
|
||||||
mov %rax, 48(%rsp)
|
mov %rax, 48(%rsp)
|
||||||
mov 96+8(%rsp), %rax
|
mov 88+8(%rsp), %rax
|
||||||
mov %rax, 40(%rsp)
|
mov %rax, 40(%rsp)
|
||||||
mov %r9, 32(%rsp)
|
mov %r9, 32(%rsp)
|
||||||
mov %r8, %r9
|
mov %r8, %r9
|
||||||
mov %rcx, %r8
|
mov %rcx, %r8
|
||||||
mov %rsi, %rcx
|
mov %rsi, %rcx
|
||||||
call *%rdi
|
call *%rdi
|
||||||
addq $96, %rsp
|
addq $88, %rsp
|
||||||
ret
|
ret
|
||||||
|
|
|
@ -30,6 +30,6 @@ _start:
|
||||||
movq %rcx, EXT_C(grub_efi_image_handle)(%rip)
|
movq %rcx, EXT_C(grub_efi_image_handle)(%rip)
|
||||||
movq %rdx, EXT_C(grub_efi_system_table)(%rip)
|
movq %rdx, EXT_C(grub_efi_system_table)(%rip)
|
||||||
|
|
||||||
|
andq $~0xf, %rsp
|
||||||
call EXT_C(grub_main)
|
call EXT_C(grub_main)
|
||||||
ret
|
/* Doesn't return. */
|
||||||
|
|
||||||
|
|
|
@ -341,6 +341,14 @@ page2offset (grub_uint64_t page)
|
||||||
return page << 12;
|
return page << 12;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined (__x86_64__) && defined (__code_model_large__)
|
||||||
|
#define MAX_TOTAL_PAGES (1LL << (64 - 12))
|
||||||
|
#elif defined (__x86_64__)
|
||||||
|
#define MAX_TOTAL_PAGES (1LL << (31 - 12))
|
||||||
|
#else
|
||||||
|
#define MAX_TOTAL_PAGES (1LL << (32 - 12))
|
||||||
|
#endif
|
||||||
|
|
||||||
static void
|
static void
|
||||||
map_all_pages (void)
|
map_all_pages (void)
|
||||||
{
|
{
|
||||||
|
@ -355,6 +363,9 @@ map_all_pages (void)
|
||||||
grub_size_t n_unusable_pages = 0;
|
grub_size_t n_unusable_pages = 0;
|
||||||
struct mmu_update m2p_updates[2 * MAX_N_UNUSABLE_PAGES];
|
struct mmu_update m2p_updates[2 * MAX_N_UNUSABLE_PAGES];
|
||||||
|
|
||||||
|
if (total_pages > MAX_TOTAL_PAGES - 4)
|
||||||
|
total_pages = MAX_TOTAL_PAGES - 4;
|
||||||
|
|
||||||
grub_memset (&gnttab_setver, 0, sizeof (gnttab_setver));
|
grub_memset (&gnttab_setver, 0, sizeof (gnttab_setver));
|
||||||
|
|
||||||
gnttab_setver.version = 2;
|
gnttab_setver.version = 2;
|
||||||
|
|
|
@ -125,7 +125,10 @@ void
|
||||||
grub_crypto_hash (const gcry_md_spec_t *hash, void *out, const void *in,
|
grub_crypto_hash (const gcry_md_spec_t *hash, void *out, const void *in,
|
||||||
grub_size_t inlen)
|
grub_size_t inlen)
|
||||||
{
|
{
|
||||||
grub_uint8_t ctx[hash->contextsize];
|
GRUB_PROPERLY_ALIGNED_ARRAY (ctx, GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE);
|
||||||
|
|
||||||
|
if (hash->contextsize > sizeof (ctx))
|
||||||
|
grub_fatal ("Too large md context");
|
||||||
hash->init (&ctx);
|
hash->init (&ctx);
|
||||||
hash->write (&ctx, in, inlen);
|
hash->write (&ctx, in, inlen);
|
||||||
hash->final (&ctx);
|
hash->final (&ctx);
|
||||||
|
|
|
@ -749,7 +749,7 @@ extern USItype __udiv_qrnnd ();
|
||||||
************** MIPS *****************
|
************** MIPS *****************
|
||||||
***************************************/
|
***************************************/
|
||||||
#if defined (__mips__) && W_TYPE_SIZE == 32
|
#if defined (__mips__) && W_TYPE_SIZE == 32
|
||||||
#if (__GNUC__ >= 5) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
|
#if defined (__clang__) || (__GNUC__ >= 5) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
|
||||||
#define umul_ppmm(w1, w0, u, v) \
|
#define umul_ppmm(w1, w0, u, v) \
|
||||||
do { \
|
do { \
|
||||||
UDItype _r; \
|
UDItype _r; \
|
||||||
|
|
|
@ -69,16 +69,23 @@ typedef grub_uint8_t gf_single_t;
|
||||||
#define GF_POLYNOMIAL 0x1d
|
#define GF_POLYNOMIAL 0x1d
|
||||||
#define GF_INVERT2 0x8e
|
#define GF_INVERT2 0x8e
|
||||||
#if defined (STANDALONE) && !defined (TEST)
|
#if defined (STANDALONE) && !defined (TEST)
|
||||||
static gf_single_t * const gf_powx __attribute__ ((section(".text"))) = (void *) 0x100000;
|
|
||||||
static gf_single_t * const gf_powx_inv __attribute__ ((section(".text"))) = (void *) 0x100200;
|
#ifdef __APPLE__
|
||||||
static int *const chosenstat __attribute__ ((section(".text"))) = (void *) 0x100300;
|
#define ATTRIBUTE_TEXT __attribute__ ((section("_text,_text")))
|
||||||
static gf_single_t *const sigma __attribute__ ((section(".text"))) = (void *) 0x100700;
|
#else
|
||||||
static gf_single_t *const errpot __attribute__ ((section(".text"))) = (void *) 0x100800;
|
#define ATTRIBUTE_TEXT __attribute__ ((section(".text")))
|
||||||
static int *const errpos __attribute__ ((section(".text"))) = (void *) 0x100900;
|
#endif
|
||||||
static gf_single_t *const sy __attribute__ ((section(".text"))) = (void *) 0x100d00;
|
|
||||||
static gf_single_t *const mstat __attribute__ ((section(".text"))) = (void *) 0x100e00;
|
static gf_single_t * const gf_powx ATTRIBUTE_TEXT = (void *) 0x100000;
|
||||||
static gf_single_t *const errvals __attribute__ ((section(".text"))) = (void *) 0x100f00;
|
static gf_single_t * const gf_powx_inv ATTRIBUTE_TEXT = (void *) 0x100200;
|
||||||
static gf_single_t *const eqstat __attribute__ ((section(".text"))) = (void *) 0x101000;
|
static int *const chosenstat ATTRIBUTE_TEXT = (void *) 0x100300;
|
||||||
|
static gf_single_t *const sigma ATTRIBUTE_TEXT = (void *) 0x100700;
|
||||||
|
static gf_single_t *const errpot ATTRIBUTE_TEXT = (void *) 0x100800;
|
||||||
|
static int *const errpos ATTRIBUTE_TEXT = (void *) 0x100900;
|
||||||
|
static gf_single_t *const sy ATTRIBUTE_TEXT = (void *) 0x100d00;
|
||||||
|
static gf_single_t *const mstat ATTRIBUTE_TEXT = (void *) 0x100e00;
|
||||||
|
static gf_single_t *const errvals ATTRIBUTE_TEXT = (void *) 0x100f00;
|
||||||
|
static gf_single_t *const eqstat ATTRIBUTE_TEXT = (void *) 0x101000;
|
||||||
/* Next available address: (void *) 0x112000. */
|
/* Next available address: (void *) 0x112000. */
|
||||||
#else
|
#else
|
||||||
|
|
||||||
|
|
|
@ -184,8 +184,8 @@ grub_mmap_register (grub_uint64_t start, grub_uint64_t size, int type)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
b = grub_efi_system_table->boot_services;
|
b = grub_efi_system_table->boot_services;
|
||||||
address = start & (~0x3ffULL);
|
address = start & (~0xfffULL);
|
||||||
pages = (end - address + 0x3ff) >> 12;
|
pages = (end - address + 0xfff) >> 12;
|
||||||
status = efi_call_2 (b->free_pages, address, pages);
|
status = efi_call_2 (b->free_pages, address, pages);
|
||||||
if (status != GRUB_EFI_SUCCESS && status != GRUB_EFI_NOT_FOUND)
|
if (status != GRUB_EFI_SUCCESS && status != GRUB_EFI_NOT_FOUND)
|
||||||
{
|
{
|
||||||
|
@ -263,7 +263,7 @@ grub_mmap_malign_and_register (grub_uint64_t align __attribute__ ((unused)),
|
||||||
atype = GRUB_EFI_ALLOCATE_ANY_PAGES;
|
atype = GRUB_EFI_ALLOCATE_ANY_PAGES;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
pages = (size + 0x3ff) >> 12;
|
pages = (size + 0xfff) >> 12;
|
||||||
status = efi_call_4 (b->allocate_pages, atype,
|
status = efi_call_4 (b->allocate_pages, atype,
|
||||||
make_efi_memtype (type), pages, &address);
|
make_efi_memtype (type), pages, &address);
|
||||||
if (status != GRUB_EFI_SUCCESS)
|
if (status != GRUB_EFI_SUCCESS)
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
|
|
||||||
static void
|
|
||||||
grub_file_progress_hook_real (grub_disk_addr_t sector,
|
|
||||||
unsigned offset, unsigned length,
|
|
||||||
void *data)
|
|
||||||
{
|
|
||||||
grub_file_t file = data;
|
|
||||||
file->progress_offset += length;
|
|
||||||
show_progress (file->progress_offset, file->size);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
GRUB_MOD_INIT (progress)
|
|
||||||
{
|
|
||||||
grub_file_progress_hook = grub_file_progress_hook_real;
|
|
||||||
}
|
|
||||||
|
|
||||||
GRUB_MOD_FINI (progress)
|
|
||||||
{
|
|
||||||
grub_file_progress_hook = 0;
|
|
||||||
}
|
|
|
@ -31,11 +31,11 @@
|
||||||
static char *
|
static char *
|
||||||
get_ofpathname (const char *dev)
|
get_ofpathname (const char *dev)
|
||||||
{
|
{
|
||||||
char *ret = xmalloc (2 * PATH_MAX);
|
size_t alloced = 4096;
|
||||||
char *end = ret + 2 * PATH_MAX - 1;
|
char *ret = xmalloc (alloced);
|
||||||
|
size_t offset = 0;
|
||||||
int fd;
|
int fd;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
char *ptr = ret;
|
|
||||||
|
|
||||||
pid = grub_util_exec_pipe ((const char * []){ "ofpathname", dev, NULL }, &fd);
|
pid = grub_util_exec_pipe ((const char * []){ "ofpathname", dev, NULL }, &fd);
|
||||||
if (!pid)
|
if (!pid)
|
||||||
|
@ -45,13 +45,29 @@ get_ofpathname (const char *dev)
|
||||||
if (!fp)
|
if (!fp)
|
||||||
goto fail;
|
goto fail;
|
||||||
|
|
||||||
while (!feof (fp) && ptr < end)
|
while (!feof (fp))
|
||||||
{
|
{
|
||||||
size_t r;
|
size_t r;
|
||||||
r = fread (ptr, 1, end - ptr, fp);
|
if (alloced == offset)
|
||||||
ptr += r;
|
{
|
||||||
|
alloced *= 2;
|
||||||
|
ret = xrealloc (ret, alloced);
|
||||||
|
}
|
||||||
|
r = fread (ret + offset, 1, alloced - offset, fp);
|
||||||
|
offset += r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (offset > 0 && ret[offset - 1] == '\n')
|
||||||
|
offset--;
|
||||||
|
if (offset > 0 && ret[offset - 1] == '\r')
|
||||||
|
offset--;
|
||||||
|
if (alloced == offset)
|
||||||
|
{
|
||||||
|
alloced++;
|
||||||
|
ret = xrealloc (ret, alloced);
|
||||||
|
}
|
||||||
|
ret[offset] = '\0';
|
||||||
|
|
||||||
fclose (fp);
|
fclose (fp);
|
||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -114,8 +114,8 @@ check_is_serial (void)
|
||||||
isn't critical.
|
isn't critical.
|
||||||
*/
|
*/
|
||||||
if (GRUB_ARC_SYSTEM_PARAMETER_BLOCK->firmware_vector_length
|
if (GRUB_ARC_SYSTEM_PARAMETER_BLOCK->firmware_vector_length
|
||||||
>= ((char *) (&GRUB_ARC_FIRMWARE_VECTOR->getenvironmentvariable + 1)
|
>= (unsigned) ((char *) (&GRUB_ARC_FIRMWARE_VECTOR->getenvironmentvariable + 1)
|
||||||
- (char *) GRUB_ARC_FIRMWARE_VECTOR)
|
- (char *) GRUB_ARC_FIRMWARE_VECTOR)
|
||||||
&& GRUB_ARC_FIRMWARE_VECTOR->getenvironmentvariable)
|
&& GRUB_ARC_FIRMWARE_VECTOR->getenvironmentvariable)
|
||||||
consout = GRUB_ARC_FIRMWARE_VECTOR->getenvironmentvariable ("ConsoleOut");
|
consout = GRUB_ARC_FIRMWARE_VECTOR->getenvironmentvariable ("ConsoleOut");
|
||||||
if (!consout)
|
if (!consout)
|
||||||
|
@ -136,8 +136,8 @@ set_console_dimensions (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (GRUB_ARC_SYSTEM_PARAMETER_BLOCK->firmware_vector_length
|
if (GRUB_ARC_SYSTEM_PARAMETER_BLOCK->firmware_vector_length
|
||||||
>= ((char *) (&GRUB_ARC_FIRMWARE_VECTOR->getdisplaystatus + 1)
|
>= (unsigned) ((char *) (&GRUB_ARC_FIRMWARE_VECTOR->getdisplaystatus + 1)
|
||||||
- (char *) GRUB_ARC_FIRMWARE_VECTOR)
|
- (char *) GRUB_ARC_FIRMWARE_VECTOR)
|
||||||
&& GRUB_ARC_FIRMWARE_VECTOR->getdisplaystatus)
|
&& GRUB_ARC_FIRMWARE_VECTOR->getdisplaystatus)
|
||||||
info = GRUB_ARC_FIRMWARE_VECTOR->getdisplaystatus (GRUB_ARC_STDOUT);
|
info = GRUB_ARC_FIRMWARE_VECTOR->getdisplaystatus (GRUB_ARC_STDOUT);
|
||||||
if (info)
|
if (info)
|
||||||
|
|
|
@ -88,6 +88,7 @@ enum gcry_cipher_modes
|
||||||
/* Don't rely on this. Check! */
|
/* Don't rely on this. Check! */
|
||||||
#define GRUB_CRYPTO_MAX_MDLEN 64
|
#define GRUB_CRYPTO_MAX_MDLEN 64
|
||||||
#define GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE 16
|
#define GRUB_CRYPTO_MAX_CIPHER_BLOCKSIZE 16
|
||||||
|
#define GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE 256
|
||||||
|
|
||||||
/* Type for the cipher_setkey function. */
|
/* Type for the cipher_setkey function. */
|
||||||
typedef gcry_err_code_t (*gcry_cipher_setkey_t) (void *c,
|
typedef gcry_err_code_t (*gcry_cipher_setkey_t) (void *c,
|
||||||
|
|
|
@ -179,7 +179,7 @@ struct grub_dl
|
||||||
Elf_Sym *symtab;
|
Elf_Sym *symtab;
|
||||||
void (*init) (struct grub_dl *mod);
|
void (*init) (struct grub_dl *mod);
|
||||||
void (*fini) (void);
|
void (*fini) (void);
|
||||||
#if defined (__ia64__) || defined (__powerpc__)
|
#if defined (__ia64__) || defined (__powerpc__) || defined (__mips__)
|
||||||
void *got;
|
void *got;
|
||||||
void *tramp;
|
void *tramp;
|
||||||
#endif
|
#endif
|
||||||
|
@ -243,23 +243,21 @@ void grub_arch_dl_init_linker (void);
|
||||||
#define GRUB_IA64_DL_TRAMP_SIZE 48
|
#define GRUB_IA64_DL_TRAMP_SIZE 48
|
||||||
#define GRUB_IA64_DL_GOT_ALIGN 16
|
#define GRUB_IA64_DL_GOT_ALIGN 16
|
||||||
|
|
||||||
void
|
grub_err_t
|
||||||
grub_ia64_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
grub_ia64_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
||||||
grub_size_t *got);
|
grub_size_t *got);
|
||||||
|
|
||||||
#if defined (__ia64__)
|
#if defined (__ia64__)
|
||||||
#define GRUB_ARCH_DL_TRAMP_ALIGN GRUB_IA64_DL_TRAMP_ALIGN
|
#define GRUB_ARCH_DL_TRAMP_ALIGN GRUB_IA64_DL_TRAMP_ALIGN
|
||||||
#define GRUB_ARCH_DL_GOT_ALIGN GRUB_IA64_DL_GOT_ALIGN
|
#define GRUB_ARCH_DL_GOT_ALIGN GRUB_IA64_DL_GOT_ALIGN
|
||||||
#define GRUB_ARCH_DL_TRAMP_SIZE GRUB_IA64_DL_TRAMP_SIZE
|
|
||||||
#define grub_arch_dl_get_tramp_got_size grub_ia64_dl_get_tramp_got_size
|
#define grub_arch_dl_get_tramp_got_size grub_ia64_dl_get_tramp_got_size
|
||||||
#else
|
#else
|
||||||
void
|
grub_err_t
|
||||||
grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
grub_arch_dl_get_tramp_got_size (const void *ehdr, grub_size_t *tramp,
|
||||||
grub_size_t *got);
|
grub_size_t *got);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __powerpc__
|
#if defined (__powerpc__) || defined (__mips__)
|
||||||
#define GRUB_ARCH_DL_TRAMP_SIZE 16
|
|
||||||
#define GRUB_ARCH_DL_TRAMP_ALIGN 4
|
#define GRUB_ARCH_DL_TRAMP_ALIGN 4
|
||||||
#define GRUB_ARCH_DL_GOT_ALIGN 4
|
#define GRUB_ARCH_DL_GOT_ALIGN 4
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -28,14 +28,8 @@
|
||||||
#include <grub/memory.h>
|
#include <grub/memory.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define GRUB_MEMORY_MACHINE_SCRATCH_ADDR 0x68000
|
#include <grub/i386/memory.h>
|
||||||
#define GRUB_MEMORY_MACHINE_SCRATCH_SEG (GRUB_MEMORY_MACHINE_SCRATCH_ADDR >> 4)
|
#include <grub/i386/memory_raw.h>
|
||||||
#define GRUB_MEMORY_MACHINE_SCRATCH_SIZE 0x10000
|
|
||||||
|
|
||||||
#define GRUB_MEMORY_MACHINE_LOWER_USABLE 0x9fc00 /* 640 kiB - 1 kiB */
|
|
||||||
|
|
||||||
#define GRUB_MEMORY_MACHINE_UPPER_START 0x100000 /* 1 MiB */
|
|
||||||
#define GRUB_MEMORY_MACHINE_LOWER_SIZE GRUB_MEMORY_MACHINE_UPPER_START
|
|
||||||
|
|
||||||
#ifndef ASM_FILE
|
#ifndef ASM_FILE
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,9 @@
|
||||||
#define GRUB_MEMORY_CPU_AMD64_MSR 0xc0000080
|
#define GRUB_MEMORY_CPU_AMD64_MSR 0xc0000080
|
||||||
#define GRUB_MEMORY_CPU_AMD64_MSR_ON 0x00000100
|
#define GRUB_MEMORY_CPU_AMD64_MSR_ON 0x00000100
|
||||||
|
|
||||||
|
#define GRUB_MEMORY_MACHINE_UPPER_START 0x100000 /* 1 MiB */
|
||||||
|
#define GRUB_MEMORY_MACHINE_LOWER_SIZE GRUB_MEMORY_MACHINE_UPPER_START
|
||||||
|
|
||||||
#ifndef ASM_FILE
|
#ifndef ASM_FILE
|
||||||
|
|
||||||
#define GRUB_MMAP_MALLOC_LOW 1
|
#define GRUB_MMAP_MALLOC_LOW 1
|
||||||
|
|
58
include/grub/i386/memory_raw.h
Normal file
58
include/grub/i386/memory_raw.h
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
/* memory_raw.h - describe the memory map on qemu/coreboot/multiboot/pc */
|
||||||
|
/*
|
||||||
|
* GRUB -- GRand Unified Bootloader
|
||||||
|
* Copyright (C) 2002,2007,2008,2009,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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef GRUB_MEMORY_CPU_RAW_HEADER
|
||||||
|
#define GRUB_MEMORY_CPU_RAW_HEADER 1
|
||||||
|
|
||||||
|
/* The scratch buffer used in real mode code. */
|
||||||
|
#define GRUB_MEMORY_MACHINE_SCRATCH_ADDR 0x68000
|
||||||
|
#define GRUB_MEMORY_MACHINE_SCRATCH_SEG (GRUB_MEMORY_MACHINE_SCRATCH_ADDR >> 4)
|
||||||
|
#define GRUB_MEMORY_MACHINE_SCRATCH_SIZE 0x9000
|
||||||
|
|
||||||
|
/* The real mode stack. */
|
||||||
|
#define GRUB_MEMORY_MACHINE_REAL_STACK (0x2000 - 0x10)
|
||||||
|
|
||||||
|
/* The size of the protect mode stack. */
|
||||||
|
#define GRUB_MEMORY_MACHINE_PROT_STACK_SIZE 0xf000
|
||||||
|
|
||||||
|
/* The protected mode stack. */
|
||||||
|
#define GRUB_MEMORY_MACHINE_PROT_STACK \
|
||||||
|
(GRUB_MEMORY_MACHINE_SCRATCH_ADDR + GRUB_MEMORY_MACHINE_SCRATCH_SIZE \
|
||||||
|
+ GRUB_MEMORY_MACHINE_PROT_STACK_SIZE - 0x10)
|
||||||
|
|
||||||
|
/* The memory area where GRUB uses its own purpose. This part is not added
|
||||||
|
into free memory for dynamic allocations. */
|
||||||
|
#define GRUB_MEMORY_MACHINE_RESERVED_START \
|
||||||
|
GRUB_MEMORY_MACHINE_SCRATCH_ADDR
|
||||||
|
#define GRUB_MEMORY_MACHINE_RESERVED_END \
|
||||||
|
(GRUB_MEMORY_MACHINE_PROT_STACK + 0x10)
|
||||||
|
|
||||||
|
/* The code segment of the protected mode. */
|
||||||
|
#define GRUB_MEMORY_MACHINE_PROT_MODE_CSEG 0x8
|
||||||
|
|
||||||
|
/* The data segment of the protected mode. */
|
||||||
|
#define GRUB_MEMORY_MACHINE_PROT_MODE_DSEG 0x10
|
||||||
|
|
||||||
|
/* The code segment of the pseudo real mode. */
|
||||||
|
#define GRUB_MEMORY_MACHINE_PSEUDO_REAL_CSEG 0x18
|
||||||
|
|
||||||
|
/* The data segment of the pseudo real mode. */
|
||||||
|
#define GRUB_MEMORY_MACHINE_PSEUDO_REAL_DSEG 0x20
|
||||||
|
|
||||||
|
#endif
|
|
@ -28,32 +28,10 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <grub/i386/memory.h>
|
#include <grub/i386/memory.h>
|
||||||
|
#include <grub/i386/memory_raw.h>
|
||||||
|
|
||||||
#include <grub/offsets.h>
|
#include <grub/offsets.h>
|
||||||
|
|
||||||
/* The scratch buffer used in real mode code. */
|
|
||||||
#define GRUB_MEMORY_MACHINE_SCRATCH_ADDR 0x68000
|
|
||||||
#define GRUB_MEMORY_MACHINE_SCRATCH_SEG (GRUB_MEMORY_MACHINE_SCRATCH_ADDR >> 4)
|
|
||||||
#define GRUB_MEMORY_MACHINE_SCRATCH_SIZE 0x10000
|
|
||||||
|
|
||||||
/* The real mode stack. */
|
|
||||||
#define GRUB_MEMORY_MACHINE_REAL_STACK (0x2000 - 0x10)
|
|
||||||
|
|
||||||
/* The size of the protect mode stack. */
|
|
||||||
#define GRUB_MEMORY_MACHINE_PROT_STACK_SIZE 0x8000
|
|
||||||
|
|
||||||
/* The protected mode stack. */
|
|
||||||
#define GRUB_MEMORY_MACHINE_PROT_STACK \
|
|
||||||
(GRUB_MEMORY_MACHINE_SCRATCH_ADDR + GRUB_MEMORY_MACHINE_SCRATCH_SIZE \
|
|
||||||
+ GRUB_MEMORY_MACHINE_PROT_STACK_SIZE - 0x10)
|
|
||||||
|
|
||||||
/* The memory area where GRUB uses its own purpose. This part is not added
|
|
||||||
into free memory for dynamic allocations. */
|
|
||||||
#define GRUB_MEMORY_MACHINE_RESERVED_START \
|
|
||||||
GRUB_MEMORY_MACHINE_SCRATCH_ADDR
|
|
||||||
#define GRUB_MEMORY_MACHINE_RESERVED_END \
|
|
||||||
(GRUB_MEMORY_MACHINE_PROT_STACK + 0x10)
|
|
||||||
|
|
||||||
/* The area where GRUB is decompressed at early startup. */
|
/* The area where GRUB is decompressed at early startup. */
|
||||||
#define GRUB_MEMORY_MACHINE_DECOMPRESSION_ADDR 0x100000
|
#define GRUB_MEMORY_MACHINE_DECOMPRESSION_ADDR 0x100000
|
||||||
|
|
||||||
|
@ -63,18 +41,6 @@
|
||||||
/* The address where another boot loader is loaded. */
|
/* The address where another boot loader is loaded. */
|
||||||
#define GRUB_MEMORY_MACHINE_BOOT_LOADER_ADDR 0x7c00
|
#define GRUB_MEMORY_MACHINE_BOOT_LOADER_ADDR 0x7c00
|
||||||
|
|
||||||
/* The code segment of the protected mode. */
|
|
||||||
#define GRUB_MEMORY_MACHINE_PROT_MODE_CSEG 0x8
|
|
||||||
|
|
||||||
/* The data segment of the protected mode. */
|
|
||||||
#define GRUB_MEMORY_MACHINE_PROT_MODE_DSEG 0x10
|
|
||||||
|
|
||||||
/* The code segment of the pseudo real mode. */
|
|
||||||
#define GRUB_MEMORY_MACHINE_PSEUDO_REAL_CSEG 0x18
|
|
||||||
|
|
||||||
/* The data segment of the pseudo real mode. */
|
|
||||||
#define GRUB_MEMORY_MACHINE_PSEUDO_REAL_DSEG 0x20
|
|
||||||
|
|
||||||
#define GRUB_MEMORY_MACHINE_BIOS_DATA_AREA_ADDR 0x400
|
#define GRUB_MEMORY_MACHINE_BIOS_DATA_AREA_ADDR 0x400
|
||||||
|
|
||||||
#ifndef ASM_FILE
|
#ifndef ASM_FILE
|
||||||
|
|
|
@ -1,36 +1 @@
|
||||||
/* memory.h - describe the memory map */
|
|
||||||
/*
|
|
||||||
* GRUB -- GRand Unified Bootloader
|
|
||||||
* Copyright (C) 2002,2007 Free Software Foundation, Inc.
|
|
||||||
*
|
|
||||||
* GRUB is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* GRUB is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with GRUB. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef _GRUB_MEMORY_MACHINE_HEADER
|
|
||||||
#define _GRUB_MEMORY_MACHINE_HEADER 1
|
|
||||||
|
|
||||||
#include <grub/symbol.h>
|
|
||||||
#include <grub/i386/coreboot/memory.h>
|
#include <grub/i386/coreboot/memory.h>
|
||||||
|
|
||||||
#ifndef ASM_FILE
|
|
||||||
#include <grub/err.h>
|
|
||||||
#include <grub/types.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define GRUB_MEMORY_MACHINE_LOWER_USABLE 0x9fc00 /* 640 kiB - 1 kiB */
|
|
||||||
|
|
||||||
#define GRUB_MEMORY_MACHINE_UPPER_START 0x100000 /* 1 MiB */
|
|
||||||
#define GRUB_MEMORY_MACHINE_LOWER_SIZE GRUB_MEMORY_MACHINE_UPPER_START
|
|
||||||
|
|
||||||
#endif /* ! _GRUB_MEMORY_MACHINE_HEADER */
|
|
||||||
|
|
|
@ -421,6 +421,10 @@ void EXPORT_FUNC(grub_reboot) (void) __attribute__ ((noreturn));
|
||||||
void grub_reboot (void) __attribute__ ((noreturn));
|
void grub_reboot (void) __attribute__ ((noreturn));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined (__clang__) && !defined (GRUB_UTIL)
|
||||||
|
void __attribute__ ((noreturn)) EXPORT_FUNC (abort) (void);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef GRUB_MACHINE_PCBIOS
|
#ifdef GRUB_MACHINE_PCBIOS
|
||||||
/* Halt the system, using APM if possible. If NO_APM is true, don't
|
/* Halt the system, using APM if possible. If NO_APM is true, don't
|
||||||
* use APM even if it is available. */
|
* use APM even if it is available. */
|
||||||
|
|
|
@ -27,6 +27,12 @@
|
||||||
/* Add an underscore to a C symbol in assembler code if needed. */
|
/* Add an underscore to a C symbol in assembler code if needed. */
|
||||||
#ifndef GRUB_UTIL
|
#ifndef GRUB_UTIL
|
||||||
|
|
||||||
|
#ifdef __APPLE__
|
||||||
|
#define MACRO_DOLLAR(x) $$ ## x
|
||||||
|
#else
|
||||||
|
#define MACRO_DOLLAR(x) $ ## x
|
||||||
|
#endif
|
||||||
|
|
||||||
#if HAVE_ASM_USCORE
|
#if HAVE_ASM_USCORE
|
||||||
#ifdef ASM_FILE
|
#ifdef ASM_FILE
|
||||||
# define EXT_C(sym) _ ## sym
|
# define EXT_C(sym) _ ## sym
|
||||||
|
|
|
@ -87,6 +87,8 @@ enum grub_install_plat
|
||||||
GRUB_INSTALL_PLATFORM_ARM_EFI,
|
GRUB_INSTALL_PLATFORM_ARM_EFI,
|
||||||
GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS,
|
GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS,
|
||||||
GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS,
|
GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS,
|
||||||
|
GRUB_INSTALL_PLATFORM_I386_XEN,
|
||||||
|
GRUB_INSTALL_PLATFORM_X86_64_XEN,
|
||||||
GRUB_INSTALL_PLATFORM_ARM64_EFI,
|
GRUB_INSTALL_PLATFORM_ARM64_EFI,
|
||||||
GRUB_INSTALL_PLATFORM_MAX
|
GRUB_INSTALL_PLATFORM_MAX
|
||||||
};
|
};
|
||||||
|
|
24
tests/btrfs_test.in
Normal file
24
tests/btrfs_test.in
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$EUID" = "x" ] ; then
|
||||||
|
EUID=`id -u`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$EUID" != 0 ] ; then
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkfs.btrfs >/dev/null 2>&1; then
|
||||||
|
echo "mkfs.btrfs not installed; cannot test btrfs."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" btrfs
|
||||||
|
"@builddir@/grub-fs-tester" btrfs_zlib
|
||||||
|
"@builddir@/grub-fs-tester" btrfs_lzo
|
||||||
|
"@builddir@/grub-fs-tester" btrfs_raid0
|
||||||
|
"@builddir@/grub-fs-tester" btrfs_raid1
|
||||||
|
"@builddir@/grub-fs-tester" btrfs_single
|
||||||
|
"@builddir@/grub-fs-tester" btrfs_raid10
|
16
tests/cpio_test.in
Normal file
16
tests/cpio_test.in
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if ! which cpio >/dev/null 2>&1; then
|
||||||
|
echo "cpio not installed; cannot test cpio."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" cpio_bin
|
||||||
|
"@builddir@/grub-fs-tester" cpio_odc
|
||||||
|
"@builddir@/grub-fs-tester" cpio_newc
|
||||||
|
"@builddir@/grub-fs-tester" cpio_crc
|
||||||
|
"@builddir@/grub-fs-tester" cpio_ustar
|
||||||
|
"@builddir@/grub-fs-tester" cpio_hpbin
|
||||||
|
"@builddir@/grub-fs-tester" cpio_hpodc
|
18
tests/exfat_test.in
Normal file
18
tests/exfat_test.in
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$EUID" = "x" ] ; then
|
||||||
|
EUID=`id -u`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$EUID" != 0 ] ; then
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkfs.exfat >/dev/null 2>&1; then
|
||||||
|
echo "mkfs.exfat not installed; cannot test exFAT."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" exfat
|
31
tests/ext234_test.in
Normal file
31
tests/ext234_test.in
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$EUID" = "x" ] ; then
|
||||||
|
EUID=`id -u`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$EUID" != 0 ] ; then
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkfs.ext2 >/dev/null 2>&1; then
|
||||||
|
echo "mkfs.ext2 not installed; cannot test ext2."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkfs.ext3 >/dev/null 2>&1; then
|
||||||
|
echo "mkfs.ext3 not installed; cannot test ext3."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkfs.ext4 >/dev/null 2>&1; then
|
||||||
|
echo "mkfs.ext4 not installed; cannot test ext4."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" ext2_old
|
||||||
|
"@builddir@/grub-fs-tester" ext2
|
||||||
|
"@builddir@/grub-fs-tester" ext3
|
||||||
|
"@builddir@/grub-fs-tester" ext4
|
22
tests/fat_test.in
Normal file
22
tests/fat_test.in
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$EUID" = "x" ] ; then
|
||||||
|
EUID=`id -u`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$EUID" != 0 ] ; then
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkfs.vfat >/dev/null 2>&1; then
|
||||||
|
echo "mkfs.vfat not installed; cannot test FAT."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" vfat16a
|
||||||
|
"@builddir@/grub-fs-tester" vfat12a
|
||||||
|
"@builddir@/grub-fs-tester" vfat12
|
||||||
|
"@builddir@/grub-fs-tester" vfat16
|
||||||
|
"@builddir@/grub-fs-tester" vfat32
|
23
tests/hfs_test.in
Normal file
23
tests/hfs_test.in
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$EUID" = "x" ] ; then
|
||||||
|
EUID=`id -u`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$EUID" != 0 ] ; then
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkfs.hfs >/dev/null 2>&1; then
|
||||||
|
echo "mkfs.hfs not installed; cannot test HFS."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! modprobe mac-roman; then
|
||||||
|
echo "no mac-roman support; cannot test HFS."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" hfs
|
20
tests/hfsplus_test.in
Normal file
20
tests/hfsplus_test.in
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$EUID" = "x" ] ; then
|
||||||
|
EUID=`id -u`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$EUID" != 0 ] ; then
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkfs.hfsplus >/dev/null 2>&1; then
|
||||||
|
echo "mkfs.hfsplus not installed; cannot test hfsplus."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" hfsplus
|
||||||
|
"@builddir@/grub-fs-tester" hfsplus_casesens
|
||||||
|
"@builddir@/grub-fs-tester" hfsplus_wrap
|
15
tests/iso9660_test.in
Normal file
15
tests/iso9660_test.in
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if ! which xorriso >/dev/null 2>&1; then
|
||||||
|
echo "xorriso not installed; cannot test iso9660."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" joliet
|
||||||
|
"@builddir@/grub-fs-tester" rockridge
|
||||||
|
"@builddir@/grub-fs-tester" rockridge_joliet
|
||||||
|
"@builddir@/grub-fs-tester" joliet_1999
|
||||||
|
"@builddir@/grub-fs-tester" rockridge_1999
|
||||||
|
"@builddir@/grub-fs-tester" rockridge_joliet_1999
|
18
tests/jfs_test.in
Normal file
18
tests/jfs_test.in
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$EUID" = "x" ] ; then
|
||||||
|
EUID=`id -u`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$EUID" != 0 ] ; then
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkfs.jfs >/dev/null 2>&1; then
|
||||||
|
echo "mkfs.jfs not installed; cannot test JFS."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" jfs
|
25
tests/minixfs_test.in
Normal file
25
tests/minixfs_test.in
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$EUID" = "x" ] ; then
|
||||||
|
EUID=`id -u`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$EUID" != 0 ] ; then
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkfs.minix >/dev/null 2>&1; then
|
||||||
|
echo "mkfs.minix not installed; cannot test minixfs."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! mkfs.minix -h | grep -- -v > /dev/null; then
|
||||||
|
echo "mkfs.minix doesn't support minix3fs; cannot test minix*fs."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" minix
|
||||||
|
"@builddir@/grub-fs-tester" minix2
|
||||||
|
"@builddir@/grub-fs-tester" minix3
|
18
tests/nilfs2_test.in
Normal file
18
tests/nilfs2_test.in
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$EUID" = "x" ] ; then
|
||||||
|
EUID=`id -u`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$EUID" != 0 ] ; then
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkfs.nilfs2 >/dev/null 2>&1; then
|
||||||
|
echo "mkfs.nilfs2 not installed; cannot test nilfs2."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" nilfs2
|
19
tests/ntfs_test.in
Normal file
19
tests/ntfs_test.in
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$EUID" = "x" ] ; then
|
||||||
|
EUID=`id -u`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$EUID" != 0 ] ; then
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkfs.ntfs >/dev/null 2>&1; then
|
||||||
|
echo "mkfs.ntfs not installed; cannot test ntfs."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" ntfs
|
||||||
|
"@builddir@/grub-fs-tester" ntfscomp
|
20
tests/reiserfs_test.in
Normal file
20
tests/reiserfs_test.in
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$EUID" = "x" ] ; then
|
||||||
|
EUID=`id -u`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$EUID" != 0 ] ; then
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkfs.reiserfs >/dev/null 2>&1; then
|
||||||
|
echo "mkfs.reiserfs not installed; cannot test reiserfs."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" reiserfs
|
||||||
|
"@builddir@/grub-fs-tester" reiserfs_old
|
||||||
|
|
10
tests/romfs_test.in
Normal file
10
tests/romfs_test.in
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if ! which genromfs >/dev/null 2>&1; then
|
||||||
|
echo "genromfs not installed; cannot test romfs."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" romfs
|
12
tests/squashfs_test.in
Normal file
12
tests/squashfs_test.in
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if ! which mksquashfs >/dev/null 2>&1; then
|
||||||
|
echo "mksquashfs not installed; cannot test squashfs."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" squash4_gzip
|
||||||
|
"@builddir@/grub-fs-tester" squash4_xz
|
||||||
|
"@builddir@/grub-fs-tester" squash4_lzo
|
10
tests/tar_test.in
Normal file
10
tests/tar_test.in
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if ! which tar >/dev/null 2>&1; then
|
||||||
|
echo "tar not installed; cannot test tar."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" tarfs
|
19
tests/udf_test.in
Normal file
19
tests/udf_test.in
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$EUID" = "x" ] ; then
|
||||||
|
EUID=`id -u`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$EUID" != 0 ] ; then
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkudffs >/dev/null 2>&1; then
|
||||||
|
echo "mkudffs not installed; cannot test UDF."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" udf
|
||||||
|
|
1427
tests/util/grub-fs-tester.in
Normal file
1427
tests/util/grub-fs-tester.in
Normal file
File diff suppressed because it is too large
Load diff
19
tests/xfs_test.in
Normal file
19
tests/xfs_test.in
Normal file
|
@ -0,0 +1,19 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$EUID" = "x" ] ; then
|
||||||
|
EUID=`id -u`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$EUID" != 0 ] ; then
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which mkfs.xfs >/dev/null 2>&1; then
|
||||||
|
echo "mkfs.xfs not installed; cannot test xfs."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" xfs
|
27
tests/zfs_test.in
Normal file
27
tests/zfs_test.in
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
if [ "x$EUID" = "x" ] ; then
|
||||||
|
EUID=`id -u`
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$EUID" != 0 ] ; then
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! which zpool >/dev/null 2>&1; then
|
||||||
|
echo "zpool not installed; cannot test zfs."
|
||||||
|
exit 77
|
||||||
|
fi
|
||||||
|
|
||||||
|
"@builddir@/grub-fs-tester" zfs
|
||||||
|
"@builddir@/grub-fs-tester" zfs_lzjb
|
||||||
|
"@builddir@/grub-fs-tester" zfs_gzip
|
||||||
|
"@builddir@/grub-fs-tester" zfs_zle
|
||||||
|
"@builddir@/grub-fs-tester" zfs_raidz3
|
||||||
|
"@builddir@/grub-fs-tester" zfs_raidz2
|
||||||
|
"@builddir@/grub-fs-tester" zfs_raidz
|
||||||
|
"@builddir@/grub-fs-tester" zfs_mirror
|
||||||
|
"@builddir@/grub-fs-tester" zfs_stripe
|
||||||
|
"@builddir@/grub-fs-tester" zfs_caseins
|
67
util/garbage-gen.c
Normal file
67
util/garbage-gen.c
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
/*
|
||||||
|
* 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/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Standard random generator is slow. For FS testing we need just some
|
||||||
|
garbage files, we don't need them to be high-quality random.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <sys/time.h>
|
||||||
|
|
||||||
|
static unsigned long long buffer[1048576];
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char **argv)
|
||||||
|
{
|
||||||
|
unsigned long long high = 0, low = 1;
|
||||||
|
unsigned long i, j;
|
||||||
|
unsigned long long cnt = strtoull (argv[1], 0, 0);
|
||||||
|
struct timeval tv;
|
||||||
|
gettimeofday (&tv, NULL);
|
||||||
|
high = tv.tv_sec;
|
||||||
|
low = tv.tv_usec;
|
||||||
|
if (!high)
|
||||||
|
high = 1;
|
||||||
|
if (!low)
|
||||||
|
low = 2;
|
||||||
|
|
||||||
|
for (j = 0; j < (cnt + sizeof (buffer) - 1) / sizeof (buffer); j++)
|
||||||
|
{
|
||||||
|
for (i = 0; i < sizeof (buffer) / sizeof (buffer[0]); i += 2)
|
||||||
|
{
|
||||||
|
int c1 = 0, c2 = 0;
|
||||||
|
buffer[i] = low;
|
||||||
|
buffer[i+1] = high;
|
||||||
|
if (low & (1ULL << 63))
|
||||||
|
c1 = 1;
|
||||||
|
low <<= 1;
|
||||||
|
if (high & (1ULL << 63))
|
||||||
|
c2 = 1;
|
||||||
|
high = (high << 1) | c1;
|
||||||
|
if (c2)
|
||||||
|
low ^= 0x87;
|
||||||
|
}
|
||||||
|
if (sizeof (buffer) < cnt - sizeof (buffer) * j)
|
||||||
|
fwrite (buffer, 1, sizeof (buffer), stdout);
|
||||||
|
else
|
||||||
|
fwrite (buffer, 1, cnt - sizeof (buffer) * j, stdout);
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -558,7 +558,7 @@ copy_locales (const char *dstd)
|
||||||
grub_util_fd_dirent_t de;
|
grub_util_fd_dirent_t de;
|
||||||
const char *locale_dir = grub_util_get_localedir ();
|
const char *locale_dir = grub_util_get_localedir ();
|
||||||
|
|
||||||
d = grub_util_fd_opendir (LOCALEDIR);
|
d = grub_util_fd_opendir (locale_dir);
|
||||||
if (!d)
|
if (!d)
|
||||||
{
|
{
|
||||||
grub_util_warn (_("cannot open directory `%s': %s"),
|
grub_util_warn (_("cannot open directory `%s': %s"),
|
||||||
|
@ -597,6 +597,8 @@ static struct
|
||||||
[GRUB_INSTALL_PLATFORM_I386_MULTIBOOT] = { "i386", "multiboot" },
|
[GRUB_INSTALL_PLATFORM_I386_MULTIBOOT] = { "i386", "multiboot" },
|
||||||
[GRUB_INSTALL_PLATFORM_I386_IEEE1275] = { "i386", "ieee1275" },
|
[GRUB_INSTALL_PLATFORM_I386_IEEE1275] = { "i386", "ieee1275" },
|
||||||
[GRUB_INSTALL_PLATFORM_X86_64_EFI] = { "x86_64", "efi" },
|
[GRUB_INSTALL_PLATFORM_X86_64_EFI] = { "x86_64", "efi" },
|
||||||
|
[GRUB_INSTALL_PLATFORM_I386_XEN] = { "i386", "xen" },
|
||||||
|
[GRUB_INSTALL_PLATFORM_X86_64_XEN] = { "x86_64", "xen" },
|
||||||
[GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON] = { "mipsel", "loongson" },
|
[GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON] = { "mipsel", "loongson" },
|
||||||
[GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS] = { "mipsel", "qemu_mips" },
|
[GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS] = { "mipsel", "qemu_mips" },
|
||||||
[GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS] = { "mips", "qemu_mips" },
|
[GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS] = { "mips", "qemu_mips" },
|
||||||
|
@ -707,6 +709,8 @@ grub_install_copy_files (const char *src,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
const char *locale_dir = grub_util_get_localedir ();
|
||||||
|
|
||||||
for (i = 0; i < install_locales.n_entries; i++)
|
for (i = 0; i < install_locales.n_entries; i++)
|
||||||
{
|
{
|
||||||
char *srcf = grub_util_path_concat_ext (3, src,
|
char *srcf = grub_util_path_concat_ext (3, src,
|
||||||
|
@ -724,7 +728,7 @@ grub_install_copy_files (const char *src,
|
||||||
}
|
}
|
||||||
free (srcf);
|
free (srcf);
|
||||||
srcf = grub_util_path_concat_ext (4,
|
srcf = grub_util_path_concat_ext (4,
|
||||||
LOCALEDIR,
|
locale_dir,
|
||||||
install_locales.entries[i],
|
install_locales.entries[i],
|
||||||
"LC_MESSAGES",
|
"LC_MESSAGES",
|
||||||
PACKAGE,
|
PACKAGE,
|
||||||
|
|
|
@ -233,7 +233,7 @@ static struct argp_option options[] = {
|
||||||
"This option is only available on BIOS target."), 2},
|
"This option is only available on BIOS target."), 2},
|
||||||
{"no-nvram", OPTION_NO_NVRAM, 0, 0,
|
{"no-nvram", OPTION_NO_NVRAM, 0, 0,
|
||||||
N_("don't update the `boot-device' NVRAM variable. "
|
N_("don't update the `boot-device' NVRAM variable. "
|
||||||
"This option is only available on IEEE1275 targets."), 2},
|
"This option is only available on EFI and IEEE1275 targets."), 2},
|
||||||
{"skip-fs-probe",'s',0, 0,
|
{"skip-fs-probe",'s',0, 0,
|
||||||
N_("do not probe for filesystems in DEVICE"), 0},
|
N_("do not probe for filesystems in DEVICE"), 0},
|
||||||
{"no-bootsector", OPTION_NO_BOOTSECTOR, 0, 0,
|
{"no-bootsector", OPTION_NO_BOOTSECTOR, 0, 0,
|
||||||
|
@ -418,6 +418,9 @@ have_bootdev (enum grub_install_plat pl)
|
||||||
|
|
||||||
case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON:
|
case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON:
|
||||||
case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
|
case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
|
||||||
|
|
||||||
|
case GRUB_INSTALL_PLATFORM_I386_XEN:
|
||||||
|
case GRUB_INSTALL_PLATFORM_X86_64_XEN:
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* pacify warning. */
|
/* pacify warning. */
|
||||||
|
@ -758,6 +761,8 @@ main (int argc, char *argv[])
|
||||||
case GRUB_INSTALL_PLATFORM_MIPSEL_ARC:
|
case GRUB_INSTALL_PLATFORM_MIPSEL_ARC:
|
||||||
case GRUB_INSTALL_PLATFORM_MIPS_ARC:
|
case GRUB_INSTALL_PLATFORM_MIPS_ARC:
|
||||||
case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
|
case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
|
||||||
|
case GRUB_INSTALL_PLATFORM_I386_XEN:
|
||||||
|
case GRUB_INSTALL_PLATFORM_X86_64_XEN:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GRUB_INSTALL_PLATFORM_I386_QEMU:
|
case GRUB_INSTALL_PLATFORM_I386_QEMU:
|
||||||
|
@ -798,6 +803,8 @@ main (int argc, char *argv[])
|
||||||
case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON:
|
case GRUB_INSTALL_PLATFORM_MIPSEL_LOONGSON:
|
||||||
case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
|
case GRUB_INSTALL_PLATFORM_MIPSEL_QEMU_MIPS:
|
||||||
case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS:
|
case GRUB_INSTALL_PLATFORM_MIPS_QEMU_MIPS:
|
||||||
|
case GRUB_INSTALL_PLATFORM_I386_XEN:
|
||||||
|
case GRUB_INSTALL_PLATFORM_X86_64_XEN:
|
||||||
free (install_device);
|
free (install_device);
|
||||||
install_device = NULL;
|
install_device = NULL;
|
||||||
break;
|
break;
|
||||||
|
@ -1217,6 +1224,8 @@ main (int argc, char *argv[])
|
||||||
case GRUB_INSTALL_PLATFORM_MIPS_ARC:
|
case GRUB_INSTALL_PLATFORM_MIPS_ARC:
|
||||||
case GRUB_INSTALL_PLATFORM_MIPSEL_ARC:
|
case GRUB_INSTALL_PLATFORM_MIPSEL_ARC:
|
||||||
case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
|
case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
|
||||||
|
case GRUB_INSTALL_PLATFORM_I386_XEN:
|
||||||
|
case GRUB_INSTALL_PLATFORM_X86_64_XEN:
|
||||||
grub_util_warn ("%s", _("no hints available for your platform. Expect reduced performance"));
|
grub_util_warn ("%s", _("no hints available for your platform. Expect reduced performance"));
|
||||||
break;
|
break;
|
||||||
/* pacify warning. */
|
/* pacify warning. */
|
||||||
|
@ -1304,6 +1313,8 @@ main (int argc, char *argv[])
|
||||||
case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT:
|
case GRUB_INSTALL_PLATFORM_I386_MULTIBOOT:
|
||||||
case GRUB_INSTALL_PLATFORM_I386_IEEE1275:
|
case GRUB_INSTALL_PLATFORM_I386_IEEE1275:
|
||||||
case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275:
|
case GRUB_INSTALL_PLATFORM_POWERPC_IEEE1275:
|
||||||
|
case GRUB_INSTALL_PLATFORM_I386_XEN:
|
||||||
|
case GRUB_INSTALL_PLATFORM_X86_64_XEN:
|
||||||
core_name = "core.elf";
|
core_name = "core.elf";
|
||||||
snprintf (mkimage_target, sizeof (mkimage_target),
|
snprintf (mkimage_target, sizeof (mkimage_target),
|
||||||
"%s-%s",
|
"%s-%s",
|
||||||
|
@ -1395,6 +1406,8 @@ main (int argc, char *argv[])
|
||||||
case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
|
case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
|
||||||
case GRUB_INSTALL_PLATFORM_I386_QEMU:
|
case GRUB_INSTALL_PLATFORM_I386_QEMU:
|
||||||
case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275:
|
case GRUB_INSTALL_PLATFORM_SPARC64_IEEE1275:
|
||||||
|
case GRUB_INSTALL_PLATFORM_I386_XEN:
|
||||||
|
case GRUB_INSTALL_PLATFORM_X86_64_XEN:
|
||||||
break;
|
break;
|
||||||
/* pacify warning. */
|
/* pacify warning. */
|
||||||
case GRUB_INSTALL_PLATFORM_MAX:
|
case GRUB_INSTALL_PLATFORM_MAX:
|
||||||
|
@ -1414,7 +1427,7 @@ main (int argc, char *argv[])
|
||||||
"boot.img");
|
"boot.img");
|
||||||
grub_install_copy_file (boot_img_src, boot_img, 1);
|
grub_install_copy_file (boot_img_src, boot_img, 1);
|
||||||
|
|
||||||
grub_util_info ("%sgrub_bios_setup %s %s %s %s --directory='%s' --device-map='%s' '%s'",
|
grub_util_info ("%sgrub-bios-setup %s %s %s %s --directory='%s' --device-map='%s' '%s'",
|
||||||
install_bootsector ? "" : "NOT RUNNING: ",
|
install_bootsector ? "" : "NOT RUNNING: ",
|
||||||
allow_floppy ? "--allow-floppy " : "",
|
allow_floppy ? "--allow-floppy " : "",
|
||||||
verbosity ? "--verbose " : "",
|
verbosity ? "--verbose " : "",
|
||||||
|
@ -1440,7 +1453,7 @@ main (int argc, char *argv[])
|
||||||
"boot.img");
|
"boot.img");
|
||||||
grub_install_copy_file (boot_img_src, boot_img, 1);
|
grub_install_copy_file (boot_img_src, boot_img, 1);
|
||||||
|
|
||||||
grub_util_info ("%sgrub_sparc_setup %s %s %s %s --directory='%s' --device-map='%s' '%s'",
|
grub_util_info ("%sgrub-sparc64-setup %s %s %s %s --directory='%s' --device-map='%s' '%s'",
|
||||||
install_bootsector ? "" : "NOT RUNNING: ",
|
install_bootsector ? "" : "NOT RUNNING: ",
|
||||||
allow_floppy ? "--allow-floppy " : "",
|
allow_floppy ? "--allow-floppy " : "",
|
||||||
verbosity ? "--verbose " : "",
|
verbosity ? "--verbose " : "",
|
||||||
|
@ -1525,7 +1538,7 @@ main (int argc, char *argv[])
|
||||||
grub_install_copy_file (imgfile, dst, 1);
|
grub_install_copy_file (imgfile, dst, 1);
|
||||||
free (dst);
|
free (dst);
|
||||||
}
|
}
|
||||||
if (!removable)
|
if (!removable && update_nvram)
|
||||||
{
|
{
|
||||||
char * efidir_disk;
|
char * efidir_disk;
|
||||||
int efidir_part;
|
int efidir_part;
|
||||||
|
@ -1552,6 +1565,8 @@ main (int argc, char *argv[])
|
||||||
case GRUB_INSTALL_PLATFORM_MIPSEL_ARC:
|
case GRUB_INSTALL_PLATFORM_MIPSEL_ARC:
|
||||||
case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
|
case GRUB_INSTALL_PLATFORM_ARM_UBOOT:
|
||||||
case GRUB_INSTALL_PLATFORM_I386_QEMU:
|
case GRUB_INSTALL_PLATFORM_I386_QEMU:
|
||||||
|
case GRUB_INSTALL_PLATFORM_I386_XEN:
|
||||||
|
case GRUB_INSTALL_PLATFORM_X86_64_XEN:
|
||||||
grub_util_warn ("%s",
|
grub_util_warn ("%s",
|
||||||
_("WARNING: no platform-specific install was performed"));
|
_("WARNING: no platform-specific install was performed"));
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -216,6 +216,7 @@ export GRUB_DEFAULT \
|
||||||
GRUB_SAVEDEFAULT \
|
GRUB_SAVEDEFAULT \
|
||||||
GRUB_ENABLE_CRYPTODISK \
|
GRUB_ENABLE_CRYPTODISK \
|
||||||
GRUB_BADRAM \
|
GRUB_BADRAM \
|
||||||
|
GRUB_OS_PROBER_SKIP_LIST \
|
||||||
GRUB_DISABLE_SUBMENU
|
GRUB_DISABLE_SUBMENU
|
||||||
|
|
||||||
if test "x${grub_cfg}" != "x"; then
|
if test "x${grub_cfg}" != "x"; then
|
||||||
|
@ -224,7 +225,7 @@ if test "x${grub_cfg}" != "x"; then
|
||||||
exec > "${grub_cfg}.new"
|
exec > "${grub_cfg}.new"
|
||||||
umask $oldumask
|
umask $oldumask
|
||||||
fi
|
fi
|
||||||
gettext "Generating grub.cfg ..." >&2
|
gettext "Generating grub configuration file ..." >&2
|
||||||
echo >&2
|
echo >&2
|
||||||
|
|
||||||
cat << EOF
|
cat << EOF
|
||||||
|
|
|
@ -1376,7 +1376,6 @@ SUFFIX (load_image) (const char *kernel_path, size_t *exec_size,
|
||||||
*kernel_sz = ALIGN_UP (*kernel_sz, 16);
|
*kernel_sz = ALIGN_UP (*kernel_sz, 16);
|
||||||
|
|
||||||
grub_ia64_dl_get_tramp_got_size (e, &tramp, &got);
|
grub_ia64_dl_get_tramp_got_size (e, &tramp, &got);
|
||||||
tramp *= sizeof (struct grub_ia64_trampoline);
|
|
||||||
|
|
||||||
ia64_toff = *kernel_sz;
|
ia64_toff = *kernel_sz;
|
||||||
*kernel_sz += ALIGN_UP (tramp, 16);
|
*kernel_sz += ALIGN_UP (tramp, 16);
|
||||||
|
@ -1387,7 +1386,7 @@ SUFFIX (load_image) (const char *kernel_path, size_t *exec_size,
|
||||||
*kernel_sz += 16 * ia64jmpnum;
|
*kernel_sz += 16 * ia64jmpnum;
|
||||||
|
|
||||||
ia64_got_off = *kernel_sz;
|
ia64_got_off = *kernel_sz;
|
||||||
*kernel_sz += ALIGN_UP (got * sizeof (grub_uint64_t), 16);
|
*kernel_sz += ALIGN_UP (got, 16);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -396,11 +396,12 @@ main (int argc, char *argv[])
|
||||||
|
|
||||||
if (!grub_install_source_directory)
|
if (!grub_install_source_directory)
|
||||||
{
|
{
|
||||||
|
const char *pkglibdir = grub_util_get_pkglibdir ();
|
||||||
enum grub_install_plat plat;
|
enum grub_install_plat plat;
|
||||||
|
|
||||||
for (plat = 0; plat < GRUB_INSTALL_PLATFORM_MAX; plat++)
|
for (plat = 0; plat < GRUB_INSTALL_PLATFORM_MAX; plat++)
|
||||||
{
|
{
|
||||||
char *platdir = grub_util_path_concat (2, pkgdatadir,
|
char *platdir = grub_util_path_concat (2, pkglibdir,
|
||||||
grub_install_get_platform_name (plat));
|
grub_install_get_platform_name (plat));
|
||||||
|
|
||||||
if (!grub_util_is_directory (platdir))
|
if (!grub_util_is_directory (platdir))
|
||||||
|
|
|
@ -112,6 +112,18 @@ for OS in ${OSPROBED} ; do
|
||||||
LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
|
LONGNAME="`echo ${OS} | cut -d ':' -f 2 | tr '^' ' '`"
|
||||||
LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
|
LABEL="`echo ${OS} | cut -d ':' -f 3 | tr '^' ' '`"
|
||||||
BOOT="`echo ${OS} | cut -d ':' -f 4`"
|
BOOT="`echo ${OS} | cut -d ':' -f 4`"
|
||||||
|
UUID="`grub-probe --target=fs_uuid --device ${DEVICE%@*}`"
|
||||||
|
EXPUUID="$UUID"
|
||||||
|
|
||||||
|
if [ x"${DEVICE#*@}" != x ] ; then
|
||||||
|
EXPUUID="${EXPUUID}@${DEVICE#*@}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "x${GRUB_OS_PROBER_SKIP_LIST}" != "x" -a "x`echo ${GRUB_OS_PROBER_SKIP_LIST} | grep -i -e '\b'${EXPUUID}'\b'`" != "x" ] ; then
|
||||||
|
echo "Skipped ${LONGNAME} on ${DEVICE} by user request." >&2
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
BTRFS="`echo ${OS} | cut -d ':' -f 5`"
|
BTRFS="`echo ${OS} | cut -d ':' -f 5`"
|
||||||
if [ "x$BTRFS" = "xbtrfs" ]; then
|
if [ "x$BTRFS" = "xbtrfs" ]; then
|
||||||
BTRFSuuid="`echo ${OS} | cut -d ':' -f 6`"
|
BTRFSuuid="`echo ${OS} | cut -d ':' -f 6`"
|
||||||
|
@ -265,7 +277,7 @@ EOF
|
||||||
echo "$title_correction_code"
|
echo "$title_correction_code"
|
||||||
;;
|
;;
|
||||||
macosx)
|
macosx)
|
||||||
OSXUUID="`${grub_probe} --target=fs_uuid --device ${DEVICE} 2> /dev/null`"
|
OSXUUID="${UUID}"
|
||||||
osx_entry xnu_kernel 32
|
osx_entry xnu_kernel 32
|
||||||
osx_entry xnu_kernel64 64
|
osx_entry xnu_kernel64 64
|
||||||
;;
|
;;
|
||||||
|
|
|
@ -137,11 +137,13 @@ for cipher_file in cipher_files:
|
||||||
|
|
||||||
ciphernames = []
|
ciphernames = []
|
||||||
mdnames = []
|
mdnames = []
|
||||||
|
mdctxsizes = []
|
||||||
pknames = []
|
pknames = []
|
||||||
hold = False
|
hold = False
|
||||||
skip = 0
|
skip = 0
|
||||||
skip2 = False
|
skip2 = False
|
||||||
ismd = False
|
ismd = False
|
||||||
|
mdarg = 0
|
||||||
ispk = False
|
ispk = False
|
||||||
iscipher = False
|
iscipher = False
|
||||||
iscryptostart = False
|
iscryptostart = False
|
||||||
|
@ -174,6 +176,11 @@ for cipher_file in cipher_files:
|
||||||
sg = s.groups()[0]
|
sg = s.groups()[0]
|
||||||
cryptolist.write (("%s: %s\n") % (sg, modname))
|
cryptolist.write (("%s: %s\n") % (sg, modname))
|
||||||
iscryptostart = False
|
iscryptostart = False
|
||||||
|
if ismd:
|
||||||
|
spl = line.split (",")
|
||||||
|
if mdarg + len (spl) > 9 and mdarg <= 9 and ("sizeof" in spl[9-mdarg]):
|
||||||
|
mdctxsizes.append (spl[9-mdarg].lstrip ().rstrip())
|
||||||
|
mdarg = mdarg + len (spl) - 1
|
||||||
if ismd or iscipher or ispk:
|
if ismd or iscipher or ispk:
|
||||||
if not re.search (" *};", line) is None:
|
if not re.search (" *};", line) is None:
|
||||||
if not iscomma:
|
if not iscomma:
|
||||||
|
@ -189,6 +196,7 @@ for cipher_file in cipher_files:
|
||||||
fw.write (" .blocksize = %s\n"
|
fw.write (" .blocksize = %s\n"
|
||||||
% mdblocksizes [mdname])
|
% mdblocksizes [mdname])
|
||||||
ismd = False
|
ismd = False
|
||||||
|
mdarg = 0
|
||||||
iscipher = False
|
iscipher = False
|
||||||
ispk = False
|
ispk = False
|
||||||
iscomma = not re.search (",$", line) is None
|
iscomma = not re.search (",$", line) is None
|
||||||
|
@ -283,6 +291,7 @@ for cipher_file in cipher_files:
|
||||||
mdname = re.match("[a-zA-Z0-9_]*",mdname).group ()
|
mdname = re.match("[a-zA-Z0-9_]*",mdname).group ()
|
||||||
mdnames.append (mdname)
|
mdnames.append (mdname)
|
||||||
ismd = True
|
ismd = True
|
||||||
|
mdarg = 0
|
||||||
iscryptostart = True
|
iscryptostart = True
|
||||||
m = re.match ("static const char \*selftest.*;$", line)
|
m = re.match ("static const char \*selftest.*;$", line)
|
||||||
if not m is None:
|
if not m is None:
|
||||||
|
@ -423,6 +432,8 @@ for cipher_file in cipher_files:
|
||||||
chmsg = "Register cipher %s" % ciphername
|
chmsg = "Register cipher %s" % ciphername
|
||||||
chlognew = "%s\n %s" % (chlognew, chmsg)
|
chlognew = "%s\n %s" % (chlognew, chmsg)
|
||||||
fw.write (" grub_cipher_register (&%s);\n" % ciphername)
|
fw.write (" grub_cipher_register (&%s);\n" % ciphername)
|
||||||
|
for ctxsize in mdctxsizes:
|
||||||
|
fw.write (" COMPILE_TIME_ASSERT(%s <= GRUB_CRYPTO_MAX_MD_CONTEXT_SIZE);\n" % ctxsize)
|
||||||
for mdname in mdnames:
|
for mdname in mdnames:
|
||||||
chmsg = "Register digest %s" % mdname
|
chmsg = "Register digest %s" % mdname
|
||||||
chlognew = "%s\n %s" % (chlognew, chmsg)
|
chlognew = "%s\n %s" % (chlognew, chmsg)
|
||||||
|
|
Loading…
Reference in a new issue