sdk-core v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
Loading...
Searching...
No Matches
elf_loader_common.h
Go to the documentation of this file.
1/*
2# _____ ___ ____ ___ ____
3# ____| | ____| | | |____|
4# | ___| |____ ___| ____| | \ PS2DEV Open Source Project.
5#-----------------------------------------------------------------------
6# Copyright ps2dev - http://www.ps2dev.org
7# Licenced under Academic Free License version 2.0
8# Review ps2sdk README & LICENSE files for further details.
9*/
10
15#ifndef __ELF_LOADER_COMMON_H__
16#define __ELF_LOADER_COMMON_H__
17
18#include <elf-loader.h>
19#include <stddef.h>
20#include <tamtypes.h>
21
22#ifdef __cplusplus
23extern "C"
24{
25#endif
26
27#define ELF_LOADER_MAX_PROGRAM_HEADERS 32
28
30 {
31 u8 e_ident[16];
32 u16 e_type;
33 u16 e_machine;
34 u32 e_version;
35 u32 e_entry;
36 u32 e_phoff;
37 u32 e_shoff;
38 u32 e_flags;
39 u16 e_ehsize;
40 u16 e_phentsize;
41 u16 e_phnum;
42 u16 e_shentsize;
43 u16 e_shnum;
44 u16 e_shstrndx;
45 } elf_loader_elf32_ehdr_t;
46
48 {
49 u32 p_type;
50 u32 p_offset;
51 u32 p_vaddr;
52 u32 p_paddr;
53 u32 p_filesz;
54 u32 p_memsz;
55 u32 p_flags;
56 u32 p_align;
57 } elf_loader_elf32_phdr_t;
58
59 // dest_addr != 0, src_addr != 0, size != 0: move
60 // dest_addr != 0, src_addr == 0, size != 0: zero
61 // dest_addr != 0, size == 0: exec
63 {
64 void *dest_addr;
65 void *src_addr;
66 u32 size;
67 } elf_loader_loaderinfo_item_t;
68
69#define ELF_LOADER_MAX_LOADERINFO_ITEMS (ELF_LOADER_MAX_PROGRAM_HEADERS + 3)
70
72 {
73 elf_loader_loaderinfo_item_t items[ELF_LOADER_MAX_LOADERINFO_ITEMS];
74 } elf_loader_loaderinfo_t;
75
76 typedef struct elf_loader_arginfo_
77 {
78 int argc;
79 char *argv[16];
80 char payload[256];
81 } elf_loader_arginfo_t;
82
83 typedef struct elf_loader_execinfo_
84 {
85 elf_loader_arginfo_t arginfo;
86 elf_loader_loaderinfo_t loaderinfo;
87 } elf_loader_execinfo_t;
88
90 {
91 void *m_segment_addr;
92 int m_segment_offset;
93 size_t m_segment_size;
94 } elf_loader_reader_segment_info_t;
95
96 typedef enum elf_loader_reader_stage_
97 {
98 ELF_LOADER_READER_STAGE_ELF_HEADER,
99 ELF_LOADER_READER_STAGE_PROGRAM_HEADERS,
100 ELF_LOADER_READER_STAGE_SEGMENTS,
101 ELF_LOADER_READER_STAGE_END,
102 } elf_loader_reader_stage_t;
103
104 typedef void *(*elf_loader_reader_allocation_callback_t)(
105 void *userdata, void *pointer, ptrdiff_t old_size, ptrdiff_t new_size);
106 typedef int (*elf_loader_reader_read_callback_t)(
107 void *userdata,
108 elf_loader_reader_stage_t stage,
109 const elf_loader_reader_segment_info_t *segm_info,
110 size_t segm_count);
111 typedef void (*elf_loader_reader_result_callback_t)(
112 void *userdata, void *pointer, ptrdiff_t pointer_size, int errval);
114 {
115 void *m_userdata;
116 elf_loader_reader_allocation_callback_t m_alloc_callback;
117 elf_loader_reader_read_callback_t m_read_callback;
118 elf_loader_reader_result_callback_t m_result_callback;
119 } elf_loader_reader_info_t;
120
122 {
123 void *m_buf;
124 ptrdiff_t m_bufsize;
125 int m_result;
126 } elf_loader_reader_info_stdio_resultbuf_t;
127
128 // Defined in elf.c
129 extern int elf_loader_is_elf_ehdr_valid(const elf_loader_elf32_ehdr_t *ehdr);
130 extern int elf_loader_is_elf_valid_for_loading(const void *buf, size_t buf_size);
131 extern int elf_loader_exec_elf_prepare_loadinfo(elf_loader_execinfo_t *execinfo, const void *buf, size_t buf_size);
132 extern int elf_loader_exec_elf_prepare_arginfo(
133 elf_loader_execinfo_t *execinfo, const char *filename, const char *partition, int argc, char *argv[]);
134 extern int elf_loader_exec_elf(elf_loader_execinfo_t *execinfo);
135
136 // Defined in elf_loader_reader.c
137 extern void elf_loader_reader_read_elf_file(elf_loader_reader_info_t *info);
138
139 // Defined in elf_loader_stdio.c
140 extern int elf_loader_reader_read_elf_file_stdio(
141 elf_loader_reader_info_stdio_resultbuf_t *resultbuf, const char *filename, const char *flags);
142
143#ifdef __cplusplus
144}
145#endif
146
147#endif /* __ELF_LOADER_COMMON_H__ */