Auto merge of #67084 - Pagten:feature/print-msg-from-elf-entrypoint, r=Amanieu
SGX: Change ELF entrypoint This fixes [rust-sgx issue #148](https://github.com/fortanix/rust-sgx/issues/148). A new entry point is created for the ELF file generated by `rustc`, separate from the enclave entry point. When the ELF file is executed as a Linux binary, the error message below is written to stderr. > Error: This file is an SGX enclave which cannot be executed as a standard Linux binary. > See 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. When the ELF file is converted to an SGXS using `elf2sgxs`, the old entry point is still set as the enclave entry point. In a future pull request in the rust-sgx repository, `elf2sgxs` will be modified to remove the code in the ELF entry point, since this code is not needed in the enclave.
This commit is contained in:
commit
12307b3b08
2 changed files with 31 additions and 1 deletions
|
@ -7,7 +7,7 @@ pub fn target() -> Result<Target, String> {
|
||||||
"--as-needed",
|
"--as-needed",
|
||||||
"--eh-frame-hdr",
|
"--eh-frame-hdr",
|
||||||
"-z" , "noexecstack",
|
"-z" , "noexecstack",
|
||||||
"-e","sgx_entry",
|
"-e","elf_entry",
|
||||||
"-Bstatic",
|
"-Bstatic",
|
||||||
"--gc-sections",
|
"--gc-sections",
|
||||||
"-z","text",
|
"-z","text",
|
||||||
|
|
|
@ -104,6 +104,36 @@ IMAGE_BASE:
|
||||||
and %gs:tcsls_flags,%\reg
|
and %gs:tcsls_flags,%\reg
|
||||||
.endm
|
.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"
|
||||||
|
.Lelf_entry_error_msg_end:
|
||||||
|
|
||||||
|
.global elf_entry
|
||||||
|
.type elf_entry,function
|
||||||
|
elf_entry:
|
||||||
|
/* print error message */
|
||||||
|
movq $2,%rdi /* write to stderr (fd 2) */
|
||||||
|
lea .Lelf_entry_error_msg(%rip),%rsi
|
||||||
|
movq $.Lelf_entry_error_msg_end-.Lelf_entry_error_msg,%rdx
|
||||||
|
.Lelf_entry_call:
|
||||||
|
movq $1,%rax /* write() syscall */
|
||||||
|
syscall
|
||||||
|
test %rax,%rax
|
||||||
|
jle .Lelf_exit /* exit on error */
|
||||||
|
add %rax,%rsi
|
||||||
|
sub %rax,%rdx /* all chars written? */
|
||||||
|
jnz .Lelf_entry_call
|
||||||
|
|
||||||
|
.Lelf_exit:
|
||||||
|
movq $60,%rax /* exit() syscall */
|
||||||
|
movq $1,%rdi /* exit code 1 */
|
||||||
|
syscall
|
||||||
|
ud2 /* should not be reached */
|
||||||
|
/* end elf_entry */
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.global sgx_entry
|
.global sgx_entry
|
||||||
.type sgx_entry,function
|
.type sgx_entry,function
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue