Loading [MathJax]/extensions/MathMenu.js
Twilight Princess
Decompilation of The Legend of Zelda: Twilight Princess
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
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 3
12
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)
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(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
OSModuleInfo * OSSearchModule(void *ptr, u32 *section, u32 *offset)
Definition OSLink.c:494
u32 OSModuleID
Definition OSModule.h:13
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: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 fixSize
Definition OSModule.h:66
u32 bssAlign
Definition OSModule.h:61
u32 align
Definition OSModule.h:60
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
int BOOL
Definition types.h:30
unsigned long u32
Definition types.h:9
unsigned short int u16
Definition types.h:7
unsigned char u8
Definition types.h:5