ObjFW  Diff

Differences From Artifact [55ee69eb97]:

To Artifact [2c24631f83]:


58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131

132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150

151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167

#ifdef OF_AMIGAOS_M68K
extern uintptr_t __CTOR_LIST__[];
extern const void *_EH_FRAME_BEGINS__;
extern void *_EH_FRAME_OBJECTS__;
#endif

extern bool objc_init_m68k(void);
extern void __objc_exec_class_m68k(void);
extern IMP _Nonnull objc_msg_lookup_m68k(void);
extern IMP _Nonnull objc_msg_lookup_stret_m68k(void);
extern IMP _Nonnull objc_msg_lookup_super_m68k(void);
extern IMP _Nonnull objc_msg_lookup_super_stret_m68k(void);
extern Class _Nullable objc_lookUpClass_m68k(void);
extern Class _Nullable objc_getClass_m68k(void);
extern Class _Nonnull objc_getRequiredClass_m68k(void);
extern Class _Nullable objc_lookup_class_m68k(void);
extern Class _Nonnull objc_get_class_m68k(void);
extern void objc_exception_throw_m68k(void);
extern int objc_sync_enter_m68k(void);
extern int objc_sync_exit_m68k(void);
extern id _Nullable objc_getProperty_m68k(void);
extern void objc_setProperty_m68k(void);
extern void objc_getPropertyStruct_m68k(void);
extern void objc_setPropertyStruct_m68k(void);
extern void objc_enumerationMutation_m68k(void);
extern int __gnu_objc_personality_v0_m68k(void);
extern int __gnu_objc_personality_sj0_m68k(void);
extern id _Nullable objc_retain_m68k(void);
extern id _Nullable objc_retainBlock_m68k(void);
extern id _Nullable objc_retainAutorelease_m68k(void);
extern void objc_release_m68k(void);
extern id _Nullable objc_autorelease_m68k(void);
extern id _Nullable objc_autoreleaseReturnValue_m68k(void);
extern id _Nullable objc_retainAutoreleaseReturnValue_m68k(void);
extern id _Nullable objc_retainAutoreleasedReturnValue_m68k(void);
extern id _Nullable objc_storeStrong_m68k(void);
extern id _Nullable objc_storeWeak_m68k(void);
extern id _Nullable objc_loadWeakRetained_m68k(void);
extern id _Nullable objc_initWeak_m68k(void);
extern void objc_destroyWeak_m68k(void);
extern id _Nullable objc_loadWeak_m68k(void);
extern void objc_copyWeak_m68k(void);
extern void objc_moveWeak_m68k(void);
extern SEL _Nonnull sel_registerName_m68k(void);
extern const char *_Nonnull sel_getName_m68k(void);
extern bool sel_isEqual_m68k(void);
extern Class _Nonnull objc_allocateClassPair_m68k(void);
extern void objc_registerClassPair_m68k(void);
extern unsigned int objc_getClassList_m68k(void);
extern Class _Nonnull *_Nonnull objc_copyClassList_m68k(void);
extern bool class_isMetaClass_m68k(void);
extern const char *_Nullable class_getName_m68k(void);
extern Class _Nullable class_getSuperclass_m68k(void);
extern unsigned long class_getInstanceSize_m68k(void);
extern bool class_respondsToSelector_m68k(void);
extern bool class_conformsToProtocol_m68k(void);
extern IMP _Nullable class_getMethodImplementation_m68k(void);
extern IMP _Nullable class_getMethodImplementation_stret_m68k(void);
extern const char *_Nullable class_getMethodTypeEncoding_m68k(void);
extern bool class_addMethod_m68k(void);
extern IMP _Nullable class_replaceMethod_m68k(void);
extern Class _Nullable object_getClass_m68k(void);
extern Class _Nullable object_setClass_m68k(void);
extern const char *_Nullable object_getClassName_m68k(void);
extern const char *_Nonnull protocol_getName_m68k(void);
extern bool protocol_isEqual_m68k(void);
extern bool protocol_conformsToProtocol_m68k(void);
extern void objc_exit_m68k(void);
extern _Nullable objc_uncaught_exception_handler_t
    objc_setUncaughtExceptionHandler_m68k(void);
