mirror of
https://github.com/intel/linux-sgx
synced 2026-06-08 14:49:32 +00:00
c505e6129a
Added support for Reproducible Enclave Build using Docker file. Added support for Intel AVX-512 instructions and Intel SHA Extensions New Instructions (SHA-NI) in trusted libraries. Support both EPID and ECDSA based quote for quoting related interfaces in sgx_uae_service library. Updated key exchange library to support both EPID and ECDSA based remote attestation. Support new interface to check platform information blob from remote attestation response message. Fixed bugs. Signed-off-by: Li, Xun <xun.li@intel.com>
103 lines
1.7 KiB
ArmAsm
103 lines
1.7 KiB
ArmAsm
.globl func_add1, func_add1_end
|
|
.proc func_add1
|
|
func_add1:
|
|
{.mib; add r8 = 1, r32
|
|
nop.i 0
|
|
br.ret.sptk.many rp
|
|
}
|
|
func_add1_end:
|
|
.endp func_add1
|
|
|
|
.globl func_add3, func_add3_end
|
|
.proc func_add3
|
|
func_add3:
|
|
{.mmi; alloc loc0 = ar.pfs, 2, 1, 2, 0
|
|
mov r2 = sp
|
|
add sp = -16, sp
|
|
} ;;
|
|
{.mii; ld8 r8 = [in1], 8 // load the function pointer
|
|
mov r3 = rp
|
|
mov rp = loc0 // trash rp
|
|
} ;;
|
|
{.mmi; ld8 r9 = [r8], 8 // load the entry-point
|
|
st8 [r2] = r3
|
|
mov out0 = in0
|
|
} ;;
|
|
{.mii; ld8 gp = [r8] // load the gp
|
|
mov b6 = r9
|
|
mov out1 = in1
|
|
}
|
|
{.mib; nop 0
|
|
nop 0
|
|
br.call.sptk rp = b6
|
|
}
|
|
{.mmi; add r2 = 16, sp
|
|
;;
|
|
ld8 r3 = [r2] // r3 = saved rp
|
|
mov ar.pfs = loc0
|
|
} ;;
|
|
{.mii; nop 0
|
|
mov rp = r3
|
|
adds sp = 16, sp
|
|
} ;;
|
|
{.mib; st8 [sp] = in0 // trash rp save location
|
|
add r8 = 2, r8
|
|
br.ret.sptk.many rp
|
|
}
|
|
func_add3_end:
|
|
.endp func_add3
|
|
|
|
.globl func_vframe, func_vframe_end
|
|
.proc func_vframe
|
|
func_vframe:
|
|
{.mii; alloc r16 = ar.pfs, 1, 2, 0, 0 // 0
|
|
mov loc0 = rp
|
|
mov loc1 = sp
|
|
} ;;
|
|
{.mmi; sub sp = sp, in0
|
|
st8 [loc1] = r16
|
|
mov r2 = -99 // 0
|
|
} ;;
|
|
{.mii; nop 0
|
|
mov rp = r2
|
|
mov ar.pfs = r0
|
|
}
|
|
{.mib; mov r16 = r2
|
|
tbit.nz p6, p0 = in0, 4
|
|
(p6) br.cond.sptk.many .exit
|
|
} ;;
|
|
{.mmi; ld8 r16 = [loc1]
|
|
;;
|
|
mov r3 = loc0 // 8 move saved rp to r3
|
|
mov ar.pfs = r16
|
|
} ;;
|
|
{.mmi; mov sp = loc1 // 10
|
|
st8 [loc1] = r0 // trash saved pfs
|
|
mov loc0 = r2
|
|
} ;;
|
|
{.mib; mov r8 = 10
|
|
mov rp = r3
|
|
br.ret.sptk.many rp
|
|
}
|
|
.exit:
|
|
{.mmi; ld8 r16 = [loc1]
|
|
;;
|
|
sub sp = 32, sp
|
|
mov ar.pfs = r16
|
|
} ;;
|
|
{.mmi; mov sp = loc1
|
|
st8 [loc1] = r0 // trash saved pfs
|
|
mov rp = loc0
|
|
}
|
|
{.mib; nop 0
|
|
mov r8 = 4
|
|
br.ret.sptk.many rp
|
|
}
|
|
func_vframe_end:
|
|
.endp func_vframe
|
|
|
|
#ifdef __linux__
|
|
/* We do not need executable stack. */
|
|
.section .note.GNU-stack,"",@progbits
|
|
#endif
|