- Timestamp:
- Aug 27, 2006, 4:26:13 PM (19 years ago)
- Location:
- branches/libc-0.6/src/emx
- Files:
-
- 1 added
- 10 edited
-
ChangeLog.LIBC (modified) (1 diff)
-
include/InnoTekLIBC/atexit.h (modified) (3 diffs)
-
include/InnoTekLIBC/fork.h (modified) (2 diffs)
-
src/lib/libc.def (modified) (1 diff)
-
src/lib/libc.smak (modified) (14 diffs)
-
src/lib/misc/atexit.c (modified) (7 diffs)
-
src/lib/misc/on_exit.c (modified) (2 diffs)
-
src/lib/startup/386/dll0.s (modified) (3 diffs)
-
src/lib/sys/b_processWait.c (modified) (7 diffs)
-
src/lib/sys/b_termDll.c (added)
-
src/lib/sys/libcfork.c (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/libc-0.6/src/emx/ChangeLog.LIBC
r2685 r2786 2 2 3 3 TODO: open replace on RAMFS fails with error 32! 4 5 6 7 8 9 4 10 5 11 2006-03-26: knut st. osmundsen <[email protected]> -
branches/libc-0.6/src/emx/include/InnoTekLIBC/atexit.h
r1905 r2786 37 37 __LIBC_ATEXITTYPE_ONEXIT, 38 38 /** State transition state. */ 39 __LIBC_ATEXITTYPE_TRANS 39 __LIBC_ATEXITTYPE_TRANS, 40 /** The module containing the callback was unloaded. */ 41 __LIBC_ATEXITTYPE_UNLOADED 40 42 } __LIBC_ATEXITTYPE; 41 43 … … 47 49 /** Entry type. */ 48 50 __LIBC_ATEXITTYPE volatile enmType; 51 52 53 49 54 union 50 55 { … … 92 97 * @returns Pointer to new entry. 93 98 * @returns NULL on failure. 99 100 101 94 102 */ 95 __LIBC_PATEXIT __libc_atexit_new(void); 103 __LIBC_PATEXIT __libc_atexit_new(void *pvCallback); 104 105 /** 106 * Invalidate all atexit and on_exit callback for a 107 * module which is being unloaded. 108 * 109 * @param hmod The module handle. 110 */ 111 void __libc_atexit_unload(uintptr_t hmod); 96 112 97 113 __END_DECLS -
branches/libc-0.6/src/emx/include/InnoTekLIBC/fork.h
r2320 r2786 575 575 /** Indicates that the module is an executable. */ 576 576 #define __LIBC_FORKMODULE_FLAGS_EXECUTABLE 0x00000001 577 /** Indicates that the module was dynamically loaded. */578 #define __LIBC_FORKMODULE_FLAGS_D YNAMIC0x00010000577 /** Indicates that the module . */ 578 #define __LIBC_FORKMODULE_FLAGS_D 0x00010000 579 579 /** @} */ 580 580 … … 606 606 */ 607 607 int __libc_ForkRegisterModule(__LIBC_PFORKMODULE pModule, int fExecutable); 608 609 610 611 612 613 614 615 616 617 618 619 608 620 609 621 -
branches/libc-0.6/src/emx/src/lib/libc.def
r2685 r2786 1953 1953 "__std_getdirents" @1951 1954 1954 "___libc_Back_ioFileControlStandard" @1952 1955 1956 -
branches/libc-0.6/src/emx/src/lib/libc.smak
r2495 r2786 75 75 include mklib.smak 76 76 77 77 78 78 #------------------------------------------------------ 79 79 # Now define the rules for building libc$(VERSION).dll … … 178 178 endef 179 179 $(foreach o,$(LIBC.OBJS.COMMON),$(eval $(call def_libc_omf_dep,$(o),$(patsubst %.obj,%.o,$(o))))) 180 181 180 181 182 182 # LIBC linking. 183 183 $(LIBC.DLL): $(LIBC.OBJS) $(LIBC.LIBS) $(LIBC.DEF) $(LIBC.DEPS) … … 188 188 $(filter %.lib,$(LIBC.DEPS)) \ 189 189 -L$.omf -lgcc -lgcc_eh $(LIBC.STUBARG) 190 ifeq ($(MODE),opt) 190 ifeq ($(MODE),opt) 191 191 cp $@ $(@:.dll=.dbg) 192 192 lxlite $(LXLITE.FLAGS) $(subst /,\\,$@) … … 194 194 195 195 # LIBC .def file 196 $(LIBC.DEF): $(LIBC.LIBS) src/lib/libc.def 196 $(LIBC.DEF): $(LIBC.LIBS) src/lib/libc.def 197 197 $(call RM,$@) 198 198 @$(call FECHO,$@,LIBRARY libc$(VH)$(VM)$(VL) INITINSTANCE TERMINSTANCE) … … 239 239 $(filter %.lib,$(LIBC.LOG.DEPS)) \ 240 240 -L$.omf -lgcc -lgcc_eh $(LIBC.STUBARG) 241 echo $@ 241 echo $@ 242 242 243 243 # LIBC.PRF - Profiling version of libcXY.dll … … 249 249 $(filter %.lib,$(LIBC.PRF.DEPS)) \ 250 250 -L$.omf-prof -L$.omf -lgcc -lgcc_eh $(LIBC.STUBARG) 251 echo $@ 251 echo $@ 252 252 253 253 # LIBC.PREF .def file … … 260 260 @$(call FECHO,$@,"") 261 261 262 262 263 263 # LIBC.ELH - Electric Heap version of libcXY.dll 264 264 $(LIBC.ELH.DLL): $(LIBC.ELH.OBJS) $(LIBC.ELH.LIBS) $(LIBC.ELH.DEF) $(LIBC.ELH.DEPS) … … 269 269 $(filter %.lib,$(LIBC.ELH.DEPS)) \ 270 270 -L$.omf -lgcc -lgcc_eh $(LIBC.STUBARG) 271 echo $@ 271 echo $@ 272 272 273 273 # LIBC.ELH .def file … … 280 280 @$(call FECHO,$@,"") 281 281 @$(call FECHO,$@,"IMPORTS"); 282 @$(call FECHO,$@," kHeapDbgException = KLIBDBG.kHeapDbgException") 282 @$(call FECHO,$@," kHeapDbgException = KLIBDBG.kHeapDbgException") 283 283 @$(call FECHO,$@," __std_calloc = KLIBDBG._gcc__std_calloc") 284 284 @$(call FECHO,$@," __um_default_alloc = KLIBDBG._gcc__um_default_alloc") … … 344 344 @$(call FECHO,$@," __um_tiled_heap = KLIBDBG._gcc__um_tiled_heap") 345 345 346 346 347 347 # Put libc into the big picture. (semihacks) 348 348 DO.HELP.MODULES += $(call ECHO, libc-dll - The dynamic C library (.dll))$(NL) … … 380 380 if test -f $@; then rm -f $@ || (unlock $(subst /,\\,$@) && rm -f $@); fi 381 381 cp $< $@ 382 382 383 383 $(INS)lib/$(notdir $(LIBC.DLL:.dll=.map)): $(LIBC.DLL:.dll=.map) 384 384 $(call CP,$<,$@) 385 385 386 386 $(INS)lib/$(notdir $(LIBC.LOG.DLL)): $(LIBC.LOG.DLL) 387 387 $(call CP,$<,$@) 388 388 $(INS)lib/$(notdir $(LIBC.LOG.DLL).map): $(LIBC.LOG.DLL).map 389 389 $(call CP,$<,$@) 390 390 391 391 $(INS)lib/$(notdir $(LIBC.PRF.DLL)): $(LIBC.PRF.DLL) 392 392 $(call CP,$<,$@) … … 440 440 $.omf-prof/src/lib/startup/dllinit.obj: $.aout-prof/src/lib/startup/dllinit.o 441 441 $(DO.EMXOMF) 442 442 443 443 # Forget temporary variables 444 444 include comend.smak … … 452 452 # 453 453 # Forwarder DLLs for backward compatibility. 454 # 454 # 455 455 $.omf/fwdstub.obj: src/lib/fwdstub.asm 456 456 $(call DO.COMPILE.asm) 457 458 ## libc06b4 457 458 ## libc06b4 459 459 #$.omf/libc06b4.dll: src/lib/libc06b4.def $.omf/fwdstub.obj $.omf/libc_dll.lib 460 460 # gcc -Zomf -o $@ -nostdlib -Zdll $^ … … 464 464 #libc-dll: $.omf/libc06b4.dll 465 465 466 ## libc06b5 466 ## libc06b5 467 467 #$.omf/libc06b5.dll: src/lib/libc06b5.def $.omf/fwdstub.obj $.omf/libc_dll.lib 468 468 # gcc -Zomf -o $@ -nostdlib -Zdll $^ -
branches/libc-0.6/src/emx/src/lib/misc/atexit.c
r2254 r2786 4 4 * LIBC atexit(). 5 5 * 6 * Copyright (c) 2005 knut st. osmundsen <[email protected]>6 * Copyright (c) 2005 knut st. osmundsen <[email protected]> 7 7 * 8 8 * … … 30 30 *******************************************************************************/ 31 31 #include "libc-alias.h" 32 33 34 35 36 37 32 38 #include <stdlib.h> 33 39 #include <InnoTekLIBC/atexit.h> 34 #include < 386/builtin.h>40 #include </builtin.h> 35 41 #include <emx/umalloc.h> 36 42 #define __LIBC_LOG_GROUP __LIBC_LOG_GRP_INITTERM … … 41 47 { 42 48 LIBCLOG_ENTER("pfnCallback=%p\n", (void *)pfnCallback); 43 __LIBC_PATEXIT pCur = __libc_atexit_new( );49 __LIBC_PATEXIT pCur = __libc_atexit_new(); 44 50 if (pCur) 45 51 { … … 57 63 * @returns Pointer to new entry. 58 64 * @returns NULL on failure. 65 66 67 59 68 */ 60 __LIBC_PATEXIT __libc_atexit_new(void )69 __LIBC_PATEXIT __libc_atexit_new(void) 61 70 { 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 62 88 /* 63 89 * Search existing chunks. … … 72 98 if (__atomic_cmpxchg32(&pChunk->c, i + 1, i)) 73 99 { 100 74 101 pChunk->a[i].enmType = __LIBC_ATEXITTYPE_TRANS; 75 102 return &pChunk->a[i]; … … 84 111 if (!pChunk) 85 112 return NULL; 113 86 114 pChunk->c = 1; 115 87 116 pChunk->a[0].enmType = __LIBC_ATEXITTYPE_TRANS; 88 117 do … … 94 123 } 95 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 -
branches/libc-0.6/src/emx/src/lib/misc/on_exit.c
r2254 r2786 4 4 * LIBC on_exit(). 5 5 * 6 * Copyright (c) 2005 knut st. osmundsen <[email protected]>6 * Copyright (c) 2005 knut st. osmundsen <[email protected]> 7 7 * 8 8 * … … 39 39 { 40 40 LIBCLOG_ENTER("pfnCallback=%p pvUser=%p\n", (void *)pfnCallback, pvUser); 41 __LIBC_PATEXIT pCur = __libc_atexit_new( );41 __LIBC_PATEXIT pCur = __libc_atexit_new(); 42 42 if (pCur) 43 43 { -
branches/libc-0.6/src/emx/src/lib/startup/386/dll0.s
r2289 r2786 50 50 #endif 51 51 52 53 54 55 56 57 58 59 60 52 61 __text: 53 62 cmpl $0, 8(%esp) 54 jz do_common_init 55 jmp do_initterm 63 je do_init 64 cmpl $1, 8(%esp) 65 je do_term 66 jmp _DLL_InitTerm 67 56 68 57 69 /* 58 * Nonstandard: we're doing some early initializations.70 * . 59 71 */ 60 do_ common_init:72 do_init: 61 73 #if !defined(NOFORK) && !defined(NOUNIX) 62 74 pushl $0 … … 65 77 addl $8, %esp 66 78 cmpl $0, %eax 67 je do_init 68 jg do_ fork69 70 /* return failure (eax < 0). */ 79 je do_init 80 jg do_ 81 /* else: eax < 0 - failure. */ 82 do_return_failure: 71 83 xorl %eax, %eax 72 84 ret 73 74 /* return success - we're forking; no init. */ 75 do_fork: 85 do_return_success: 76 86 xorl %eax, %eax 77 87 inc %al … … 79 89 80 90 /* normal dll init. */ 81 do_init :91 do_init: 82 92 #endif 93 83 94 pushl 4(%esp) 84 pushl $(FLAG_HIGHMEM + FLAG_NOUNIX )95 pushl $(FLAG_HIGHMEM + FLAG_NOUNIX) 85 96 call ___init_dll 86 97 add $8, %esp 87 98 orl %eax, %eax 88 jz do_initterm 99 jnz do_return_failure 100 101 /* call _DLL_InitTerm */ 102 cld 103 pushl 8(%esp) 104 pushl 8(%esp) 105 call _DLL_InitTerm 106 add $8, %esp 107 orl %eax, %eax 108 jnz do_return_success 109 110 /* _DLL_InitTerm failed, undo the module registration. */ 111 #if !defined(NOFORK) && !defined(NOUNIX) 112 pushl $ForkModule 113 call ___libc_ForkRegisterModule 114 addl $4, %esp 115 #endif 116 jmp do_return_failure; 117 118 89 119 /* 90 * __init_dll() failed - fail the dll loading.120 * . 91 121 */ 92 xorl %eax, %eax 122 do_term: 123 /* do init term first */ 124 cld 125 pushl 8(%esp) 126 pushl 8(%esp) 127 call _DLL_InitTerm 128 add $8, %esp 129 orl %eax, %eax 130 jnz do_term_dll 93 131 ret 94 132 95 /* 96 * Standard initialization. 97 */ 98 do_initterm: 99 cld 100 jmp _DLL_InitTerm 133 do_term_dll: 134 /* call __libc_Back_termDll() */ 135 pushl 4(%esp) 136 pushl $(FLAG_HIGHMEM + FLAG_NOUNIX + FLAG_NOFORK) 137 call ___libc_Back_termDll 138 add $8, %esp 139 140 /* call __libc_ForkDeregisterModule */ 141 #if !defined(NOFORK) && !defined(NOUNIX) 142 pushl $ForkModule 143 call ___libc_ForkDeregisterModule 144 addl $4, %esp 145 #endif 146 jmp do_return_success 101 147 102 148 -
branches/libc-0.6/src/emx/src/lib/sys/b_processWait.c
r2254 r2786 124 124 /** Number of known child processes. */ 125 125 static volatile unsigned gcChildren; 126 /** Total number of born child processes. */126 /** Total number of born child processes. */ 127 127 static volatile unsigned gcBirths; 128 128 /** Total number of died child processes. */ … … 171 171 * Create the fmutex. 172 172 */ 173 _fmutex_checked_create (&gmtxWait, 0);173 _fmutex_checked_create); 174 174 int rc = DosCreateEventSemEx(NULL, (PHEV)&ghevWait, 0, TRUE); 175 175 if (rc) … … 194 194 void __libc_back_processWaitNotifyTerm(void) 195 195 { 196 197 198 196 199 if (gtidThread) 197 200 { 198 /* kill the thread - this is probably a waste of time in the exitlist handler... */199 __atomic_xchg(&gfTerminate, 1);200 201 DosKillThread(gtidThread); 201 202 gtidThread = 0; … … 223 224 * Kill all known decendants. 224 225 */ 226 225 227 PWAITCHILD pChild = gpChildrenHead; 226 228 if (pChild) 227 229 { 230 231 232 228 233 /* 229 234 * Kill the process tree so we don't end up having childrens … … 268 273 int rc = _fmutex_request(&gmtxWait, fNoInterrupts ? _FMR_IGNINT : 0); 269 274 if (!rc) 270 {271 ULONG cIgnore = 0;272 DosEnterMustComplete(&cIgnore);273 275 return 0; 274 }275 276 LIBC_ASSERTM_FAILED("_fmutex_request -> %d\n", rc); 276 277 return -__libc_native2errno(rc); … … 284 285 int rc = _fmutex_release(&gmtxWait); 285 286 LIBC_ASSERTM(!rc, "_fmutex_release -> %d\n", rc); 286 ULONG cIgnore = 0;287 DosExitMustComplete(&cIgnore);288 287 rc = rc; 289 288 } … … 652 651 if (!gtidThread) 653 652 { 653 654 654 655 /* 655 656 * Create the internal thread for dealing with waiting. -
branches/libc-0.6/src/emx/src/lib/sys/libcfork.c
r2289 r2786 314 314 315 315 /* 316 * Install exceptionhandler.316 * Install exceptionhandler. 317 317 */ 318 318 DosGetInfoBlocks(&pTib, &pPib); … … 346 346 347 347 /* 348 * Check if dynamically loaded or not.349 */350 /** @todo! */351 352 /*353 348 * Register the module. 354 */ 349 * (We're hoping for OS/2 to indirectly serialize this... not properly verified yet.) 350 */ 351 if (pModule->fFlags & __LIBC_FORKMODULE_FLAGS_DEREGISTERED) 352 LIBCLOG_MSG("__LIBC_FORKMODULE_FLAGS_DEREGISTERED!\n"); 353 pModule->fFlags &= ~__LIBC_FORKMODULE_FLAGS_DEREGISTERED; 355 354 pModule->pNext = NULL; 356 355 if (pProcess->pvModuleHead) … … 433 432 pTib->tib_pexchain = XcptRegRec.prev_structure; 434 433 LIBCLOG_RETURN_INT(1); 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 435 504 } 436 505 … … 1280 1349 /* 1281 1350 * Open and process the buffer on first call. 1351 1352 1353 1354 1355 1356 1282 1357 */ 1283 1358 if (pForkHandle->enmStage == __LIBC_FORK_STAGE_EXEC) … … 1289 1364 LIBCLOG_RETURN_INT(rc); 1290 1365 } 1366 1291 1367 rc = forkBthBufferProcess(pForkHandle, __LIBC_FORK_CTX_CHILD, NULL); 1292 1368 if (rc < 0) … … 1295 1371 LIBCLOG_RETURN_INT(rc); 1296 1372 } 1297 1298 /* next stage */1299 pForkHandle->enmStage = __LIBC_FORK_STAGE_INIT_CHILD;1300 1373 } 1301 1374
Note:
See TracChangeset
for help on using the changeset viewer.
