ObjFW  Check-in [3c100bc6a7]

Overview
Comment:Amiga library: Add __(de)register_frame symbol
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | amiga-library
Files: files | file ages | folders
SHA3-256: 3c100bc6a72432efc97381c7a5d71329cd7a57b03d2d77506f6fc0f0e910efcc
User & Date: js on 2020-12-19 10:25:36
Other Links: branch diff | manifest | tags
Context
2020-12-19
13:46
Use -lmath on MorphOS for .library check-in: 9510e204b4 user: js tags: amiga-library
10:25
Amiga library: Add __(de)register_frame symbol check-in: 3c100bc6a7 user: js tags: amiga-library
2020-12-18
17:30
amiga-library.m: Open dos.library check-in: 2d0b2c1120 user: js tags: amiga-library
Changes

Modified src/amiga-library.m from [7777d822b1] to [0e90e7af65].

64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
64
65
66
67
68
69
70


71
72
73
74
75
76
77







-
-







	bool initialized;
};

#ifdef OF_AMIGAOS_M68K
extern uintptr_t __CTOR_LIST__[];
extern const void *_EH_FRAME_BEGINS__;
extern void *_EH_FRAME_OBJECTS__;
void __register_frame_info(const void *, void *);
void *__deregister_frame_info(const void *);
#endif

extern bool glue_of_init(void);
extern void *glue_of_alloc(void);
extern void *glue_of_alloc_zeroed(void);
extern void *glue_of_realloc(void);
extern uint32_t *glue_of_hash_seed_ref(void);
350
351
352
353
354
355
356
357

358
359
360
361
362
363
364
348
349
350
351
352
353
354

355
356
357
358
359
360
361
362







-
+








	if (base->parent != NULL) {
		struct ObjFWBase *parent;

#ifdef OF_AMIGAOS_M68K
		if (base->initialized)
			for (size_t i = 1; i <= (size_t)_EH_FRAME_BEGINS__; i++)
				__deregister_frame_info(
				libc.__deregister_frame_info(
				    (&_EH_FRAME_BEGINS__)[i]);
#endif

		parent = base->parent;

		FreeMem(base->dataSeg - DATA_OFFSET, getDataSize());
		FreeMem((char *)base - base->library.lib_NegSize,
408
409
410
411
412
413
414
415

416
417
418
419
420
421
422
406
407
408
409
410
411
412

413
414
415
416
417
418
419
420







-
+







	__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++)
		__register_frame_info((&_EH_FRAME_BEGINS__)[i],
		libc.__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"
588
589
590
591
592
593
594












595
596
597
598
599
600
601
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







+
+
+
+
+
+
+
+
+
+
+
+








void
*__deregister_frame_info(const void *begin)
{
	return libc.__deregister_frame_info(begin);
}
#endif

#ifdef OF_MORPHOS
void __register_frame(void *frame)
{
	libc.__register_frame(frame);
}

void __deregister_frame(void *frame)
{
	libc.__deregister_frame(frame);
}
#endif

int *
of_get_errno(void)
{
	return libc.get_errno();
}