extern void objc_setForwardHandler_m68k(void);
extern void objc_setEnumerationMutationHandler_m68k(void);
extern void objc_zero_weak_references_m68k(void);


#ifdef OF_MORPHOS
const ULONG __abox__ = 1;
#endif
struct ExecBase *SysBase;
struct objc_libc libc;
FILE *stdout;
FILE *stderr;

#if defined(OF_AMIGAOS_M68K)
__asm__ (
    ".text\n"
    ".globl ___restore_a4\n"
    ".align 1\n"
    "___restore_a4:\n"
    "	movea.l	42(a6), a4\n"
    "	rts"
);
#elif defined(OF_MORPHOS)

__asm__ (
    ".section .text\n"
    ".globl __restore_r13\n"
    ".align 2\n"
    "__restore_r13:\n"
    "	lwz	%r13, 56(%r2)\n"
    "	lwz	%r13, 44(%r13)\n"
    "	blr\n"
    ".type __restore_r13, @function\n"
    ".size __restore_r13, .-__restore_r13"
);
#endif

static OF_INLINE char *
getDataSeg(void)
{
	char *dataSeg;







|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<

|
|
|
|
>



















>


<





<
<







58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84

85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124

125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152

153
154
155
156
157


158
159
160
161
162
163
164

#ifdef OF_AMIGAOS_M68K
extern uintptr_t __CTOR_LIST__[];
extern const void *_EH_FRAME_BEGINS__;
extern void *_EH_FRAME_OBJECTS__;
#endif

extern bool glue_objc_init(void);
extern void glue___objc_exec_class(void);
extern IMP _Nonnull glue_objc_msg_lookup(void);
extern IMP _Nonnull glue_objc_msg_lookup_stret(void);
extern IMP _Nonnull glue_objc_msg_lookup_super(void);
extern IMP _Nonnull glue_objc_msg_lookup_super_stret(void);
extern Class _Nullable glue_objc_lookUpClass(void);
extern Class _Nullable glue_objc_getClass(void);
extern Class _Nonnull glue_objc_getRequiredClass(void);
extern Class _Nullable glue_objc_lookup_class(void);
extern Class _Nonnull glue_objc_get_class(void);
extern void glue_objc_exception_throw(void);
extern int glue_objc_sync_enter(void);
extern int glue_objc_sync_exit(void);
extern id _Nullable glue_objc_getProperty(void);
extern void glue_objc_setProperty(void);
extern void glue_objc_getPropertyStruct(void);
extern void glue_objc_setPropertyStruct(void);
extern void glue_objc_enumerationMutation(void);
extern int glue___gnu_objc_personality(void);

extern id _Nullable glue_objc_retain(void);
extern id _Nullable glue_objc_retainBlock(void);
extern id _Nullable glue_objc_retainAutorelease(void);
extern void glue_objc_release(void);
extern id _Nullable glue_objc_autorelease(void);
extern id _Nullable glue_objc_autoreleaseReturnValue(void);
extern id _Nullable glue_objc_retainAutoreleaseReturnValue(void);
extern id _Nullable glue_objc_retainAutoreleasedReturnValue(void);
extern id _Nullable glue_objc_storeStrong(void);
extern id _Nullable glue_objc_storeWeak(void);
extern id _Nullable glue_objc_loadWeakRetained(void);
extern id _Nullable glue_objc_initWeak(void);
extern void glue_objc_destroyWeak(void);
extern id _Nullable glue_objc_loadWeak(void);
extern void glue_objc_copyWeak(void);
extern void glue_objc_moveWeak(void);
extern SEL _Nonnull glue_sel_registerName(void);
extern const char *_Nonnull glue_sel_getName(void);
extern bool glue_sel_isEqual(void);
extern Class _Nonnull glue_objc_allocateClassPair(void);
extern void glue_objc_registerClassPair(void);
extern unsigned int glue_objc_getClassList(void);
extern Class _Nonnull *_Nonnull glue_objc_copyClassList(void);
extern bool glue_class_isMetaClass(void);
extern const char *_Nullable glue_class_getName(void);
extern Class _Nullable glue_class_getSuperclass(void);
extern unsigned long glue_class_getInstanceSize(void);
extern bool glue_class_respondsToSelector(void);
extern bool glue_class_conformsToProtocol(void);
extern IMP _Nullable glue_class_getMethodImplementation(void);
extern IMP _Nullable glue_class_getMethodImplementation_stret(void);
extern const char *_Nullable glue_class_getMethodTypeEncoding(void);
extern bool glue_class_addMethod(void);
extern IMP _Nullable glue_class_replaceMethod(void);
extern Class _Nullable glue_object_getClass(void);
extern Class _Nullable glue_object_setClass(void);
extern const char *_Nullable glue_object_getClassName(void);
extern const char *_Nonnull glue_protocol_getName(void);
extern bool glue_protocol_isEqual(void);
extern bool glue_protocol_conformsToProtocol(void);

extern _Nullable objc_uncaught_exception_handler_t
    glue_objc_setUncaughtExceptionHandler(void);
extern void glue_objc_setForwardHandler(void);
extern void glue_objc_setEnumerationMutationHandler(void);
extern void glue_objc_zero_weak_references(void);
extern void glue_objc_exit(void);

#ifdef OF_MORPHOS
const ULONG __abox__ = 1;
#endif
struct ExecBase *SysBase;
struct objc_libc libc;
FILE *stdout;
FILE *stderr;

#if defined(OF_AMIGAOS_M68K)
__asm__ (
    ".text\n"
    ".globl ___restore_a4\n"
    ".align 1\n"
    "___restore_a4:\n"
    "	movea.l	42(a6), a4\n"
    "	rts"
);
#elif defined(OF_MORPHOS)
/* All __saveds functions in this file need to use the M68K ABI */
__asm__ (
    ".section .text\n"

    ".align 2\n"
    "__restore_r13:\n"
    "	lwz	%r13, 56(%r2)\n"
    "	lwz	%r13, 44(%r13)\n"
    "	blr\n"


);
#endif

static OF_INLINE char *
getDataSeg(void)
{
	char *dataSeg;
373
374
375
376
377
378
379
380

381

382
383


384
385
386
387
388
389
390
391
392
393
394
static void *
lib_null(void)
{
	return NULL;
}

bool
objc_init(void)

{

	OBJC_M68K_ARG(struct ObjFWRTBase *, base, a6)
	OBJC_M68K_ARG(unsigned int, version, d0)


	OBJC_M68K_ARG(struct objc_libc *, libc_, a0)
	OBJC_M68K_ARG(FILE *, stdout_, a1)
	OBJC_M68K_ARG(FILE *, stderr_, a2)

	uintptr_t *iter, *iter0;

	if (version > 1)
		return false;

	memcpy(&libc, libc_, sizeof(libc));
	stdout = stdout_;







|
>

>

<
>
>
|
<
<
|







370
371
372
373
374
375
376
377
378
379
380
381

382
383
384


385
386
387
388
389
390
391
392
static void *
lib_null(void)
{
	return NULL;
}

bool
objc_init(unsigned int version, struct objc_libc *libc_, FILE *stdout_,
    FILE *stderr_)
{
#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;

	memcpy(&libc, libc_, sizeof(libc));
	stdout = stdout_;
563
564
565
566
567
568
569

570



571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635

636
637
638
639
640
641
642
	(CONST_APTR)FUNCARRAY_BEGIN,
	(CONST_APTR)FUNCARRAY_32BIT_NATIVE,
#endif
	(CONST_APTR)lib_open,
	(CONST_APTR)lib_close,
	(CONST_APTR)lib_expunge,
	(CONST_APTR)lib_null,

	(CONST_APTR)objc_init_m68k,



	(CONST_APTR)__objc_exec_class_m68k,
	(CONST_APTR)objc_msg_lookup_m68k,
	(CONST_APTR)objc_msg_lookup_stret_m68k,
	(CONST_APTR)objc_msg_lookup_super_m68k,
	(CONST_APTR)objc_msg_lookup_super_stret_m68k,
	(CONST_APTR)objc_lookUpClass_m68k,
	(CONST_APTR)objc_getClass_m68k,
	(CONST_APTR)objc_getRequiredClass_m68k,
	(CONST_APTR)objc_lookup_class_m68k,
	(CONST_APTR)objc_get_class_m68k,
	(CONST_APTR)objc_exception_throw_m68k,
	(CONST_APTR)objc_sync_enter_m68k,
	(CONST_APTR)objc_sync_exit_m68k,
	(CONST_APTR)objc_getProperty_m68k,
	(CONST_APTR)objc_setProperty_m68k,
	(CONST_APTR)objc_getPropertyStruct_m68k,
	(CONST_APTR)objc_setPropertyStruct_m68k,
	(CONST_APTR)objc_enumerationMutation_m68k,
	(CONST_APTR)__gnu_objc_personality_v0_m68k,
	(CONST_APTR)__gnu_objc_personality_sj0_m68k,
	(CONST_APTR)objc_retain_m68k,
	(CONST_APTR)objc_retainBlock_m68k,
	(CONST_APTR)objc_retainAutorelease_m68k,
	(CONST_APTR)objc_release_m68k,
	(CONST_APTR)objc_autorelease_m68k,
	(CONST_APTR)objc_autoreleaseReturnValue_m68k,
	(CONST_APTR)objc_retainAutoreleaseReturnValue_m68k,
	(CONST_APTR)objc_retainAutoreleasedReturnValue_m68k,
	(CONST_APTR)objc_storeStrong_m68k,
	(CONST_APTR)objc_storeWeak_m68k,
	(CONST_APTR)objc_loadWeakRetained_m68k,
	(CONST_APTR)objc_initWeak_m68k,
	(CONST_APTR)objc_destroyWeak_m68k,
	(CONST_APTR)objc_loadWeak_m68k,
	(CONST_APTR)objc_copyWeak_m68k,
	(CONST_APTR)objc_moveWeak_m68k,
	(CONST_APTR)sel_registerName_m68k,
	(CONST_APTR)sel_getName_m68k,
	(CONST_APTR)sel_isEqual_m68k,
	(CONST_APTR)objc_allocateClassPair_m68k,
	(CONST_APTR)objc_registerClassPair_m68k,
	(CONST_APTR)objc_getClassList_m68k,
	(CONST_APTR)objc_copyClassList_m68k,
	(CONST_APTR)class_isMetaClass_m68k,
	(CONST_APTR)class_getName_m68k,
	(CONST_APTR)class_getSuperclass_m68k,
	(CONST_APTR)class_getInstanceSize_m68k,
	(CONST_APTR)class_respondsToSelector_m68k,
	(CONST_APTR)class_conformsToProtocol_m68k,
	(CONST_APTR)class_getMethodImplementation_m68k,
	(CONST_APTR)class_getMethodImplementation_stret_m68k,
	(CONST_APTR)class_getMethodTypeEncoding_m68k,
	(CONST_APTR)class_addMethod_m68k,
	(CONST_APTR)class_replaceMethod_m68k,
	(CONST_APTR)object_getClass_m68k,
	(CONST_APTR)object_setClass_m68k,
	(CONST_APTR)object_getClassName_m68k,
	(CONST_APTR)protocol_getName_m68k,
	(CONST_APTR)protocol_isEqual_m68k,
	(CONST_APTR)protocol_conformsToProtocol_m68k,
	(CONST_APTR)objc_exit_m68k,
	(CONST_APTR)objc_setUncaughtExceptionHandler_m68k,
	(CONST_APTR)objc_setForwardHandler_m68k,
	(CONST_APTR)objc_setEnumerationMutationHandler_m68k,
	(CONST_APTR)objc_zero_weak_references_m68k,

	(CONST_APTR)-1,
#ifdef OF_MORPHOS
	(CONST_APTR)FUNCARRAY_END
#endif
};
#pragma GCC diagnostic pop








>
|
>
>
>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
<
|
|
|
|
>







561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591

592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631

632
633
634
635
636
637
638
639
640
641
642
643
	(CONST_APTR)FUNCARRAY_BEGIN,
	(CONST_APTR)FUNCARRAY_32BIT_NATIVE,
#endif
	(CONST_APTR)lib_open,
	(CONST_APTR)lib_close,
	(CONST_APTR)lib_expunge,
	(CONST_APTR)lib_null,
#ifdef OF_MORPHOS
	(CONST_APTR)-1,
	(CONST_APTR)FUNCARRAY_32BIT_SYSTEMV,
#endif
	(CONST_APTR)glue_objc_init,
	(CONST_APTR)glue___objc_exec_class,
	(CONST_APTR)glue_objc_msg_lookup,
	(CONST_APTR)glue_objc_msg_lookup_stret,
	(CONST_APTR)glue_objc_msg_lookup_super,
	(CONST_APTR)glue_objc_msg_lookup_super_stret,
	(CONST_APTR)glue_objc_lookUpClass,
	(CONST_APTR)glue_objc_getClass,
	(CONST_APTR)glue_objc_getRequiredClass,
	(CONST_APTR)glue_objc_lookup_class,
	(CONST_APTR)glue_objc_get_class,
	(CONST_APTR)glue_objc_exception_throw,
	(CONST_APTR)glue_objc_sync_enter,
	(CONST_APTR)glue_objc_sync_exit,
	(CONST_APTR)glue_objc_getProperty,
	(CONST_APTR)glue_objc_setProperty,
	(CONST_APTR)glue_objc_getPropertyStruct,
	(CONST_APTR)glue_objc_setPropertyStruct,
	(CONST_APTR)glue_objc_enumerationMutation,
	(CONST_APTR)glue___gnu_objc_personality,

	(CONST_APTR)glue_objc_retain,
	(CONST_APTR)glue_objc_retainBlock,
	(CONST_APTR)glue_objc_retainAutorelease,
	(CONST_APTR)glue_objc_release,
	(CONST_APTR)glue_objc_autorelease,
	(CONST_APTR)glue_objc_autoreleaseReturnValue,
	(CONST_APTR)glue_objc_retainAutoreleaseReturnValue,
	(CONST_APTR)glue_objc_retainAutoreleasedReturnValue,
	(CONST_APTR)glue_objc_storeStrong,
	(CONST_APTR)glue_objc_storeWeak,
	(CONST_APTR)glue_objc_loadWeakRetained,
	(CONST_APTR)glue_objc_initWeak,
	(CONST_APTR)glue_objc_destroyWeak,
	(CONST_APTR)glue_objc_loadWeak,
	(CONST_APTR)glue_objc_copyWeak,
	(CONST_APTR)glue_objc_moveWeak,
	(CONST_APTR)glue_sel_registerName,
	(CONST_APTR)glue_sel_getName,
	(CONST_APTR)glue_sel_isEqual,
	(CONST_APTR)glue_objc_allocateClassPair,
	(CONST_APTR)glue_objc_registerClassPair,
	(CONST_APTR)glue_objc_getClassList,
	(CONST_APTR)glue_objc_copyClassList,
	(CONST_APTR)glue_class_isMetaClass,
	(CONST_APTR)glue_class_getName,
	(CONST_APTR)glue_class_getSuperclass,
	(CONST_APTR)glue_class_getInstanceSize,
	(CONST_APTR)glue_class_respondsToSelector,
	(CONST_APTR)glue_class_conformsToProtocol,
	(CONST_APTR)glue_class_getMethodImplementation,
	(CONST_APTR)glue_class_getMethodImplementation_stret,
	(CONST_APTR)glue_class_getMethodTypeEncoding,
	(CONST_APTR)glue_class_addMethod,
	(CONST_APTR)glue_class_replaceMethod,
	(CONST_APTR)glue_object_getClass,
	(CONST_APTR)glue_object_setClass,
	(CONST_APTR)glue_object_getClassName,
	(CONST_APTR)glue_protocol_getName,
	(CONST_APTR)glue_protocol_isEqual,
	(CONST_APTR)glue_protocol_conformsToProtocol,

	(CONST_APTR)glue_objc_setUncaughtExceptionHandler,
	(CONST_APTR)glue_objc_setForwardHandler,
	(CONST_APTR)glue_objc_setEnumerationMutationHandler,
	(CONST_APTR)glue_objc_zero_weak_references,
	(CONST_APTR)glue_objc_exit,
	(CONST_APTR)-1,
#ifdef OF_MORPHOS
	(CONST_APTR)FUNCARRAY_END
#endif
};
#pragma GCC diagnostic pop