ObjectFileLoader.st
changeset 771 cd90f9bcefe3
parent 770 86889dddf1a2
child 778 91628946d932
equal deleted inserted replaced
770:86889dddf1a2 771:cd90f9bcefe3
   280 
   280 
   281     OperatingSystem isMSDOSlike ifTrue:[
   281     OperatingSystem isMSDOSlike ifTrue:[
   282         "/ default setup for msc
   282         "/ default setup for msc
   283         OperatingSystem getCCDefine ='__BORLANDC__' ifTrue:[
   283         OperatingSystem getCCDefine ='__BORLANDC__' ifTrue:[
   284             LinkCommand isNil ifTrue:[
   284             LinkCommand isNil ifTrue:[
   285                 LinkCommand := 'tlink32'
   285                 LinkCommand := 'tlink32'.
       
   286                 LinkCommand := 'ilink32'.
   286             ].
   287             ].
   287             LinkArgs isNil ifTrue:[
   288             LinkArgs isNil ifTrue:[
   288                 LinkArgs := '-L..\libbc -L\Programme\Borland\CBuilder3\lib -c -ap -Tpd -s -Gi -v -w-dup ..\libbc\librun.lib'.
   289                 LinkArgs := '-L..\libbc -L\Programme\Borland\CBuilder3\lib -c -ap -Tpd -s -Gi -v -w-dup ..\libbc\librun.lib'.
   289                 LinkArgs := '-L..\libbc -L\Programme\Borland\CBuilder3\lib -r -c -ap -Tpd -Gi -w-dup ..\libbc\librun.lib'.
   290                 LinkArgs := '-L..\libbc -L\Programme\Borland\CBuilder3\lib -r -c -ap -Tpd -Gi -w-dup'.
   290             ].
   291             ].
   291         ] ifFalse:[
   292         ] ifFalse:[
   292             LinkCommand isNil ifTrue:[
   293             LinkCommand isNil ifTrue:[
   293                 LinkCommand := 'link'
   294                 LinkCommand := 'link'
   294             ].
   295             ].
   365 
   366 
   366     "
   367     "
   367      ObjectFileLoader initialize
   368      ObjectFileLoader initialize
   368     "
   369     "
   369 
   370 
   370     "Modified: / 3.9.1998 / 15:47:29 / cg"
   371     "Modified: / 4.9.1998 / 01:59:42 / cg"
   371 !
   372 !
   372 
   373 
   373 lastError
   374 lastError
   374     ^ LastError
   375     ^ LastError
   375 !
   376 !
   488 linkArgs:anArgString
   489 linkArgs:anArgString
   489     LinkArgs := anArgString
   490     LinkArgs := anArgString
   490 
   491 
   491     "
   492     "
   492      MSC:
   493      MSC:
   493 	LinkCommand := 'link32'.
   494         LinkCommand := 'link32'.
   494 	LinkArgs := ' /NOPACK /NOLOGO /DEBUG /MACHINE:I386 /DLL /OUT:%1.dll /DEF:%1.def'
   495         LinkArgs := ' /NOPACK /NOLOGO /DEBUG /MACHINE:I386 /DLL /OUT:%1.dll /DEF:%1.def'
   495 
   496 
   496      Borland:
   497      Borland:
   497 	LinkCommand := 'ilink32'.
   498         LinkCommand := 'ilink32'.
   498 	LinkArgs := ' -ap -Tpd -s -Gn -Gi -v -w-dup'
   499         LinkArgs := '-ap -E0 -Tpd -s -c -L\Programme\Borland\CBuilder3\lib -L..\libbc librun.lib import32.lib'
   499 '
   500 '
   500 '/NOPACK /NOLOGO /DEBUG /MACHINE:I386 /DLL /OUT:%1.dll /DEF:%1.def'
   501 '/NOPACK /NOLOGO /DEBUG /MACHINE:I386 /DLL /OUT:%1.dll /DEF:%1.def'
   501 
   502 
   502      Unix:
   503      Unix:
   503 	LinkCommand := 'ld'
   504         LinkCommand := 'ld'
   504 	LinkArgs := '-shared'
   505         LinkArgs := '-shared'
   505     "
   506     "
   506 
   507 
   507     "Created: / 12.8.1998 / 21:43:16 / cg"
   508     "Created: / 12.8.1998 / 21:43:16 / cg"
   508     "Modified: / 12.8.1998 / 22:15:00 / cg"
   509     "Modified: / 4.9.1998 / 00:33:46 / cg"
   509 !
   510 !
   510 
   511 
   511 linkCommand
   512 linkCommand
   512     ^ LinkCommand ? 'ld'   "/ that default is ok for Unix
   513     ^ LinkCommand ? 'ld'   "/ that default is ok for Unix
   513 
   514 
  2298      -shared option into a .so file; 
  2299      -shared option into a .so file; 
  2299      DLD based loaders (linux a.out) can directly load a .o file;
  2300      DLD based loaders (linux a.out) can directly load a .o file;
  2300      Other systems may require more ..."
  2301      Other systems may require more ..."
  2301 
  2302 
  2302     |osType oFileName soFileName expFileName librunExpFileName
  2303     |osType oFileName soFileName expFileName librunExpFileName
  2303      needSharedObject ld ldArg expFile|
  2304      needSharedObject ld ldArg expFile ok|
  2304 
  2305 
  2305     osType := OperatingSystem getOSType.
  2306     osType := OperatingSystem getOSType.
  2306 
  2307 
  2307     osType = 'win32' ifTrue:[
  2308     osType = 'win32' ifTrue:[
  2308         self activityNotification:'create def file'.
  2309         self activityNotification:'create def file'.
  2350 "/                    ].
  2351 "/                    ].
  2351 "/                ].
  2352 "/                ].
  2352 "/            ].
  2353 "/            ].
  2353 "/        ].
  2354 "/        ].
  2354 
  2355 
  2355         ld := LinkCommand , ' ' , baseFileName , '.obj'.
       
  2356         LinkArgs isNil ifTrue:[
  2356         LinkArgs isNil ifTrue:[
       
  2357             ld := LinkCommand , ' ' , baseFileName , '.obj'.
  2357             ld := ld
  2358             ld := ld
  2358                , ' /NOPACK /NOLOGO /DEBUG /MACHINE:I386 /DLL'
  2359                , ' /NOPACK /NOLOGO /DEBUG /MACHINE:I386 /DLL'
  2359                , ' /OUT:' , baseFileName , '.dll '
  2360                , ' /OUT:' , baseFileName , '.dll '
  2360                , ' /DEF:' , baseFileName , '.def'.
  2361                , ' /DEF:' , baseFileName , '.def'.
  2361         ] ifFalse:[
  2362         ] ifFalse:[
  2362             ld := ld , ' ' , (LinkArgs bindWith:baseFileName)
  2363             OperatingSystem getCCDefine ='__BORLANDC__' ifTrue:[
       
  2364                 ld := LinkCommand , ' ' , (LinkArgs bindWith:baseFileName).
       
  2365                 ld := ld , ' c0d32.obj ' , baseFileName , '.obj '.
       
  2366                 ld := ld , ',' , baseFileName , '.dll,,..\libbc\librun.lib import32.lib stxc32i.lib,,'.
       
  2367             ] ifFalse:[
       
  2368                 self halt.
       
  2369             ]
  2363         ].
  2370         ].
  2364 
  2371         ok := OperatingSystem executeCommand:ld.
  2365         (OperatingSystem executeCommand:ld) ifFalse:[
  2372         (baseFileName , '.tds') asFilename delete.
       
  2373         (baseFileName , '.ilc') asFilename delete.
       
  2374         (baseFileName , '.ild') asFilename delete.
       
  2375         (baseFileName , '.ilf') asFilename delete.
       
  2376         (baseFileName , '.ils') asFilename delete.
       
  2377         (baseFileName , '.lib') asFilename delete.
       
  2378         (baseFileName , '.map') asFilename delete.
       
  2379         (baseFileName , '.def') asFilename delete.
       
  2380         (baseFileName , '.obj') asFilename delete.
       
  2381 
       
  2382         ok ifFalse:[
  2366             "/ self halt.
  2383             "/ self halt.
  2367             ^nil
  2384             ^nil
  2368         ].
  2385         ].
  2369         oFileName := (Filename currentDirectory construct:(baseFileName , self sharedLibraryExtension)) name.
  2386         oFileName := (Filename currentDirectory construct:(baseFileName , self sharedLibraryExtension)) name.
  2370         ^ oFileName
  2387         ^ oFileName
  2483     "
  2500     "
  2484      assume we can load an ordinary binary
  2501      assume we can load an ordinary binary
  2485     "
  2502     "
  2486     ^ oFileName
  2503     ^ oFileName
  2487 
  2504 
  2488     "Modified: / 3.9.1998 / 15:48:11 / cg"
  2505     "Modified: / 4.9.1998 / 15:25:54 / cg"
  2489 ! !
  2506 ! !
  2490 
  2507 
  2491 !ObjectFileLoader class methodsFor:'lowlevel object loading'!
  2508 !ObjectFileLoader class methodsFor:'lowlevel object loading'!
  2492 
  2509 
  2493 initializeLoader
  2510 initializeLoader
  3007 
  3024 
  3008 #ifdef WIN_DL
  3025 #ifdef WIN_DL
  3009     int val;
  3026     int val;
  3010     HINSTANCE handle;
  3027     HINSTANCE handle;
  3011     int err;
  3028     int err;
       
  3029     jmp_buf exitJmpBuf;
  3012 
  3030 
  3013     if (__bothSmallInteger(sysHandle1, sysHandle2)) {
  3031     if (__bothSmallInteger(sysHandle1, sysHandle2)) {
  3014 	val = (_intVal(sysHandle2) << 16) + _intVal(sysHandle1);
  3032 	val = (_intVal(sysHandle2) << 16) + _intVal(sysHandle1);
  3015 	handle = (HINSTANCE)(val);
  3033 	handle = (HINSTANCE)(val);
  3016 
  3034 
  3017 	if (FreeLibrary(handle) != TRUE) {
  3035        if (setjmp(exitJmpBuf)) {
  3018 	    err = GetLastError();
  3036            __setAtExitLongJmp(exitJmpBuf);
  3019 	    if (@global(Verbose) == true) {
  3037 	    if (FreeLibrary(handle) != TRUE) {
  3020 		printf ("unlink file %s failed; error: %x\n", 
  3038                __setAtExitLongJmp(0);
  3021 			__stringVal(sysHandle1), err);
  3039 	        err = GetLastError();
       
  3040 	        if (@global(Verbose) == true) {
       
  3041 		    printf ("unlink file %s failed; error: %x\n",
       
  3042 			    __stringVal(sysHandle1), err);
       
  3043 	        }
       
  3044 	        RETURN (false);
  3022 	    }
  3045 	    }
  3023 	    RETURN (false);
  3046        } else {
  3024 	}
  3047            __setAtExitLongJmp(0);
       
  3048            fprintf(stderr, "ObjFLoader [warning]: FreeLibrary called exit() - ignored\n");
       
  3049        }
  3025 	RETURN (true);
  3050 	RETURN (true);
  3026     }
  3051     }
  3027     RETURN (false);
  3052     RETURN (false);
  3028 #endif
  3053 #endif
  3029 
  3054 
  3673 ! !
  3698 ! !
  3674 
  3699 
  3675 !ObjectFileLoader class methodsFor:'documentation'!
  3700 !ObjectFileLoader class methodsFor:'documentation'!
  3676 
  3701 
  3677 version
  3702 version
  3678     ^ '$Header: /cvs/stx/stx/libcomp/ObjectFileLoader.st,v 1.175 1998-09-03 15:00:41 cg Exp $'
  3703     ^ '$Header: /cvs/stx/stx/libcomp/ObjectFileLoader.st,v 1.176 1998-09-04 16:28:47 cg Exp $'
  3679 ! !
  3704 ! !
  3680 ObjectFileLoader initialize!
  3705 ObjectFileLoader initialize!