SSBM Decomp
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
7extern "C" {
8#endif
9
10#define OS_MODULE_VERSION 1
11typedef struct OSModuleHeader OSModuleHeader;
12
14typedef struct OSModuleQueue OSModuleQueue;
15typedef struct OSModuleLink OSModuleLink;
16typedef struct OSModuleInfo OSModuleInfo;
17typedef struct OSSectionInfo OSSectionInfo;
18typedef struct OSImportInfo OSImportInfo;
19typedef struct OSRel OSRel;
20
25
30
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
42 // CAUTION: info must be the 1st member
44
45 // OS_MODULE_VERSION == 1
46 u32 bssSize; // total size of bss sections in bytes
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
76
77// OSSectionInfo.offset bit
78#define OS_SECTIONINFO_EXEC 0x1
79#define OS_SECTIONINFO_OFFSET(offset) ((offset) & ~0x1)
80
82 OSModuleID id; // external module id
83 u32 offset; // offset to OSRel instructions
84};
85
86struct OSRel {
87 u16 offset; // byte offset from the previous entry
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
98void OSSetStringTable(const void* stringTable);
99BOOL OSLink(OSModuleInfo* newModule, void* bss);
100#if (3 <= OS_MODULE_VERSION)
101BOOL OSLinkFixed(OSModuleInfo* newModule, void* bss);
102#endif
104
105OSModuleInfo* OSSearchModule(void* ptr, u32* section, u32* offset);
106
107// debugger notification
108void OSNotifyLink(void);
109void OSNotifyUnlink(void);
110
111#ifdef __cplusplus
112}
113#endif
114
115#endif
void OSNotifyLink(void)
OSModuleInfo * OSSearchModule(void *ptr, u32 *section, u32 *offset)
u32 OSModuleID
Definition OSModule.h:13
void OSSetStringTable(const void *stringTable)
BOOL OSUnlink(OSModuleInfo *oldModule)
BOOL OSLink(OSModuleInfo *newModule, void *bss)
void OSNotifyUnlink(void)
int BOOL
Definition types.h:20
unsigned long u32
Definition types.h:9
unsigned short int u16
Definition types.h:7
unsigned char u8
Definition hsd_3B2B.h:2
Definition OSModule.h:81
OSModuleID id
Definition OSModule.h:82
u32 offset
Definition OSModule.h:83
Definition OSModule.h:41
OSModuleInfo info
Definition OSModule.h:43
u8 prologSection
Definition OSModule.h:50
u32 epilog
Definition OSModule.h:55
u32 relOffset
Definition OSModule.h:47
u8 epilogSection
Definition OSModule.h:51
u32 impOffset
Definition OSModule.h:48
u32 impSize
Definition OSModule.h:49
u32 unresolved
Definition OSModule.h:56
u8 unresolvedSection
Definition OSModule.h:52
u32 bssSize
Definition OSModule.h:46
u8 bssSection
Definition OSModule.h:53
u32 prolog
Definition OSModule.h:54
Definition OSModule.h:31
u32 version
Definition OSModule.h:38
u32 numSections
Definition OSModule.h:34
OSModuleLink link
Definition OSModule.h:33
u32 sectionInfoOffset
Definition OSModule.h:35
OSModuleID id
Definition OSModule.h:32
u32 nameSize
Definition OSModule.h:37
u32 nameOffset
Definition OSModule.h:36
Definition OSModule.h:21
OSModuleInfo * tail
Definition OSModule.h:23
OSModuleInfo * head
Definition OSModule.h:22
Definition OSModule.h:86
u8 section
Definition OSModule.h:89
u32 addend
Definition OSModule.h:90
u16 offset
Definition OSModule.h:87
u8 type
Definition OSModule.h:88
Definition OSModule.h:72
u32 size
Definition OSModule.h:74
u32 offset
Definition OSModule.h:73