mirror of
https://github.com/Maschell/dynamic_libs.git
synced 2024-11-14 00:45:14 +01:00
Merge pull request #6 from neuschaefer/dev
Space savings, memory functions, .gitignore
This commit is contained in:
commit
d2f15cc9b6
3
.gitignore
vendored
3
.gitignore
vendored
@ -45,3 +45,6 @@ $RECYCLE.BIN/
|
||||
Network Trash Folder
|
||||
Temporary Items
|
||||
.apdisk
|
||||
|
||||
# Build artifacts
|
||||
*.o
|
||||
|
@ -99,6 +99,9 @@ EXPORT_DECL(void *, MEMAllocFromExpHeapEx, s32 heap, u32 size, s32 align);
|
||||
EXPORT_DECL(s32 , MEMCreateExpHeapEx, void* address, u32 size, unsigned short flags);
|
||||
EXPORT_DECL(void *, MEMDestroyExpHeap, s32 heap);
|
||||
EXPORT_DECL(void, MEMFreeToExpHeap, s32 heap, void* ptr);
|
||||
EXPORT_DECL(void *, OSAllocFromSystem, int size, int alignment);
|
||||
EXPORT_DECL(void, OSFreeToSystem, void *addr);
|
||||
EXPORT_DECL(int, OSIsAddressValid, void *ptr);
|
||||
|
||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//! MCP functions
|
||||
@ -149,9 +152,40 @@ EXPORT_DECL(s32, IOS_Ioctl,s32 fd, u32 request, void *input_buffer,u32 input_buf
|
||||
EXPORT_DECL(s32, IOS_Open,char *path, u32 mode);
|
||||
EXPORT_DECL(s32, IOS_Close,s32 fd);
|
||||
|
||||
void _os_find_export(u32 handle, const char *funcName, void *funcPointer)
|
||||
{
|
||||
OSDynLoad_FindExport(handle, 0, funcName, funcPointer);
|
||||
|
||||
if(!*(u32 *)funcPointer) {
|
||||
/*
|
||||
* This is effectively OSFatal("Function %s is NULL", funcName),
|
||||
* but we can't rely on any library functions like snprintf or
|
||||
* strcpy at this point.
|
||||
*
|
||||
* Buffer bounds are not checked. Beware!
|
||||
*/
|
||||
char buf[256], *bufp = buf;
|
||||
const char a[] = "Function ", b[] = " is NULL", *p;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < sizeof(a) - 1; i++)
|
||||
*bufp++ = a[i];
|
||||
|
||||
for (p = funcName; *p; p++)
|
||||
*bufp++ = *p;
|
||||
|
||||
for (i = 0; i < sizeof(b) - 1; i++)
|
||||
*bufp++ = b[i];
|
||||
|
||||
*bufp++ = '\0';
|
||||
|
||||
OSFatal(buf);
|
||||
}
|
||||
}
|
||||
|
||||
void InitAcquireOS(void)
|
||||
{
|
||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//! Lib handle functions
|
||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
EXPORT_FUNC_WRITE(OSDynLoad_Acquire, (s32 (*)(const char*, unsigned *))OS_SPECIFICS->addr_OSDynLoad_Acquire);
|
||||
@ -237,6 +271,9 @@ void InitOSFunctionPointers(void)
|
||||
OS_FIND_EXPORT(coreinit_handle, MEMCreateExpHeapEx);
|
||||
OS_FIND_EXPORT(coreinit_handle, MEMDestroyExpHeap);
|
||||
OS_FIND_EXPORT(coreinit_handle, MEMFreeToExpHeap);
|
||||
OS_FIND_EXPORT(coreinit_handle, OSAllocFromSystem);
|
||||
OS_FIND_EXPORT(coreinit_handle, OSFreeToSystem);
|
||||
OS_FIND_EXPORT(coreinit_handle, OSIsAddressValid);
|
||||
|
||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//! Other function addresses
|
||||
|
@ -49,25 +49,20 @@ extern "C" {
|
||||
|
||||
#define EXPORT_FUNC_WRITE(func, val) *(u32*)(((u32)&func) + 0) = (u32)val
|
||||
|
||||
#define OS_FIND_EXPORT(handle, func) funcPointer = 0; \
|
||||
OSDynLoad_FindExport(handle, 0, # func, &funcPointer); \
|
||||
if(!funcPointer) \
|
||||
OSFatal("Function " # func " is NULL"); \
|
||||
#define OS_FIND_EXPORT(handle, func) _os_find_export(handle, # func, &funcPointer); \
|
||||
EXPORT_FUNC_WRITE(func, funcPointer);
|
||||
|
||||
#define OS_FIND_EXPORT_EX(handle, func, func_p) \
|
||||
funcPointer = 0; \
|
||||
OSDynLoad_FindExport(handle, 0, # func, &funcPointer); \
|
||||
if(!funcPointer) \
|
||||
OSFatal("Function " # func " is NULL"); \
|
||||
_os_find_export(handle, # func, &funcPointer); \
|
||||
EXPORT_FUNC_WRITE(func_p, funcPointer);
|
||||
|
||||
#define OS_MUTEX_SIZE 44
|
||||
|
||||
/* Handle for coreinit */
|
||||
extern u32 coreinit_handle;
|
||||
void InitOSFunctionPointers(void);
|
||||
void InitAcquireOS(void);
|
||||
extern void _os_find_export(u32 handle, const char *funcName, void *funcPointer);
|
||||
extern void InitAcquireOS(void);
|
||||
extern void InitOSFunctionPointers(void);
|
||||
|
||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//! Lib handle functions
|
||||
@ -143,6 +138,9 @@ extern void *(* MEMAllocFromExpHeapEx)(s32 heap, u32 size, s32 align);
|
||||
extern s32 (* MEMCreateExpHeapEx)(void* address, u32 size, unsigned short flags);
|
||||
extern void *(* MEMDestroyExpHeap)(s32 heap);
|
||||
extern void (* MEMFreeToExpHeap)(s32 heap, void* ptr);
|
||||
extern void* (* OSAllocFromSystem)(int size, int alignment);
|
||||
extern void (* OSFreeToSystem)(void *addr);
|
||||
extern int (* OSIsAddressValid)(void *ptr);
|
||||
|
||||
//!----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|
||||
//! MCP functions
|
||||
|
Loading…
Reference in New Issue
Block a user