70 lines
1.4 KiB
ArmAsm
70 lines
1.4 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:
|
||
|
pushl %ebp
|
||
|
movl %esp, %ebp
|
||
|
subl $8, %esp
|
||
|
xorl %eax, %eax
|
||
|
nop
|
||
|
nop
|
||
|
leave
|
||
|
ret
|
||
|
usdt_tracepoint_probe:
|
||
|
_usdt_tracepoint_probe:
|
||
|
nop
|
||
|
nop
|
||
|
nop
|
||
|
nop
|
||
|
nop
|
||
|
addl $0x20,%esp
|
||
|
leave
|
||
|
usdt_tracepoint_end:
|
||
|
_usdt_tracepoint_end:
|
||
|
ret
|
||
|
|
||
|
/*
|
||
|
* Probe argument marshalling, i386 style
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
usdt_probe_args:
|
||
|
_usdt_probe_args:
|
||
|
pushl %ebp
|
||
|
movl %esp,%ebp
|
||
|
subl $8,%esp
|
||
|
subl $8,%esp
|
||
|
movl 8(%ebp),%edx
|
||
|
movl 0xc(%ebp),%ecx
|
||
|
test %ecx,%ecx
|
||
|
je fire
|
||
|
args: movl %ecx,%eax
|
||
|
sal $2,%eax
|
||
|
subl $4,%eax
|
||
|
addl 0x10(%ebp),%eax
|
||
|
pushl (%eax)
|
||
|
dec %ecx
|
||
|
jne args
|
||
|
fire: jmp *%edx
|
||
|
|