Comment: | Pass __sF around instead of std* individually
This avoids needing to #undef std{in,out,err} and then providing a new |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | amiga-library |
Files: | files | file ages | folders |
SHA3-256: |
514944f1eaa1845a4da0e51c779c98b5 |
User & Date: | js on 2020-06-07 16:34:48 |
Other Links: | branch diff | manifest | tags |
2020-06-07
| ||
16:53 | Add __(de)register_frame_info to amiga-library.m check-in: 45a8b2333d user: js tags: amiga-library | |
16:34 | Pass __sF around instead of std* individually check-in: 514944f1ea user: js tags: amiga-library | |
16:03 | Add libc symbols needed by the runtime to of_libc check-in: f822adb905 user: js tags: amiga-library | |
Modified src/amiga-glue.m from [2619f44789] to [c28d6d3ae5].
︙ | ︙ | |||
36 37 38 39 40 41 42 | "__restore_r13:\n" " lwz %r13, 44(%r12)\n" " blr\n" ); #endif bool __saveds | | < | | | 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | "__restore_r13:\n" " lwz %r13, 44(%r12)\n" " blr\n" ); #endif bool __saveds glue_of_init PPC_PARAMS(unsigned int version, struct of_libc *libc, FILE **sF) { M68K_ARG(unsigned int, version, d0) M68K_ARG(struct of_libc *, libc, a0) M68K_ARG(FILE **, sF, a1) return of_init(version, libc, sF); } |
Modified src/amiga-library.h from [e0b880f183] to [5676e5d650].
︙ | ︙ | |||
14 15 16 17 18 19 20 21 22 23 24 25 26 27 | * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #import "macros.h" #if defined(OF_COMPILING_AMIGA_LIBRARY) || defined(OF_COMPILING_AMIGA_LINKLIB) struct of_libc { /* * Needed by the runtime. Some of them are also used by ObjFW, but we * need all of them to pass them along to the runtime. */ void *_Nullable (*_Nonnull malloc)(size_t); void *_Nullable (*_Nonnull calloc)(size_t, size_t); | > > > > > > > > > | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #import "macros.h" #if defined(OF_COMPILING_AMIGA_LIBRARY) || defined(OF_COMPILING_AMIGA_LINKLIB) # if defined(__MORPHOS__) # include <ppcinline/macros.h> # define OF_M68K_ARG(type, name, reg) type name = (type)REG_##reg; # else # define OF_M68K_ARG(type, name, reg) \ register type reg_##name __asm__(#reg); \ type name = reg_##name; # endif struct of_libc { /* * Needed by the runtime. Some of them are also used by ObjFW, but we * need all of them to pass them along to the runtime. */ void *_Nullable (*_Nonnull malloc)(size_t); void *_Nullable (*_Nonnull calloc)(size_t, size_t); |
︙ | ︙ | |||
59 60 61 62 63 64 65 | /* Needed only by ObjFW. */ int (*_Nonnull vsnprintf)(const char *_Nonnull restrict, size_t, const char *_Nonnull restrict, va_list); void (*_Nonnull exit)(int); char *_Nullable (*_Nonnull setlocale)(int, const char *_Nullable); }; | | | 68 69 70 71 72 73 74 75 76 | /* Needed only by ObjFW. */ int (*_Nonnull vsnprintf)(const char *_Nonnull restrict, size_t, const char *_Nonnull restrict, va_list); void (*_Nonnull exit)(int); char *_Nullable (*_Nonnull setlocale)(int, const char *_Nullable); }; extern bool of_init(unsigned int version, struct of_libc *libc, FILE **sF); #endif |
Modified src/amiga-library.m from [f07efda97e] to [1f4ef323c1].
︙ | ︙ | |||
73 74 75 76 77 78 79 | #endif #ifdef OF_MORPHOS const ULONG __abox__ = 1; #endif struct ExecBase *SysBase; struct of_libc libc; | | | 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | #endif #ifdef OF_MORPHOS const ULONG __abox__ = 1; #endif struct ExecBase *SysBase; struct of_libc libc; FILE **__sF; #if defined(OF_AMIGAOS_M68K) __asm__ ( ".text\n" ".globl ___restore_a4\n" ".align 1\n" "___restore_a4:\n" |
︙ | ︙ | |||
312 313 314 315 316 317 318 | static void * lib_null(void) { return NULL; } bool | | | | 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 | static void * lib_null(void) { return NULL; } bool of_init(unsigned int version, struct of_libc *libc_, FILE **sF) { #ifdef OF_AMIGAOS_M68K OF_M68K_ARG(struct ObjFWBase *, base, a6) #else register struct ObjFWBase *r12 __asm__("r12"); struct ObjFWBase *base = r12; #endif uintptr_t *iter, *iter0; if (version > 1) return false; if (base->initialized) return true; memcpy(&libc, libc_, sizeof(libc)); __sF = sF; #ifdef OF_AMIGAOS_M68K if ((size_t)_EH_FRAME_BEGINS__ != (size_t)_EH_FRAME_OBJECTS__) return false; for (size_t i = 1; i <= (size_t)_EH_FRAME_BEGINS__; i++) libc.__register_frame_info((&_EH_FRAME_BEGINS__)[i], |
︙ | ︙ |
Modified src/macros.h from [af30b6d7a6] to [b900515d8a].
︙ | ︙ | |||
305 306 307 308 309 310 311 | #if __has_attribute(__swift_name__) # define OF_SWIFT_NAME(name) __attribute__((__swift_name__(name))) #else # define OF_SWIFT_NAME(name) #endif | < < < < < < < < < < < < < | 305 306 307 308 309 310 311 312 313 314 315 316 317 318 | #if __has_attribute(__swift_name__) # define OF_SWIFT_NAME(name) __attribute__((__swift_name__(name))) #else # define OF_SWIFT_NAME(name) #endif #ifdef __GNUC__ # ifdef OF_X86_64 # define OF_X86_64_ASM # endif # ifdef OF_X86 # define OF_X86_ASM # endif |
︙ | ︙ |
Modified src/runtime/amiga-glue.m from [5dde941d59] to [89c63cbc77].
︙ | ︙ | |||
25 26 27 28 29 30 31 | # define PPC_PARAMS(...) (void) # define M68K_ARG OBJC_M68K_ARG #else # define PPC_PARAMS(...) (__VA_ARGS__) # define M68K_ARG(...) #endif | | | | < | | 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | # define PPC_PARAMS(...) (void) # define M68K_ARG OBJC_M68K_ARG #else # define PPC_PARAMS(...) (__VA_ARGS__) # define M68K_ARG(...) #endif extern bool objc_init(unsigned int, struct objc_libc *, FILE **); #ifdef OF_MORPHOS /* All __saveds functions in this file need to use the SysV ABI */ __asm__ ( ".section .text\n" ".align 2\n" "__restore_r13:\n" " lwz %r13, 44(%r12)\n" " blr\n" ); #endif bool __saveds glue_objc_init PPC_PARAMS(unsigned int version, struct objc_libc *libc, FILE **sF) { M68K_ARG(unsigned int, version, d0) M68K_ARG(struct objc_libc *, libc, a0) M68K_ARG(FILE **, sF, a1) return objc_init(version, libc, sF); } void __saveds glue___objc_exec_class PPC_PARAMS(struct objc_module *module) { M68K_ARG(struct objc_module *, module, a0) |
︙ | ︙ |
Modified src/runtime/amiga-library.m from [6c73132350] to [750189a19b].
︙ | ︙ | |||
149 150 151 152 153 154 155 | extern void glue_objc_hashtable_free(void); #ifdef OF_MORPHOS const ULONG __abox__ = 1; #endif struct ExecBase *SysBase; struct objc_libc libc; | | | 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | extern void glue_objc_hashtable_free(void); #ifdef OF_MORPHOS const ULONG __abox__ = 1; #endif struct ExecBase *SysBase; struct objc_libc libc; FILE **__sF; #if defined(OF_AMIGAOS_M68K) __asm__ ( ".text\n" ".globl ___restore_a4\n" ".align 1\n" "___restore_a4:\n" |
︙ | ︙ | |||
389 390 391 392 393 394 395 | static void * lib_null(void) { return NULL; } bool | | < | < | 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 | static void * lib_null(void) { return NULL; } bool objc_init(unsigned int version, struct objc_libc *libc_, FILE **sF) { #ifdef OF_AMIGAOS_M68K OBJC_M68K_ARG(struct ObjFWRTBase *, base, a6) #else register struct ObjFWRTBase *r12 __asm__("r12"); struct ObjFWRTBase *base = r12; #endif uintptr_t *iter, *iter0; if (version > 1) return false; if (base->initialized) return true; memcpy(&libc, libc_, sizeof(libc)); __sF = sF; #ifdef OF_AMIGAOS_M68K if ((size_t)_EH_FRAME_BEGINS__ != (size_t)_EH_FRAME_OBJECTS__) return false; for (size_t i = 1; i <= (size_t)_EH_FRAME_BEGINS__; i++) libc.__register_frame_info((&_EH_FRAME_BEGINS__)[i], |
︙ | ︙ |
Modified src/runtime/amigaos3.sfd from [c645261c7f] to [d4b8997270].
1 2 3 4 5 6 | ==base _ObjFWRTBase ==basetype struct Library * ==libname objfwrt68k.library ==bias 30 ==public * The following function is only for the linklib. | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | ==base _ObjFWRTBase ==basetype struct Library * ==libname objfwrt68k.library ==bias 30 ==public * The following function is only for the linklib. bool glue_objc_init(unsigned int version, struct objc_libc *libc, FILE **sF)(d0,a0,a1) void glue___objc_exec_class(struct objc_module *_Nonnull module)(a0) IMP _Nonnull glue_objc_msg_lookup(id _Nullable object, SEL _Nonnull selector)(a0,a1) IMP _Nonnull glue_objc_msg_lookup_stret(id _Nullable object, SEL _Nonnull selector)(a0,a1) IMP _Nonnull glue_objc_msg_lookup_super(struct objc_super *_Nonnull super, SEL _Nonnull selector)(a0,a1) IMP _Nonnull glue_objc_msg_lookup_super_stret(struct objc_super *_Nonnull super, SEL _Nonnull selector)(a0,a1) Class _Nullable glue_objc_lookUpClass(const char *_Nonnull name)(a0) Class _Nullable glue_objc_getClass(const char *_Nonnull name)(a0) |
︙ | ︙ |
Modified src/runtime/linklib/linklib.m from [141357802d] to [67c7f14c6b].
︙ | ︙ | |||
104 105 106 107 108 109 110 | if ((ObjFWRTBase = OpenLibrary(OBJFWRT_AMIGA_LIB, OBJFWRT_LIB_MINOR)) == NULL) { fputs("Failed to open " OBJFWRT_AMIGA_LIB "!\n", stderr); abort(); } | | | 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | if ((ObjFWRTBase = OpenLibrary(OBJFWRT_AMIGA_LIB, OBJFWRT_LIB_MINOR)) == NULL) { fputs("Failed to open " OBJFWRT_AMIGA_LIB "!\n", stderr); abort(); } if (!glue_objc_init(1, &libc, __sF)) { fputs("Failed to initialize " OBJFWRT_AMIGA_LIB "!\n", stderr); abort(); } initialized = true; } |
︙ | ︙ |
Modified src/runtime/morphos-clib.h from [cfb2b6af7e] to [c2334d45c6].
1 | /* The following function is only for the linklib. */ | | | 1 2 3 4 5 6 7 8 9 | /* The following function is only for the linklib. */ bool glue_objc_init(unsigned int, struct objc_libc *, FILE **); void glue___objc_exec_class(struct objc_module *); IMP glue_objc_msg_lookup(id, SEL); IMP glue_objc_msg_lookup_stret(id, SEL); IMP glue_objc_msg_lookup_super(struct objc_super *, SEL); IMP glue_objc_msg_lookup_super_stret(struct objc_super *, SEL); Class glue_objc_lookUpClass(const char *); Class glue_objc_getClass(const char *); |
︙ | ︙ |
Modified src/runtime/morphos.fd from [f7d065769a] to [6e244cb701].
1 2 3 4 | ##base _ObjFWRTBase ##bias 30 ##public * The following function is only for the linklib. | | | 1 2 3 4 5 6 7 8 9 10 11 12 | ##base _ObjFWRTBase ##bias 30 ##public * The following function is only for the linklib. glue_objc_init(version,libc,sF)(sysv,r12base) glue___objc_exec_class(module)(sysv,r12base) glue_objc_msg_lookup(object,selector)(sysv,r12base) glue_objc_msg_lookup_stret(object,selector)(sysv,r12base) glue_objc_msg_lookup_super(super,selector)(sysv,r12base) glue_objc_msg_lookup_super_stret(super,selector)(sysv,r12base) glue_objc_lookUpClass(name)(sysv,r12base) glue_objc_getClass(name)(sysv,r12base) |
︙ | ︙ |
Modified src/runtime/private.h from [a7c4eb8f4b] to [5d82a9b9bc].
︙ | ︙ | |||
261 262 263 264 265 266 267 | # include <ppcinline/macros.h> # define OBJC_M68K_ARG(type, name, reg) type name = (type)REG_##reg; # else # define OBJC_M68K_ARG(type, name, reg) \ register type reg_##name __asm__(#reg); \ type name = reg_##name; # endif | < < < | 261 262 263 264 265 266 267 268 269 270 271 272 273 274 | # include <ppcinline/macros.h> # define OBJC_M68K_ARG(type, name, reg) type name = (type)REG_##reg; # else # define OBJC_M68K_ARG(type, name, reg) \ register type reg_##name __asm__(#reg); \ type name = reg_##name; # endif #endif extern void objc_register_all_categories(struct objc_symtab *_Nonnull); extern struct objc_category *_Nullable *_Nullable objc_categories_for_class(Class _Nonnull); extern void objc_unregister_all_categories(void); extern void objc_initialize_class(Class _Nonnull); |
︙ | ︙ |