# Enclave Runtime PAL API Specification v2 Enclave Runtime PAL API defines a common interface to interact between `rune` and enclave runtime. ## 1. pal_version | **Description** | Indicate PAL API version number implemented by runelet and enclave runtime; runelet is compatible with any enclave runtimes equal to or less than the indicated value. If this symbol is undefined in enclave runtime, version 1 is assuemd by runelet. | | :---: | :--- | | **Prototype** | `int pal_version();` | | **Parameters** | N/A | | **Return value** | N/A | | **Availability ** | >=v2 | ## 2.pal_init() | **Description** | Do libos initialization according to the incoming attr parameters. | | :---: | :--- | | **Prototype** | struct pal_attr_t {
const char *args;
const char *log_level;
};
int pal_init(struct palattrt *attr); | | **Parameters** | @args: Pass the required parameters of libos (can be instance path etc.)
@log_level: Log level. | | **Return value** | 0: Success
-EINVAL: Invalid argument
-ENOSYS: The function is not supported | | **Availability ** | >=v2 | ## 3. pal_create_process | **Description** | Create a new process, but do not run it; the real run is triggered by pal_exec(). | | :---: | :--- | | **Prototype** | struct stdio_fds {
int stdin, stdout, stderr;
};
struct pal_create_process_args {
char *path;
char *argv[];
char *env[];
struct stdio_fds *stdio;
int *pid;
}__attribute__((packed));
int pal_create_process(struct pal_create_process_args *args); | | **Parameters** | @path: The path of the binary file to be run (relative path in the libos file system).
@argv: Binary parameters, ending with a null element.
@env: Binary environment variables, ending with a null element.
@stdio: The fd of stdio.
@pid: If the function return value is 0, pid stores the pid of the new process in libos. | | **Return value** | 0: Success
-EINVAL: Invalid argument
-ENOSYS: The function is not supported | | **Availability ** | >=v2 | ## 4. pal_exec | **Description** | Execute the program corresponding to pid. | | :---: | :--- | | **Prototype** | struct pal_exec_args {
int pid;
int *exit_value;};
}__attribute__((packed));
int pal_exec(struct pal_exec_args *attr); | | **Parameters** | @pid: The pid of the generation process.
@exit_value: The exit value of the process. | ## 5.pal_kill() | **Description** | Send signals to processes running in enclave runtime. | | :---: | :--- | | **Prototype** | int pal_kill(int pid, int sig); | | **Parameters** | @pid: Send to all processes if equal to -1, or send to current process if equal to 0, or send to the process that owns the pid if others.
@sig: Signal number to be sent | | **Return value** | 0: Success
-EINVAL: Invalid argument
-ENOSYS: The function is not supported | | **Availability ** | >=v2 | ## 6.pal_destroy() | **Description** | Destroy libos instance. | | :---: | :--- | | **Prototype** | int pal_destroy(); | | **Parameters** | NA. | | **Return value** | 0: Success
-ENOSYS: The function is not supported | | **Availability ** | >=v2 |