about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPieter Agten <pieter.agten@fortanix.com>2019-12-04 14:20:09 +0100
committerPieter Agten <pieter.agten@fortanix.com>2019-12-04 14:20:09 +0100
commit3ee0f48429e6571a87320f2f2e56a48e6717cff1 (patch)
tree3da97cbb4e855a0141dce4444a94f5f52fe769e4
parent5f1d6c44034ac143f7a3e56ae7ea8858dcbb61ca (diff)
downloadrust-3ee0f48429e6571a87320f2f2e56a48e6717cff1.tar.gz
rust-3ee0f48429e6571a87320f2f2e56a48e6717cff1.zip
Create a separate entry point for the ELF file, instead of using the SGX entry point
-rw-r--r--src/librustc_target/spec/x86_64_fortanix_unknown_sgx.rs3
-rw-r--r--src/libstd/sys/sgx/abi/entry.S20
2 files changed, 22 insertions, 1 deletions
diff --git a/src/librustc_target/spec/x86_64_fortanix_unknown_sgx.rs b/src/librustc_target/spec/x86_64_fortanix_unknown_sgx.rs
index dbcd77bc753..3d590a5af06 100644
--- a/src/librustc_target/spec/x86_64_fortanix_unknown_sgx.rs
+++ b/src/librustc_target/spec/x86_64_fortanix_unknown_sgx.rs
@@ -7,7 +7,7 @@ pub fn target() -> Result<Target, String> {
         "--as-needed",
         "--eh-frame-hdr",
         "-z" , "noexecstack",
-        "-e","sgx_entry",
+        "-e","elf_entry",
         "-Bstatic",
         "--gc-sections",
         "-z","text",
@@ -29,6 +29,7 @@ pub fn target() -> Result<Target, String> {
     ];
 
     const EXPORT_SYMBOLS: &[&str] = &[
+        "elf_entry",
         "sgx_entry",
         "HEAP_BASE",
         "HEAP_SIZE",
diff --git a/src/libstd/sys/sgx/abi/entry.S b/src/libstd/sys/sgx/abi/entry.S
index cd26c7ca200..a11eb18b0f7 100644
--- a/src/libstd/sys/sgx/abi/entry.S
+++ b/src/libstd/sys/sgx/abi/entry.S
@@ -104,6 +104,26 @@ IMAGE_BASE:
         and %gs:tcsls_flags,%\reg
 .endm
 
+/* We place the ELF entry point in a separate section so it can be removed by
+   elf2sgxs */
+.section .text_no_sgx, "ax"
+.Lelf_entry_error_msg:
+    .ascii "Error: This file is an SGX enclave which cannot be executed as a standard Linux binary.\nSee the installation guide at https://edp.fortanix.com/docs/installation/guide/ on how to use 'cargo run' or follow the steps at https://edp.fortanix.com/docs/tasks/deployment/ for manual deployment.\n"
+.global elf_entry
+.type elf_entry,function
+elf_entry:
+/* print error message */
+    movq $1, %rax                     /* write() syscall      */
+    movq $2, %rdi                     /* write to stderr      */
+    lea .Lelf_entry_error_msg(%rip), %rsi
+    movq $288, %rdx                   /* num chars to write   */
+    syscall
+    
+    movq $60, %rax                    /* exit() syscall       */
+    movq $0, %rdi                     /* error code           */
+    syscall
+/*  end elf_entry */
+
 .text
 .global sgx_entry
 .type sgx_entry,function