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:
Maxim Sobolev 2020-11-25 23:19:01 +00:00
parent d1e0552937
commit fd2ef8ef5a
5 changed files with 15 additions and 7 deletions

View File

@ -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;
}

View File

@ -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);

View File

@ -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

View File

@ -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.

View File

@ -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