Overview
Comment: | Register frames of Amiga lib on MorphOS |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | amiga-library |
Files: | files | file ages | folders |
SHA3-256: |
bc91edf1b807aea46efa057e489216cc |
User & Date: | js on 2020-12-12 21:35:39 |
Other Links: | branch diff | manifest | tags |
Context
2020-12-12
| ||
21:37 | Add 0 .eh_frame at the end for MorphOS check-in: c186f57779 user: js tags: amiga-library | |
21:35 | Register frames of Amiga lib on MorphOS check-in: bc91edf1b8 user: js tags: amiga-library | |
21:25 | Pass errno to Amiga library check-in: 1712033509 user: js tags: amiga-library | |
Changes
Modified src/amiga-library.h from [d1ef677ea6] to [0a3c3fc0c8].
︙ | ︙ | |||
63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #endif #ifdef OF_AMIGAOS_M68K void (*_Nonnull __register_frame_info)(const void *_Nonnull, void *_Nonnull); void *_Nullable (*_Nonnull __deregister_frame_info)( const void *_Nonnull); #endif int *_Nonnull (*_Nonnull get_errno)(void); /* Needed only by ObjFW. */ int (*_Nonnull vsnprintf)(char *_Nonnull restrict, size_t, const char *_Nonnull restrict, va_list); #ifdef OF_AMIGAOS_M68K /* strtod() uses sscanf() internally */ | > > > > | 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 | #endif #ifdef OF_AMIGAOS_M68K void (*_Nonnull __register_frame_info)(const void *_Nonnull, void *_Nonnull); void *_Nullable (*_Nonnull __deregister_frame_info)( const void *_Nonnull); #endif #ifdef OF_MORPHOS void (*_Nonnull __register_frame)(void *_Nonnull); void (*_Nonnull __deregister_frame)(void *_Nonnull); #endif int *_Nonnull (*_Nonnull get_errno)(void); /* Needed only by ObjFW. */ int (*_Nonnull vsnprintf)(char *_Nonnull restrict, size_t, const char *_Nonnull restrict, va_list); #ifdef OF_AMIGAOS_M68K /* strtod() uses sscanf() internally */ |
︙ | ︙ |
Modified src/amiga-library.m from [34398bab6e] to [32eb67f328].
︙ | ︙ | |||
378 379 380 381 382 383 384 385 386 387 388 389 390 391 | 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) | > > > | 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 | 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 #ifdef OF_MORPHOS void *frame; #endif uintptr_t *iter, *iter0; if (version > 1) return false; if (base->initialized) |
︙ | ︙ | |||
401 402 403 404 405 406 407 | for (size_t i = 1; i <= (size_t)_EH_FRAME_BEGINS__; i++) __register_frame_info((&_EH_FRAME_BEGINS__)[i], (&_EH_FRAME_OBJECTS__)[i]); iter0 = &__CTOR_LIST__[1]; #elif defined(OF_MORPHOS) __asm__ ( | | | > > | > > | 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 | for (size_t i = 1; i <= (size_t)_EH_FRAME_BEGINS__; i++) __register_frame_info((&_EH_FRAME_BEGINS__)[i], (&_EH_FRAME_OBJECTS__)[i]); iter0 = &__CTOR_LIST__[1]; #elif defined(OF_MORPHOS) __asm__ ( "lis %0, __EH_FRAME_BEGIN__@ha\n\t" "la %0, __EH_FRAME_BEGIN__@l(%0)\n\t" "lis %1, __CTOR_LIST__@ha\n\t" "la %1, __CTOR_LIST__@l(%1)\n\t" : "=r"(frame), "=r"(iter0) ); libc.__register_frame(frame); #endif for (iter = iter0; *iter != 0; iter++); while (iter > iter0) { void (*ctor)(void) = (void (*)(void))*--iter; ctor(); |
︙ | ︙ | |||
730 731 732 733 734 735 736 737 | .rt_Revision = OBJFW_LIB_MINOR, .rt_Tags = NULL, #endif }; #ifdef OF_MORPHOS __asm__ ( ".section .ctors, \"aw\", @progbits\n" | > > > > | > | | 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 | .rt_Revision = OBJFW_LIB_MINOR, .rt_Tags = NULL, #endif }; #ifdef OF_MORPHOS __asm__ ( ".section .eh_frame, \"aw\", @progbits\n" ".globl __EH_FRAME_BEGIN__\n" ".type __EH_FRAME_BEGIN__, @object\n" "__EH_FRAME_BEGIN__:\n" ".section .ctors, \"aw\", @progbits\n" ".globl __CTOR_LIST__\n" ".type __CTOR_LIST__, @object\n" "__CTOR_LIST__:\n" ".section .text" ); #endif |
Modified src/linklib/linklib.m from [3c9770138e] to [8f6a6724de].
︙ | ︙ | |||
59 60 61 62 63 64 65 66 67 68 69 70 71 72 | #else extern void _Unwind_Resume(void *); #endif #ifdef OF_AMIGAOS_M68K extern void __register_frame_info(const void *, void *); extern void *__deregister_frame_info(const void *); #endif extern int _Unwind_Backtrace(int (*)(void *, void *), void *); struct Library *ObjFWBase; void *__objc_class_name_OFASN1BitString; void *__objc_class_name_OFASN1Boolean; void *__objc_class_name_OFASN1Enumerated; void *__objc_class_name_OFASN1IA5String; | > > > > | 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 | #else extern void _Unwind_Resume(void *); #endif #ifdef OF_AMIGAOS_M68K extern void __register_frame_info(const void *, void *); extern void *__deregister_frame_info(const void *); #endif #ifdef OF_MORPHOS extern void __register_frame(void *); extern void __deregister_frame(void *); #endif extern int _Unwind_Backtrace(int (*)(void *, void *), void *); struct Library *ObjFWBase; void *__objc_class_name_OFASN1BitString; void *__objc_class_name_OFASN1Boolean; void *__objc_class_name_OFASN1Enumerated; void *__objc_class_name_OFASN1IA5String; |
︙ | ︙ | |||
312 313 314 315 316 317 318 319 320 321 322 323 324 325 | #else ._Unwind_Resume = _Unwind_Resume, #endif #ifdef OF_AMIGAOS_M68K .__register_frame_info = __register_frame_info, .__deregister_frame_info = __deregister_frame_info, #endif .get_errno = get_errno, .vsnprintf = vsnprintf, #ifdef OF_AMIGAOS_M68K .vsscanf = vsscanf, #endif .exit = exit, .signal = signal, | > > > > | 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 | #else ._Unwind_Resume = _Unwind_Resume, #endif #ifdef OF_AMIGAOS_M68K .__register_frame_info = __register_frame_info, .__deregister_frame_info = __deregister_frame_info, #endif #ifdef OF_MORPHOS .__register_frame = __register_frame, .__deregister_frame = __deregister_frame, #endif .get_errno = get_errno, .vsnprintf = vsnprintf, #ifdef OF_AMIGAOS_M68K .vsscanf = vsscanf, #endif .exit = exit, .signal = signal, |
︙ | ︙ |