diff --git a/src/ld65/exports.c b/src/ld65/exports.c index 1b58fb84a..ae72b280f 100644 --- a/src/ld65/exports.c +++ b/src/ld65/exports.c @@ -48,6 +48,7 @@ #include "global.h" #include "error.h" #include "fileio.h" +#include "initfunc.h" #include "objdata.h" #include "expr.h" #include "exports.h" @@ -75,13 +76,10 @@ static Export** ExpPool = 0; /* Exports array */ /* Defines for the flags in Export */ #define EXP_USERMARK 0x0001 -/* List of all exports that are also initializers */ -static Collection Initializers = STATIC_COLLECTION_INITIALIZER; - /*****************************************************************************/ -/* Import handling */ +/* Import handling */ /*****************************************************************************/ @@ -233,7 +231,7 @@ void InsertExport (Export* E) /* If this is an initializer, insert it into the initializer list */ if (IS_EXP_INIT (E->Type)) { - CollAppend (&Initializers, E); + AddInitFunc (E); } /* Create a hash value for the given name */ @@ -265,7 +263,7 @@ void InsertExport (Export* E) ImpOpen -= E->ImpCount; /* Decrease open imports now */ xfree (L); /* We must run through the import list and change the - * export pointer now. + * export pointer now. */ Imp = E->ImpList; while (Imp) { diff --git a/src/ld65/initfunc.c b/src/ld65/initfunc.c new file mode 100644 index 000000000..60ea52805 --- /dev/null +++ b/src/ld65/initfunc.c @@ -0,0 +1,79 @@ +/*****************************************************************************/ +/* */ +/* initfunc.c */ +/* */ +/* Init/cleanup function handling */ +/* */ +/* */ +/* */ +/* (C) 2000 Ullrich von Bassewitz */ +/* Wacholderweg 14 */ +/* D-70597 Stuttgart */ +/* EMail: uz@musoftware.de */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +/* common */ +#include "coll.h" + +/* ld65 */ +#include "exports.h" +#include "segments.h" +#include "initfunc.h" + + + +/*****************************************************************************/ +/* Data */ +/*****************************************************************************/ + + + +/* List of all exports that are also initializers/cleanup functions */ +static Collection InitFunctions = STATIC_COLLECTION_INITIALIZER; +static Collection CleanupFunctions = STATIC_COLLECTION_INITIALIZER; + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +void AddInitFunc (Export* E) +/* Add the given export to the list of initializers */ +{ + CollAppend (&InitFunctions, E); +} + + + +void AddCleanupFunc (Export* E) +/* Add the given export to the list of cleanup functions */ +{ + CollAppend (&CleanupFunctions, E); +} + + + diff --git a/src/ld65/initfunc.h b/src/ld65/initfunc.h new file mode 100644 index 000000000..fef48e11a --- /dev/null +++ b/src/ld65/initfunc.h @@ -0,0 +1,71 @@ +/*****************************************************************************/ +/* */ +/* initfunc.h */ +/* */ +/* Init/cleanup function handling */ +/* */ +/* */ +/* */ +/* (C) 2000 Ullrich von Bassewitz */ +/* Wacholderweg 14 */ +/* D-70597 Stuttgart */ +/* EMail: uz@musoftware.de */ +/* */ +/* */ +/* This software is provided 'as-is', without any expressed or implied */ +/* warranty. In no event will the authors be held liable for any damages */ +/* arising from the use of this software. */ +/* */ +/* Permission is granted to anyone to use this software for any purpose, */ +/* including commercial applications, and to alter it and redistribute it */ +/* freely, subject to the following restrictions: */ +/* */ +/* 1. The origin of this software must not be misrepresented; you must not */ +/* claim that you wrote the original software. If you use this software */ +/* in a product, an acknowledgment in the product documentation would be */ +/* appreciated but is not required. */ +/* 2. Altered source versions must be plainly marked as such, and must not */ +/* be misrepresented as being the original software. */ +/* 3. This notice may not be removed or altered from any source */ +/* distribution. */ +/* */ +/*****************************************************************************/ + + + +#ifndef INITFUNC_H +#define INITFUNC_H + + + +/*****************************************************************************/ +/* Forwards */ +/*****************************************************************************/ + + + +struct Export; + + + +/*****************************************************************************/ +/* Code */ +/*****************************************************************************/ + + + +void AddInitFunc (struct Export* E); +/* Add the given export to the list of initializers */ + +void AddCleanupFunc (struct Export* E); +/* Add the given export to the list of cleanup functions */ + + + +/* End of initfunc.h */ + +#endif + + + + diff --git a/src/ld65/make/gcc.mak b/src/ld65/make/gcc.mak index 8db28cb6d..62cab1506 100644 --- a/src/ld65/make/gcc.mak +++ b/src/ld65/make/gcc.mak @@ -28,6 +28,7 @@ OBJS = bin.o \ fileio.o \ fragment.o \ global.o \ + initfunc.o \ library.o \ main.o \ mapfile.o \