Print this page
de-linting of .s files
first
@@ -40,16 +40,11 @@
*/
#include <sys/errno.h>
#include <sys/asm_linkage.h>
-#if defined(__lint)
-#include <sys/types.h>
-#include <sys/systm.h>
-#else /* __lint */
#include "assym.h"
-#endif /* __lint */
#define KCOPY_MIN_SIZE 128 /* Must be >= 16 bytes */
#define XCOPY_MIN_SIZE 128 /* Must be >= 16 bytes */
/*
* Non-temopral access (NTA) alignment requirement
@@ -141,17 +136,12 @@
/*
* I'm sorry about these macros, but copy.s is unsurprisingly sensitive to
* additional call instructions.
*/
-#if defined(__amd64)
#define SMAP_DISABLE_COUNT 16
#define SMAP_ENABLE_COUNT 26
-#elif defined(__i386)
-#define SMAP_DISABLE_COUNT 0
-#define SMAP_ENABLE_COUNT 0
-#endif
#define SMAP_DISABLE_INSTR(ITER) \
.globl _smap_disable_patch_/**/ITER; \
_smap_disable_patch_/**/ITER/**/:; \
nop; nop; nop;
@@ -159,24 +149,13 @@
#define SMAP_ENABLE_INSTR(ITER) \
.globl _smap_enable_patch_/**/ITER; \
_smap_enable_patch_/**/ITER/**/:; \
nop; nop; nop;
-#if defined(__lint)
-
-/* ARGSUSED */
-int
-kcopy(const void *from, void *to, size_t count)
-{ return (0); }
-
-#else /* __lint */
-
.globl kernelbase
.globl postbootkernelbase
-#if defined(__amd64)
-
ENTRY(kcopy)
pushq %rbp
movq %rsp, %rbp
#ifdef DEBUG
cmpq postbootkernelbase(%rip), %rdi /* %rdi = from */
@@ -209,90 +188,14 @@
movq %r11, T_LOFAULT(%r9) /* restore original lofault */
leave
ret
SET_SIZE(kcopy)
-#elif defined(__i386)
-
-#define ARG_FROM 8
-#define ARG_TO 12
-#define ARG_COUNT 16
-
- ENTRY(kcopy)
-#ifdef DEBUG
- pushl %ebp
- movl %esp, %ebp
- movl postbootkernelbase, %eax
- cmpl %eax, ARG_FROM(%ebp)
- jb 0f
- cmpl %eax, ARG_TO(%ebp)
- jnb 1f
-0: pushl $.kcopy_panic_msg
- call panic
-1: popl %ebp
-#endif
- lea _kcopy_copyerr, %eax /* lofault value */
- movl %gs:CPU_THREAD, %edx
-
-do_copy_fault:
- pushl %ebp
- movl %esp, %ebp /* setup stack frame */
- pushl %esi
- pushl %edi /* save registers */
-
- movl T_LOFAULT(%edx), %edi
- pushl %edi /* save the current lofault */
- movl %eax, T_LOFAULT(%edx) /* new lofault */
-
- movl ARG_COUNT(%ebp), %ecx
- movl ARG_FROM(%ebp), %esi
- movl ARG_TO(%ebp), %edi
- shrl $2, %ecx /* word count */
- rep
- smovl
- movl ARG_COUNT(%ebp), %ecx
- andl $3, %ecx /* bytes left over */
- rep
- smovb
- xorl %eax, %eax
-
- /*
- * A fault during do_copy_fault is indicated through an errno value
- * in %eax and we iret from the trap handler to here.
- */
-_kcopy_copyerr:
- popl %ecx
- popl %edi
- movl %ecx, T_LOFAULT(%edx) /* restore the original lofault */
- popl %esi
- popl %ebp
- ret
- SET_SIZE(kcopy)
-
#undef ARG_FROM
#undef ARG_TO
#undef ARG_COUNT
-#endif /* __i386 */
-#endif /* __lint */
-
-#if defined(__lint)
-
-/*
- * Copy a block of storage. Similar to kcopy but uses non-temporal
- * instructions.
- */
-
-/* ARGSUSED */
-int
-kcopy_nta(const void *from, void *to, size_t count, int copy_cached)
-{ return (0); }
-
-#else /* __lint */
-
-#if defined(__amd64)
-
#define COPY_LOOP_INIT(src, dst, cnt) \
addq cnt, src; \
addq cnt, dst; \
shrq $3, cnt; \
neg cnt
@@ -365,92 +268,10 @@
leave
ret
SET_SIZE(do_copy_fault_nta)
SET_SIZE(kcopy_nta)
-#elif defined(__i386)
-
-#define ARG_FROM 8
-#define ARG_TO 12
-#define ARG_COUNT 16
-
-#define COPY_LOOP_INIT(src, dst, cnt) \
- addl cnt, src; \
- addl cnt, dst; \
- shrl $3, cnt; \
- neg cnt
-
-#define COPY_LOOP_BODY(src, dst, cnt) \
- prefetchnta 0x100(src, cnt, 8); \
- movl (src, cnt, 8), %esi; \
- movnti %esi, (dst, cnt, 8); \
- movl 0x4(src, cnt, 8), %esi; \
- movnti %esi, 0x4(dst, cnt, 8); \
- movl 0x8(src, cnt, 8), %esi; \
- movnti %esi, 0x8(dst, cnt, 8); \
- movl 0xc(src, cnt, 8), %esi; \
- movnti %esi, 0xc(dst, cnt, 8); \
- addl $2, cnt
-
- /*
- * kcopy_nta is not implemented for 32-bit as no performance
- * improvement was shown. We simply jump directly to kcopy
- * and discard the 4 arguments.
- */
- ENTRY(kcopy_nta)
- jmp kcopy
-
- lea _kcopy_nta_copyerr, %eax /* lofault value */
- ALTENTRY(do_copy_fault_nta)
- pushl %ebp
- movl %esp, %ebp /* setup stack frame */
- pushl %esi
- pushl %edi
-
- movl %gs:CPU_THREAD, %edx
- movl T_LOFAULT(%edx), %edi
- pushl %edi /* save the current lofault */
- movl %eax, T_LOFAULT(%edx) /* new lofault */
-
- /* COPY_LOOP_BODY needs to use %esi */
- movl ARG_COUNT(%ebp), %ecx
- movl ARG_FROM(%ebp), %edi
- movl ARG_TO(%ebp), %eax
- COPY_LOOP_INIT(%edi, %eax, %ecx)
-1: COPY_LOOP_BODY(%edi, %eax, %ecx)
- jnz 1b
- mfence
-
- xorl %eax, %eax
-_kcopy_nta_copyerr:
- popl %ecx
- popl %edi
- movl %ecx, T_LOFAULT(%edx) /* restore the original lofault */
- popl %esi
- leave
- ret
- SET_SIZE(do_copy_fault_nta)
- SET_SIZE(kcopy_nta)
-
-#undef ARG_FROM
-#undef ARG_TO
-#undef ARG_COUNT
-
-#endif /* __i386 */
-#endif /* __lint */
-
-#if defined(__lint)
-
-/* ARGSUSED */
-void
-bcopy(const void *from, void *to, size_t count)
-{}
-
-#else /* __lint */
-
-#if defined(__amd64)
-
ENTRY(bcopy)
#ifdef DEBUG
orq %rdx, %rdx /* %rdx = count */
jz 1f
cmpq postbootkernelbase(%rip), %rdi /* %rdi = from */
@@ -975,76 +796,17 @@
call panic /* %rdi = format string */
#endif
SET_SIZE(bcopy_altentry)
SET_SIZE(bcopy)
-#elif defined(__i386)
-#define ARG_FROM 4
-#define ARG_TO 8
-#define ARG_COUNT 12
-
- ENTRY(bcopy)
-#ifdef DEBUG
- movl ARG_COUNT(%esp), %eax
- orl %eax, %eax
- jz 1f
- movl postbootkernelbase, %eax
- cmpl %eax, ARG_FROM(%esp)
- jb 0f
- cmpl %eax, ARG_TO(%esp)
- jnb 1f
-0: pushl %ebp
- movl %esp, %ebp
- pushl $.bcopy_panic_msg
- call panic
-1:
-#endif
-do_copy:
- movl %esi, %eax /* save registers */
- movl %edi, %edx
- movl ARG_COUNT(%esp), %ecx
- movl ARG_FROM(%esp), %esi
- movl ARG_TO(%esp), %edi
-
- shrl $2, %ecx /* word count */
- rep
- smovl
- movl ARG_COUNT(%esp), %ecx
- andl $3, %ecx /* bytes left over */
- rep
- smovb
- movl %eax, %esi /* restore registers */
- movl %edx, %edi
- ret
- SET_SIZE(bcopy)
-
-#undef ARG_COUNT
-#undef ARG_FROM
-#undef ARG_TO
-
-#endif /* __i386 */
-#endif /* __lint */
-
-
/*
* Zero a block of storage, returning an error code if we
* take a kernel pagefault which cannot be resolved.
* Returns errno value on pagefault error, 0 if all ok
*/
-#if defined(__lint)
-
-/* ARGSUSED */
-int
-kzero(void *addr, size_t count)
-{ return (0); }
-
-#else /* __lint */
-
-#if defined(__amd64)
-
ENTRY(kzero)
#ifdef DEBUG
cmpq postbootkernelbase(%rip), %rdi /* %rdi = addr */
jnb 0f
leaq .kzero_panic_msg(%rip), %rdi
@@ -1071,82 +833,14 @@
addq $8, %rsp /* pop bzero_altentry call ret addr */
movq %r11, T_LOFAULT(%r9) /* restore the original lofault */
ret
SET_SIZE(kzero)
-#elif defined(__i386)
-
-#define ARG_ADDR 8
-#define ARG_COUNT 12
-
- ENTRY(kzero)
-#ifdef DEBUG
- pushl %ebp
- movl %esp, %ebp
- movl postbootkernelbase, %eax
- cmpl %eax, ARG_ADDR(%ebp)
- jnb 0f
- pushl $.kzero_panic_msg
- call panic
-0: popl %ebp
-#endif
- lea _kzeroerr, %eax /* kzeroerr is lofault value */
-
- pushl %ebp /* save stack base */
- movl %esp, %ebp /* set new stack base */
- pushl %edi /* save %edi */
-
- mov %gs:CPU_THREAD, %edx
- movl T_LOFAULT(%edx), %edi
- pushl %edi /* save the current lofault */
- movl %eax, T_LOFAULT(%edx) /* new lofault */
-
- movl ARG_COUNT(%ebp), %ecx /* get size in bytes */
- movl ARG_ADDR(%ebp), %edi /* %edi <- address of bytes to clear */
- shrl $2, %ecx /* Count of double words to zero */
- xorl %eax, %eax /* sstol val */
- rep
- sstol /* %ecx contains words to clear (%eax=0) */
-
- movl ARG_COUNT(%ebp), %ecx /* get size in bytes */
- andl $3, %ecx /* do mod 4 */
- rep
- sstob /* %ecx contains residual bytes to clear */
-
- /*
- * A fault during kzero is indicated through an errno value
- * in %eax when we iret to here.
- */
-_kzeroerr:
- popl %edi
- movl %edi, T_LOFAULT(%edx) /* restore the original lofault */
- popl %edi
- popl %ebp
- ret
- SET_SIZE(kzero)
-
-#undef ARG_ADDR
-#undef ARG_COUNT
-
-#endif /* __i386 */
-#endif /* __lint */
-
/*
* Zero a block of storage.
*/
-#if defined(__lint)
-
-/* ARGSUSED */
-void
-bzero(void *addr, size_t count)
-{}
-
-#else /* __lint */
-
-#if defined(__amd64)
-
ENTRY(bzero)
#ifdef DEBUG
cmpq postbootkernelbase(%rip), %rdi /* %rdi = addr */
jnb 0f
leaq .bzero_panic_msg(%rip), %rdi
@@ -1457,48 +1151,10 @@
ret
#undef L
SET_SIZE(bzero_altentry)
SET_SIZE(bzero)
-#elif defined(__i386)
-
-#define ARG_ADDR 4
-#define ARG_COUNT 8
-
- ENTRY(bzero)
-#ifdef DEBUG
- movl postbootkernelbase, %eax
- cmpl %eax, ARG_ADDR(%esp)
- jnb 0f
- pushl %ebp
- movl %esp, %ebp
- pushl $.bzero_panic_msg
- call panic
-0:
-#endif
-do_zero:
- movl %edi, %edx
- movl ARG_COUNT(%esp), %ecx
- movl ARG_ADDR(%esp), %edi
- shrl $2, %ecx
- xorl %eax, %eax
- rep
- sstol
- movl ARG_COUNT(%esp), %ecx
- andl $3, %ecx
- rep
- sstob
- movl %edx, %edi
- ret
- SET_SIZE(bzero)
-
-#undef ARG_ADDR
-#undef ARG_COUNT
-
-#endif /* __i386 */
-#endif /* __lint */
-
/*
* Transfer data to and from user space -
* Note that these routines can cause faults
* It is assumed that the kernel has nothing at
* less than KERNELBASE in the virtual address space.
@@ -1517,21 +1173,10 @@
/*
* Copy user data to kernel space.
*/
-#if defined(__lint)
-
-/* ARGSUSED */
-int
-copyin(const void *uaddr, void *kaddr, size_t count)
-{ return (0); }
-
-#else /* lint */
-
-#if defined(__amd64)
-
ENTRY(copyin)
pushq %rbp
movq %rsp, %rbp
subq $24, %rsp
@@ -1583,66 +1228,10 @@
2: movl $-1, %eax
leave
ret
SET_SIZE(copyin)
-#elif defined(__i386)
-
-#define ARG_UADDR 4
-#define ARG_KADDR 8
-
- ENTRY(copyin)
- movl kernelbase, %ecx
-#ifdef DEBUG
- cmpl %ecx, ARG_KADDR(%esp)
- jnb 1f
- pushl %ebp
- movl %esp, %ebp
- pushl $.copyin_panic_msg
- call panic
-1:
-#endif
- lea _copyin_err, %eax
-
- movl %gs:CPU_THREAD, %edx
- cmpl %ecx, ARG_UADDR(%esp) /* test uaddr < kernelbase */
- jb do_copy_fault
- jmp 3f
-
-_copyin_err:
- popl %ecx
- popl %edi
- movl %ecx, T_LOFAULT(%edx) /* restore original lofault */
- popl %esi
- popl %ebp
-3:
- movl T_COPYOPS(%edx), %eax
- cmpl $0, %eax
- jz 2f
- jmp *CP_COPYIN(%eax)
-
-2: movl $-1, %eax
- ret
- SET_SIZE(copyin)
-
-#undef ARG_UADDR
-#undef ARG_KADDR
-
-#endif /* __i386 */
-#endif /* __lint */
-
-#if defined(__lint)
-
-/* ARGSUSED */
-int
-xcopyin_nta(const void *uaddr, void *kaddr, size_t count, int copy_cached)
-{ return (0); }
-
-#else /* __lint */
-
-#if defined(__amd64)
-
ENTRY(xcopyin_nta)
pushq %rbp
movq %rsp, %rbp
subq $24, %rsp
@@ -1728,99 +1317,14 @@
2: leave
ret
SET_SIZE(xcopyin_nta)
-#elif defined(__i386)
-
-#define ARG_UADDR 4
-#define ARG_KADDR 8
-#define ARG_COUNT 12
-#define ARG_CACHED 16
-
- .globl use_sse_copy
-
- ENTRY(xcopyin_nta)
- movl kernelbase, %ecx
- lea _xcopyin_err, %eax
- movl %gs:CPU_THREAD, %edx
- cmpl %ecx, ARG_UADDR(%esp) /* test uaddr < kernelbase */
- jae 4f
-
- cmpl $0, use_sse_copy /* no sse support */
- jz do_copy_fault
-
- cmpl $0, ARG_CACHED(%esp) /* copy_cached hint set? */
- jnz do_copy_fault
-
- /*
- * Make sure cnt is >= XCOPY_MIN_SIZE bytes
- */
- cmpl $XCOPY_MIN_SIZE, ARG_COUNT(%esp)
- jb do_copy_fault
-
- /*
- * Make sure src and dst are NTA_ALIGN_SIZE aligned,
- * count is COUNT_ALIGN_SIZE aligned.
- */
- movl ARG_UADDR(%esp), %ecx
- orl ARG_KADDR(%esp), %ecx
- andl $NTA_ALIGN_MASK, %ecx
- orl ARG_COUNT(%esp), %ecx
- andl $COUNT_ALIGN_MASK, %ecx
- jnz do_copy_fault
-
- jmp do_copy_fault_nta /* use regular access */
-
-4:
- movl $EFAULT, %eax
- jmp 3f
-
- /*
- * A fault during do_copy_fault or do_copy_fault_nta is
- * indicated through an errno value in %eax and we iret from the
- * trap handler to here.
- */
-_xcopyin_err:
- popl %ecx
- popl %edi
- movl %ecx, T_LOFAULT(%edx) /* restore original lofault */
- popl %esi
- popl %ebp
-3:
- cmpl $0, T_COPYOPS(%edx)
- jz 2f
- movl T_COPYOPS(%edx), %eax
- jmp *CP_XCOPYIN(%eax)
-
-2: rep; ret /* use 2 byte return instruction when branch target */
- /* AMD Software Optimization Guide - Section 6.2 */
- SET_SIZE(xcopyin_nta)
-
-#undef ARG_UADDR
-#undef ARG_KADDR
-#undef ARG_COUNT
-#undef ARG_CACHED
-
-#endif /* __i386 */
-#endif /* __lint */
-
/*
* Copy kernel data to user space.
*/
-#if defined(__lint)
-
-/* ARGSUSED */
-int
-copyout(const void *kaddr, void *uaddr, size_t count)
-{ return (0); }
-
-#else /* __lint */
-
-#if defined(__amd64)
-
ENTRY(copyout)
pushq %rbp
movq %rsp, %rbp
subq $24, %rsp
@@ -1873,65 +1377,10 @@
2: movl $-1, %eax
leave
ret
SET_SIZE(copyout)
-#elif defined(__i386)
-
-#define ARG_KADDR 4
-#define ARG_UADDR 8
-
- ENTRY(copyout)
- movl kernelbase, %ecx
-#ifdef DEBUG
- cmpl %ecx, ARG_KADDR(%esp)
- jnb 1f
- pushl %ebp
- movl %esp, %ebp
- pushl $.copyout_panic_msg
- call panic
-1:
-#endif
- lea _copyout_err, %eax
- movl %gs:CPU_THREAD, %edx
- cmpl %ecx, ARG_UADDR(%esp) /* test uaddr < kernelbase */
- jb do_copy_fault
- jmp 3f
-
-_copyout_err:
- popl %ecx
- popl %edi
- movl %ecx, T_LOFAULT(%edx) /* restore original lofault */
- popl %esi
- popl %ebp
-3:
- movl T_COPYOPS(%edx), %eax
- cmpl $0, %eax
- jz 2f
- jmp *CP_COPYOUT(%eax)
-
-2: movl $-1, %eax
- ret
- SET_SIZE(copyout)
-
-#undef ARG_UADDR
-#undef ARG_KADDR
-
-#endif /* __i386 */
-#endif /* __lint */
-
-#if defined(__lint)
-
-/* ARGSUSED */
-int
-xcopyout_nta(const void *kaddr, void *uaddr, size_t count, int copy_cached)
-{ return (0); }
-
-#else /* __lint */
-
-#if defined(__amd64)
-
ENTRY(xcopyout_nta)
pushq %rbp
movq %rsp, %rbp
subq $24, %rsp
@@ -2018,98 +1467,15 @@
2: leave
ret
SET_SIZE(xcopyout_nta)
-#elif defined(__i386)
-
-#define ARG_KADDR 4
-#define ARG_UADDR 8
-#define ARG_COUNT 12
-#define ARG_CACHED 16
-
- ENTRY(xcopyout_nta)
- movl kernelbase, %ecx
- lea _xcopyout_err, %eax
- movl %gs:CPU_THREAD, %edx
- cmpl %ecx, ARG_UADDR(%esp) /* test uaddr < kernelbase */
- jae 4f
-
- cmpl $0, use_sse_copy /* no sse support */
- jz do_copy_fault
-
- cmpl $0, ARG_CACHED(%esp) /* copy_cached hint set? */
- jnz do_copy_fault
-
- /*
- * Make sure cnt is >= XCOPY_MIN_SIZE bytes
- */
- cmpl $XCOPY_MIN_SIZE, %edx
- jb do_copy_fault
-
- /*
- * Make sure src and dst are NTA_ALIGN_SIZE aligned,
- * count is COUNT_ALIGN_SIZE aligned.
- */
- movl ARG_UADDR(%esp), %ecx
- orl ARG_KADDR(%esp), %ecx
- andl $NTA_ALIGN_MASK, %ecx
- orl ARG_COUNT(%esp), %ecx
- andl $COUNT_ALIGN_MASK, %ecx
- jnz do_copy_fault
- jmp do_copy_fault_nta
-
-4:
- movl $EFAULT, %eax
- jmp 3f
-
- /*
- * A fault during do_copy_fault or do_copy_fault_nta is
- * indicated through an errno value in %eax and we iret from the
- * trap handler to here.
- */
-_xcopyout_err:
- / restore the original lofault
- popl %ecx
- popl %edi
- movl %ecx, T_LOFAULT(%edx) / original lofault
- popl %esi
- popl %ebp
-3:
- cmpl $0, T_COPYOPS(%edx)
- jz 2f
- movl T_COPYOPS(%edx), %eax
- jmp *CP_XCOPYOUT(%eax)
-
-2: rep; ret /* use 2 byte return instruction when branch target */
- /* AMD Software Optimization Guide - Section 6.2 */
- SET_SIZE(xcopyout_nta)
-
-#undef ARG_UADDR
-#undef ARG_KADDR
-#undef ARG_COUNT
-#undef ARG_CACHED
-
-#endif /* __i386 */
-#endif /* __lint */
-
/*
* Copy a null terminated string from one point to another in
* the kernel address space.
*/
-#if defined(__lint)
-
-/* ARGSUSED */
-int
-copystr(const char *from, char *to, size_t maxlength, size_t *lencopied)
-{ return (0); }
-
-#else /* __lint */
-
-#if defined(__amd64)
-
ENTRY(copystr)
pushq %rbp
movq %rsp, %rbp
#ifdef DEBUG
movq kernelbase(%rip), %rax
@@ -2170,113 +1536,15 @@
movq %r11, T_LOFAULT(%r9) /* restore the original lofault */
leave
ret
SET_SIZE(copystr)
-#elif defined(__i386)
-
-#define ARG_FROM 8
-#define ARG_TO 12
-#define ARG_MAXLEN 16
-#define ARG_LENCOPIED 20
-
- ENTRY(copystr)
-#ifdef DEBUG
- pushl %ebp
- movl %esp, %ebp
- movl kernelbase, %eax
- cmpl %eax, ARG_FROM(%esp)
- jb 0f
- cmpl %eax, ARG_TO(%esp)
- jnb 1f
-0: pushl $.copystr_panic_msg
- call panic
-1: popl %ebp
-#endif
- /* get the current lofault address */
- movl %gs:CPU_THREAD, %eax
- movl T_LOFAULT(%eax), %eax
-do_copystr:
- pushl %ebp /* setup stack frame */
- movl %esp, %ebp
- pushl %ebx /* save registers */
- pushl %edi
-
- movl %gs:CPU_THREAD, %ebx
- movl T_LOFAULT(%ebx), %edi
- pushl %edi /* save the current lofault */
- movl %eax, T_LOFAULT(%ebx) /* new lofault */
-
- movl ARG_MAXLEN(%ebp), %ecx
- cmpl $0, %ecx
- je copystr_enametoolong /* maxlength == 0 */
-
- movl ARG_FROM(%ebp), %ebx /* source address */
- movl ARG_TO(%ebp), %edx /* destination address */
-
-copystr_loop:
- decl %ecx
- movb (%ebx), %al
- incl %ebx
- movb %al, (%edx)
- incl %edx
- cmpb $0, %al
- je copystr_null /* null char */
- cmpl $0, %ecx
- jne copystr_loop
-
-copystr_enametoolong:
- movl $ENAMETOOLONG, %eax
- jmp copystr_out
-
-copystr_null:
- xorl %eax, %eax /* no error */
-
-copystr_out:
- cmpl $0, ARG_LENCOPIED(%ebp) /* want length? */
- je copystr_done /* no */
- movl ARG_MAXLEN(%ebp), %edx
- subl %ecx, %edx /* compute length and store it */
- movl ARG_LENCOPIED(%ebp), %ecx
- movl %edx, (%ecx)
-
-copystr_done:
- popl %edi
- movl %gs:CPU_THREAD, %ebx
- movl %edi, T_LOFAULT(%ebx) /* restore the original lofault */
-
- popl %edi
- popl %ebx
- popl %ebp
- ret
- SET_SIZE(copystr)
-
-#undef ARG_FROM
-#undef ARG_TO
-#undef ARG_MAXLEN
-#undef ARG_LENCOPIED
-
-#endif /* __i386 */
-#endif /* __lint */
-
/*
* Copy a null terminated string from the user address space into
* the kernel address space.
*/
-#if defined(__lint)
-
-/* ARGSUSED */
-int
-copyinstr(const char *uaddr, char *kaddr, size_t maxlength,
- size_t *lencopied)
-{ return (0); }
-
-#else /* __lint */
-
-#if defined(__amd64)
-
ENTRY(copyinstr)
pushq %rbp
movq %rsp, %rbp
subq $32, %rsp
@@ -2334,73 +1602,15 @@
2: movl $EFAULT, %eax /* return EFAULT */
leave
ret
SET_SIZE(copyinstr)
-#elif defined(__i386)
-
-#define ARG_UADDR 4
-#define ARG_KADDR 8
-
- ENTRY(copyinstr)
- movl kernelbase, %ecx
-#ifdef DEBUG
- cmpl %ecx, ARG_KADDR(%esp)
- jnb 1f
- pushl %ebp
- movl %esp, %ebp
- pushl $.copyinstr_panic_msg
- call panic
-1:
-#endif
- lea _copyinstr_error, %eax
- cmpl %ecx, ARG_UADDR(%esp) /* test uaddr < kernelbase */
- jb do_copystr
- movl %gs:CPU_THREAD, %edx
- jmp 3f
-
-_copyinstr_error:
- popl %edi
- movl %gs:CPU_THREAD, %edx
- movl %edi, T_LOFAULT(%edx) /* original lofault */
-
- popl %edi
- popl %ebx
- popl %ebp
-3:
- movl T_COPYOPS(%edx), %eax
- cmpl $0, %eax
- jz 2f
- jmp *CP_COPYINSTR(%eax)
-
-2: movl $EFAULT, %eax /* return EFAULT */
- ret
- SET_SIZE(copyinstr)
-
-#undef ARG_UADDR
-#undef ARG_KADDR
-
-#endif /* __i386 */
-#endif /* __lint */
-
/*
* Copy a null terminated string from the kernel
* address space to the user address space.
*/
-#if defined(__lint)
-
-/* ARGSUSED */
-int
-copyoutstr(const char *kaddr, char *uaddr, size_t maxlength,
- size_t *lencopied)
-{ return (0); }
-
-#else /* __lint */
-
-#if defined(__amd64)
-
ENTRY(copyoutstr)
pushq %rbp
movq %rsp, %rbp
subq $32, %rsp
@@ -2457,91 +1667,15 @@
2: movl $EFAULT, %eax /* return EFAULT */
leave
ret
SET_SIZE(copyoutstr)
-#elif defined(__i386)
-
-#define ARG_KADDR 4
-#define ARG_UADDR 8
-
- ENTRY(copyoutstr)
- movl kernelbase, %ecx
-#ifdef DEBUG
- cmpl %ecx, ARG_KADDR(%esp)
- jnb 1f
- pushl %ebp
- movl %esp, %ebp
- pushl $.copyoutstr_panic_msg
- call panic
-1:
-#endif
- lea _copyoutstr_error, %eax
- cmpl %ecx, ARG_UADDR(%esp) /* test uaddr < kernelbase */
- jb do_copystr
- movl %gs:CPU_THREAD, %edx
- jmp 3f
-
-_copyoutstr_error:
- popl %edi
- movl %gs:CPU_THREAD, %edx
- movl %edi, T_LOFAULT(%edx) /* restore the original lofault */
-
- popl %edi
- popl %ebx
- popl %ebp
-3:
- movl T_COPYOPS(%edx), %eax
- cmpl $0, %eax
- jz 2f
- jmp *CP_COPYOUTSTR(%eax)
-
-2: movl $EFAULT, %eax /* return EFAULT */
- ret
- SET_SIZE(copyoutstr)
-
-#undef ARG_KADDR
-#undef ARG_UADDR
-
-#endif /* __i386 */
-#endif /* __lint */
-
/*
* Since all of the fuword() variants are so similar, we have a macro to spit
* them out. This allows us to create DTrace-unobservable functions easily.
*/
-#if defined(__lint)
-
-#if defined(__amd64)
-
-/* ARGSUSED */
-int
-fuword64(const void *addr, uint64_t *dst)
-{ return (0); }
-
-#endif
-
-/* ARGSUSED */
-int
-fuword32(const void *addr, uint32_t *dst)
-{ return (0); }
-
-/* ARGSUSED */
-int
-fuword16(const void *addr, uint16_t *dst)
-{ return (0); }
-
-/* ARGSUSED */
-int
-fuword8(const void *addr, uint8_t *dst)
-{ return (0); }
-
-#else /* __lint */
-
-#if defined(__amd64)
-
/*
* Note that we don't save and reload the arguments here
* because their values are not altered in the copy path.
* Additionally, when successful, the smap_enable jmp will
* actually return us to our original caller.
@@ -2578,83 +1712,16 @@
FUWORD(fuword64, movq, %rax, CP_FUWORD64,8,10,11)
FUWORD(fuword32, movl, %eax, CP_FUWORD32,9,12,13)
FUWORD(fuword16, movw, %ax, CP_FUWORD16,10,14,15)
FUWORD(fuword8, movb, %al, CP_FUWORD8,11,16,17)
-#elif defined(__i386)
-
-#define FUWORD(NAME, INSTR, REG, COPYOP) \
- ENTRY(NAME) \
- movl %gs:CPU_THREAD, %ecx; \
- movl kernelbase, %eax; \
- cmpl %eax, 4(%esp); \
- jae 1f; \
- lea _flt_/**/NAME, %edx; \
- movl %edx, T_LOFAULT(%ecx); \
- movl 4(%esp), %eax; \
- movl 8(%esp), %edx; \
- INSTR (%eax), REG; \
- movl $0, T_LOFAULT(%ecx); \
- INSTR REG, (%edx); \
- xorl %eax, %eax; \
- ret; \
-_flt_/**/NAME: \
- movl $0, T_LOFAULT(%ecx); \
-1: \
- movl T_COPYOPS(%ecx), %eax; \
- cmpl $0, %eax; \
- jz 2f; \
- jmp *COPYOP(%eax); \
-2: \
- movl $-1, %eax; \
- ret; \
- SET_SIZE(NAME)
-
- FUWORD(fuword32, movl, %eax, CP_FUWORD32)
- FUWORD(fuword16, movw, %ax, CP_FUWORD16)
- FUWORD(fuword8, movb, %al, CP_FUWORD8)
-
-#endif /* __i386 */
-
#undef FUWORD
-#endif /* __lint */
-
/*
* Set user word.
*/
-#if defined(__lint)
-
-#if defined(__amd64)
-
-/* ARGSUSED */
-int
-suword64(void *addr, uint64_t value)
-{ return (0); }
-
-#endif
-
-/* ARGSUSED */
-int
-suword32(void *addr, uint32_t value)
-{ return (0); }
-
-/* ARGSUSED */
-int
-suword16(void *addr, uint16_t value)
-{ return (0); }
-
-/* ARGSUSED */
-int
-suword8(void *addr, uint8_t value)
-{ return (0); }
-
-#else /* lint */
-
-#if defined(__amd64)
-
/*
* Note that we don't save and reload the arguments here
* because their values are not altered in the copy path.
*/
@@ -2688,79 +1755,12 @@
SUWORD(suword64, movq, %rsi, CP_SUWORD64,12,18,19)
SUWORD(suword32, movl, %esi, CP_SUWORD32,13,20,21)
SUWORD(suword16, movw, %si, CP_SUWORD16,14,22,23)
SUWORD(suword8, movb, %sil, CP_SUWORD8,15,24,25)
-#elif defined(__i386)
-
-#define SUWORD(NAME, INSTR, REG, COPYOP) \
- ENTRY(NAME) \
- movl %gs:CPU_THREAD, %ecx; \
- movl kernelbase, %eax; \
- cmpl %eax, 4(%esp); \
- jae 1f; \
- lea _flt_/**/NAME, %edx; \
- movl %edx, T_LOFAULT(%ecx); \
- movl 4(%esp), %eax; \
- movl 8(%esp), %edx; \
- INSTR REG, (%eax); \
- movl $0, T_LOFAULT(%ecx); \
- xorl %eax, %eax; \
- ret; \
-_flt_/**/NAME: \
- movl $0, T_LOFAULT(%ecx); \
-1: \
- movl T_COPYOPS(%ecx), %eax; \
- cmpl $0, %eax; \
- jz 3f; \
- movl COPYOP(%eax), %ecx; \
- jmp *%ecx; \
-3: \
- movl $-1, %eax; \
- ret; \
- SET_SIZE(NAME)
-
- SUWORD(suword32, movl, %edx, CP_SUWORD32)
- SUWORD(suword16, movw, %dx, CP_SUWORD16)
- SUWORD(suword8, movb, %dl, CP_SUWORD8)
-
-#endif /* __i386 */
-
#undef SUWORD
-#endif /* __lint */
-
-#if defined(__lint)
-
-#if defined(__amd64)
-
-/*ARGSUSED*/
-void
-fuword64_noerr(const void *addr, uint64_t *dst)
-{}
-
-#endif
-
-/*ARGSUSED*/
-void
-fuword32_noerr(const void *addr, uint32_t *dst)
-{}
-
-/*ARGSUSED*/
-void
-fuword8_noerr(const void *addr, uint8_t *dst)
-{}
-
-/*ARGSUSED*/
-void
-fuword16_noerr(const void *addr, uint16_t *dst)
-{}
-
-#else /* __lint */
-
-#if defined(__amd64)
-
#define FUWORD_NOERR(NAME, INSTR, REG) \
ENTRY(NAME) \
cmpq kernelbase(%rip), %rdi; \
cmovnbq kernelbase(%rip), %rdi; \
INSTR (%rdi), REG; \
@@ -2771,64 +1771,12 @@
FUWORD_NOERR(fuword64_noerr, movq, %rax)
FUWORD_NOERR(fuword32_noerr, movl, %eax)
FUWORD_NOERR(fuword16_noerr, movw, %ax)
FUWORD_NOERR(fuword8_noerr, movb, %al)
-#elif defined(__i386)
-
-#define FUWORD_NOERR(NAME, INSTR, REG) \
- ENTRY(NAME) \
- movl 4(%esp), %eax; \
- cmpl kernelbase, %eax; \
- jb 1f; \
- movl kernelbase, %eax; \
-1: movl 8(%esp), %edx; \
- INSTR (%eax), REG; \
- INSTR REG, (%edx); \
- ret; \
- SET_SIZE(NAME)
-
- FUWORD_NOERR(fuword32_noerr, movl, %ecx)
- FUWORD_NOERR(fuword16_noerr, movw, %cx)
- FUWORD_NOERR(fuword8_noerr, movb, %cl)
-
-#endif /* __i386 */
-
#undef FUWORD_NOERR
-#endif /* __lint */
-
-#if defined(__lint)
-
-#if defined(__amd64)
-
-/*ARGSUSED*/
-void
-suword64_noerr(void *addr, uint64_t value)
-{}
-
-#endif
-
-/*ARGSUSED*/
-void
-suword32_noerr(void *addr, uint32_t value)
-{}
-
-/*ARGSUSED*/
-void
-suword16_noerr(void *addr, uint16_t value)
-{}
-
-/*ARGSUSED*/
-void
-suword8_noerr(void *addr, uint8_t value)
-{}
-
-#else /* lint */
-
-#if defined(__amd64)
-
#define SUWORD_NOERR(NAME, INSTR, REG) \
ENTRY(NAME) \
cmpq kernelbase(%rip), %rdi; \
cmovnbq kernelbase(%rip), %rdi; \
INSTR REG, (%rdi); \
@@ -2838,148 +1786,27 @@
SUWORD_NOERR(suword64_noerr, movq, %rsi)
SUWORD_NOERR(suword32_noerr, movl, %esi)
SUWORD_NOERR(suword16_noerr, movw, %si)
SUWORD_NOERR(suword8_noerr, movb, %sil)
-#elif defined(__i386)
-
-#define SUWORD_NOERR(NAME, INSTR, REG) \
- ENTRY(NAME) \
- movl 4(%esp), %eax; \
- cmpl kernelbase, %eax; \
- jb 1f; \
- movl kernelbase, %eax; \
-1: \
- movl 8(%esp), %edx; \
- INSTR REG, (%eax); \
- ret; \
- SET_SIZE(NAME)
-
- SUWORD_NOERR(suword32_noerr, movl, %edx)
- SUWORD_NOERR(suword16_noerr, movw, %dx)
- SUWORD_NOERR(suword8_noerr, movb, %dl)
-
-#endif /* __i386 */
-
#undef SUWORD_NOERR
-#endif /* lint */
-
-#if defined(__lint)
-
-/*ARGSUSED*/
-int
-subyte(void *addr, uchar_t value)
-{ return (0); }
-
-/*ARGSUSED*/
-void
-subyte_noerr(void *addr, uchar_t value)
-{}
-
-/*ARGSUSED*/
-int
-fulword(const void *addr, ulong_t *valuep)
-{ return (0); }
-
-/*ARGSUSED*/
-void
-fulword_noerr(const void *addr, ulong_t *valuep)
-{}
-
-/*ARGSUSED*/
-int
-sulword(void *addr, ulong_t valuep)
-{ return (0); }
-
-/*ARGSUSED*/
-void
-sulword_noerr(void *addr, ulong_t valuep)
-{}
-
-#else
-
.weak subyte
subyte=suword8
.weak subyte_noerr
subyte_noerr=suword8_noerr
-#if defined(__amd64)
-
.weak fulword
fulword=fuword64
.weak fulword_noerr
fulword_noerr=fuword64_noerr
.weak sulword
sulword=suword64
.weak sulword_noerr
sulword_noerr=suword64_noerr
-#elif defined(__i386)
-
- .weak fulword
- fulword=fuword32
- .weak fulword_noerr
- fulword_noerr=fuword32_noerr
- .weak sulword
- sulword=suword32
- .weak sulword_noerr
- sulword_noerr=suword32_noerr
-
-#endif /* __i386 */
-
-#endif /* __lint */
-
-#if defined(__lint)
-
-/*
- * Copy a block of storage - must not overlap (from + len <= to).
- * No fault handler installed (to be called under on_fault())
- */
-
-/* ARGSUSED */
-void
-copyout_noerr(const void *kfrom, void *uto, size_t count)
-{}
-
-/* ARGSUSED */
-void
-copyin_noerr(const void *ufrom, void *kto, size_t count)
-{}
-
-/*
- * Zero a block of storage in user space
- */
-
-/* ARGSUSED */
-void
-uzero(void *addr, size_t count)
-{}
-
-/*
- * copy a block of storage in user space
- */
-
-/* ARGSUSED */
-void
-ucopy(const void *ufrom, void *uto, size_t ulength)
-{}
-
-/*
- * copy a string in user space
- */
-
-/* ARGSUSED */
-void
-ucopystr(const char *ufrom, char *uto, size_t umaxlength, size_t *lencopied)
-{}
-
-#else /* __lint */
-
-#if defined(__amd64)
-
ENTRY(copyin_noerr)
movq kernelbase(%rip), %rax
#ifdef DEBUG
cmpq %rax, %rsi /* %rsi = kto */
jae 1f
@@ -3043,81 +1870,11 @@
movq %gs:CPU_THREAD, %r8
movq T_LOFAULT(%r8), %r8
jmp do_copystr
SET_SIZE(ucopystr)
-#elif defined(__i386)
-
- ENTRY(copyin_noerr)
- movl kernelbase, %eax
#ifdef DEBUG
- cmpl %eax, 8(%esp)
- jae 1f
- pushl $.cpyin_ne_pmsg
- call panic
-1:
-#endif
- cmpl %eax, 4(%esp)
- jb do_copy
- movl %eax, 4(%esp) /* force fault at kernelbase */
- jmp do_copy
- SET_SIZE(copyin_noerr)
-
- ENTRY(copyout_noerr)
- movl kernelbase, %eax
-#ifdef DEBUG
- cmpl %eax, 4(%esp)
- jae 1f
- pushl $.cpyout_ne_pmsg
- call panic
-1:
-#endif
- cmpl %eax, 8(%esp)
- jb do_copy
- movl %eax, 8(%esp) /* force fault at kernelbase */
- jmp do_copy
- SET_SIZE(copyout_noerr)
-
- ENTRY(uzero)
- movl kernelbase, %eax
- cmpl %eax, 4(%esp)
- jb do_zero
- movl %eax, 4(%esp) /* force fault at kernelbase */
- jmp do_zero
- SET_SIZE(uzero)
-
- ENTRY(ucopy)
- movl kernelbase, %eax
- cmpl %eax, 4(%esp)
- jb 1f
- movl %eax, 4(%esp) /* force fault at kernelbase */
-1:
- cmpl %eax, 8(%esp)
- jb do_copy
- movl %eax, 8(%esp) /* force fault at kernelbase */
- jmp do_copy
- SET_SIZE(ucopy)
-
- ENTRY(ucopystr)
- movl kernelbase, %eax
- cmpl %eax, 4(%esp)
- jb 1f
- movl %eax, 4(%esp) /* force fault at kernelbase */
-1:
- cmpl %eax, 8(%esp)
- jb 2f
- movl %eax, 8(%esp) /* force fault at kernelbase */
-2:
- /* do_copystr expects the lofault address in %eax */
- movl %gs:CPU_THREAD, %eax
- movl T_LOFAULT(%eax), %eax
- jmp do_copystr
- SET_SIZE(ucopystr)
-
-#endif /* __i386 */
-
-#ifdef DEBUG
.data
.kcopy_panic_msg:
.string "kcopy: arguments below kernelbase"
.bcopy_panic_msg:
.string "bcopy: arguments below kernelbase"
@@ -3143,12 +1900,10 @@
.string "copyin_noerr: argument not in kernel address space"
.cpyout_ne_pmsg:
.string "copyout_noerr: argument not in kernel address space"
#endif
-#endif /* __lint */
-
/*
* These functions are used for SMAP, supervisor mode access protection. They
* are hotpatched to become real instructions when the system starts up which is
* done in mlsetup() as a part of enabling the other CR4 related features.
*
@@ -3155,23 +1910,10 @@
* Generally speaking, smap_disable() is a stac instruction and smap_enable is a
* clac instruction. It's safe to call these any number of times, and in fact,
* out of paranoia, the kernel will likely call it at several points.
*/
-#if defined(__lint)
-
-void
-smap_enable(void)
-{}
-
-void
-smap_disable(void)
-{}
-
-#else
-
-#if defined (__amd64) || defined(__i386)
ENTRY(smap_disable)
nop
nop
nop
ret
@@ -3182,16 +1924,10 @@
nop
nop
ret
SET_SIZE(smap_enable)
-#endif /* __amd64 || __i386 */
-
-#endif /* __lint */
-
-#ifndef __lint
-
.data
.align 4
.globl _smap_enable_patch_count
.type _smap_enable_patch_count,@object
.size _smap_enable_patch_count, 4
@@ -3201,7 +1937,5 @@
.globl _smap_disable_patch_count
.type _smap_disable_patch_count,@object
.size _smap_disable_patch_count, 4
_smap_disable_patch_count:
.long SMAP_DISABLE_COUNT
-
-#endif /* __lint */