WARNING! WARNING! WARNING! WARNING! WARNING! WARNING! ----------------------------------------------------- THIS DOCS ARE OUTDATED! I have no time to write down precise docs, so please be patient. ----------------------------------------------------- Please read readme.txt before reading this file ! ================================================= This file reflect changes, made to DLM package. ------------ VERSION 2.0.0 dated 8 Oct 1998 ----------------- Ouch! After two (!) years DLM engine is here again ! - This version is mostly an update to djgpp v2.02 and gcc 2.8.1 exception handling. Also this version help me to remember the source, djgpp and so on ... Poor brains! ;) - Some improvements made, especially in startup code and loading speed. - Dynamicaly loaded 80387 emulation added. Much like emu387.dxe, but using DLMs. - libc.a & libgcc.a linked together in libc.dlm - More accurate stub's export - dlmstub.exe now has MAGIC SIZE! Exactly 64k ! ;-) Frankly speaking it was a fortune, good sign from the GCC ;-) ------------ VERSION 1.01.1 dated 4 Dec 1996 ----------------- - Fixed buf in autoloading - Added function ExportDLMSymbol, SizeofDLMSymbol, RemoveDLMSymbol - Package restructered ------------ VERSION 1.01.0 dated 17 Nov 1996 ----------------- - Version converted for use with DJGPP v2.01 cpp & libmain(now libc) DLMs was also converted, so avoid mixing with previous ones. - GDBM (GNU Data Base Manager) ported for use with DLMs - Solved problem with ld -r behaviour by creating linker script So, to produce one object file from several use something like ld -r -o all.o *.o -Tl:\djgpp\lib\dlm.djl ------------ VERSION 1.00.9 dated 14 Nov 1996 ----------------- - Added NAMED CLASS feature. See file cpp.txt for details. - Added LookupDLMSymbol(char *) which returns address of symbol or NULL if not found. ------------ VERSION 1.00.8 dated 11 Nov 1996 ----------------- - DLM search path is now initialized with the value of DLMPATH environment variable at startup. - Added code (which I forgot to add) which unloads all DLMs at exit, causing calls to all related destructors (C++ and desctructor() functions) ------------ VERSION 1.00.7 dated 8 Nov 1996 ------------------ - Improved Common symbols handling. - Duplicate symbol handling added. You can now play with dlmflags variable, which control overall DLM engine behavior in certain situations. Look in dlmlib.h for valid flags explanation. ------------ VERSION 1.00.6 dated 6 Nov 1996 ------------------ - Fixed a bug in fixup function, caused invalid processing of relocation entries in some rare cases. - Improved SIGSEGV handling. Symbol information was added and DLM-symified output. - Created LIBMAIN.DLM wich is libc converted for use with DLMs Look in DLMLIBS for it. - Fixed a bug in DLMSTUB which caused invalid fixups for REL32 relocations to internaly defined (not import or common) symbols. Strange, but ld doesn't remove them when linking several object files with -r option. - DLMMAN now looks at evironment variable DLMSTUBNAME before assuming that DLM stub's name is "dlmstub.exe" So the sequence is : if -a option is specified use it's argument as stub else if DLMSTUBNAME environment variable exists use it's value as stub else use dlmstub.exe from current directory as stub - You can now use SetDLMSearchPath(char *pathlist) to specify the list of directories where to search for DLMs if path was not specified when calling LoadDLM() pathlist is a string with individual directories separated by ';'. Each directory is appended to filename, so be sure to specify the last '\' and so on... For example : SetDLMSearchPath("w:\\djgpp\\dlms\\;w:\\djgpp\\dlms\\sys\\"); The directory list is NOT appended to the existing one, it is replaced after each call. ------------ VERSION 1.00.5 dated 5 Nov 1996 ------------------ - Fixed missed zero-initialization of common variables. ------------ VERSION 1.00.4 dated 4 Nov 1996 ------------------ - DLMMAN was updated to allow easy managing of DLM sets. Options added : -q print out only fatal messages instead of processing information. For use in batch files. -l updated to manage lists of autoload DLMs. if filename begins with '&' it is treated as file containing list of DLMs to be marked for autoload (designed for use will DALs, see below) -di dumps IMPORT symbol information -da appends EXPORT symbol with DLM name to LST file (for use with -dl) -dl generates the list of DLMs proposed for auto load. List is based on information provided in supplied LST file and current DLM import information. So if you have a set of DLMs and some of them uses other you'll follow the following sequence : use dlmman on each DLM with option "-da total.lst" (note same -da parameter for ALL DLMs) use dlmman on each DLM with option "-dl total.lst" this will generate .DAL file for each DLM with the list of required DLMs. You can then add them to autoload list by using -l option with & argument - Fixed bug, which caused GPF when generating output file name for file with 8 chars name and 3 chars extension. - You still have to place all of your DLMs to the same directory as EXE file or supply a full path to DLM. Also, if you added autoload DLM as 'filename.dlm' it will be attempted to load from current directory. Search path is to be done later. ------------ VERSION 1.00.2 dated 4 Nov 1996 ------------------ - Error code handling. See dlmlib.h for details. - Added Autoload support. When you load DLM and it has some DLMs marked for autoloading (using DLMMAN -l option) and this DLMs are not yet loaded, they load automaticaly. If any of them failed to initialize (constructor() returned zero), dependent DLM will also not be loaded returning appropriate error code. - Added fine tuning for exports. You can use implicit rules which exports all extern symbols (i.e. not static). Using new -dx option of DLMMAN you can dump export list to separate file, edit it (mainly remove unwanted exports) and use -u option to mark ONLY symbols present in export list file as EXPORT. If -u switch is not specified, an implicit rules will be used. - You now can remove extra symbols added with -s option from DLM. Autoload marks also may be removed. Appropriate options are -rs and -rl respectively. As usual, start DLMMAN without arguments to get help. - DLM load code was speeded up a little. Also some minor bug fixes was made to dlmstub and dlmman. - You can check if some symbol is defined by comparing it's address to 0xFFFFFFFF. eg: if ((unsigned long)myfunc==0xFFFFFFFF) LoadDLM("myfunc.dlm"); if ((unsigned long)&mydata==0xFFFFFFFF) LoadDLM("mydata.dlm"); myfunc(mydata); So you can implement a load-on-call scheme manualy. KNOWN BUGS & FEATURES, WHICH LOOK LIKE BUGS ;-) - If DLM contains import symbol of some name, and you add export symbol with the same name using DLMMAN -s option symbol is NOT replaced, just another symbol of the same name appear. This scheme is needed to be able to remove such symbols correctly (and without much job). TO DO : Add statistic info to Dump Information output (-d option) This will include mainly an information of how much bytes non-user data (i.e. DLM structures and other system data) will take in memory, aboslute and in percentage of user data. ------------ VERSION 1.00.1 dated 2 Nov 1996 ------------------ - Added SIGSEGV support. It now shows where GPF occured and tries to find out the reason. Mainly if it was caused by unresolved reference. Example output : DLM : SIGSEGV occured in file test.exe (probably in function _main) because of undefined reference to symbol '_fff__Fv' - constructor & destructor are now NOT placed into export tables on load. However they must be NONSTATIC functions. - Fixed some minor bugs in DLM Manager, concerning parsing program arguments. - DLMMAN -d now dumps to specified file instead of stdout - DLMMAN now automaticaly generate output filename if ommited i.e DLMMAN test.dlm -e is the same as DLMMAN test.dlm -e test.exe KNOWN BUGS & FEATURES, WHICH LOOK LIKE BUGS ;-) - If DLM contains import symbol of some name, and you add export symbol with the same name using DLMMAN -s option symbol is NOT replaced, just another symbol of the same name appear. Two symbols with the same name, one import and one export coexist friendly and doesn't cause any trouble. It possibly will be fixed in next version. ------------ VERSION 1.00.0 dated 1 Nov 1996 ------------------ Just first functional version