SSBM Decomp
Toggle main menu visibility
Loading...
Searching...
No Matches
OSModule.h
Go to the documentation of this file.
1
#ifndef _DOLPHIN_OSMODULE_H_
2
#define _DOLPHIN_OSMODULE_H_
3
4
#include <
dolphin/types.h
>
5
6
#ifdef __cplusplus
7
extern
"C"
{
8
#endif
9
10
#define OS_MODULE_VERSION 1
11
typedef
struct
OSModuleHeader
OSModuleHeader
;
12
13
typedef
u32
OSModuleID
;
14
typedef
struct
OSModuleQueue
OSModuleQueue
;
15
typedef
struct
OSModuleLink
OSModuleLink
;
16
typedef
struct
OSModuleInfo
OSModuleInfo
;
17
typedef
struct
OSSectionInfo
OSSectionInfo
;
18
typedef
struct
OSImportInfo
OSImportInfo
;
19
typedef
struct
OSRel
OSRel
;
20
21
struct
OSModuleQueue
{
22
OSModuleInfo
*
head
;
23
OSModuleInfo
*
tail
;
24
};
25
26
struct
OSModuleLink
{
27
OSModuleInfo
*
next
;
28
OSModuleInfo
*
prev
;
29
};
30
31
struct
OSModuleInfo
{
32
OSModuleID
id
;
// unique identifier for the module
33
OSModuleLink
link
;
// doubly linked list of modules
34
u32
numSections
;
// # of sections
35
u32
sectionInfoOffset
;
// offset to section info table
36
u32
nameOffset
;
// offset to module name
37
u32
nameSize
;
// size of module name
38
u32
version
;
// version number
39
};
40
41
struct
OSModuleHeader
{
42
// CAUTION: info must be the 1st member
43
OSModuleInfo
info
;
44
45
// OS_MODULE_VERSION == 1
46
u32
bssSize
;
// total size of bss sections in bytes
47
u32
relOffset
;
48
u32
impOffset
;
49
u32
impSize
;
// size in bytes
50
u8
prologSection
;
// section # for prolog function
51
u8
epilogSection
;
// section # for epilog function
52
u8
unresolvedSection
;
// section # for unresolved function
53
u8
bssSection
;
// section # for bss section (set at run-time)
54
u32
prolog
;
// prolog function offset
55
u32
epilog
;
// epilog function offset
56
u32
unresolved
;
// unresolved function offset
57
58
// OS_MODULE_VERSION == 2
59
#if (2 <= OS_MODULE_VERSION)
60
u32
align;
// module alignment constraint
61
u32
bssAlign;
// bss alignment constraint
62
#endif
63
64
// OS_MODULE_VERSION == 3
65
#if (3 <= OS_MODULE_VERSION)
66
u32
fixSize;
67
#endif
68
};
69
70
#define OSGetSectionInfo(module) ((OSSectionInfo*)(((OSModuleInfo*)(module))->sectionInfoOffset))
71
72
struct
OSSectionInfo
{
73
u32
offset
;
74
u32
size
;
75
};
76
77
// OSSectionInfo.offset bit
78
#define OS_SECTIONINFO_EXEC 0x1
79
#define OS_SECTIONINFO_OFFSET(offset) ((offset) & ~0x1)
80
81
struct
OSImportInfo
{
82
OSModuleID
id
;
// external module id
83
u32
offset
;
// offset to OSRel instructions
84
};
85
86
struct
OSRel
{
87
u16
offset
;
// byte offset from the previous entry
88
u8
type
;
89
u8
section
;
90
u32
addend
;
91
};
92
93
#define R_DOLPHIN_NOP 201
// C9h current offset += OSRel.offset
94
#define R_DOLPHIN_SECTION 202
// CAh current section = OSRel.section
95
#define R_DOLPHIN_END 203
// CBh
96
#define R_DOLPHIN_MRKREF 204
// CCh
97
98
void
OSSetStringTable
(
const
void
* stringTable);
99
BOOL
OSLink
(
OSModuleInfo
* newModule,
void
* bss);
100
#if (3 <= OS_MODULE_VERSION)
101
BOOL
OSLinkFixed(
OSModuleInfo
* newModule,
void
* bss);
102
#endif
103
BOOL
OSUnlink
(
OSModuleInfo
* oldModule);
104
105
OSModuleInfo
*
OSSearchModule
(
void
* ptr,
u32
* section,
u32
* offset);
106
107
// debugger notification
108
void
OSNotifyLink
(
void
);
109
void
OSNotifyUnlink
(
void
);
110
111
#ifdef __cplusplus
112
}
113
#endif
114
115
#endif
OSNotifyLink
void OSNotifyLink(void)
OSSearchModule
OSModuleInfo * OSSearchModule(void *ptr, u32 *section, u32 *offset)
OSModuleID
u32 OSModuleID
Definition
OSModule.h:13
OSSetStringTable
void OSSetStringTable(const void *stringTable)
OSUnlink
BOOL OSUnlink(OSModuleInfo *oldModule)
OSLink
BOOL OSLink(OSModuleInfo *newModule, void *bss)
OSNotifyUnlink
void OSNotifyUnlink(void)
types.h
BOOL
int BOOL
Definition
types.h:20
u32
unsigned long u32
Definition
types.h:9
u16
unsigned short int u16
Definition
types.h:7
u8
unsigned char u8
Definition
types.h:5
OSImportInfo
Definition
OSModule.h:81
OSImportInfo::id
OSModuleID id
Definition
OSModule.h:82
OSImportInfo::offset
u32 offset
Definition
OSModule.h:83
OSModuleHeader
Definition
OSModule.h:41
OSModuleHeader::info
OSModuleInfo info
Definition
OSModule.h:43
OSModuleHeader::prologSection
u8 prologSection
Definition
OSModule.h:50
OSModuleHeader::epilog
u32 epilog
Definition
OSModule.h:55
OSModuleHeader::relOffset
u32 relOffset
Definition
OSModule.h:47
OSModuleHeader::epilogSection
u8 epilogSection
Definition
OSModule.h:51
OSModuleHeader::impOffset
u32 impOffset
Definition
OSModule.h:48
OSModuleHeader::impSize
u32 impSize
Definition
OSModule.h:49
OSModuleHeader::unresolved
u32 unresolved
Definition
OSModule.h:56
OSModuleHeader::unresolvedSection
u8 unresolvedSection
Definition
OSModule.h:52
OSModuleHeader::bssSize
u32 bssSize
Definition
OSModule.h:46
OSModuleHeader::bssSection
u8 bssSection
Definition
OSModule.h:53
OSModuleHeader::prolog
u32 prolog
Definition
OSModule.h:54
OSModuleInfo
Definition
OSModule.h:31
OSModuleInfo::version
u32 version
Definition
OSModule.h:38
OSModuleInfo::numSections
u32 numSections
Definition
OSModule.h:34
OSModuleInfo::link
OSModuleLink link
Definition
OSModule.h:33
OSModuleInfo::sectionInfoOffset
u32 sectionInfoOffset
Definition
OSModule.h:35
OSModuleInfo::id
OSModuleID id
Definition
OSModule.h:32
OSModuleInfo::nameSize
u32 nameSize
Definition
OSModule.h:37
OSModuleInfo::nameOffset
u32 nameOffset
Definition
OSModule.h:36
OSModuleLink
Definition
OSModule.h:26
OSModuleLink::next
OSModuleInfo * next
Definition
OSModule.h:27
OSModuleLink::prev
OSModuleInfo * prev
Definition
OSModule.h:28
OSModuleQueue
Definition
OSModule.h:21
OSModuleQueue::tail
OSModuleInfo * tail
Definition
OSModule.h:23
OSModuleQueue::head
OSModuleInfo * head
Definition
OSModule.h:22
OSRel
Definition
OSModule.h:86
OSRel::section
u8 section
Definition
OSModule.h:89
OSRel::addend
u32 addend
Definition
OSModule.h:90
OSRel::offset
u16 offset
Definition
OSModule.h:87
OSRel::type
u8 type
Definition
OSModule.h:88
OSSectionInfo
Definition
OSModule.h:72
OSSectionInfo::size
u32 size
Definition
OSModule.h:74
OSSectionInfo::offset
u32 offset
Definition
OSModule.h:73
extern
dolphin
include
dolphin
os
OSModule.h
Generated by
1.17.0