Changeset 21785 for branches/gcc-kmk/src
- Timestamp:
- Nov 3, 2011, 1:32:50 PM (14 years ago)
- 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 13 13 include $(PATH_SUB_CURRENT)/guidlib/Makefile.kmk 14 14 include $(PATH_SUB_CURRENT)/win32k/Makefile.kmk 15 include $(PATH_SUB_CURRENT)/odincrt/Makefile.kmk 15 16 include $(PATH_SUB_CURRENT)/kernel32/Makefile.kmk 16 17 include $(PATH_SUB_CURRENT)/user32/Makefile.kmk -
branches/gcc-kmk/src/odincrt/initterm.cpp
r21538 r21785 1 1 /* 2 * DLL entry point2 * ODINCRT DLL entry point 3 3 * 4 4 * Copyright 1998 Sander van Leeuwen 5 5 * Copyright 1998 Peter Fitzsimmons 6 6 * 7 *8 7 * Project Odin Software License can be found in LICENSE.TXT 9 *10 8 */ 11 9 … … 14 12 #define INCL_DOSERRORS 15 13 #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>22 14 #include <initdll.h> 23 15 24 #ifdef __IBMCPP__ 16 ULONG 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 25 26 26 static void APIENTRY cleanup(ULONG reason); 27 if (DLL_InitDefault(hModule) == -1) 28 return -1; 27 29 28 /*29 * _DLL_InitTerm is the function that gets called by the operating system30 * loader when it loads and frees this DLL for each process that accesses31 * this DLL. However, it only gets called the first time the DLL is loaded32 * and the last time it is freed for a particular process. The system33 * linkage convention MUST be used because the operating system loader is34 * calling this function.35 *36 * If ulFlag is zero then the DLL is being loaded so initialization should37 * be performed. If ulFlag is 1 then the DLL is being freed so38 * 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_KLIB51 /*52 * We need to reserve memory for the executable image53 * before initiating any heaps. Lets do reserve 32MBs54 */55 PVOID pvReserved = NULL;56 DosAllocMem(&pvReserved, 32*1024*1024, PAG_READ);57 #endif58 /* 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 forbidden66 * for VAC runtime Odin runtime is based on (see CPPLIB.INF from VAC67 * for details).68 */69 rc = DosExitList(EXITLIST_ODINCRT|EXLST_ADD, cleanup);70 if(rc)71 return 0UL;72 30 #if 1 73 74 75 76 77 78 79 80 81 82 83 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; 84 42 #endif 85 43 … … 88 46 DosFreeMem(pvReserved); 89 47 #endif 90 break;91 }92 case 1:93 break;94 default:95 return 0UL;96 }97 98 /* success */99 return 1UL;100 48 } 101 49 102 static void APIENTRY cleanup(ULONG /*ulReason*/)50 void SYSTEM DLL_Term(ULONG hModule) 103 51 { 104 /* cleanup C++ and C runtime */ 105 ctordtorTerm(); 106 _CRT_term(); 107 DosExitList(EXLST_EXIT, cleanup); 108 return ; 52 DLL_TermDefault(hModule); 109 53 } 110 54 111 112 #elif defined(__WATCOM_CPLUSPLUS__)113 114 int __dll_initialize(unsigned long hModule, unsigned long ulFlag)115 {116 #if 1117 /*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 #endif130 return 1;131 }132 133 int __dll_terminate(unsigned long hModule, unsigned long ulFlag)134 {135 return 1;136 }137 138 #else139 #error message("compiler is not supported");140 #endif141
Note:
See TracChangeset
for help on using the changeset viewer.