Add pragma to install function as global C runtime ctor or dtor.

DMD has the obscure functionality to install functions starting with
_STI_ as global ctors and funtions starting with _STD_ as global
dtors. IMHO a pragma is a better way to specify the behaviour.

This commit adds pragma(LDC_global_crt_ctor) and
pragma(LDC_global_crt_dtor). If the pragma is specified on a function
or static method then an entry is made in the corresponding list. E.g.
in monitor_.d:

    extern (C) {
        #pragma(LDC_global_crt_ctor)
        void _STI_monitor_staticctor()
        {
            // ...
        }
    }

This works on Linux without problems. On Windows with MS C Runtime
ctors work always but dtors are invoked only if linked against the
static C runtime. Dtors on Windows require at least LLVM 3.2.
This commit is contained in:
kai
2012-09-12 17:59:09 +02:00
parent fd0021c6c2
commit 4ea7e8dbf8
7 changed files with 81 additions and 0 deletions

View File

@@ -907,6 +907,7 @@ struct FuncDeclaration : Declaration
std::set<VarDeclaration*> nestedVars;
std::string intrinsicName;
uint32_t priority;
bool isIntrinsic();
bool isVaIntrinsic();