sdk-core
v2026.11.05
PS2 SDK - core tier (build-critical EE/IOP modules)
Toggle main menu visibility
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
23
extern
"C"
24
{
25
#endif
26
27
#define ELF_LOADER_MAX_PROGRAM_HEADERS 32
28
29
typedef
struct
elf_loader_elf32_ehdr_
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
47
typedef
struct
elf_loader_elf32_phdr_
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
62
typedef
struct
elf_loader_loaderinfo_item_
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
71
typedef
struct
elf_loader_loaderinfo_
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
89
typedef
struct
elf_loader_reader_segment_info_
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);
113
typedef
struct
elf_loader_reader_info_
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
121
typedef
struct
elf_loader_reader_info_stdio_resultbuf_
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__ */
elf_loader_arginfo_
Definition
elf_loader_common.h:77
elf_loader_elf32_ehdr_
Definition
elf_loader_common.h:30
elf_loader_elf32_phdr_
Definition
elf_loader_common.h:48
elf_loader_execinfo_
Definition
elf_loader_common.h:84
elf_loader_loaderinfo_
Definition
elf_loader_common.h:72
elf_loader_loaderinfo_item_
Definition
elf_loader_common.h:63
elf_loader_reader_info_
Definition
elf_loader_common.h:114
elf_loader_reader_info_stdio_resultbuf_
Definition
elf_loader_common.h:122
elf_loader_reader_segment_info_
Definition
elf_loader_common.h:90
partition
Definition
part_driver.h:22
tamtypes.h
core
elf-loader2
src
include
elf_loader_common.h
Generated by
1.18.0