summaryrefslogtreecommitdiffstats
path: root/sys/boot/common
diff options
context:
space:
mode:
authorru <ru@FreeBSD.org>2006-10-29 14:50:58 +0000
committerru <ru@FreeBSD.org>2006-10-29 14:50:58 +0000
commitf0e19d90c0fc3bf47cab297e03cd0fc782076767 (patch)
tree8b907f11b53d6e4725c11716fdf425629834fc0a /sys/boot/common
parent248a5cec67d92bfe2d6ecfe22e5e82d80fbbbdc6 (diff)
downloadFreeBSD-src-f0e19d90c0fc3bf47cab297e03cd0fc782076767.zip
FreeBSD-src-f0e19d90c0fc3bf47cab297e03cd0fc782076767.tar.gz
Because the BTX mini-kernel now uses flat memory mode and clients
are no longer limited to a virtual address space of 16 megabytes, only mask high two bits of a virtual address. This allows to load larger kernels (up to 1 gigabyte). Not masking addresses at all was a bad idea on machines with less than >3G of memory -- kernels are linked at 0xc0xxxxxx, and that would attempt to load a kernel at above 3G. By masking only two highest bits we stay within the safe limits while still allowing to boot larger kernels. (This is a safer reimplmentation of sys/boot/i386/boot2/boot.2.c rev. 1.71.) Prodded by: jhb Tested by: nyan (pc98)
Diffstat (limited to 'sys/boot/common')
-rw-r--r--sys/boot/common/load_elf.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/boot/common/load_elf.c b/sys/boot/common/load_elf.c
index cd983a9..be8f881 100644
--- a/sys/boot/common/load_elf.c
+++ b/sys/boot/common/load_elf.c
@@ -263,7 +263,7 @@ __elfN(loadimage)(struct preloaded_file *fp, elf_file_t ef, u_int64_t off)
#if __ELF_WORD_SIZE == 64
off = - (off & 0xffffffffff000000ull);/* x86_64 relocates after locore */
#else
- off = - (off & 0xff000000u); /* i386 relocates after locore */
+ off = - (off & 0xc0000000u); /* i386 relocates after locore */
#endif
#else
off = 0; /* other archs use direct mapped kernels */
OpenPOWER on IntegriCloud