Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/amd64/sgx/sgx_support.S
39507 views
1
/*-
2
* Copyright (c) 2017 Ruslan Bukin <[email protected]>
3
* All rights reserved.
4
*
5
* This software was developed by BAE Systems, the University of Cambridge
6
* Computer Laboratory, and Memorial University under DARPA/AFRL contract
7
* FA8650-15-C-7558 ("CADETS"), as part of the DARPA Transparent Computing
8
* (TC) research program.
9
*
10
* Redistribution and use in source and binary forms, with or without
11
* modification, are permitted provided that the following conditions
12
* are met:
13
* 1. Redistributions of source code must retain the above copyright
14
* notice, this list of conditions and the following disclaimer.
15
* 2. Redistributions in binary form must reproduce the above copyright
16
* notice, this list of conditions and the following disclaimer in the
17
* documentation and/or other materials provided with the distribution.
18
*
19
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
20
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
23
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
25
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
26
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
27
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
28
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
29
* SUCH DAMAGE.
30
*/
31
32
#include <machine/asmacros.h>
33
#include <amd64/sgx/sgxvar.h>
34
35
#include "assym.inc"
36
37
.text
38
39
/*
40
* int
41
* sgx_encls(uint32_t eax, uint64_t rbx, uint64_t rcx, uint64_t rdx);
42
* %edi, %rsi, %rdx, %rcx
43
*/
44
ENTRY(sgx_encls)
45
PUSH_FRAME_POINTER
46
pushq %rbx
47
movq PCPU(CURPCB),%r8
48
movl %edi,%eax
49
movq %rsi,%rbx
50
xchgq %rdx,%rcx
51
movq $sgx_onfault,PCB_ONFAULT(%r8)
52
.byte 0x0f, 0x01, 0xcf
53
movq $0,PCB_ONFAULT(%r8)
54
popq %rbx
55
POP_FRAME_POINTER
56
ret
57
END(sgx_encls)
58
59
/*
60
* SGX operations fault handler
61
*/
62
ALIGN_TEXT
63
sgx_onfault:
64
movq $0,PCB_ONFAULT(%r8)
65
movl $SGX_EFAULT,%eax
66
popq %rbx
67
POP_FRAME_POINTER
68
ret
69
70