aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxim Sobolev <sobomax@FreeBSD.org>2020-11-25 23:19:01 +0000
committerMaxim Sobolev <sobomax@FreeBSD.org>2020-11-25 23:19:01 +0000
commitfd2ef8ef5a054d9f26b6b36ea56a5414c7683e39 (patch)
tree5841a3c40ef762c7c24d1f8259bf64abfb3b035b
parentd1e0552937e18bef661fb9ace710bcaa1b5d5a80 (diff)
Notes
-rw-r--r--stand/efi/loader/copy.c8
-rw-r--r--sys/amd64/amd64/genassym.c1
-rw-r--r--sys/amd64/amd64/locore.S3
-rw-r--r--sys/amd64/include/vmparam.h8
-rw-r--r--sys/conf/ldscript.amd642
5 files changed, 15 insertions, 7 deletions
diff --git a/stand/efi/loader/copy.c b/stand/efi/loader/copy.c
index 1185c94740d6..17a4c57f8656 100644
--- a/stand/efi/loader/copy.c
+++ b/stand/efi/loader/copy.c
@@ -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;
}
diff --git a/sys/amd64/amd64/genassym.c b/sys/amd64/amd64/genassym.c
index f643eeeb07bd..f89c53e75508 100644
--- a/sys/amd64/amd64/genassym.c
+++ b/sys/amd64/amd64/genassym.c
@@ -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);
diff --git a/sys/amd64/amd64/locore.S b/sys/amd64/amd64/locore.S
index a9a7b5f3972c..3addc3fb10cd 100644
--- a/sys/amd64/amd64/locore.S
+++ b/sys/amd64/amd64/locore.S
@@ -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
diff --git a/sys/amd64/include/vmparam.h b/sys/amd64/include/vmparam.h
index 5d3010e2e254..c7ffb218dd4a 100644
--- a/sys/amd64/include/vmparam.h
+++ b/sys/amd64/include/vmparam.h
@@ -149,6 +149,14 @@
#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.
*
diff --git a/sys/conf/ldscript.amd64 b/sys/conf/ldscript.amd64
index d62b531454ec..c11ffb6ea49f 100644
--- a/sys/conf/ldscript.amd64
+++ b/sys/conf/ldscript.amd64
@@ -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