feature: Add syscalls for ELF metadata parsing

This commit is contained in:
boreddevnl
2026-04-21 00:29:11 +02:00
parent 8d51238a3d
commit 2498045362
4 changed files with 52 additions and 1 deletions

View File

@@ -335,3 +335,14 @@ void sys_parallel_run(void (*fn)(void*), void **args, int count) {
syscall5(SYS_SYSTEM, SYSTEM_CMD_PARALLEL_RUN, (uint64_t)fn, (uint64_t)args, (uint64_t)count, 0);
}
// ELF metadata API
int sys_get_elf_metadata(const char *path, boredos_app_metadata_t *out_metadata) {
return (int)syscall4(SYS_SYSTEM, SYSTEM_CMD_GET_ELF_METADATA,
(uint64_t)path, (uint64_t)out_metadata, 0);
}
int sys_get_elf_primary_image(const char *path, char *out_path, size_t out_path_size) {
return (int)syscall5(SYS_SYSTEM, SYSTEM_CMD_GET_ELF_PRIMARY_IMAGE,
(uint64_t)path, (uint64_t)out_path, (uint64_t)out_path_size, 0);
}

View File

@@ -97,12 +97,30 @@
#define SYSTEM_CMD_SIGACTION 73
#define SYSTEM_CMD_SIGPROCMASK 74
#define SYSTEM_CMD_SIGPENDING 75
#define SYSTEM_CMD_GET_ELF_METADATA 76
#define SYSTEM_CMD_GET_ELF_PRIMARY_IMAGE 77
#define SPAWN_FLAG_TERMINAL 0x1
#define SPAWN_FLAG_INHERIT_TTY 0x2
#define SPAWN_FLAG_TTY_ID 0x4
#define SPAWN_FLAG_BACKGROUND 0x8
// ELF app metadata (mirrors src/sys/elf.h, kept in sync manually)
#define BOREDOS_APP_METADATA_MAX_APP_NAME 64
#define BOREDOS_APP_METADATA_MAX_DESCRIPTION 192
#define BOREDOS_APP_METADATA_MAX_IMAGES 4
#define BOREDOS_APP_METADATA_MAX_IMAGE_PATH 160
typedef struct __attribute__((packed)) {
uint32_t magic;
uint16_t version;
uint16_t image_count;
uint16_t reserved;
char app_name[BOREDOS_APP_METADATA_MAX_APP_NAME];
char description[BOREDOS_APP_METADATA_MAX_DESCRIPTION];
char images[BOREDOS_APP_METADATA_MAX_IMAGES][BOREDOS_APP_METADATA_MAX_IMAGE_PATH];
} boredos_app_metadata_t;
// Internal assembly entry into Ring 0
extern uint64_t syscall0(uint64_t sys_num);
extern uint64_t syscall1(uint64_t sys_num, uint64_t arg1);
@@ -217,5 +235,8 @@ int sys_set_dns_server(const net_ipv4_address_t *ip);
void sys_network_force_unlock(void);
void sys_yield(void);
// ELF metadata API
int sys_get_elf_metadata(const char *path, boredos_app_metadata_t *out_metadata);
int sys_get_elf_primary_image(const char *path, char *out_path, size_t out_path_size);
#endif