Changeset 21785 for branches/gcc-kmk/src


Ignore:
Timestamp:
Nov 3, 2011, 1:32:50 PM (14 years ago)
Author:
dmik
Message:

Build ODINCRT DLL.

Location:
branches/gcc-kmk/src
Files:
3 added
2 edited
2 copied
3 moved

Legend:

Unmodified
Added
Removed
  • branches/gcc-kmk/src/Makefile.kmk

    r21779 r21785  
    1313include $(PATH_SUB_CURRENT)/guidlib/Makefile.kmk
    1414include $(PATH_SUB_CURRENT)/win32k/Makefile.kmk
     15include $(PATH_SUB_CURRENT)/odincrt/Makefile.kmk
    1516include $(PATH_SUB_CURRENT)/kernel32/Makefile.kmk
    1617include $(PATH_SUB_CURRENT)/user32/Makefile.kmk
  • branches/gcc-kmk/src/odincrt/initterm.cpp

    r21538 r21785  
    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>
    21 #include <exitlist.h>
    2214#include <initdll.h>
    2315
    24 #ifdef __IBMCPP__
     16ULONG SYSTEM DLL_Init(ULONG hModule)
     17{
     18#ifdef WITH_KLIB
     19    /*
     20     * We need to reserve memory for the executable image
     21     * before initiating any heaps. Lets do reserve 32MBs
     22     */
     23    PVOID pvReserved = NULL;
     24    DosAllocMem(&pvReserved, 32*1024*1024, PAG_READ);
     25#endif
    2526
    26 static void APIENTRY cleanup(ULONG reason);
     27    if (DLL_InitDefault(hModule) == -1)
     28        return -1;
    2729
    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)
    43 {
    44     APIRET rc;
    45 
    46     switch (ulFlag)
    47     {
    48     case 0:
    49     {
    50 #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;
    7230#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;
     31    /*
     32     * Experimental console hack. Sets apptype to PM anyhow.
     33     * First Dll to be initiated should now allways be OdinCrt!
     34     * So include odincrt first!
     35     */
     36    PPIB pPIB;
     37    PTIB pTIB;
     38    APIRET rc = DosGetInfoBlocks(&pTIB, &pPIB);
     39    if (rc != NO_ERROR)
     40        return 0UL;
     41    pPIB->pib_ultype = 3;
    8442#endif
    8543
     
    8846        DosFreeMem(pvReserved);
    8947#endif
    90         break;
    91     }
    92     case 1:
    93         break;
    94     default:
    95         return 0UL;
    96     }
    97 
    98     /* success */
    99     return 1UL;
    10048}
    10149
    102 static void APIENTRY cleanup(ULONG /*ulReason*/)
     50void SYSTEM DLL_Term(ULONG hModule)
    10351{
    104     /* cleanup C++ and C runtime */
    105     ctordtorTerm();
    106     _CRT_term();
    107     DosExitList(EXLST_EXIT, cleanup);
    108     return ;
     52    DLL_TermDefault(hModule);
    10953}
    11054
    111 
    112 #elif defined(__WATCOM_CPLUSPLUS__)
    113 
    114 int __dll_initialize(unsigned long hModule, unsigned long ulFlag)
    115 {
    116 #if 1
    117     /*
    118      * Experimental console hack. Sets apptype to PM anyhow.
    119      * First Dll to be initiated should now allways be OdinCrt!
    120      * So include odincrt first!
    121      */
    122     APIRET rc;
    123     PPIB pPIB;
    124     PTIB pTIB;
    125     rc = DosGetInfoBlocks(&pTIB, &pPIB);
    126     if (rc != NO_ERROR)
    127         return 0UL;
    128     pPIB->pib_ultype = 3;
    129 #endif
    130     return 1;
    131 }
    132 
    133 int __dll_terminate(unsigned long hModule, unsigned long ulFlag)
    134 {
    135     return 1;
    136 }
    137 
    138 #else
    139 #error message("compiler is not supported");
    140 #endif
    141 
Note: See TracChangeset for help on using the changeset viewer.