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/__cpucheck.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/stubs/__exit_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/__main.c
|
||||
sysdep/libnix/sources/stubs/stubs/__oslibversion.c
|
||||
sysdep/libnix/sources/stubs/stubs/__priority.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)/stubs; $(MAKE) -f $(CURDIR)/Makefile STUBDIR=$(CURDIR)/stubs libbases/dos.c; \
|
||||
$(MAKELIST) SOURCEFILES=" \
|
||||
libbases/*.[cSCh] misc/__DOSBase.c misc/__UtilityBase.c \
|
||||
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]" \
|
||||
libbases/*.[cSCh] misc/*.c libnames/* stubs/*.[cSCh]" \
|
||||
FLDIR=$(CURDIR)/stubs $(CURDIR)/stubs/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.
|
||||
__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 ___initlibraries
|
||||
.long ___initcpp
|
||||
.long ___cpucheck
|
||||
|
||||
.comm _SysBase,4
|
||||
|
|
|
@ -116,6 +116,7 @@ _geta4: rts
|
|||
|
||||
.long ___nocommandline
|
||||
.long ___initlibraries
|
||||
.long ___initcpp
|
||||
.long ___cpucheck
|
||||
|
||||
.comm _SysBase,4
|
||||
|
|
|
@ -129,6 +129,7 @@ _geta4: lea ___a4_init,a4
|
|||
|
||||
.long ___nocommandline
|
||||
.long ___initlibraries
|
||||
.long ___initcpp
|
||||
.long ___cpucheck
|
||||
|
||||
.comm _SysBase,4
|
||||
|
|
|
@ -166,6 +166,7 @@ oldpri: movel a3@+,d0
|
|||
|
||||
.long ___nocommandline
|
||||
.long ___initlibraries
|
||||
.long ___initcpp
|
||||
.long ___cpucheck
|
||||
|
||||
.comm _SysBase,4
|
||||
|
|
|
@ -166,6 +166,7 @@ oldpri: movel a3@+,d0
|
|||
|
||||
.long ___nocommandline
|
||||
.long ___initlibraries
|
||||
.long ___initcpp
|
||||
.long ___cpucheck
|
||||
|
||||
.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