Print this page
de-linting of .s files
m

*** 24,39 **** * Use is subject to license terms. * Copyright 2018 Joyent, Inc. */ - #if defined(__lint) - - int fb_swtch_silence_lint = 0; - - #else - #include <sys/asm_linkage.h> #include <sys/segments.h> #include <sys/controlregs.h> #include <sys/machparam.h> #include <sys/multiboot.h> --- 24,33 ----
*** 94,104 **** _start: /* Disable interrupts */ cli - #if defined(__amd64) /* Switch to a low memory stack */ movq $_start, %rsp addq $FASTBOOT_STACK_OFFSET, %rsp /* --- 88,97 ----
*** 110,136 **** movq %rsp, %rdi /* destination on the new stack */ movq $FI_VALID, %rcx /* size to copy */ rep smovb - #elif defined(__i386) - movl 0x4(%esp), %esi /* address of fastboot info struct */ - - /* Switch to a low memory stack */ - movl $_start, %esp - addl $FASTBOOT_STACK_OFFSET, %esp - - /* Copy struct to stack */ - movl %esp, %edi /* destination on the new stack */ - movl $FI_VALID, %ecx /* size to copy */ - rep - smovb - - #endif - - #if defined(__amd64) - xorl %eax, %eax xorl %edx, %edx movl $MSR_AMD_FSBASE, %ecx wrmsr --- 103,112 ----
*** 139,180 **** wrmsr movl $MSR_AMD_KGSBASE, %ecx wrmsr - #endif /* * zero out all the registers to make sure they're 16 bit clean */ - #if defined(__amd64) xorq %r8, %r8 xorq %r9, %r9 xorq %r10, %r10 xorq %r11, %r11 xorq %r12, %r12 xorq %r13, %r13 xorq %r14, %r14 xorq %r15, %r15 - #endif xorl %eax, %eax xorl %ebx, %ebx xorl %ecx, %ecx xorl %edx, %edx xorl %ebp, %ebp - #if defined(__amd64) /* * Load our own GDT */ lgdt gdt_info - #endif /* * Load our own IDT */ lidt idt_info - #if defined(__amd64) /* * Invalidate all TLB entries. * Load temporary pagetables to copy kernel and boot-archive */ movq %cr4, %rax --- 115,150 ----
*** 227,323 **** * - shutting down paging (bit 31 of cr0). This will flush the * TLBs. * - turning off PCID in cr4 * - disabling LME (long mode enable) in EFER (extended feature reg) */ - #endif DISABLE_PAGING /* clobbers %eax */ - #if defined(__amd64) ljmp $B32CODE_SEL, $1f 1: - #endif /* * Clear PGE, PAE and PSE flags as dboot expects them to be * cleared. */ movl %cr4, %eax andl $_BITNOT(CR4_PGE | CR4_PAE | CR4_PSE), %eax movl %eax, %cr4 - #if defined(__amd64) movl $MSR_AMD_EFER, %ecx /* Extended Feature Enable */ rdmsr btcl $8, %eax /* bit 8 Long Mode Enable bit */ wrmsr - #elif defined(__i386) - /* - * If fi_has_pae is set, re-enable paging with PAE. - */ - leal FI_FILES(%esp), %ebx /* offset to the files */ - movl FI_HAS_PAE(%esp), %edi /* need to enable paging or not */ - cmpl $0, %edi - je paging_on /* no need to enable paging */ - - movl FI_LAST_TABLE_PA(%esp), %esi /* page table PA */ - - /* - * Turn on PAE - */ - movl %cr4, %eax - orl $CR4_PAE, %eax - movl %eax, %cr4 - - /* - * Load top pagetable base address into cr3 - */ - movl FI_PAGETABLE_PA(%esp), %eax - movl %eax, %cr3 - - movl %cr0, %eax - orl $_CONST(CR0_PG | CR0_WP | CR0_AM), %eax - andl $_BITNOT(CR0_NW | CR0_CD), %eax - movl %eax, %cr0 - jmp paging_on - paging_on: - - /* copy unix to final destination */ - leal _MUL(FASTBOOT_UNIX, FI_FILES_INCR)(%ebx), %edx - call map_copy - - /* copy boot archive to final destination */ - leal _MUL(FASTBOOT_BOOTARCHIVE, FI_FILES_INCR)(%ebx), %edx - call map_copy - - /* Disable paging one more time */ - DISABLE_PAGING - - /* Copy sections if there are any */ - leal _MUL(FASTBOOT_UNIX, FI_FILES_INCR)(%ebx), %edx - movl FB_SECTCNT(%edx), %eax - cmpl $0, %eax - je 1f - call copy_sections - 1: - - /* Whatever flags we turn on we need to turn off */ - movl %cr4, %eax - andl $_BITNOT(CR4_PAE), %eax - movl %eax, %cr4 - #endif /* __i386 */ - dboot_jump: /* Jump to dboot */ movl $DBOOT_ENTRY_ADDRESS, %edi movl FI_NEW_MBI_PA(%esp), %ebx movl $MB_BOOTLOADER_MAGIC, %eax jmp *%edi - #if defined(__amd64) - .code64 ENTRY_NP(copy_sections) /* * On entry * %rdi points to the fboot_file_t --- 197,231 ----
*** 359,455 **** jmp 2b 1: ret SET_SIZE(map_copy) - #elif defined(__i386) - - ENTRY_NP(copy_sections) - /* - * On entry - * %edx points to the fboot_file_t - * %eax contains the number of sections - */ - pushl %ebp - pushl %ebx - pushl %esi - pushl %edi - - movl %eax, %ebp - - COPY_SECT(%edx, %ebx, %ebp) - - popl %edi - popl %esi - popl %ebx - popl %ebp - ret - SET_SIZE(copy_sections) - - ENTRY_NP(map_copy) - /* - * On entry - * %edx points to the fboot_file_t - * %edi has FB_HAS_PAE(%esp) - * %esi has FI_LAST_TABLE_PA(%esp) - */ - pushl %eax - pushl %ebx - pushl %ecx - pushl %edx - pushl %ebp - pushl %esi - pushl %edi - movl %esi, %ebp /* Save page table PA in %ebp */ - - movl FB_PTE_LIST_PA(%edx), %eax /* PA list of the source */ - movl FB_DEST_PA(%edx), %ebx /* PA of the destination */ - - loop: - movl (%eax), %esi /* Are we done? */ - cmpl $FASTBOOT_TERMINATE, %esi - je done - - cmpl $1, (%esp) /* Is paging on? */ - jne no_paging /* Nope */ - - movl %ebp, %edi /* Page table PA */ - movl %esi, (%edi) /* Program low 32-bit */ - movl 4(%eax), %esi /* high bits of the table */ - movl %esi, 4(%edi) /* Program high 32-bit */ - movl %cr3, %esi /* Reload cr3 */ - movl %esi, %cr3 - movl FB_VA(%edx), %esi /* Load from VA */ - jmp do_copy - no_paging: - andl $_BITNOT(MMU_PAGEOFFSET), %esi /* clear lower 12-bit */ - do_copy: - movl %ebx, %edi - movl $PAGESIZE, %ecx - shrl $2, %ecx /* 4-byte at a time */ - rep - smovl - addl $8, %eax /* We built the PTEs as 8-byte entries */ - addl $PAGESIZE, %ebx - jmp loop - done: - popl %edi - popl %esi - popl %ebp - popl %edx - popl %ecx - popl %ebx - popl %eax - ret - SET_SIZE(map_copy) - #endif /* __i386 */ - - idt_info: .value 0x3ff .quad 0 /* * We need to trampoline thru a gdt we have in low memory. */ #include "../boot/boot_gdt.s" - #endif /* __lint */ --- 267,279 ----