Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src Add a SELFRELOC kernel option for the sake of documentation ...



details:   https://anonhg.NetBSD.org/src/rev/fd7b54e0a1a5
branches:  trunk
changeset: 374576:fd7b54e0a1a5
user:      manu <manu%NetBSD.org@localhost>
date:      Fri May 05 00:34:40 2023 +0000

description:
Add a SELFRELOC kernel option for the sake of documentation clarity.

Instead of telling that x86/boot(8) reloc command needs a kernel able
to self relocate, we can tell it needs a kernel built with the
SELFRELOC option. This keeps the reader from wondering what could
make a kernel able to self relocate.

diffstat:

 share/man/man4/options.4        |  10 +++++++++-
 share/man/man8/man8.x86/boot.8  |   8 +++++---
 sys/arch/amd64/amd64/locore.S   |   7 ++++++-
 sys/arch/amd64/conf/files.amd64 |   5 ++++-
 sys/arch/amd64/conf/std.amd64   |   4 +++-
 5 files changed, 27 insertions(+), 7 deletions(-)

diffs (129 lines):

diff -r 0ba5881ec8ad -r fd7b54e0a1a5 share/man/man4/options.4
--- a/share/man/man4/options.4  Thu May 04 22:31:17 2023 +0000
+++ b/share/man/man4/options.4  Fri May 05 00:34:40 2023 +0000
@@ -1,4 +1,4 @@
-.\"    $NetBSD: options.4,v 1.523 2022/08/28 14:29:05 riastradh Exp $
+.\"    $NetBSD: options.4,v 1.524 2023/05/05 00:34:41 manu Exp $
 .\"
 .\" Copyright (c) 1996
 .\"    Perry E. Metzger.  All rights reserved.
@@ -1307,6 +1307,14 @@ See
 and
 .Xr vnconfig 8
 for more information.
+.It Cd options SELFRELOC
+Make the kernel able to self relocate at bootstrap, so that it can
+run whatever its load address is. 
+This is intented to be used withe the 
+.Ic reloc
+boostrap command documented in
+.Xr x86/boot 8 ,
+to workaround UEFI bugs, and is only available on amd64.
 .It Cd options SPLDEBUG
 Help the kernel programmer find bugs related to the interrupt priority
 level.
diff -r 0ba5881ec8ad -r fd7b54e0a1a5 share/man/man8/man8.x86/boot.8
--- a/share/man/man8/man8.x86/boot.8    Thu May 04 22:31:17 2023 +0000
+++ b/share/man/man8/man8.x86/boot.8    Fri May 05 00:34:40 2023 +0000
@@ -1,4 +1,4 @@
-.\"    $NetBSD: boot.8,v 1.27 2023/04/24 13:55:45 manu Exp $
+.\"    $NetBSD: boot.8,v 1.28 2023/05/05 00:34:40 manu Exp $
 .\"
 .\" Copyright (c) 1991, 1993
 .\"    The Regents of the University of California.  All rights reserved.
@@ -655,8 +655,10 @@ Reboot the system.
 .It Ic reloc Op Va default No \(or Va none No \(or Va address
 [Only UEFI boot] Sets where the kernel is copied by bootstrap
 before it is started. Values other than default require a kernel
-that can relocate itself at the right address, otherwise a crash
-occurs at boot time.
+built with the
+.Cd SELFRELOC
+option, so that can relocate itself at the right address,
+otherwise a crash occurs at boot time.
 .Bl -tag -width default
 .It Va default
 Copy the kernel at ELF header load address, this is the historical
diff -r 0ba5881ec8ad -r fd7b54e0a1a5 sys/arch/amd64/amd64/locore.S
--- a/sys/arch/amd64/amd64/locore.S     Thu May 04 22:31:17 2023 +0000
+++ b/sys/arch/amd64/amd64/locore.S     Fri May 05 00:34:40 2023 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: locore.S,v 1.219 2023/04/20 00:42:23 manu Exp $        */
+/*     $NetBSD: locore.S,v 1.220 2023/05/05 00:34:41 manu Exp $        */
 
 /*
  * Copyright-o-rama!
@@ -156,6 +156,7 @@
 #include "opt_ddbparam.h"
 #include "opt_modular.h"
 #include "opt_realmem.h"
+#include "opt_selfreloc.h"
 
 #include "opt_compat_netbsd.h"
 #include "opt_compat_netbsd32.h"
@@ -456,6 +457,7 @@ ENTRY(start)
 #ifndef XENPV
        .code32
 
+#ifdef SELFRELOC
        call    next
 next:  pop     %edi
        sub     $(next - kernel_text), %edi 
@@ -463,6 +465,7 @@ next:       pop     %edi
        /* If not KERNBASE, reloc ourselves to KERNBASE */
        cmpl    $(KERNTEXTOFF_LO - KERNBASE_LO), %edi
        jne     selfreloc_start
+#endif /* SELFRELOC */
 
        /* Warm boot */
        movw    $0x1234,0x472
@@ -1766,6 +1769,7 @@ LABEL(nomds_leave)
        NOMDS_LEAVE
 LABEL(nomds_leave_end)
 
+#ifdef SELFRELOC
 /*
  * selfreloc(loadddr edi)
  * This is adapted from sys/arch/i386/i386/locore.S
@@ -1900,3 +1904,4 @@ gdtr:
 gdtrr:
        .quad
 END(selfreloc_start)
+#endif /* SELFRELOC */
diff -r 0ba5881ec8ad -r fd7b54e0a1a5 sys/arch/amd64/conf/files.amd64
--- a/sys/arch/amd64/conf/files.amd64   Thu May 04 22:31:17 2023 +0000
+++ b/sys/arch/amd64/conf/files.amd64   Fri May 05 00:34:40 2023 +0000
@@ -1,4 +1,4 @@
-#      $NetBSD: files.amd64,v 1.120 2020/10/21 13:31:51 christos Exp $
+#      $NetBSD: files.amd64,v 1.121 2023/05/05 00:34:41 manu Exp $
 #
 # new style config file for amd64 architecture
 #
@@ -20,6 +20,9 @@ defparam opt_physmem.h        PHYSMEM_MAX_ADDR 
 # Enable GCC spectre V2 mitigation options
 defflag opt_spectre.h  SPECTRE_V2_GCC_MITIGATION
 
+# Enable kernel self-relocation at bootstrap
+defflag opt_selfreloc.h SELFRELOC
+
 #
 # XXX these are just here at the moment so that we can share files
 # with the i386 (they include the opt_*.h for these)
diff -r 0ba5881ec8ad -r fd7b54e0a1a5 sys/arch/amd64/conf/std.amd64
--- a/sys/arch/amd64/conf/std.amd64     Thu May 04 22:31:17 2023 +0000
+++ b/sys/arch/amd64/conf/std.amd64     Fri May 05 00:34:40 2023 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: std.amd64,v 1.12 2020/04/25 15:26:16 bouyer Exp $
+# $NetBSD: std.amd64,v 1.13 2023/05/05 00:34:41 manu Exp $
 #
 # standard, required NetBSD/amd64 'options'
 
@@ -15,6 +15,8 @@ options       MULTIPROCESSOR
 options        CHILD_MAX=1024  # 160 is too few
 options        OPEN_MAX=1024   # 128 is too few
 
+options        SELFRELOC
+
 mainbus0 at root
 cpu* at mainbus?
 ioapic* at mainbus? apid ?



Home | Main Index | Thread Index | Old Index