Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
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#ifdef __REVOLUTION_SDK__
6#else
7#include <dolphin/types.h>
8
9#ifdef __cplusplus
10extern "C" {
11#endif
12
13#define OS_MODULE_VERSION 3
15
22typedef struct OSRel OSRel;
23
28
33
35 OSModuleID id; // unique identifier for the module
36 OSModuleLink link; // doubly linked list of modules
37 u32 numSections; // # of sections
38 u32 sectionInfoOffset; // offset to section info table
39 u32 nameOffset; // offset to module name
40 u32 nameSize; // size of module name
41 u32 version; // version number
42};
43
45 // CAUTION: info must be the 1st member
47
48 // OS_MODULE_VERSION == 1
49 u32 bssSize; // total size of bss sections in bytes
52 u32 impSize; // size in bytes
53 u8 prologSection; // section # for prolog function
54 u8 epilogSection; // section # for epilog function
55 u8 unresolvedSection; // section # for unresolved function
56 u8 bssSection; // section # for bss section (set at run-time)
57 u32 prolog; // prolog function offset
58 u32 epilog; // epilog function offset
59 u32 unresolved; // unresolved function offset
60
61 // OS_MODULE_VERSION == 2
62#if (2 <= OS_MODULE_VERSION)
63 u32 align; // module alignment constraint
64 u32 bssAlign; // bss alignment constraint
65#endif
66
67 // OS_MODULE_VERSION == 3
68#if (3 <= OS_MODULE_VERSION)
70#endif
71};
72
73#define OSGetSectionInfo(module) ((OSSectionInfo*)(((OSModuleInfo*)(module))->sectionInfoOffset))
74
79
80// OSSectionInfo.offset bit
81#define OS_SECTIONINFO_EXEC 0x1
82#define OS_SECTIONINFO_OFFSET(offset) ((offset) & ~0x1)
83
85 OSModuleID id; // external module id
86 u32 offset; // offset to OSRel instructions
87};
88
89struct OSRel {
90 u16 offset; // byte offset from the previous entry
94};
95
96#define R_DOLPHIN_NOP 201 // C9h current offset += OSRel.offset
97#define R_DOLPHIN_SECTION 202 // CAh current section = OSRel.section
98#define R_DOLPHIN_END 203 // CBh
99#define R_DOLPHIN_MRKREF 204 // CCh
100
101void OSSetStringTable(void* stringTable);
102BOOL OSLink(OSModuleInfo* newModule, void* bss);
103
104#if (3 <= OS_MODULE_VERSION)
105BOOL OSLinkFixed(OSModuleInfo* newModule, void* bss);
106#endif
107
108BOOL OSUnlink(OSModuleInfo* oldModule);
109
110OSModuleInfo* OSSearchModule(void* ptr, u32* section, u32* offset);
111
112// debugger notification
113void OSNotifyLink(OSModuleInfo* module);
114void OSNotifyUnlink(OSModuleInfo* module);
115
116#ifdef __cplusplus
117}
118#endif
119
120#endif
121#endif
OSModuleInfo * OSSearchModule(void *ptr, u32 *section, u32 *offset)
Definition OSLink.c:494
u32 OSModuleID
Definition OSModule.h:16
BOOL OSUnlink(OSModuleInfo *oldModule)
Definition OSLink.c:428
BOOL OSLinkFixed(OSModuleInfo *newModule, void *bss)
Definition OSLink.c:324
void OSNotifyUnlink(OSModuleInfo *module)
Definition OSLink.c:119
void OSNotifyLink(OSModuleInfo *module)
Definition OSLink.c:117
BOOL OSLink(OSModuleInfo *newModule, void *bss)
Definition OSLink.c:320
void OSSetStringTable(void *stringTable)
Definition OSLink.c:122
int BOOL
Definition types.h:33
unsigned long u32
Definition types.h:12
unsigned short int u16
Definition types.h:10
unsigned char u8
Definition types.h:8
Definition OSModule.h:84
OSModuleID id
Definition OSModule.h:85
u32 offset
Definition OSModule.h:86
Definition OSModule.h:44
OSModuleInfo info
Definition OSModule.h:46
u8 prologSection
Definition OSModule.h:53
u32 epilog
Definition OSModule.h:58
u32 fixSize
Definition OSModule.h:69
u32 bssAlign
Definition OSModule.h:64
u32 align
Definition OSModule.h:63
u32 relOffset
Definition OSModule.h:50
u8 epilogSection
Definition OSModule.h:54
u32 impOffset
Definition OSModule.h:51
u32 impSize
Definition OSModule.h:52
u32 unresolved
Definition OSModule.h:59
u8 unresolvedSection
Definition OSModule.h:55
u32 bssSize
Definition OSModule.h:49
u8 bssSection
Definition OSModule.h:56
u32 prolog
Definition OSModule.h:57
Definition OSModule.h:34
u32 version
Definition OSModule.h:41
u32 numSections
Definition OSModule.h:37
OSModuleLink link
Definition OSModule.h:36
u32 sectionInfoOffset
Definition OSModule.h:38
OSModuleID id
Definition OSModule.h:35
u32 nameSize
Definition OSModule.h:40
u32 nameOffset
Definition OSModule.h:39
Definition OSModule.h:24
OSModuleInfo * tail
Definition OSModule.h:26
OSModuleInfo * head
Definition OSModule.h:25
Definition OSModule.h:89
u8 section
Definition OSModule.h:92
u32 addend
Definition OSModule.h:93
u16 offset
Definition OSModule.h:90
u8 type
Definition OSModule.h:91
Definition OSModule.h:75
u32 size
Definition OSModule.h:77
u32 offset
Definition OSModule.h:76