Print this page
11787 Kernel needs to be built with retpolines
11788 Kernel needs to generally use RSB stuffing
Reviewed by: Jerry Jelinek <jerry.jelinek@joyent.com>
Reviewed by: John Levon <john.levon@joyent.com>
@@ -22,11 +22,13 @@
/*
* Copyright 2005 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
-#pragma ident "%Z%%M% %I% %E% SMI"
+/*
+ * Copyright 2019 Joyent, Inc.
+ */
#if defined(lint) || defined(__lint)
#include <sys/types.h>
#include <sys/sunddi.h>
#else
@@ -287,11 +289,12 @@
cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %edx
jne 2f
movzbq (%rsi), %rax
ret
2:
- jmp *ACC_GETB(%rdi)
+ movq ACC_GETB(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_get8)
SET_SIZE(ddi_getb)
SET_SIZE(ddi_mem_getb)
SET_SIZE(ddi_mem_get8)
SET_SIZE(ddi_io_getb)
@@ -349,11 +352,12 @@
cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %edx
jne 4f
movzwq (%rsi), %rax
ret
4:
- jmp *ACC_GETW(%rdi)
+ movq ACC_GETW(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_get16)
SET_SIZE(ddi_getw)
SET_SIZE(ddi_mem_getw)
SET_SIZE(ddi_mem_get16)
SET_SIZE(ddi_io_getw)
@@ -410,11 +414,12 @@
cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %edx
jne 6f
movl (%rsi), %eax
ret
6:
- jmp *ACC_GETL(%rdi)
+ movq ACC_GETL(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_get32)
SET_SIZE(ddi_getl)
SET_SIZE(ddi_mem_getl)
SET_SIZE(ddi_mem_get32)
SET_SIZE(ddi_io_getl)
@@ -456,11 +461,12 @@
ENTRY(ddi_get64)
ALTENTRY(ddi_getll)
ALTENTRY(ddi_mem_getll)
ALTENTRY(ddi_mem_get64)
- jmp *ACC_GETLL(%rdi)
+ movq ACC_GETLL(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_get64)
SET_SIZE(ddi_getll)
SET_SIZE(ddi_mem_getll)
SET_SIZE(ddi_mem_get64)
@@ -498,11 +504,12 @@
cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx
jne 8f
movb %dl, (%rsi)
ret
8:
- jmp *ACC_PUTB(%rdi)
+ movq ACC_PUTB(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_put8)
SET_SIZE(ddi_putb)
SET_SIZE(ddi_mem_putb)
SET_SIZE(ddi_mem_put8)
SET_SIZE(ddi_io_putb)
@@ -561,11 +568,12 @@
cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx
jne 9f
movw %dx, (%rsi)
ret
9:
- jmp *ACC_PUTW(%rdi)
+ movq ACC_PUTW(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_put16)
SET_SIZE(ddi_putw)
SET_SIZE(ddi_mem_putw)
SET_SIZE(ddi_mem_put16)
SET_SIZE(ddi_io_putw)
@@ -624,11 +632,12 @@
cmpl $_CONST(DDI_ACCATTR_CPU_VADDR|DDI_ACCATTR_DIRECT), %ecx
jne 9f
movl %edx, (%rsi)
ret
9:
- jmp *ACC_PUTL(%rdi)
+ movq ACC_PUTL(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_put32)
SET_SIZE(ddi_putl)
SET_SIZE(ddi_mem_putl)
SET_SIZE(ddi_mem_put32)
SET_SIZE(ddi_io_putl)
@@ -672,11 +681,12 @@
ENTRY(ddi_put64)
ALTENTRY(ddi_putll)
ALTENTRY(ddi_mem_putll)
ALTENTRY(ddi_mem_put64)
- jmp *ACC_PUTLL(%rdi)
+ movq ACC_PUTLL(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_put64)
SET_SIZE(ddi_putll)
SET_SIZE(ddi_mem_putll)
SET_SIZE(ddi_mem_put64)
@@ -699,11 +709,12 @@
ENTRY(ddi_rep_get8)
ALTENTRY(ddi_rep_getb)
ALTENTRY(ddi_mem_rep_getb)
ALTENTRY(ddi_mem_rep_get8)
- jmp *ACC_REP_GETB(%rdi)
+ movq ACC_REP_GETB(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_rep_get8)
SET_SIZE(ddi_rep_getb)
SET_SIZE(ddi_mem_rep_getb)
SET_SIZE(ddi_mem_rep_get8)
@@ -726,11 +737,12 @@
ENTRY(ddi_rep_get16)
ALTENTRY(ddi_rep_getw)
ALTENTRY(ddi_mem_rep_getw)
ALTENTRY(ddi_mem_rep_get16)
- jmp *ACC_REP_GETW(%rdi)
+ movq ACC_REP_GETW(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_rep_get16)
SET_SIZE(ddi_rep_getw)
SET_SIZE(ddi_mem_rep_getw)
SET_SIZE(ddi_mem_rep_get16)
@@ -753,11 +765,12 @@
ENTRY(ddi_rep_get32)
ALTENTRY(ddi_rep_getl)
ALTENTRY(ddi_mem_rep_getl)
ALTENTRY(ddi_mem_rep_get32)
- jmp *ACC_REP_GETL(%rdi)
+ movq ACC_REP_GETL(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_rep_get32)
SET_SIZE(ddi_rep_getl)
SET_SIZE(ddi_mem_rep_getl)
SET_SIZE(ddi_mem_rep_get32)
@@ -780,11 +793,12 @@
ENTRY(ddi_rep_get64)
ALTENTRY(ddi_rep_getll)
ALTENTRY(ddi_mem_rep_getll)
ALTENTRY(ddi_mem_rep_get64)
- jmp *ACC_REP_GETLL(%rdi)
+ movq ACC_REP_GETLL(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_rep_get64)
SET_SIZE(ddi_rep_getll)
SET_SIZE(ddi_mem_rep_getll)
SET_SIZE(ddi_mem_rep_get64)
@@ -807,11 +821,12 @@
ENTRY(ddi_rep_put8)
ALTENTRY(ddi_rep_putb)
ALTENTRY(ddi_mem_rep_putb)
ALTENTRY(ddi_mem_rep_put8)
- jmp *ACC_REP_PUTB(%rdi)
+ movq ACC_REP_PUTB(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_rep_put8)
SET_SIZE(ddi_rep_putb)
SET_SIZE(ddi_mem_rep_putb)
SET_SIZE(ddi_mem_rep_put8)
@@ -834,11 +849,12 @@
ENTRY(ddi_rep_put16)
ALTENTRY(ddi_rep_putw)
ALTENTRY(ddi_mem_rep_putw)
ALTENTRY(ddi_mem_rep_put16)
- jmp *ACC_REP_PUTW(%rdi)
+ movq ACC_REP_PUTW(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_rep_put16)
SET_SIZE(ddi_rep_putw)
SET_SIZE(ddi_mem_rep_putw)
SET_SIZE(ddi_mem_rep_put16)
@@ -861,11 +877,12 @@
ENTRY(ddi_rep_put32)
ALTENTRY(ddi_rep_putl)
ALTENTRY(ddi_mem_rep_putl)
ALTENTRY(ddi_mem_rep_put32)
- jmp *ACC_REP_PUTL(%rdi)
+ movq ACC_REP_PUTL(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_rep_put32)
SET_SIZE(ddi_rep_putl)
SET_SIZE(ddi_mem_rep_putl)
SET_SIZE(ddi_mem_rep_put32)
@@ -888,11 +905,12 @@
ENTRY(ddi_rep_put64)
ALTENTRY(ddi_rep_putll)
ALTENTRY(ddi_mem_rep_putll)
ALTENTRY(ddi_mem_rep_put64)
- jmp *ACC_REP_PUTLL(%rdi)
+ movq ACC_REP_PUTLL(%rdi), %rax
+ INDIRECT_JMP_REG(rax)
SET_SIZE(ddi_rep_put64)
SET_SIZE(ddi_rep_putll)
SET_SIZE(ddi_mem_rep_putll)
SET_SIZE(ddi_mem_rep_put64)