Some checks failed
sm-rpc / build (Debug, aarch64-linux-gnu) (push) Failing after 13m15s
sm-rpc / build (Release, mipsel-linux-gnu) (push) Failing after 13m1s
sm-rpc / build (Release, host.gcc) (push) Failing after 13m14s
sm-rpc / build (Release, arm-linux-gnueabihf) (push) Failing after 13m35s
sm-rpc / build (Release, aarch64-linux-gnu) (push) Failing after 13m56s
sm-rpc / build (Debug, mipsel-linux-gnu) (push) Failing after 14m22s
sm-rpc / build (Debug, host.gcc) (push) Failing after 14m49s
sm-rpc / build (Debug, arm-linux-gnueabihf) (push) Failing after 15m13s
213 lines
2.7 KiB
ArmAsm
213 lines
2.7 KiB
ArmAsm
.intel_syntax noprefix
|
|
.text
|
|
.globl _microprofile_tramp_enter
|
|
.globl _microprofile_tramp_leave
|
|
.globl _microprofile_tramp_code_begin
|
|
.globl _microprofile_tramp_code_end
|
|
.globl _microprofile_tramp_end
|
|
.globl _microprofile_tramp_exit
|
|
.globl _microprofile_tramp_intercept0
|
|
.globl _microprofile_tramp_enter_patch
|
|
.globl _microprofile_tramp_get_rsp_loc
|
|
.globl _microprofile_tramp_arg0
|
|
.globl _microprofile_tramp_arg1
|
|
.globl _microprofile_tramp_call_patch_pop
|
|
.globl _microprofile_tramp_call_patch_push
|
|
.globl _microprofile_tramp_trunk
|
|
|
|
_microprofile_tramp_enter:
|
|
mov r12, [rsp]
|
|
# mov (%rsp), %(rax)
|
|
|
|
push rdi
|
|
push rsi
|
|
push rdx
|
|
push rcx
|
|
push r8
|
|
push r9
|
|
#sub $88h, %rsp
|
|
sub rsp, 0x88
|
|
|
|
movdqu 0x70[rsp], xmm7
|
|
movdqu 0x60[rsp], xmm6
|
|
movdqu 0x50[rsp], xmm5
|
|
movdqu 0x40[rsp], xmm4
|
|
movdqu 0x30[rsp], xmm3
|
|
movdqu 0x20[rsp], xmm2
|
|
movdqu 0x10[rsp], xmm1
|
|
movdqu [rsp], xmm0
|
|
|
|
# #call _microprofile_tramp_get_rsp_loc
|
|
mov rdi, r12
|
|
_microprofile_tramp_call_patch_push:
|
|
mov rax, 0x0102030405060708
|
|
call rax
|
|
test rax, rax
|
|
jz _microprofile_tramp_fail #if push fails, skip to call code, and dont patch return adress.
|
|
# ##todo check ret val
|
|
# # movq %r12, (%rax)
|
|
|
|
_microprofile_tramp_enter_patch:
|
|
# PATCH 1 TRAMP EXIT
|
|
mov rax, 0x0102030405060708 #patch to tramp_code_end
|
|
mov [rsp + 0xb8], rax
|
|
_microprofile_tramp_arg0:
|
|
mov rdi, 42
|
|
_microprofile_tramp_intercept0:
|
|
#PATCH 2 INTERCEPT0
|
|
mov rax, 0x0102030405060708
|
|
call rax
|
|
_microprofile_tramp_fail:
|
|
movdqu xmm7, [rsp + 0x70]
|
|
movdqu xmm6, [rsp + 0x60]
|
|
movdqu xmm5, [rsp + 0x50]
|
|
movdqu xmm4, [rsp + 0x40]
|
|
movdqu xmm3, [rsp + 0x30]
|
|
movdqu xmm2, [rsp + 0x20]
|
|
movdqu xmm1, [rsp + 0x10]
|
|
movdqu xmm0, [rsp]
|
|
add rsp, 0x88
|
|
pop r9
|
|
pop r8
|
|
pop rcx
|
|
pop rdx
|
|
pop rsi
|
|
pop rdi
|
|
_microprofile_tramp_code_begin:
|
|
##insert code here
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
_microprofile_tramp_code_end:
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
_microprofile_tramp_exit:
|
|
mov rdi, 117
|
|
push rax
|
|
push rdx
|
|
sub rsp, 0x18
|
|
movdqu [rsp], xmm0
|
|
|
|
_microprofile_tramp_leave:
|
|
#PATCH 3 INTERCEPT1
|
|
mov rax, 0x0102030405060708
|
|
call rax #jump to proxy
|
|
|
|
_microprofile_tramp_call_patch_pop:
|
|
mov rax, 0x0102030405060708
|
|
call rax
|
|
mov r11, rax
|
|
|
|
movdqu xmm0, [rsp]
|
|
add rsp, 0x18
|
|
|
|
pop rdx
|
|
pop rax
|
|
jmp r11
|
|
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
ret
|
|
int3
|
|
_microprofile_tramp_trunk: #used for moved constants.
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
nop
|
|
_microprofile_tramp_end:
|