mirror of https://github.com/zeldaret/mm.git
				
				
				
			
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
| #ifndef LIBU64_LOADFRAGMENT_H
 | |
| #define LIBU64_LOADFRAGMENT_H
 | |
| 
 | |
| #include "PR/ultratypes.h"
 | |
| #include "stdint.h"
 | |
| #include "stddef.h"
 | |
| 
 | |
| extern s32 gOverlayLogSeverity;
 | |
| 
 | |
| #define RELOC_SECTION(reloc) ((reloc) >> 30)
 | |
| #define RELOC_OFFSET(reloc) ((reloc) & 0xFFFFFF)
 | |
| #define RELOC_TYPE_MASK(reloc) ((reloc) & 0x3F000000)
 | |
| #define RELOC_TYPE_SHIFT 24
 | |
| 
 | |
| /* MIPS Relocation Types */
 | |
| #define R_MIPS_32 2
 | |
| #define R_MIPS_26 4
 | |
| #define R_MIPS_HI16 5
 | |
| #define R_MIPS_LO16 6
 | |
| 
 | |
| typedef enum {
 | |
|     /* 0 */ RELOC_SECTION_NULL,
 | |
|     /* 1 */ RELOC_SECTION_TEXT,
 | |
|     /* 2 */ RELOC_SECTION_DATA,
 | |
|     /* 3 */ RELOC_SECTION_RODATA,
 | |
|     /* 4 */ RELOC_SECTION_MAX
 | |
| } RelocSectionId;
 | |
| 
 | |
| typedef struct OverlayRelocationSection {
 | |
|     /* 0x00 */ size_t textSize;
 | |
|     /* 0x04 */ size_t dataSize;
 | |
|     /* 0x08 */ size_t rodataSize;
 | |
|     /* 0x0C */ size_t bssSize;
 | |
|     /* 0x10 */ u32 numRelocations;
 | |
|     /* 0x14 */ u32 relocations[1]; // array count is numRelocations
 | |
| } OverlayRelocationSection; // size >= 0x18
 | |
| 
 | |
| // Fragment overlay load functions
 | |
| size_t Overlay_Load(uintptr_t vromStart, uintptr_t vromEnd, void* vramStart, void* vramEnd, void* allocatedRamAddr);
 | |
| void* Overlay_AllocateAndLoad(uintptr_t vromStart, uintptr_t vromEnd, void* vramStart, void* vramEnd);
 | |
| 
 | |
| #endif
 |