Ignore:
Timestamp:
Dec 18, 2011, 10:28:22 PM (14 years ago)
Author:
dmik
Message:

Merge branch gcc-kmk to trunk.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk

    • Property svn:ignore
      •  

        old new  
        1 bin
        2 Makefile.inc
         1env.cmd
         2LocalConfig.kmk
    • Property svn:mergeinfo set to
      /branches/gcc-kmkmergedeligible
  • trunk/src/odincrt/initterm.cpp

    r21538 r21916  
    11/*
    2  * DLL entry point
     2 * ODINCRT DLL entry point
    33 *
    44 * Copyright 1998 Sander van Leeuwen
    55 * Copyright 1998 Peter Fitzsimmons
    66 *
    7  *
    87 * Project Odin Software License can be found in LICENSE.TXT
    9  *
    108 */
    119
     
    1412#define  INCL_DOSERRORS
    1513#include <os2wrap.h> // Odin32 OS/2 api wrappers
    16 #include <stdlib.h>
    17 #include <stdio.h>
    18 #include <string.h>
    19 #include <odin.h>
    20 #include <misc.h>
    2114#include <exitlist.h>
    2215#include <initdll.h>
    2316
    24 #ifdef __IBMCPP__
    25 
    26 static void APIENTRY cleanup(ULONG reason);
    27 
    28 /*
    29  * _DLL_InitTerm is the function that gets called by the operating system
    30  * loader when it loads and frees this DLL for each process that accesses
    31  * this DLL.  However, it only gets called the first time the DLL is loaded
    32  * and the last time it is freed for a particular process.  The system
    33  * linkage convention MUST be used because the operating system loader is
    34  * calling this function.
    35  *
    36  * If ulFlag is zero then the DLL is being loaded so initialization should
    37  * be performed.  If ulFlag is 1 then the DLL is being freed so
    38  * termination should be performed.
    39  *
    40  * A non-zero value must be returned to indicate success.
    41  */
    42 unsigned long SYSTEM _DLL_InitTerm(unsigned long hModule, unsigned long ulFlag)
     17ULONG SYSTEM DLL_Init(ULONG hModule)
    4318{
    44     APIRET rc;
    45 
    46     switch (ulFlag)
    47     {
    48     case 0:
    49     {
    5019#ifdef WITH_KLIB
    51         /*
    52          * We need to reserve memory for the executable image
    53          * before initiating any heaps. Lets do reserve 32MBs
    54          */
    55         PVOID pvReserved = NULL;
    56         DosAllocMem(&pvReserved, 32*1024*1024, PAG_READ);
    57 #endif
    58         /* initialize C and C++ runtime */
    59         if (_CRT_init() == -1)
    60             return 0UL;
    61         ctordtorInit();
    62 
    63         /*
    64          * Register an exit list routine to clean up runtime at termination.
    65          * We can't simply do it at DLL unload time because this is forbidden
    66          * for VAC runtime Odin runtime is based on (see CPPLIB.INF from VAC
    67          * for details).
    68          */
    69         rc = DosExitList(EXITLIST_ODINCRT|EXLST_ADD, cleanup);
    70         if(rc)
    71             return 0UL;
    72 #if 1
    73         /*
    74          * Experimental console hack. Sets apptype to PM anyhow.
    75          * First Dll to be initiated should now allways be OdinCrt!
    76          * So include odincrt first!
    77          */
    78         PPIB pPIB;
    79         PTIB pTIB;
    80         rc = DosGetInfoBlocks(&pTIB, &pPIB);
    81         if (rc != NO_ERROR)
    82             return 0UL;
    83         pPIB->pib_ultype = 3;
     20    /*
     21     * We need to reserve memory for the executable image
     22     * before initiating any heaps. Lets do reserve 32MBs
     23     */
     24    PVOID pvReserved = NULL;
     25    DosAllocMem(&pvReserved, 32*1024*1024, PAG_READ);
    8426#endif
    8527
    86 #ifdef WITH_KLIB
    87         /* cleanup - hacking is done */
    88         DosFreeMem(pvReserved);
    89 #endif
    90         break;
    91     }
    92     case 1:
    93         break;
    94     default:
    95         return 0UL;
    96     }
     28    if (DLL_InitDefault(hModule) == -1)
     29        return -1;
    9730
    98     /* success */
    99     return 1UL;
    100 }
    101 
    102 static void APIENTRY cleanup(ULONG /*ulReason*/)
    103 {
    104     /* cleanup C++ and C runtime */
    105     ctordtorTerm();
    106     _CRT_term();
    107     DosExitList(EXLST_EXIT, cleanup);
    108     return ;
    109 }
    110 
    111 
    112 #elif defined(__WATCOM_CPLUSPLUS__)
    113 
    114 int __dll_initialize(unsigned long hModule, unsigned long ulFlag)
    115 {
    11631#if 1
    11732    /*
     
    12035     * So include odincrt first!
    12136     */
    122     APIRET rc;
    12337    PPIB pPIB;
    12438    PTIB pTIB;
    125     rc = DosGetInfoBlocks(&pTIB, &pPIB);
     39    APIRET rc = DosGetInfoBlocks(&pTIB, &pPIB);
    12640    if (rc != NO_ERROR)
    127         return 0UL;
     41        return -1;
    12842    pPIB->pib_ultype = 3;
    12943#endif
    130     return 1;
     44
     45#ifdef WITH_KLIB
     46    /* cleanup - hacking is done */
     47    DosFreeMem(pvReserved);
     48#endif
     49
     50    return EXITLIST_ODINCRT;
    13151}
    13252
    133 int __dll_terminate(unsigned long hModule, unsigned long ulFlag)
     53void SYSTEM DLL_Term(ULONG hModule)
    13454{
    135     return 1;
     55    DLL_TermDefault(hModule);
    13656}
    13757
    138 #else
    139 #error message("compiler is not supported");
    140 #endif
    141 
Note: See TracChangeset for help on using the changeset viewer.