Handle __CTOR_LIST__ and __DTOR_LIST__ initialization.
This commit is contained in:
parent
b1c9ff1a73
commit
7ab6f71804
|
@ -381,11 +381,13 @@ sysdep/libnix/sources/stubs/misc/__MathIeeeSingTransBase.c
|
||||||
sysdep/libnix/sources/stubs/misc/__UtilityBase.c
|
sysdep/libnix/sources/stubs/misc/__UtilityBase.c
|
||||||
sysdep/libnix/sources/stubs/misc/__cpucheck.c
|
sysdep/libnix/sources/stubs/misc/__cpucheck.c
|
||||||
sysdep/libnix/sources/stubs/misc/__flush_cache.c
|
sysdep/libnix/sources/stubs/misc/__flush_cache.c
|
||||||
|
sysdep/libnix/sources/stubs/misc/__initcpp.c
|
||||||
sysdep/libnix/sources/stubs/misc/__initlibraries.c
|
sysdep/libnix/sources/stubs/misc/__initlibraries.c
|
||||||
sysdep/libnix/sources/stubs/stubs/__exit_list__.c
|
sysdep/libnix/sources/stubs/stubs/__exit_list__.c
|
||||||
sysdep/libnix/sources/stubs/stubs/__init_list__.c
|
sysdep/libnix/sources/stubs/stubs/__init_list__.c
|
||||||
|
sysdep/libnix/sources/stubs/stubs/__ctor_list__.c
|
||||||
|
sysdep/libnix/sources/stubs/stubs/__dtor_list__.c
|
||||||
sysdep/libnix/sources/stubs/stubs/__lib_list__.c
|
sysdep/libnix/sources/stubs/stubs/__lib_list__.c
|
||||||
sysdep/libnix/sources/stubs/stubs/__main.c
|
|
||||||
sysdep/libnix/sources/stubs/stubs/__oslibversion.c
|
sysdep/libnix/sources/stubs/stubs/__oslibversion.c
|
||||||
sysdep/libnix/sources/stubs/stubs/__priority.c
|
sysdep/libnix/sources/stubs/stubs/__priority.c
|
||||||
sysdep/libnix/sources/stubs/stubs/__procname.c
|
sysdep/libnix/sources/stubs/stubs/__procname.c
|
||||||
|
|
|
@ -50,11 +50,7 @@ filelists:
|
||||||
-cd $(srcdir)/stack; $(MAKELIST) SOURCEFILES="*.c" FLDIR=$(CURDIR)/stack $(CURDIR)/stack/filelist
|
-cd $(srcdir)/stack; $(MAKELIST) SOURCEFILES="*.c" FLDIR=$(CURDIR)/stack $(CURDIR)/stack/filelist
|
||||||
-cd $(srcdir)/stubs; $(MAKE) -f $(CURDIR)/Makefile STUBDIR=$(CURDIR)/stubs libbases/dos.c; \
|
-cd $(srcdir)/stubs; $(MAKE) -f $(CURDIR)/Makefile STUBDIR=$(CURDIR)/stubs libbases/dos.c; \
|
||||||
$(MAKELIST) SOURCEFILES=" \
|
$(MAKELIST) SOURCEFILES=" \
|
||||||
libbases/*.[cSCh] misc/__DOSBase.c misc/__UtilityBase.c \
|
libbases/*.[cSCh] misc/*.c libnames/* stubs/*.[cSCh]" \
|
||||||
misc/__MathIeeeSingBasBase.c misc/__MathIeeeDoubBasBase.c \
|
|
||||||
misc/__MathIeeeSingTransBase.c misc/__MathIeeeDoubTransBase.c \
|
|
||||||
misc/__cpucheck.c misc/__flush_cache.c misc/__initlibraries.c \
|
|
||||||
libnames/* stubs/*.[cSCh]" \
|
|
||||||
FLDIR=$(CURDIR)/stubs $(CURDIR)/stubs/filelist
|
FLDIR=$(CURDIR)/stubs $(CURDIR)/stubs/filelist
|
||||||
-cd $(srcdir)/amiga; $(MAKELIST) SOURCEFILES="*/*.[cSCh]" FLDIR=$(CURDIR)/amiga $(CURDIR)/amiga/filelist
|
-cd $(srcdir)/amiga; $(MAKELIST) SOURCEFILES="*/*.[cSCh]" FLDIR=$(CURDIR)/amiga $(CURDIR)/amiga/filelist
|
||||||
|
|
||||||
|
|
|
@ -379,3 +379,6 @@ Got rid of GCC 3.x warnings about casting lvalues -- rewrote memset.
|
||||||
Removed duplicate files snprintf and vsnprintf -- they were wrong anyways.
|
Removed duplicate files snprintf and vsnprintf -- they were wrong anyways.
|
||||||
__request.c -- rewritten in C (Gunther Nikl)
|
__request.c -- rewritten in C (Gunther Nikl)
|
||||||
|
|
||||||
|
S Constructor (__CTOR_LIST__) and destructor (__DTOR_LIST__) lists from C++
|
||||||
|
are now initialized by libnix, instead of libgcc.a. To turn this feature off
|
||||||
|
use `int __initcpp = 0` in your code.
|
||||||
|
|
|
@ -129,6 +129,7 @@ _geta4: lea ___a4_init,a4
|
||||||
|
|
||||||
.long ___nocommandline
|
.long ___nocommandline
|
||||||
.long ___initlibraries
|
.long ___initlibraries
|
||||||
|
.long ___initcpp
|
||||||
.long ___cpucheck
|
.long ___cpucheck
|
||||||
|
|
||||||
.comm _SysBase,4
|
.comm _SysBase,4
|
||||||
|
|
|
@ -116,6 +116,7 @@ _geta4: rts
|
||||||
|
|
||||||
.long ___nocommandline
|
.long ___nocommandline
|
||||||
.long ___initlibraries
|
.long ___initlibraries
|
||||||
|
.long ___initcpp
|
||||||
.long ___cpucheck
|
.long ___cpucheck
|
||||||
|
|
||||||
.comm _SysBase,4
|
.comm _SysBase,4
|
||||||
|
|
|
@ -129,6 +129,7 @@ _geta4: lea ___a4_init,a4
|
||||||
|
|
||||||
.long ___nocommandline
|
.long ___nocommandline
|
||||||
.long ___initlibraries
|
.long ___initlibraries
|
||||||
|
.long ___initcpp
|
||||||
.long ___cpucheck
|
.long ___cpucheck
|
||||||
|
|
||||||
.comm _SysBase,4
|
.comm _SysBase,4
|
||||||
|
|
|
@ -166,6 +166,7 @@ oldpri: movel a3@+,d0
|
||||||
|
|
||||||
.long ___nocommandline
|
.long ___nocommandline
|
||||||
.long ___initlibraries
|
.long ___initlibraries
|
||||||
|
.long ___initcpp
|
||||||
.long ___cpucheck
|
.long ___cpucheck
|
||||||
|
|
||||||
.comm _SysBase,4
|
.comm _SysBase,4
|
||||||
|
|
|
@ -166,6 +166,7 @@ oldpri: movel a3@+,d0
|
||||||
|
|
||||||
.long ___nocommandline
|
.long ___nocommandline
|
||||||
.long ___initlibraries
|
.long ___initlibraries
|
||||||
|
.long ___initcpp
|
||||||
.long ___cpucheck
|
.long ___cpucheck
|
||||||
|
|
||||||
.comm _SysBase,4
|
.comm _SysBase,4
|
||||||
|
|
|
@ -0,0 +1,23 @@
|
||||||
|
#include "stabs.h"
|
||||||
|
|
||||||
|
typedef void (*func_ptr) (void);
|
||||||
|
|
||||||
|
extern func_ptr __CTOR_LIST__[];
|
||||||
|
extern func_ptr __DTOR_LIST__[];
|
||||||
|
|
||||||
|
void __initcpp() {
|
||||||
|
func_ptr *p0 = __CTOR_LIST__ + 1;
|
||||||
|
func_ptr *p;
|
||||||
|
for (p = p0; *p; p++);
|
||||||
|
while (p > p0)
|
||||||
|
(*--p)();
|
||||||
|
}
|
||||||
|
|
||||||
|
void __exitcpp() {
|
||||||
|
func_ptr *p = __DTOR_LIST__ + 1;
|
||||||
|
while (*p)
|
||||||
|
(*p++)();
|
||||||
|
}
|
||||||
|
|
||||||
|
ADD2INIT(__initcpp,100);
|
||||||
|
ADD2EXIT(__exitcpp,100);
|
|
@ -0,0 +1 @@
|
||||||
|
void *__CTOR_LIST__[2]={ 0,0 };
|
|
@ -0,0 +1 @@
|
||||||
|
void *__DTOR_LIST__[2]={ 0,0 };
|
|
@ -1 +0,0 @@
|
||||||
int __main(void) { return 0; }
|
|
Loading…
Reference in New Issue