#include <sys/asm_linkage.h>
#include <sys/regset.h>
#include "assym.h"
ENTRY_NP(dtrace_getfp)
movq %rbp, %rax
ret
SET_SIZE(dtrace_getfp)
ENTRY_NP(dtrace_getvmreg)
movq %rdi, %rdx
vmread %rdx, %rax
ret
SET_SIZE(dtrace_getvmreg)
ENTRY(dtrace_cas32)
movl %esi, %eax
lock
cmpxchgl %edx, (%rdi)
ret
SET_SIZE(dtrace_cas32)
ENTRY(dtrace_casptr)
movq %rsi, %rax
lock
cmpxchgq %rdx, (%rdi)
ret
SET_SIZE(dtrace_casptr)
ENTRY(dtrace_caller)
movq $-1, %rax
ret
SET_SIZE(dtrace_caller)
ENTRY(dtrace_copy)
pushq %rbp
call smap_disable
movq %rsp, %rbp
xchgq %rdi, %rsi
movq %rdx, %rcx
repz
smovb
call smap_enable
leave
ret
SET_SIZE(dtrace_copy)
ENTRY(dtrace_copystr)
pushq %rbp
movq %rsp, %rbp
call smap_disable
0:
movb (%rdi), %al
movb %al, (%rsi)
addq $1, %rdi
addq $1, %rsi
subq $1, %rdx
cmpb $0, %al
je 2f
testq $0xfff, %rdx
jnz 1f
testq $CPU_DTRACE_BADADDR, (%rcx)
jnz 2f
1:
cmpq $0, %rdx
jne 0b
2:
call smap_enable
leave
ret
SET_SIZE(dtrace_copystr)
ENTRY(dtrace_fulword)
call smap_disable
movq (%rdi), %rax
call smap_enable
ret
SET_SIZE(dtrace_fulword)
ENTRY(dtrace_fuword8_nocheck)
call smap_disable
xorq %rax, %rax
movb (%rdi), %al
call smap_enable
ret
SET_SIZE(dtrace_fuword8_nocheck)
ENTRY(dtrace_fuword16_nocheck)
call smap_disable
xorq %rax, %rax
movw (%rdi), %ax
call smap_enable
ret
SET_SIZE(dtrace_fuword16_nocheck)
ENTRY(dtrace_fuword32_nocheck)
call smap_disable
xorq %rax, %rax
movl (%rdi), %eax
call smap_enable
ret
SET_SIZE(dtrace_fuword32_nocheck)
ENTRY(dtrace_fuword64_nocheck)
call smap_disable
movq (%rdi), %rax
call smap_enable
ret
SET_SIZE(dtrace_fuword64_nocheck)
ENTRY(dtrace_probe_error)
pushq %rbp
movq %rsp, %rbp
subq $0x8, %rsp
movq %r9, (%rsp)
movq %r8, %r9
movq %rcx, %r8
movq %rdx, %rcx
movq %rsi, %rdx
movq %rdi, %rsi
movl dtrace_probeid_error(%rip), %edi
call dtrace_probe
addq $0x8, %rsp
leave
ret
SET_SIZE(dtrace_probe_error)