Unobfuscate "KERNLOAD" parameter on amd64. This change lines-up amd64 with the
i386 and the rest of supported architectures by defining KERNLOAD in the vmparam.h and getting rid of magic constant in the linker script, which albeit documented via comment but isn't programmatically accessible at a compile time. Use KERNLOAD to eliminate another (matching) magic constant 100 lines down inside unremarkable TU "copy.c" 3 levels deep in the EFI loader tree. Reviewed by: markj Approved by: markj MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D27355
This commit is contained in:
parent
aa9d346faa
commit
88da27eed4
@ -42,6 +42,7 @@ __FBSDID("$FreeBSD$");
|
||||
#if defined(__i386__) || defined(__amd64__)
|
||||
#include <machine/cpufunc.h>
|
||||
#include <machine/specialreg.h>
|
||||
#include <machine/vmparam.h>
|
||||
|
||||
/*
|
||||
* The code is excerpted from sys/x86/x86/identcpu.c: identify_cpu(),
|
||||
@ -89,8 +90,6 @@ running_on_hyperv(void)
|
||||
return (1);
|
||||
}
|
||||
|
||||
#define KERNEL_PHYSICAL_BASE (2*1024*1024)
|
||||
|
||||
static void
|
||||
efi_verify_staging_size(unsigned long *nr_pages)
|
||||
{
|
||||
@ -134,12 +133,11 @@ efi_verify_staging_size(unsigned long *nr_pages)
|
||||
start = p->PhysicalStart;
|
||||
end = start + p->NumberOfPages * EFI_PAGE_SIZE;
|
||||
|
||||
if (KERNEL_PHYSICAL_BASE < start ||
|
||||
KERNEL_PHYSICAL_BASE >= end)
|
||||
if (KERNLOAD < start || KERNLOAD >= end)
|
||||
continue;
|
||||
|
||||
available_pages = p->NumberOfPages -
|
||||
((KERNEL_PHYSICAL_BASE - start) >> EFI_PAGE_SHIFT);
|
||||
((KERNLOAD - start) >> EFI_PAGE_SHIFT);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -115,6 +115,7 @@ ASSYM(val_KPML4I, KPML4I);
|
||||
ASSYM(val_PML4PML4I, PML4PML4I);
|
||||
ASSYM(VM_MAXUSER_ADDRESS, VM_MAXUSER_ADDRESS);
|
||||
ASSYM(KERNBASE, KERNBASE);
|
||||
ASSYM(KERNLOAD, KERNLOAD);
|
||||
ASSYM(DMAP_MIN_ADDRESS, DMAP_MIN_ADDRESS);
|
||||
ASSYM(DMAP_MAX_ADDRESS, DMAP_MAX_ADDRESS);
|
||||
|
||||
|
@ -36,8 +36,9 @@
|
||||
/*
|
||||
* Compiled KERNBASE location
|
||||
*/
|
||||
.globl kernbase, loc_PTmap, loc_PDmap, loc_PDPmap, dmapbase, dmapend
|
||||
.globl kernbase, kernload, loc_PTmap, loc_PDmap, loc_PDPmap, dmapbase, dmapend
|
||||
.set kernbase,KERNBASE
|
||||
.set kernload,KERNLOAD
|
||||
.set dmapbase,DMAP_MIN_ADDRESS
|
||||
.set dmapend,DMAP_MAX_ADDRESS
|
||||
|
||||
|
@ -148,6 +148,14 @@
|
||||
#define PA_LOCK_COUNT 256
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Kernel physical load address. Needs to be aligned at 2MB superpage
|
||||
* boundary.
|
||||
*/
|
||||
#ifndef KERNLOAD
|
||||
#define KERNLOAD 0x200000
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Virtual addresses of things. Derived from the page directory and
|
||||
* page table indexes from pmap.h for precision.
|
||||
|
@ -5,8 +5,8 @@ ENTRY(btext)
|
||||
SEARCH_DIR("/usr/lib");
|
||||
SECTIONS
|
||||
{
|
||||
kernphys = kernload;
|
||||
/* Read-only sections, merged into text segment: */
|
||||
kernphys = 0x200000; /* 2MB superpage size */
|
||||
. = kernbase + kernphys + SIZEOF_HEADERS;
|
||||
/*
|
||||
* Use the AT keyword in order to set the right LMA that contains
|
||||
|
Loading…
Reference in New Issue
Block a user