1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* 3 * Copyright(c) 2016-20 Intel Corporation. 4 */ 5 6 .macro ENCLU 7 .byte 0x0f, 0x01, 0xd7 8 .endm 9 10 .section ".tcs", "aw" 11 .balign 4096 12 13 .fill 1, 8, 0 # STATE (set by CPU) 14 .fill 1, 8, 0 # FLAGS 15 .quad encl_ssa_tcs1 # OSSA 16 .fill 1, 4, 0 # CSSA (set by CPU) 17 .fill 1, 4, 1 # NSSA 18 .quad encl_entry # OENTRY 19 .fill 1, 8, 0 # AEP (set by EENTER and ERESUME) 20 .fill 1, 8, 0 # OFSBASE 21 .fill 1, 8, 0 # OGSBASE 22 .fill 1, 4, 0xFFFFFFFF # FSLIMIT 23 .fill 1, 4, 0xFFFFFFFF # GSLIMIT 24 .fill 4024, 1, 0 # Reserved 25 26 # TCS2 27 .fill 1, 8, 0 # STATE (set by CPU) 28 .fill 1, 8, 0 # FLAGS 29 .quad encl_ssa_tcs2 # OSSA 30 .fill 1, 4, 0 # CSSA (set by CPU) 31 .fill 1, 4, 1 # NSSA 32 .quad encl_entry # OENTRY 33 .fill 1, 8, 0 # AEP (set by EENTER and ERESUME) 34 .fill 1, 8, 0 # OFSBASE 35 .fill 1, 8, 0 # OGSBASE 36 .fill 1, 4, 0xFFFFFFFF # FSLIMIT 37 .fill 1, 4, 0xFFFFFFFF # GSLIMIT 38 .fill 4024, 1, 0 # Reserved 39 40 .text 41 42 encl_entry: 43 # RBX contains the base address for TCS, which is the first address 44 # inside the enclave for TCS #1 and one page into the enclave for 45 # TCS #2. First make it relative by substracting __encl_base and 46 # then add the address of encl_stack to get the address for the stack. 47 lea __encl_base(%rip), %rax 48 sub %rax, %rbx 49 lea encl_stack(%rip), %rax 50 add %rbx, %rax 51 jmp encl_entry_core 52 encl_dyn_entry: 53 # Entry point for dynamically created TCS page expected to follow 54 # its stack directly. 55 lea -1(%rbx), %rax 56 encl_entry_core: 57 xchg %rsp, %rax 58 push %rax 59 60 push %rcx # push the address after EENTER 61 62 # NOTE: as the selftest enclave is *not* intended for production, 63 # simplify the code by not initializing ABI registers on entry or 64 # cleansing caller-save registers on exit. 65 call encl_body 66 67 # Prepare EEXIT target by popping the address of the instruction after 68 # EENTER to RBX. 69 pop %rbx 70 71 # Restore the caller stack. 72 pop %rax 73 mov %rax, %rsp 74 75 # EEXIT 76 mov $4, %rax 77 enclu 78 79 .section ".data", "aw" 80 81 encl_ssa_tcs1: 82 .space 4096 83 encl_ssa_tcs2: 84 .space 4096 85 86 .balign 4096 87 # Stack of TCS #1 88 .space 4096 89 encl_stack: 90 .balign 4096 91 # Stack of TCS #2 92 .space 4096
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.