Works with a minimal version of Occlum's libc
This commit is contained in:
parent
a4f37f8917
commit
f0e7bae0d7
@ -51,7 +51,7 @@ pub fn do_write(fd: FileDesc, buf: &[u8]) -> Result<usize, Error> {
|
|||||||
let current_ref = process::get_current();
|
let current_ref = process::get_current();
|
||||||
let current_process = current_ref.lock().unwrap();
|
let current_process = current_ref.lock().unwrap();
|
||||||
let file_ref = current_process.file_table.get(fd)
|
let file_ref = current_process.file_table.get(fd)
|
||||||
.ok_or_else(|| Error::new(Errno::EBADF, "Invalid file descriptor"))?;
|
.ok_or_else(|| Error::new(Errno::EBADF, "Invalid file descriptor [do_write]"))?;
|
||||||
file_ref.write(buf)
|
file_ref.write(buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -59,7 +59,7 @@ pub fn do_read(fd: FileDesc, buf: &mut [u8]) -> Result<usize, Error> {
|
|||||||
let current_ref = process::get_current();
|
let current_ref = process::get_current();
|
||||||
let current_process = current_ref.lock().unwrap();
|
let current_process = current_ref.lock().unwrap();
|
||||||
let file_ref = current_process.file_table.get(fd)
|
let file_ref = current_process.file_table.get(fd)
|
||||||
.ok_or_else(|| Error::new(Errno::EBADF, "Invalid file descriptor"))?;
|
.ok_or_else(|| Error::new(Errno::EBADF, "Invalid file descriptor [do_read]"))?;
|
||||||
file_ref.read(buf)
|
file_ref.read(buf)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,6 +69,6 @@ pub fn do_close(fd: FileDesc) -> Result<(), Error> {
|
|||||||
let file_table = &mut current_process.file_table;
|
let file_table = &mut current_process.file_table;
|
||||||
match file_table.del(fd) {
|
match file_table.del(fd) {
|
||||||
Some(_) => Ok(()),
|
Some(_) => Ok(()),
|
||||||
None => Err(Error::new(Errno::EBADF, "Invalid file descriptor")),
|
None => Err(Error::new(Errno::EBADF, "Invalid file descriptor [do_close]")),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@ extern int occlum_spawn(int* child_pid, const char* path,
|
|||||||
extern int occlum_wait4(int child_pid, int* status, int options/*, struct rusage* rusage*/);
|
extern int occlum_wait4(int child_pid, int* status, int options/*, struct rusage* rusage*/);
|
||||||
extern unsigned int occlum_getpid(void);
|
extern unsigned int occlum_getpid(void);
|
||||||
extern void occlum_exit(int status);
|
extern void occlum_exit(int status);
|
||||||
|
extern int occlum_unknown(int num);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
@ -85,6 +85,12 @@ pub extern "C" fn occlum_exit(status: i32)
|
|||||||
process::do_exit(status);
|
process::do_exit(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[no_mangle]
|
||||||
|
pub extern "C" fn occlum_unknown(num: u32)
|
||||||
|
{
|
||||||
|
println!("[WARNING] Unknown syscall (num = {})", num);
|
||||||
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
pub extern "C" fn occlum_spawn(child_pid: *mut c_int, path: *const c_char,
|
pub extern "C" fn occlum_spawn(child_pid: *mut c_int, path: *const c_char,
|
||||||
argv: *const *const c_char, envp: *const *const c_char) -> c_int
|
argv: *const *const c_char, envp: *const *const c_char) -> c_int
|
||||||
|
@ -61,7 +61,7 @@ long dispatch_syscall(int num, long arg0, long arg1, long arg2, long arg3, long
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
ret = -1;
|
ret = occlum_unknown(num);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
CUR_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
CUR_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
|
||||||
PROJECT_DIR := $(realpath $(CUR_DIR)/../)
|
PROJECT_DIR := $(realpath $(CUR_DIR)/../)
|
||||||
|
|
||||||
TEST_SUITES := hello_world_raw spawn_and_wait4_raw getpid file_io
|
TEST_SUITES := empty
|
||||||
BUILD_TEST_SUITES := $(TEST_SUITES:%=%)
|
BUILD_TEST_SUITES := $(TEST_SUITES:%=%)
|
||||||
RUN_TEST_SUITES := $(TEST_SUITES:%=run-%)
|
RUN_TEST_SUITES := $(TEST_SUITES:%=run-%)
|
||||||
CLEAN_TEST_SUITES := $(TEST_SUITES:%=clean-%)
|
CLEAN_TEST_SUITES := $(TEST_SUITES:%=clean-%)
|
||||||
@ -14,10 +14,7 @@ CLEAN_TEST_SUITES := $(TEST_SUITES:%=clean-%)
|
|||||||
|
|
||||||
all: build
|
all: build
|
||||||
|
|
||||||
build: build_rusgx_stub $(BUILD_TEST_SUITES)
|
build: $(BUILD_TEST_SUITES)
|
||||||
|
|
||||||
build_rusgx_stub:
|
|
||||||
@$(MAKE) -C rusgx_stub
|
|
||||||
|
|
||||||
$(BUILD_TEST_SUITES): %:
|
$(BUILD_TEST_SUITES): %:
|
||||||
@$(MAKE) -C $@
|
@$(MAKE) -C $@
|
||||||
@ -42,7 +39,6 @@ $(RUN_TEST_SUITES): run-%: % pal libocclum.signed.so
|
|||||||
#############################################################################
|
#############################################################################
|
||||||
|
|
||||||
clean: $(CLEAN_TEST_SUITES)
|
clean: $(CLEAN_TEST_SUITES)
|
||||||
@$(MAKE) -C rusgx_stub clean
|
|
||||||
@$(RM) -f pal libocclum.signed.so
|
@$(RM) -f pal libocclum.signed.so
|
||||||
|
|
||||||
$(CLEAN_TEST_SUITES): clean-%:
|
$(CLEAN_TEST_SUITES): clean-%:
|
||||||
|
4
test/empty/Makefile
Normal file
4
test/empty/Makefile
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
include ../test_common.mk
|
||||||
|
|
||||||
|
EXTRA_C_FLAGS :=
|
||||||
|
EXTRA_LINK_FLAGS :=
|
3
test/empty/empty.c
Normal file
3
test/empty/empty.c
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
int main(void) {
|
||||||
|
return 0;
|
||||||
|
}
|
@ -1,4 +0,0 @@
|
|||||||
include ../test_common.mk
|
|
||||||
|
|
||||||
EXTRA_C_FLAGS := -fno-builtin
|
|
||||||
EXTRA_LINK_FLAGS := -nostdlib
|
|
@ -1,66 +0,0 @@
|
|||||||
#include "rusgx_stub.h"
|
|
||||||
|
|
||||||
static char success_str_buf[] = "Success!\n";
|
|
||||||
static unsigned long success_str_size = sizeof(success_str_buf);
|
|
||||||
|
|
||||||
static void print_ok(void) {
|
|
||||||
__rusgx_write(1, success_str_buf, success_str_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static int test_write(const char* file_path) {
|
|
||||||
int write_fd = __rusgx_open(file_path, O_WRONLY | O_CREAT | O_TRUNC, 0666);
|
|
||||||
if (write_fd < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
char write_buf[] = "Hello World!\n";
|
|
||||||
size_t write_len = sizeof(write_buf);
|
|
||||||
if (__rusgx_write(write_fd, write_buf, write_len) != write_len) {
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (__rusgx_close(write_fd) < 0) {
|
|
||||||
return -3;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int test_read(const char* file_path) {
|
|
||||||
int read_fd = __rusgx_open(file_path, O_RDONLY, 0);
|
|
||||||
if (read_fd < 0) {
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
char read_buf[256] = { 0 };
|
|
||||||
size_t read_len;
|
|
||||||
if ((read_len = __rusgx_read(read_fd, read_buf, 256)) < 0 ) {
|
|
||||||
return -2;
|
|
||||||
}
|
|
||||||
|
|
||||||
__rusgx_write(1, read_buf, read_len);
|
|
||||||
|
|
||||||
if (__rusgx_close(read_fd) < 0) {
|
|
||||||
return -3;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void _start(void) {
|
|
||||||
int ret = 0;
|
|
||||||
const char* file_path = "tmp.txt.protected";
|
|
||||||
|
|
||||||
if ((ret = test_write(file_path)) < 0) {
|
|
||||||
goto on_exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((ret = test_read(file_path)) < 0) {
|
|
||||||
goto on_exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
print_ok();
|
|
||||||
on_exit:
|
|
||||||
__rusgx_exit(ret);
|
|
||||||
}
|
|
@ -1,4 +0,0 @@
|
|||||||
include ../test_common.mk
|
|
||||||
|
|
||||||
EXTRA_C_FLAGS := -fno-builtin
|
|
||||||
EXTRA_LINK_FLAGS := -nostdlib
|
|
@ -1,8 +0,0 @@
|
|||||||
#include "rusgx_stub.h"
|
|
||||||
|
|
||||||
void _start(void) {
|
|
||||||
int pid = __rusgx_getpid();
|
|
||||||
(void)pid;
|
|
||||||
|
|
||||||
__rusgx_exit(0);
|
|
||||||
}
|
|
@ -1,4 +0,0 @@
|
|||||||
include ../test_common.mk
|
|
||||||
|
|
||||||
EXTRA_C_FLAGS := -fno-builtin
|
|
||||||
EXTRA_LINK_FLAGS := -nostdlib
|
|
@ -1,9 +0,0 @@
|
|||||||
#include "rusgx_stub.h"
|
|
||||||
|
|
||||||
char str_buf[] = "Hello World!\n";
|
|
||||||
unsigned long str_size = sizeof(str_buf);
|
|
||||||
|
|
||||||
void _start(void) {
|
|
||||||
__rusgx_write(1, str_buf, str_size);
|
|
||||||
__rusgx_exit(0);
|
|
||||||
}
|
|
@ -1,99 +0,0 @@
|
|||||||
#ifndef __RUSGX_STUB__
|
|
||||||
#define __RUSGX_STUB__
|
|
||||||
|
|
||||||
#include <stddef.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Stub for Rusgx syscalls
|
|
||||||
*
|
|
||||||
* Executables built with Rusgx's toolchain are dynamically linked with this
|
|
||||||
* stub library. This stub library serves two purposes:
|
|
||||||
*
|
|
||||||
* 1) Enable Rusgx's syscalls. Since this library is dynamically linked with
|
|
||||||
* executables, the compile-time linker generates proper dynamic linking
|
|
||||||
* information. Using this information, the program loader of Rusgx can do
|
|
||||||
* runtime relocation so that user programs can make syscalls to the library
|
|
||||||
* OS.
|
|
||||||
*
|
|
||||||
* 2) Run without Rusgx. When not running upon Rusgx, the executables can use the
|
|
||||||
* host syscalls provided by the default implementation of this library.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define SYS_read 0
|
|
||||||
#define SYS_write 1
|
|
||||||
#define SYS_open 2
|
|
||||||
#define SYS_close 3
|
|
||||||
#define SYS_getpid 39
|
|
||||||
#define SYS_exit 60
|
|
||||||
#define SYS_wait4 61
|
|
||||||
#define SYS_spawn 360
|
|
||||||
|
|
||||||
#define O_RDONLY 0x00000000U
|
|
||||||
#define O_WRONLY 0x00000001U
|
|
||||||
#define O_RDWR 0x00000002U
|
|
||||||
#define O_CREAT 0x00000040U
|
|
||||||
#define O_EXCL 0x00000080U
|
|
||||||
#define O_NOCTTY 0x00000100U
|
|
||||||
#define O_TRUNC 0x00000200U
|
|
||||||
#define O_APPEND 0x00000400U
|
|
||||||
#define O_NONBLOCK 0x00000800U
|
|
||||||
#define O_NDELAY 0x00000800U
|
|
||||||
#define O_DSYNC 0x00001000U
|
|
||||||
#define O_DIRECTORY 0x00010000U
|
|
||||||
#define O_NOFOLLOW 0x00020000U
|
|
||||||
#define O_CLOEXEC 0x00080000U
|
|
||||||
#define O_SYNC 0x00101000U
|
|
||||||
|
|
||||||
|
|
||||||
long __occlum_syscall(int num, long arg0, long arg1, long arg2, long arg3, long arg4);
|
|
||||||
|
|
||||||
#define RUSGX_SYSCALL0(num) \
|
|
||||||
__occlum_syscall((num), (long)0, (long)0, (long)0, (long)0, (long)0)
|
|
||||||
#define RUSGX_SYSCALL1(num, arg0) \
|
|
||||||
__occlum_syscall((num), (long)(arg0), (long)0, (long)0, (long)0, (long)0)
|
|
||||||
#define RUSGX_SYSCALL2(num, arg0, arg1) \
|
|
||||||
__occlum_syscall((num), (long)(arg0), (long)(arg1), (long)0, (long)0, (long)0)
|
|
||||||
#define RUSGX_SYSCALL3(num, arg0, arg1, arg2) \
|
|
||||||
__occlum_syscall((num), (long)(arg0), (long)(arg1), (long)(arg2), (long)0, (long)0)
|
|
||||||
#define RUSGX_SYSCALL4(num, arg0, arg1, arg2, arg3) \
|
|
||||||
__occlum_syscall((num), (long)(arg0), (long)(arg1), (long)(arg2), (long)(arg3), (long)0)
|
|
||||||
#define RUSGX_SYSCALL5(num, arg0, arg1, arg2, arg3, arg4) \
|
|
||||||
__occlum_syscall((num), (long)(arg0), (long)(arg1), (long)(arg2), (long)(arg3), (long)(arg4))
|
|
||||||
|
|
||||||
|
|
||||||
static inline ssize_t __rusgx_read(int fd, void* buf, unsigned long size) {
|
|
||||||
return (ssize_t) RUSGX_SYSCALL3(SYS_read, fd, buf, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline ssize_t __rusgx_write(int fd, const void* buf, unsigned long size) {
|
|
||||||
return (ssize_t) RUSGX_SYSCALL3(SYS_write, fd, buf, size);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int __rusgx_open(const void* buf, int flags, int mode) {
|
|
||||||
return (int) RUSGX_SYSCALL3(SYS_open, buf, flags, mode);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int __rusgx_close(int fd) {
|
|
||||||
return (int) RUSGX_SYSCALL1(SYS_close, fd);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
static inline unsigned int __rusgx_getpid(void) {
|
|
||||||
return (unsigned int) RUSGX_SYSCALL0(SYS_getpid);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void __rusgx_exit(int status) {
|
|
||||||
RUSGX_SYSCALL1(SYS_exit, status);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int __rusgx_spawn(int* child_pid, const char* path,
|
|
||||||
const char** argv, const char** envp) {
|
|
||||||
return (int) RUSGX_SYSCALL4(SYS_spawn, child_pid, path, argv, envp);
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int __rusgx_wait4(int child_pid, int* status, int options/*, struct rusage* rusage*/) {
|
|
||||||
return (int) RUSGX_SYSCALL3(SYS_wait4, child_pid, status, options);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* __RUSGX_STUB__ */
|
|
@ -1,23 +0,0 @@
|
|||||||
C_SRCS := $(wildcard *.c)
|
|
||||||
S_FILES := $(C_SRCS:%.c=%.S)
|
|
||||||
C_OBJS := $(C_SRCS:%.c=%.o)
|
|
||||||
LIB_NAME := librusgx_stub.so
|
|
||||||
|
|
||||||
C_FLAGS := -Wall -fno-builtin -fno-stack-protector -fverbose-asm -fpic -I../include
|
|
||||||
C_FLAGS += -O0
|
|
||||||
LINK_FLAGS := -nostdlib
|
|
||||||
|
|
||||||
.PHONY: all clean
|
|
||||||
all: $(LIB_NAME)
|
|
||||||
|
|
||||||
$(LIB_NAME): $(C_OBJS)
|
|
||||||
$(CC) $^ $(LINK_FLAGS) -shared -o $(LIB_NAME)
|
|
||||||
|
|
||||||
$(C_OBJS): %.o: %.S
|
|
||||||
$(CC) $(C_FLAGS) -c $< -o $@
|
|
||||||
|
|
||||||
$(S_FILES): %.S: %.c
|
|
||||||
$(CC) $(C_FLAGS) -S $< -o $@
|
|
||||||
|
|
||||||
clean:
|
|
||||||
$(RM) -f *.o *.S $(LIB_NAME)
|
|
@ -1,77 +0,0 @@
|
|||||||
#include "rusgx_stub.h"
|
|
||||||
|
|
||||||
static long __read(int fd, void* buf, unsigned long size) {
|
|
||||||
long ret;
|
|
||||||
__asm__ __volatile__ (
|
|
||||||
"syscall"
|
|
||||||
: "=a" (ret)
|
|
||||||
: "0" (SYS_read), "D" (fd), "S" (buf), "d" (size)
|
|
||||||
: "cc", "rcx", "r11", "memory"
|
|
||||||
);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static long __write(int fd, const void* buf, unsigned long size) {
|
|
||||||
long ret;
|
|
||||||
__asm__ __volatile__ (
|
|
||||||
"syscall"
|
|
||||||
: "=a" (ret)
|
|
||||||
: "0" (SYS_write), "D" (fd), "S" (buf), "d" (size)
|
|
||||||
: "cc", "rcx", "r11", "memory"
|
|
||||||
);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static long __open(const char* path, int flags, int mode) {
|
|
||||||
long ret;
|
|
||||||
__asm__ __volatile__ (
|
|
||||||
"syscall"
|
|
||||||
: "=a" (ret)
|
|
||||||
: "0" (SYS_open), "D" (path), "S" (flags), "d" (mode)
|
|
||||||
: "cc", "rcx", "r11", "memory"
|
|
||||||
);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static long __close(int fd) {
|
|
||||||
long ret;
|
|
||||||
__asm__ __volatile__ (
|
|
||||||
"syscall"
|
|
||||||
: "=a" (ret)
|
|
||||||
: "a" (SYS_close), "D" (fd)
|
|
||||||
: "cc", "rcx", "r11", "memory" );
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __exit(int status) {
|
|
||||||
__asm__ __volatile__ (
|
|
||||||
"syscall"
|
|
||||||
:
|
|
||||||
: "a" (SYS_exit), "D" (status)
|
|
||||||
: "cc", "rcx", "r11", "memory" );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
long __occlum_syscall(int num, long arg0, long arg1, long arg2, long arg3, long arg4) {
|
|
||||||
long ret = 0;
|
|
||||||
switch (num) {
|
|
||||||
case SYS_exit:
|
|
||||||
__exit((int)arg0);
|
|
||||||
break;
|
|
||||||
case SYS_read:
|
|
||||||
ret = __read((int)arg0, (void*)arg1, (unsigned long)arg2);
|
|
||||||
break;
|
|
||||||
case SYS_write:
|
|
||||||
ret = __write((int)arg0, (const void*)arg1, (unsigned long)arg2);
|
|
||||||
break;
|
|
||||||
case SYS_open:
|
|
||||||
ret = __open((const char*)arg0, (int)arg1, (int)arg2);
|
|
||||||
break;
|
|
||||||
case SYS_close:
|
|
||||||
ret = __close((int)arg0);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
@ -1,4 +0,0 @@
|
|||||||
include ../test_common.mk
|
|
||||||
|
|
||||||
EXTRA_C_FLAGS := -fno-builtin
|
|
||||||
EXTRA_LINK_FLAGS := -nostdlib
|
|
@ -1,28 +0,0 @@
|
|||||||
#include "rusgx_stub.h"
|
|
||||||
|
|
||||||
static char success_str_buf[] = "A child process starts and exits!\n";
|
|
||||||
static unsigned long success_str_size = sizeof(success_str_buf);
|
|
||||||
|
|
||||||
static void print_ok(void) {
|
|
||||||
__rusgx_write(1, success_str_buf, success_str_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
#define NUM_CHILDREN 10
|
|
||||||
|
|
||||||
void _start(void) {
|
|
||||||
for (int ci = 0; ci < NUM_CHILDREN; ci++) {
|
|
||||||
int ret = 0;
|
|
||||||
int pid = 0;
|
|
||||||
|
|
||||||
ret = __rusgx_spawn(&pid, "hello_world_raw/bin.encrypted", NULL, NULL);
|
|
||||||
if (ret < 0) { __rusgx_exit(0); }
|
|
||||||
|
|
||||||
int status;
|
|
||||||
ret = __rusgx_wait4(pid, &status, 0);
|
|
||||||
if (ret < 0) { __rusgx_exit(0); }
|
|
||||||
|
|
||||||
//print_ok();
|
|
||||||
}
|
|
||||||
|
|
||||||
__rusgx_exit(0);
|
|
||||||
}
|
|
@ -3,6 +3,7 @@ INCLUDE_MAKEFILE := $(lastword $(MAKEFILE_LIST))
|
|||||||
CUR_DIR := $(shell dirname $(realpath $(MAIN_MAKEFILE)))
|
CUR_DIR := $(shell dirname $(realpath $(MAIN_MAKEFILE)))
|
||||||
PROJECT_DIR := $(realpath $(CUR_DIR)/../../)
|
PROJECT_DIR := $(realpath $(CUR_DIR)/../../)
|
||||||
|
|
||||||
|
CC := /usr/local/occlum/bin/musl-gcc
|
||||||
C_SRCS := $(wildcard *.c)
|
C_SRCS := $(wildcard *.c)
|
||||||
S_FILES := $(C_SRCS:%.c=%.S)
|
S_FILES := $(C_SRCS:%.c=%.S)
|
||||||
C_OBJS := $(C_SRCS:%.c=%.o)
|
C_OBJS := $(C_SRCS:%.c=%.o)
|
||||||
@ -11,14 +12,10 @@ BIN_ENC_NAME := bin.encrypted
|
|||||||
OBJDUMP_FILE := bin.objdump
|
OBJDUMP_FILE := bin.objdump
|
||||||
READELF_FILE := bin.readelf
|
READELF_FILE := bin.readelf
|
||||||
|
|
||||||
C_FLAGS = -Wall -fno-stack-protector -fverbose-asm -fpic \
|
C_FLAGS = -Wall -fverbose-asm -O0 $(EXTRA_C_FLAGS)
|
||||||
-I../include -L../rusgx_stub -lrusgx_stub \
|
LINK_FLAGS = $(EXTRA_LINK_FLAGS)
|
||||||
-O0 \
|
|
||||||
$(EXTRA_C_FLAGS)
|
|
||||||
LINK_FLAGS = -pie -L../rusgx_stub -lrusgx_stub \
|
|
||||||
$(EXTRA_LINK_FLAGS)
|
|
||||||
|
|
||||||
.PHONY: all run run-without-rusgx debug clean
|
.PHONY: all run debug clean
|
||||||
|
|
||||||
#############################################################################
|
#############################################################################
|
||||||
# Build
|
# Build
|
||||||
@ -55,9 +52,6 @@ $(S_FILES): %.S: %.c
|
|||||||
run: $(BIN_ENC_NAME)
|
run: $(BIN_ENC_NAME)
|
||||||
cd ../ && RUST_BACKTRACE=1 ./pal $(CUR_DIR)/$(BIN_ENC_NAME)
|
cd ../ && RUST_BACKTRACE=1 ./pal $(CUR_DIR)/$(BIN_ENC_NAME)
|
||||||
|
|
||||||
run-without-rusgx:
|
|
||||||
cd ../ && LD_LIBRARY_PATH=./rusgx_stub/ ./$(BIN_NAME)
|
|
||||||
|
|
||||||
#############################################################################
|
#############################################################################
|
||||||
# Misc
|
# Misc
|
||||||
#############################################################################
|
#############################################################################
|
||||||
|
Loading…
Reference in New Issue
Block a user