124 lines
2.5 KiB
ArmAsm
124 lines
2.5 KiB
ArmAsm
|
/*
|
||
|
* Copyright (c) 2012, Chris Andrews. All rights reserved.
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Stub functions containing DTrace tracepoints for probes and
|
||
|
* is-enabled probes. These functions are copied for each probe
|
||
|
* dynamically created.
|
||
|
*
|
||
|
*/
|
||
|
.text
|
||
|
|
||
|
.align 4, 0x90
|
||
|
.globl usdt_tracepoint_isenabled
|
||
|
.globl _usdt_tracepoint_isenabled
|
||
|
.globl usdt_tracepoint_probe
|
||
|
.globl _usdt_tracepoint_probe
|
||
|
.globl usdt_tracepoint_end
|
||
|
.globl _usdt_tracepoint_end
|
||
|
.globl usdt_probe_args
|
||
|
.globl _usdt_probe_args
|
||
|
|
||
|
usdt_tracepoint_isenabled:
|
||
|
_usdt_tracepoint_isenabled:
|
||
|
pushq %rbp
|
||
|
movq %rsp, %rbp
|
||
|
addq $1, %rax
|
||
|
xorq %rax, %rax
|
||
|
nop
|
||
|
nop
|
||
|
leave
|
||
|
ret
|
||
|
usdt_tracepoint_probe:
|
||
|
_usdt_tracepoint_probe:
|
||
|
nop
|
||
|
nop
|
||
|
nop
|
||
|
nop
|
||
|
nop
|
||
|
addq %r14,%rsp
|
||
|
popq %rbx
|
||
|
popq %r14
|
||
|
popq %r13
|
||
|
popq %r12
|
||
|
leave
|
||
|
usdt_tracepoint_end:
|
||
|
_usdt_tracepoint_end:
|
||
|
ret
|
||
|
|
||
|
/*
|
||
|
* Probe argument marshalling, x86_64 style
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
usdt_probe_args:
|
||
|
_usdt_probe_args:
|
||
|
pushq %rbp
|
||
|
movq %rsp,%rbp
|
||
|
pushq %r12
|
||
|
pushq %r13
|
||
|
pushq %r14
|
||
|
pushq %rbx
|
||
|
|
||
|
movq %rdi,%r12
|
||
|
movq %rsi,%rbx
|
||
|
movq %rdx,%r11
|
||
|
movq $0,%r14
|
||
|
|
||
|
test %rbx,%rbx
|
||
|
je fire
|
||
|
movq (%r11),%rdi
|
||
|
dec %rbx
|
||
|
test %rbx,%rbx
|
||
|
je fire
|
||
|
addq $8,%r11
|
||
|
movq (%r11),%rsi
|
||
|
dec %rbx
|
||
|
test %rbx,%rbx
|
||
|
je fire
|
||
|
addq $8,%r11
|
||
|
movq (%r11),%rdx
|
||
|
dec %rbx
|
||
|
test %rbx,%rbx
|
||
|
je fire
|
||
|
addq $8,%r11
|
||
|
movq (%r11),%rcx
|
||
|
dec %rbx
|
||
|
test %rbx,%rbx
|
||
|
je fire
|
||
|
addq $8,%r11
|
||
|
movq (%r11),%r8
|
||
|
dec %rbx
|
||
|
test %rbx,%rbx
|
||
|
je fire
|
||
|
addq $8,%r11
|
||
|
movq (%r11),%r9
|
||
|
|
||
|
movq %rbx,%r13
|
||
|
morestack:
|
||
|
dec %rbx
|
||
|
test %rbx,%rbx
|
||
|
je args
|
||
|
subq $16,%rsp
|
||
|
addq $16,%r14
|
||
|
dec %rbx
|
||
|
test %rbx,%rbx
|
||
|
je args
|
||
|
jmp morestack
|
||
|
|
||
|
args:
|
||
|
movq %r13,%rbx
|
||
|
movq $0,%r13
|
||
|
moreargs:
|
||
|
dec %rbx
|
||
|
test %rbx,%rbx
|
||
|
je fire
|
||
|
addq $8,%r11
|
||
|
movq (%r11),%rax
|
||
|
movq %rax,(%rsp,%r13)
|
||
|
addq $8,%r13
|
||
|
jmp moreargs
|
||
|
|
||
|
fire: jmp *%r12
|