Module Name: src
Committed By: manu
Date: Thu Jan 9 00:42:24 UTC 2020
Modified Files:
src/sys/arch/amd64/amd64: locore.S machdep.c
src/sys/arch/amd64/conf: GENERIC files.amd64 kern.ldscript
Log Message:
Rollback multiboot2 for amd64, as requested by core
To generate a diff of this commit:
cvs rdiff -u -r1.197 -r1.198 src/sys/arch/amd64/amd64/locore.S
cvs rdiff -u -r1.344 -r1.345 src/sys/arch/amd64/amd64/machdep.c
cvs rdiff -u -r1.553 -r1.554 src/sys/arch/amd64/conf/GENERIC
cvs rdiff -u -r1.114 -r1.115 src/sys/arch/amd64/conf/files.amd64
cvs rdiff -u -r1.30 -r1.31 src/sys/arch/amd64/conf/kern.ldscript
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/amd64/amd64/locore.S
diff -u src/sys/arch/amd64/amd64/locore.S:1.197 src/sys/arch/amd64/amd64/locore.S:1.198
--- src/sys/arch/amd64/amd64/locore.S:1.197 Wed Jan 8 20:59:18 2020
+++ src/sys/arch/amd64/amd64/locore.S Thu Jan 9 00:42:24 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: locore.S,v 1.197 2020/01/08 20:59:18 skrll Exp $ */
+/* $NetBSD: locore.S,v 1.198 2020/01/09 00:42:24 manu Exp $ */
/*
* Copyright-o-rama!
@@ -158,7 +158,6 @@
#include "opt_compat_netbsd.h"
#include "opt_compat_netbsd32.h"
-#include "opt_multiboot.h"
#include "opt_xen.h"
#include "opt_svs.h"
@@ -178,13 +177,6 @@
#include <machine/frameasm.h>
#include <machine/cputypes.h>
-#ifndef XENPV
-#include <arch/i386/include/multiboot.h>
-#endif
-
-#define CODE_SEGMENT 0x08
-#define DATA_SEGMENT 0x10
-
#if NLAPIC > 0
#include <machine/i82489reg.h>
#endif
@@ -432,50 +424,6 @@ END(farjmp64)
.space 512
tmpstk:
-.section multiboot,"a"
-#if defined(MULTIBOOT)
- .align 8
- .globl Multiboot2_Header
-_C_LABEL(Multiboot2_Header):
- .int MULTIBOOT2_HEADER_MAGIC
- .int MULTIBOOT2_ARCHITECTURE_I386
- .int Multiboot2_Header_end - Multiboot2_Header
- .int -(MULTIBOOT2_HEADER_MAGIC + MULTIBOOT2_ARCHITECTURE_I386 \
- + (Multiboot2_Header_end - Multiboot2_Header))
-
- .int 1 /* MULTIBOOT_HEADER_TAG_INFORMATION_REQUEST */
- .int 12 /* sizeof(multiboot_header_tag_information_request) */
- /* + sizeof(uint32_t) * requests */
- .int 4 /* MULTIBOOT_TAG_TYPE_BASIC_MEMINFO */
- .align 8
-
- .int 3 /* MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS */
- .int 16 /* sizeof(struct multiboot_tag_efi64) */
- .quad (multiboot2_entry - KERNBASE)
- .align 8
-
- .int 9 /* MULTIBOOT_HEADER_TAG_ENTRY_ADDRESS_EFI64 */
- .int 16 /* sizeof(struct multiboot_tag_efi64) */
- .quad (multiboot2_entry - KERNBASE)
- .align 8
-
-#if notyet
- /*
- * Could be used to get an early console for debug,
- * but this is broken.
- */
- .int 7 /* MULTIBOOT_HEADER_TAG_EFI_BS */
- .int 8 /* sizeof(struct multiboot_tag) */
- .align 8
-#endif
-
- .int 0 /* MULTIBOOT_HEADER_TAG_END */
- .int 8 /* sizeof(struct multiboot_tag) */
- .align 8
- .globl Multiboot2_Header_end
-_C_LABEL(Multiboot2_Header_end):
-#endif /* MULTIBOOT */
-
/*
* Some hackage to deal with 64bit symbols in 32 bit mode.
* This may not be needed if things are cleaned up a little.
@@ -492,700 +440,6 @@ ENTRY(start)
/* Warm boot */
movw $0x1234,0x472
-#if defined(MULTIBOOT)
- jmp .Lnative_loader
-
-
-multiboot2_entry:
- .code64
- /*
- * multiboot2 entry point. We are left here without
- * stack and with no idea of where we were loaded in memory.
- * The only inputs are
- * %eax MULTIBOOT2_BOOTLOADER_MAGIC
- * %ebx pointer to multiboot_info
- *
- * Here we will:
- * - copy the kernel to 0x200000 (KERNTEXTOFF - KERNBASE)
- * as almost all the code in locore.S assume it is there.
- * This is derived from
- * src/sys/arch/i386/stand/efiboot/bootx64/startprog64.S
- * - copy multiboot_info, as done in multiboot_pre_reloc() from
- * src/sys/arch/x86/x86/multiboot2.c
- * Unfortunately we cannot call that function as there is
- * no simple way to build it as 32 bit code in a 64 bit kernel.
- * - Copy ELF symbols, also as in multiboot_pre_reloc()
- */
-
- cli
-
- /*
- * Discover our load address and use it to get start address
- */
- mov $_RELOC(tmpstk),%rsp
- call next
-next: pop %r8
- sub $(next - start), %r8
-
- /*
- * Save multiboot_info for later. We cannot use
- * temporary stack for that since we are going to
- * overwrite it.
- */
- movl %ebx, (multiboot2_info_ptr - start)(%r8)
-
- /*
- * Get relocated multiboot2_loader entry point in %r9
- */
- mov $(KERNTEXTOFF - KERNBASE), %r9
- add $(multiboot2_loader - kernel_text), %r9
-
- /* Copy kernel */
- mov $(KERNTEXTOFF - KERNBASE), %rdi /* dest */
- mov %r8, %rsi
- sub $(start - kernel_text), %rsi /* src */
- mov $(__kernel_end - kernel_text), %rcx /* size */
- mov %rcx, %r12
- movq %rdi, %r11 /* for misaligned check */
-
-#if !defined(NO_OVERLAP)
- movq %rdi, %r13
- subq %rsi, %r13
-#endif
-
- shrq $3, %rcx /* count for copy by words */
- jz 8f /* j if less than 8 bytes */
-
- lea -8(%rdi, %r12), %r14 /* target address of last 8 */
- mov -8(%rsi, %r12), %r15 /* get last word */
-#if !defined(NO_OVERLAP)
- cmpq %r12, %r13 /* overlapping? */
- jb 10f
-#endif
-
-/*
- * Non-overlaping, copy forwards.
- * Newer Intel cpus (Nehalem) will do 16byte read/write transfers
- * if %ecx is more than 76.
- * AMD might do something similar some day.
- */
- and $7, %r11 /* destination misaligned ? */
- jnz 12f
- rep
- movsq
- mov %r15, (%r14) /* write last word */
- jmp .Lcopy_done
-
-/*
- * Destination misaligned
- * AMD say it is better to align the destination (not the source).
- * This will also re-align copies if the source and dest are both
- * misaligned by the same amount)
- * (I think Nehalem will use its accelerated copy if the source
- * and destination have the same alignment.)
- */
-12:
- lea -9(%r11, %r12), %rcx /* post re-alignment count */
- neg %r11 /* now -1 .. -7 */
- mov (%rsi), %r12 /* get first word */
- mov %rdi, %r13 /* target for first word */
- lea 8(%rsi, %r11), %rsi
- lea 8(%rdi, %r11), %rdi
- shr $3, %rcx
- rep
- movsq
- mov %r12, (%r13) /* write first word */
- mov %r15, (%r14) /* write last word */
- jmp .Lcopy_done
-
-#if !defined(NO_OVERLAP)
-/* Must copy backwards.
- * Reverse copy is probably easy to code faster than 'rep movds'
- * since that requires (IIRC) an extra clock every 3 iterations (AMD).
- * However I don't suppose anything cares that much!
- * The big cost is the std/cld pair - reputedly 50+ cycles on Netburst P4.
- * The copy is aligned with the buffer start (more likely to
- * be a multiple of 8 than the end).
- */
-10:
- lea -8(%rsi, %rcx, 8), %rsi
- lea -8(%rdi, %rcx, 8), %rdi
- std
- rep
- movsq
- cld
- mov %r15, (%r14) /* write last bytes */
- jmp .Lcopy_done
-#endif
-
-/* Less than 8 bytes to copy, copy by bytes */
-/* Intel Nehalem optimise 'rep movsb' for <= 7 bytes (9-15 clocks).
- * For longer transfers it is 50+ !
- */
-8: mov %r12, %rcx
-
-#if !defined(NO_OVERLAP)
- cmpq %r12, %r13 /* overlapping? */
- jb 81f
-#endif
-
- /* nope, copy forwards. */
- rep
- movsb
- jmp .Lcopy_done
-
-#if !defined(NO_OVERLAP)
-/* Must copy backwards */
-81:
- lea -1(%rsi, %rcx), %rsi
- lea -1(%rdi, %rcx), %rdi
- std
- rep
- movsb
- cld
-#endif
- /* End of copy kernel */
-.Lcopy_done:
-
- mov %r8, %rdi /* %rdi: loaded start address */
- mov %r9, %rsi /* %rsi: kernel entry address */
-
- /* Prepare jump address */
- lea (multiboot2_loader32a - start)(%rdi), %rax
- movl %eax, (multiboot2_loader32r - start)(%rdi)
-
- /* Setup GDT */
- lea (gdt - start)(%rdi), %rax
- mov %rax, (gdtrr - start)(%rdi)
- lgdt (gdtr - start)(%rdi)
-
- /* Jump to set %cs */
- ljmp *(multiboot2_loader32r - start)(%rdi)
-
- .align 4
- .code32
-multiboot2_loader32a:
- movl $DATA_SEGMENT, %eax
- movw %ax, %ds
- movw %ax, %es
- movw %ax, %fs
- movw %ax, %gs
- movw %ax, %ss
-
- /* Already set new stack pointer */
- movl %esp, %ebp
-
- /* Disable Paging in CR0 */
- movl %cr0, %eax
- andl $(~CR0_PG), %eax
- movl %eax, %cr0
-
- /* Disable PAE in CR4 */
- movl %cr4, %eax
- andl $(~CR4_PAE), %eax
- movl %eax, %cr4
-
- jmp multiboot2_loader32b
-
- .align 4
-multiboot2_loader32b:
- xor %eax, %eax
-
- /*
- * Reload multiboot info from target location
- */
- movl _RELOC(multiboot2_info_ptr), %ebx
- call *%esi
-
- .align 16
-multiboot2_loader32r:
- .long 0
- .long CODE_SEGMENT
- .align 16
-gdt:
- .long 0, 0
- .byte 0xff, 0xff, 0x00, 0x00, 0x00, 0x9f, 0xcf, 0x00
- .byte 0xff, 0xff, 0x00, 0x00, 0x00, 0x93, 0xcf, 0x00
-gdtr:
- .word gdtr - gdt
-gdtrr:
- .quad 0
-
-multiboot2_info_ptr:
- .long 0
-
- .align 16
-multiboot2_loader:
- /*
- * Here we would like to call multiboot2_pre_reloc() but
- * we do not yet run in long mode, which means we need
- * a 32 bit version of that function. Unfortunately,
- * mixing 32-bit and 64-bit object file at link time
- * does not work. As a result, we need to do the job
- * of multiboot2_pre_reloc() here in assembly.
- */
-#if multiboot2_pre_reloc_would_be_built_as_ia32
- movl $_RELOC(tmpstk),%esp
- mov %ebx,%edi /* Address of Multiboot information */
- call _C_LABEL(multiboot2_pre_reloc)
-#else
- /*
- * Copy multiboot_info
- */
- movl $_RELOC(multiboot_info),%edi
- movl %ebx,%esi
- movl (%ebx),%ecx
- shr $2,%ecx
- rep
- movsl
-
- /*
- * Set multiboot2_enabled
- */
- movl $1,%eax
- movl %eax,RELOC(multiboot2_enabled)
-
- /*
- * Look for MULTIBOOT_TAG_TYPE_ELF_SECTIONS
- */
- movl $_RELOC(multiboot_info),%esi
- movl (%esi),%ecx /* multiboot_info size */
- movl %esi,%edx
- addl %ecx,%edx /* %edx: end of multiboot_info */
- addl $8,%esi /* skip two words of multiboot_info header */
-mbt_loop:
- movl (%esi),%ebx /* mbt->type */
- cmpl $9,%ebx /* 9 for MULTIBOOT_TAG_TYPE_ELF_SECTIONS */
- je found_elf_sections
-
- movl 4(%esi),%eax /* mbt->size */
- addl %eax,%esi
- addl $7,%esi /* roundup(%esi,8) */
- andl $~7,%esi
-
- cmpl %edx,%esi
- jle mbt_loop
- jmp elf_sections_done
-
-found_elf_sections:
- movl $0,%eax
- movl %esp,%ebp /* %ebp is esymp */
- push %eax
- push $KERNBASE_LO /* kernbase */
- push $_RELOC(end) /* void *end */
- push %ebp /* int **esymp */
- push $_RELOC(has_syms) /* bool *has_symsp */
- push $_RELOC(Multiboot_Symbols)/* struct multiboot_symbol *ms */
- push %esi /* struct multiboot_tag_elf_sections *mbt_elf */
- call multiboot2_copy_syms32
-
- /* Asjust esym as a 64 bit pointer if esymp was set */
- movl (%ebp),%eax
- testl %eax,%eax /* esymp = NULL? */
- jz elf_sections_done
-
- movl $RELOC(esym),%ebp
- movl %eax,(%ebp)
- movl $KERNBASE_HI,4(%ebp)
-
- jmp elf_sections_done
-
- /*
- * This is multiboot2_copy_syms() from
- * src/sys/arch/x86/x86/multiboot2.c
- * built with -m32 -mcmodel=32 -D_LOCORE_64
- */
-multiboot2_copy_syms32:
- push %ebp
- mov %esp,%ebp
- push %edi
- push %esi
- push %ebx
- sub $0x20,%esp
- mov 0x8(%ebp),%esi
- /* for (i = 0; i < mbt_elf->num && symtabp == NULL && */
- mov 0x8(%esi),%ebx
- test %ebx,%ebx
- je copy_syms_4ce
- add $0x14,%esi
- mov %esi,%eax
- xor %edx,%edx
- jmp copy_syms_3a0
-copy_syms_395:
- cmp %edx,%ebx
- jbe copy_syms_4ce
-copy_syms_39d:
- add $0x40,%eax
-copy_syms_3a0:
- add $0x1,%edx
- /* if ((shdrp->sh_type == SHT_SYMTAB) && */
- cmpl $0x2,0x4(%eax)
- jne copy_syms_395
- /* shdrp->sh_link != SHN_UNDEF) { */
- mov 0x28(%eax),%ecx
- /* if ((shdrp->sh_type == SHT_SYMTAB) && */
- test %ecx,%ecx
- je copy_syms_395
- /* [shdrp->sh_link]; */
- shl $0x6,%ecx
- /* shdrp2 = &((locore_Elf_Shdr *)mbt_elf->sections) */
- add %esi,%ecx
- /* if (shdrp2->sh_type == SHT_STRTAB) { */
- cmpl $0x3,0x4(%ecx)
- jne copy_syms_395
- /* for (i = 0; i < mbt_elf->num && symtabp == NULL && */
- cmp %ebx,%edx
- jae copy_syms_6d1
- test %eax,%eax
- je copy_syms_608
- /* if (symtabp == NULL || strtabp == NULL) */
-copy_syms_3cb:
- test %ecx,%ecx
- lea 0x0(%esi),%esi
- je copy_syms_4ce
- /* symaddr = symtabp->sh_addr; */
- mov 0x10(%eax),%edi
- mov %edi,-0x10(%ebp)
- mov 0x14(%eax),%ebx
- mov %ebx,-0x18(%ebp)
- /* straddr = strtabp->sh_addr; */
- mov 0x10(%ecx),%esi
- mov %esi,-0x14(%ebp)
- mov 0x14(%ecx),%ebx
- mov %ebx,-0x20(%ebp)
- /* symsize = symtabp->sh_size; */
- mov 0x20(%eax),%ebx
- /* strsize = strtabp->sh_size; */
- mov 0x20(%ecx),%eax
- mov %eax,-0x1c(%ebp)
- cmp 0x18(%ebp),%edi
- jae copy_syms_4d6
- cmp %esi,0x18(%ebp)
- ja copy_syms_4e0
- jae copy_syms_54d
- /* cp2dst = (locore_Elf_Addr)(uintptr_t)endp + cp1size; */
-copy_syms_40f:
- mov -0x1c(%ebp),%ecx
- mov %ecx,%eax
- xor %edx,%edx
- /* cp1dst = (locore_Elf_Addr)(uintptr_t)endp; */
- mov 0x18(%ebp),%esi
- xor %edi,%edi
- /* cp2dst = (locore_Elf_Addr)(uintptr_t)endp + cp1size; */
- add %esi,%eax
- adc %edi,%edx
- mov %eax,-0x2c(%ebp)
- mov %edx,-0x28(%ebp)
- /* (void)memcpy((void *)(uintptr_t)cp1dst, */
- mov %ecx,%eax
- mov 0x18(%ebp),%edi
- mov -0x14(%ebp),%esi
- cmp $0x4,%ecx
- jae copy_syms_5e8
-copy_syms_436:
- test $0x2,%al
- je copy_syms_43c
- movsw %ds:(%esi),%es:(%edi)
-copy_syms_43c:
- test $0x1,%al
- je copy_syms_441
- movsb %ds:(%esi),%es:(%edi)
- /* (void)memcpy((void *)(uintptr_t)cp2dst, */
-copy_syms_441:
- mov %ebx,%eax
- mov 0x18(%ebp),%edi
- mov -0x1c(%ebp),%esi
- add %esi,%edi
- mov -0x10(%ebp),%esi
- cmp $0x4,%ebx
- jae copy_syms_5c4
-copy_syms_457:
- test $0x2,%al
- je copy_syms_45d
- movsw %ds:(%esi),%es:(%edi)
-copy_syms_45d:
- test $0x1,%al
- je copy_syms_462
- movsb %ds:(%esi),%es:(%edi)
- /* symstart = (cp1src == symaddr) ? cp1dst : cp2dst; */
-copy_syms_462:
- mov -0x18(%ebp),%edx
- mov -0x20(%ebp),%edi
- xor %edi,%edx
- mov -0x10(%ebp),%eax
- mov -0x14(%ebp),%ecx
- xor %ecx,%eax
- or %eax,%edx
- je copy_syms_6ba
- mov -0x2c(%ebp),%eax
- mov %eax,-0x24(%ebp)
- mov %ecx,-0x10(%ebp)
- mov %edi,-0x18(%ebp)
- /* strstart = (cp1src == straddr) ? cp1dst : cp2dst; */
-copy_syms_486:
- mov -0x20(%ebp),%edx
- xor -0x18(%ebp),%edx
- mov -0x14(%ebp),%eax
- xor -0x10(%ebp),%eax
- or %eax,%edx
- je copy_syms_545
-copy_syms_49a:
- mov -0x2c(%ebp),%esi
- /* ms->s_symstart = symstart + kernbase; */
-copy_syms_49d:
- mov -0x24(%ebp),%eax
- add 0x1c(%ebp),%eax
- mov 0xc(%ebp),%edi
- mov %eax,(%edi)
- /* ms->s_symsize = symsize; */
- mov %edi,%eax
- mov %ebx,0x4(%edi)
- /* ms->s_strstart = strstart + kernbase; */
- add 0x1c(%ebp),%esi
- mov %esi,0x8(%edi)
- /* ms->s_strsize = strsize; */
- mov -0x1c(%ebp),%edi
- mov %edi,0xc(%eax)
- /* *has_symsp = true; */
- mov 0x10(%ebp),%eax
- movb $0x1,(%eax)
- /* *esymp = (int *)((uintptr_t)endp + symsize + strsize + kernbase); */
- mov 0x18(%ebp),%eax
- add 0x1c(%ebp),%eax
- add %eax,%ebx
- add %edi,%ebx
- mov 0x14(%ebp),%eax
- mov %ebx,(%eax)
-copy_syms_4ce:
- add $0x20,%esp
- pop %ebx
- pop %esi
- pop %edi
- pop %ebp
- ret
-copy_syms_4d6:
- jbe copy_syms_54d
- mov -0x14(%ebp),%eax
- cmp %eax,0x18(%ebp)
- jbe copy_syms_54d
- /* cp1dst = (locore_Elf_Addr)(uintptr_t)endp; */
-copy_syms_4e0:
- mov 0x18(%ebp),%eax
- mov %eax,-0x24(%ebp)
- /* cp2dst = (locore_Elf_Addr)(uintptr_t)endp + cp1size; */
- mov %ebx,%eax
- xor %edx,%edx
- /* cp1dst = (locore_Elf_Addr)(uintptr_t)endp; */
- mov 0x18(%ebp),%esi
- xor %edi,%edi
- /* cp2dst = (locore_Elf_Addr)(uintptr_t)endp + cp1size; */
- add %esi,%eax
- adc %edi,%edx
- mov %eax,-0x2c(%ebp)
- mov %edx,-0x28(%ebp)
- /* (void)memcpy((void *)(uintptr_t)cp1dst, */
- mov %ebx,%eax
- mov 0x18(%ebp),%edi
- mov -0x10(%ebp),%esi
- cmp $0x4,%ebx
- jae copy_syms_5a8
-copy_syms_50a:
- test $0x2,%al
- jne copy_syms_57b
- test $0x1,%al
- jne copy_syms_578
- /* (void)memcpy((void *)(uintptr_t)cp2dst, */
-copy_syms_512:
- mov -0x1c(%ebp),%ecx
- mov %ecx,%eax
- mov 0x18(%ebp),%edi
- add %ebx,%edi
- mov -0x14(%ebp),%esi
- cmp $0x4,%ecx
- jae copy_syms_584
-copy_syms_524:
- test $0x2,%al
- jne copy_syms_56c
- test $0x1,%al
- je copy_syms_486
-copy_syms_530:
- movsb %ds:(%esi),%es:(%edi)
- /* strstart = (cp1src == straddr) ? cp1dst : cp2dst; */
- mov -0x20(%ebp),%edx
- xor -0x18(%ebp),%edx
- mov -0x14(%ebp),%eax
- xor -0x10(%ebp),%eax
- or %eax,%edx
- jne copy_syms_49a
-copy_syms_545:
- mov 0x18(%ebp),%esi
- jmp copy_syms_49d
- /* if (symaddr < straddr) { */
-copy_syms_54d:
- mov -0x20(%ebp),%edi
- cmp %edi,-0x18(%ebp)
- jb copy_syms_4e0
- ja copy_syms_40f
- mov -0x14(%ebp),%edi
- cmp %edi,-0x10(%ebp)
- jb copy_syms_4e0
- jmp copy_syms_40f
- /* (void)memcpy((void *)(uintptr_t)cp2dst, */
-copy_syms_56c:
- movsw %ds:(%esi),%es:(%edi)
- test $0x1,%al
- je copy_syms_486
- jmp copy_syms_530
- /* (void)memcpy((void *)(uintptr_t)cp1dst, */
-copy_syms_578:
- movsb %ds:(%esi),%es:(%edi)
- jmp copy_syms_512
-copy_syms_57b:
- movsw %ds:(%esi),%es:(%edi)
- test $0x1,%al
- nop
- je copy_syms_512
- jmp copy_syms_578
- /* (void)memcpy((void *)(uintptr_t)cp2dst, */
-copy_syms_584:
- test $0x1,%edi
- jne copy_syms_650
-copy_syms_590:
- test $0x2,%edi
- jne copy_syms_63c
-copy_syms_59c:
- mov %eax,%ecx
- shr $0x2,%ecx
- rep movsl %ds:(%esi),%es:(%edi)
- jmp copy_syms_524
- /* (void)memcpy((void *)(uintptr_t)cp1dst, */
-copy_syms_5a8:
- test $0x1,%edi
- jne copy_syms_626
-copy_syms_5b0:
- test $0x2,%edi
- jne copy_syms_615
-copy_syms_5b8:
- mov %eax,%ecx
- shr $0x2,%ecx
- rep movsl %ds:(%esi),%es:(%edi)
- jmp copy_syms_50a
- /* (void)memcpy((void *)(uintptr_t)cp2dst, */
-copy_syms_5c4:
- test $0x1,%edi
- jne copy_syms_666
-copy_syms_5d0:
- test $0x2,%edi
- jne copy_syms_6a6
-copy_syms_5dc:
- mov %eax,%ecx
- shr $0x2,%ecx
- rep movsl %ds:(%esi),%es:(%edi)
- jmp copy_syms_457
- /* (void)memcpy((void *)(uintptr_t)cp1dst, */
-copy_syms_5e8:
- test $0x1,%edi
- jne copy_syms_68d
-copy_syms_5f4:
- test $0x2,%edi
- jne copy_syms_679
-copy_syms_5fc:
- mov %eax,%ecx
- shr $0x2,%ecx
- rep movsl %ds:(%esi),%es:(%edi)
- jmp copy_syms_436
- /* for (i = 0; i < mbt_elf->num && symtabp == NULL && */
-copy_syms_608:
- test %ecx,%ecx
- jne copy_syms_4ce
- jmp copy_syms_39d
- /* (void)memcpy((void *)(uintptr_t)cp1dst, */
-copy_syms_615:
- movzwl (%esi),%edx
- mov %dx,(%edi)
- add $0x2,%edi
- add $0x2,%esi
- sub $0x2,%eax
- jmp copy_syms_5b8
-copy_syms_626:
- movzbl (%esi),%eax
- mov %al,(%edi)
- mov 0x18(%ebp),%eax
- lea 0x1(%eax),%edi
- add $0x1,%esi
- lea -0x1(%ebx),%eax
- jmp copy_syms_5b0
- /* (void)memcpy((void *)(uintptr_t)cp2dst, */
-copy_syms_63c:
- movzwl (%esi),%edx
- mov %dx,(%edi)
- add $0x2,%edi
- add $0x2,%esi
- sub $0x2,%eax
- jmp copy_syms_59c
-copy_syms_650:
- movzbl (%esi),%eax
- mov %al,(%edi)
- add $0x1,%edi
- add $0x1,%esi
- mov -0x1c(%ebp),%eax
- sub $0x1,%eax
- jmp copy_syms_590
-copy_syms_666:
- movzbl (%esi),%eax
- mov %al,(%edi)
- add $0x1,%edi
- add $0x1,%esi
- lea -0x1(%ebx),%eax
- jmp copy_syms_5d0
- /* (void)memcpy((void *)(uintptr_t)cp1dst, */
-copy_syms_679:
- movzwl (%esi),%edx
- mov %dx,(%edi)
- add $0x2,%edi
- add $0x2,%esi
- sub $0x2,%eax
- jmp copy_syms_5fc
-copy_syms_68d:
- movzbl (%esi),%eax
- mov %al,(%edi)
- mov 0x18(%ebp),%eax
- lea 0x1(%eax),%edi
- add $0x1,%esi
- mov -0x1c(%ebp),%eax
- sub $0x1,%eax
- jmp copy_syms_5f4
- /* (void)memcpy((void *)(uintptr_t)cp2dst, */
-copy_syms_6a6:
- movzwl (%esi),%edx
- mov %dx,(%edi)
- add $0x2,%edi
- add $0x2,%esi
- sub $0x2,%eax
- jmp copy_syms_5dc
-copy_syms_6ba:
- mov -0x14(%ebp),%eax
- mov %eax,-0x10(%ebp)
- mov -0x20(%ebp),%eax
- mov %eax,-0x18(%ebp)
- /* cp1dst = (locore_Elf_Addr)(uintptr_t)endp; */
- mov 0x18(%ebp),%eax
- mov %eax,-0x24(%ebp)
- jmp copy_syms_486
- /* if (symtabp == NULL || strtabp == NULL) */
-copy_syms_6d1:
- test %eax,%eax
- jne copy_syms_3cb
- jmp copy_syms_4ce
-elf_sections_done:
-#endif
-
- jmp .Lbegin
-
-
-#endif /* MULTIBOOT */
-
-.Lnative_loader:
/*
* Load parameters from the stack (32 bits):
* boothowto, [bootdev], bootinfo, esym, biosextmem, biosbasemem
@@ -1308,7 +562,6 @@ elf_sections_done:
* Done with the parameters!
*/
-.Lbegin:
/* First, reset the PSL. */
pushl $PSL_MBO
popfl
@@ -1624,16 +877,6 @@ longmode_hi:
leaq (USPACE-FRAMESIZE)(%rax),%rsp
xorq %rbp,%rbp /* mark end of frames */
-#if defined(MULTIBOOT)
- /* It is now safe to parse the Multiboot information structure
- * we saved before from C code. Note that we cannot delay its
- * parsing any more because initgdt (called below) needs to make
- * use of this information.
- */
- pushq %rsi
- call _C_LABEL(multiboot2_post_reloc)
- popq %rsi
-#endif
xorw %ax,%ax
movw %ax,%gs
movw %ax,%fs
Index: src/sys/arch/amd64/amd64/machdep.c
diff -u src/sys/arch/amd64/amd64/machdep.c:1.344 src/sys/arch/amd64/amd64/machdep.c:1.345
--- src/sys/arch/amd64/amd64/machdep.c:1.344 Fri Dec 13 20:14:25 2019
+++ src/sys/arch/amd64/amd64/machdep.c Thu Jan 9 00:42:24 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: machdep.c,v 1.344 2019/12/13 20:14:25 ad Exp $ */
+/* $NetBSD: machdep.c,v 1.345 2020/01/09 00:42:24 manu Exp $ */
/*
* Copyright (c) 1996, 1997, 1998, 2000, 2006, 2007, 2008, 2011
@@ -110,10 +110,9 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.344 2019/12/13 20:14:25 ad Exp $");
+__KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.345 2020/01/09 00:42:24 manu Exp $");
#include "opt_modular.h"
-#include "opt_multiboot.h"
#include "opt_user_ldt.h"
#include "opt_ddb.h"
#include "opt_kgdb.h"
@@ -185,8 +184,6 @@ __KERNEL_RCSID(0, "$NetBSD: machdep.c,v
#include <x86/cpuvar.h>
#include <x86/machdep.h>
-#include <arch/i386/include/multiboot.h>
-
#include <x86/x86/tsc.h>
#include <dev/isa/isareg.h>
@@ -374,10 +371,6 @@ cpu_startup(void)
initmsgbuf((void *)msgbuf_vaddr, round_page(sz));
-#ifdef MULTIBOOT
- multiboot2_print_info();
-#endif
-
minaddr = 0;
/*
@@ -1511,11 +1504,6 @@ init_x86_64_ksyms(void)
db_machine_init();
#endif
-#if defined(MULTIBOOT)
- if (multiboot2_ksyms_addsyms_elf())
- return;
-#endif
-
#ifndef XENPV
symtab = lookup_bootinfo(BTINFO_SYMTAB);
if (symtab) {
Index: src/sys/arch/amd64/conf/GENERIC
diff -u src/sys/arch/amd64/conf/GENERIC:1.553 src/sys/arch/amd64/conf/GENERIC:1.554
--- src/sys/arch/amd64/conf/GENERIC:1.553 Wed Jan 1 10:36:43 2020
+++ src/sys/arch/amd64/conf/GENERIC Thu Jan 9 00:42:24 2020
@@ -1,4 +1,4 @@
-# $NetBSD: GENERIC,v 1.553 2020/01/01 10:36:43 ryo Exp $
+# $NetBSD: GENERIC,v 1.554 2020/01/09 00:42:24 manu Exp $
#
# GENERIC machine description file
#
@@ -22,12 +22,10 @@ include "arch/amd64/conf/std.amd64"
options INCLUDE_CONFIG_FILE # embed config file in kernel binary
-#ident "GENERIC-$Revision: 1.553 $"
+#ident "GENERIC-$Revision: 1.554 $"
maxusers 64 # estimated number of users
-#options MULTIBOOT # Multiboot support (see multiboot(8))
-
# delay between "rebooting ..." message and hardware reset, in milliseconds
#options CPURESET_DELAY=2000
Index: src/sys/arch/amd64/conf/files.amd64
diff -u src/sys/arch/amd64/conf/files.amd64:1.114 src/sys/arch/amd64/conf/files.amd64:1.115
--- src/sys/arch/amd64/conf/files.amd64:1.114 Tue Dec 10 02:06:07 2019
+++ src/sys/arch/amd64/conf/files.amd64 Thu Jan 9 00:42:24 2020
@@ -1,4 +1,4 @@
-# $NetBSD: files.amd64,v 1.114 2019/12/10 02:06:07 manu Exp $
+# $NetBSD: files.amd64,v 1.115 2020/01/09 00:42:24 manu Exp $
#
# new style config file for amd64 architecture
#
@@ -30,10 +30,6 @@ defflag opt_spectre.h SPECTRE_V2_GCC_MIT
defflag USER_LDT
defflag eisa.h EISA
-# Multiboot support
-defflag opt_multiboot.h MULTIBOOT
-file arch/x86/x86/multiboot2.c multiboot
-
# Start code
file arch/amd64/amd64/locore.S machdep
file arch/amd64/amd64/vector.S machdep
Index: src/sys/arch/amd64/conf/kern.ldscript
diff -u src/sys/arch/amd64/conf/kern.ldscript:1.30 src/sys/arch/amd64/conf/kern.ldscript:1.31
--- src/sys/arch/amd64/conf/kern.ldscript:1.30 Sun Dec 15 02:56:40 2019
+++ src/sys/arch/amd64/conf/kern.ldscript Thu Jan 9 00:42:24 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: kern.ldscript,v 1.30 2019/12/15 02:56:40 manu Exp $ */
+/* $NetBSD: kern.ldscript,v 1.31 2020/01/09 00:42:24 manu Exp $ */
#include "assym.h"
@@ -13,17 +13,7 @@ __LARGE_PAGE_SIZE = 0x200000 ;
ENTRY(_start)
SECTIONS
{
- /*
- * multiboot (file_offset) : AT (load_address)
- * file_offset must be below 32k for multiboot 2 specification
- * BIOS boot requires load_address above 0x200000
- */
- multiboot 0x1000 : AT (0x200000)
- {
- . = ALIGN(8);
- KEEP(*(multiboot));
- }
- .text : AT (0x200000 + SIZEOF(multiboot))
+ .text : AT (ADDR(.text) & 0x0fffffff)
{
. = ALIGN(__PAGE_SIZE);
__text_user_start = . ;