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 _REVOLUTION_OSMODULE_H_
2#define _REVOLUTION_OSMODULE_H_
3
4#include <revolution/types.h>
5
6#ifdef __cplusplus
7extern "C" {
8#endif
9
10#define OS_MODULE_VERSION 3
11typedef struct OSModuleHeader OSModuleHeader;
12
13typedef u32 OSModuleID;
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
21struct OSModuleQueue {
24};
25
26struct OSModuleLink {
29};
30
31struct 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
41struct OSModuleHeader {
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)
67#endif
68};
69
70#define OSGetSectionInfo(module) ((OSSectionInfo*)(((OSModuleInfo*)(module))->sectionInfoOffset))
71
72struct 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
81struct OSImportInfo {
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
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
98void OSSetStringTable(void* stringTable);
99BOOL OSLink(OSModuleInfo* newModule, void* bss);
100
101#if (3 <= OS_MODULE_VERSION)
102BOOL OSLinkFixed(OSModuleInfo* newModule, void* bss);
103#endif
104
105BOOL OSUnlink(OSModuleInfo* oldModule);
106
107OSModuleInfo* OSSearchModule(void* ptr, u32* section, u32* offset);
108
109// debugger notification
110void OSNotifyLink(OSModuleInfo* module);
111void OSNotifyUnlink(OSModuleInfo* module);
112
113#ifdef __cplusplus
114}
115#endif
116
117#endif
u32 OSModuleID
Definition OSModule.h:16
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
OSModuleInfo * OSSearchModule(void *ptr, u32 *section, u32 *offset)
Definition OSLink.c:494
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
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