Steal MSL runtime from sms & mkdd

This commit is contained in:
Roman Sandu
2025-06-23 21:23:21 +03:00
parent d338d491ba
commit b7f95f2000
15 changed files with 1265 additions and 110 deletions
+37
View File
@@ -0,0 +1,37 @@
#ifndef _RUNTIME_MWCPLUSLIB_H
#define _RUNTIME_MWCPLUSLIB_H
#include "stddef.h"
#define CTORARG_TYPE int
#define CTORARG_PARTIAL (0)
#define CTORARG_COMPLETE (1)
#define CTORCALL_COMPLETE(ctor, objptr) (((void (*)(void*, CTORARG_TYPE))ctor)(objptr, CTORARG_COMPLETE))
#define DTORARG_TYPE int
#define DTORCALL_COMPLETE(dtor, objptr) (((void (*)(void*, DTORARG_TYPE))dtor)(objptr, -1))
#define DTORCALL_PARTIAL(dtor, objptr) (((void (*)(void*, DTORARG_TYPE))dtor)(objptr, 0))
typedef void* ConstructorDestructor;
#ifdef __cplusplus
extern "C" {
#endif
extern void* __copy(char* to, char* from, size_t size);
extern void __construct_array(void* ptr, ConstructorDestructor ctor, ConstructorDestructor dtor, size_t size, size_t n);
extern void __destroy_arr(void* block, ConstructorDestructor* dtor, size_t size, size_t n);
extern void* __construct_new_array(void* block, ConstructorDestructor ctor, ConstructorDestructor dtor_arg, size_t size,
size_t n);
extern void __destroy_new_array(void* block, ConstructorDestructor dtor);
extern void __destroy_new_array2();
extern void __destroy_new_array3();
#ifdef __cplusplus
}
#endif
#endif
+41
View File
@@ -0,0 +1,41 @@
#ifndef _NMWEXCEPTION
#define _NMWEXCEPTION
typedef short vbase_ctor_arg_type;
typedef char local_cond_type;
typedef struct CatchInfo {
void* location;
void* typeinfo;
void* dtor;
void* sublocation;
long pointercopy;
void* stacktop;
} CatchInfo;
typedef struct DestructorChain {
struct DestructorChain* next;
void* destructor;
void* object;
} DestructorChain;
#ifdef __cplusplus
extern "C" {
#endif
extern void* __register_global_object(void* object, void* destructor, void* registration);
extern void __destroy_global_chain(void);
extern void __end__catch(CatchInfo* catchinfo);
extern void __throw(char* throwtype, void* location, void* dtor);
extern char __throw_catch_compare(const char* throwtype, const char* catchtype, long* offset_result);
extern void __unexpected(CatchInfo* catchinfo);
extern int __register_fragment(struct __eti_init_info* info, char* TOC);
extern void __unregister_fragment(int fragmentID);
#ifdef __cplusplus
}
#endif
#endif // _NMWEXCEPTION
+1 -1
View File
@@ -1,7 +1,7 @@
#ifndef _MEM_H
#define _MEM_H
#include "types.h"
#include "stddef.h"
#ifdef __cplusplus
extern "C" {
+1 -1
View File
@@ -19,7 +19,7 @@ typedef __va_list va_list;
extern void __builtin_va_info(va_list*);
#endif
void* __va_arg(va_list v_list, unsigned char type);
void* __va_arg(va_list v_list, int type);
#define va_start(ap, fmt) ((void)fmt, __builtin_va_info(&ap))
#define va_arg(ap, t) (*((t*)__va_arg(ap, _var_arg_typeof(t))))
+1 -1
View File
@@ -17,7 +17,7 @@ typedef struct __va_list_struct {
typedef _va_list_struct __va_list[1];
void* __va_arg(_va_list_struct* list, int type);
void* __va_arg(_va_list_struct* list, long type);
#define __va_start(list, fmt) __builtin_va_info(&list)
#ifdef __MWERKS__