========================================================================= ====== history.doc emx 0.8h HISTORY 14Dec-1993 ========================================================================= ====== Copyright (c) 1990-1993 by Eberhard Mattes 0.8h (14-Dec-1993) ================== Important notes --------------- The emxdoc.ndx file has been renamed emxbook.ndx. You should set the EMXBOOK environment variable instead of EMXDOC. Replace EMXDOC with EMXBOOK in the HELPNDX environent variable. If you're using GNU Emacs, don't forget to update the value of the `os2help' variable - Each thread now has its own set of signal handlers. raise() raises a signal in the current thread, kill() can be used to send a signal to the main thread (thread 1) - The `lib' prefix has been removed from the file names of the libraries. The -l option of GNU ld and emxomfld no longer prepends `lib' to the library name. Now you should use -lcurses (instead of -lcurse) and -ltermcap (instead of -ltermc) - The default stack size for -Zomf has been increased to 0x8000 bytes - The address of the emx-list mailing list has changed, see readme.doc - The iostream classes are no longer in libg++. instead (replace -lgpp with -liostream) Use libiostream Highlights ---------- GPPDEMID.DLL has been provided to let LINK386 demangle C++ symbols in error messages - The new emxload utility speeds up compiling by keeping the compiler passes in memory. Use SET GCCLOAD=5 to keep the compiler in memory for 5 minutes - emxomf now generates HLL version 3 debugging information for IPMD of the C/C++ Tools 2.0 package, including C++ - emxomf has been enhanced to support creation of dynamic link libraries with both instance data and private data - Exceptions are now mapped to SIGFPE, SIGILL and SIGSEGV signals. SIGTERM is now supported under OS/2 - New emxexp utility to simplify creating C++ dynamic link libraries - New versions of GNU programs have been ported: GCC 2.5.7 (see \emx\doc\NEWS.GCC), GDB 4.11, libg++ 2.5.2 and libiostream 0.62. Linking with the GNU C++ iostream library doesn't put your program under GPL (see \emx\doc\COPYING.IOS for details) - Static constructors and destructors in dynamic link libraries are now supported officially - Support for creating custom C run-time DLLs added (cdllobj.lib). Support for creating resource DLLs added (res0.obj) - A REXX procedure (emxinst.cmd) for creating a documentation folder is now included emx for OS/2 ------------ __signal() did not return the previous signal handler if emx.dll was used - Don't crash if a signal is received in 16-bit code of the operating system - The stack object of an executable with preloaded data (-c option of emxbind) was omitted from core dumps. This has been fixed (revision index 14 of emx.dll) - Bug in __clock() fixed: the return values were not monotonous emx for DOS ----------- emxl.exe now runs rsx.exe (a DPMI-compliant DOS extender by Rainer Schnittker which implements a subset of the emx system calls) instead of emx.exe if a DPMI server, but no VCPI server is found. In that case, the RSX environment variable will be used instead of EMX - emx no longer displays a register dump if a protection violation has been detected. A core dump file is written instead - __spawnve() now supports P_NOWAIT. However, the process will be run synchronously. You can now use wait() with the spawn*() functions if you use P_NOWAIT. process SIGCLD is raised before continuing the parent - __memaccess() bug fixed. For _memaccess (0, n*4095-1, 0), page 0 was mapped n times and the other pages were not mapped - __select() now returns EINTR when interrupted by a signal - __select() no longer returns EINVAL for nearly all non-zero values of tv_usec emxbind ------- A bug has been removed which caused a corrupt fixup page table in rare cases - Speed up processing programs which import many symbols - New -E option for renaming emx.dll - emxbind now supports import by name when using method (I2) emximp ------ emximp now can directly convert a .def file to a .lib file, without having to create an intermediate .imp file - emximp now supports import by name when writing an .a file for method (I2) emxomf ------ Write IDMDLL record. The name of the identifier manipulation DLL can be changed with the -I command line option - Generate HLL version 3 debugging information for IPMD of the C/C++ Tools 2.0 package - New -D option for renaming the data segment. This can be used for creating dynamic link libraries which have both instance data and shared data - The default stack size for modules translated with the -m option has been increased to 0x8000 bytes - Support import by name - The -l option now takes an option argument, the entry symbol emxomfld -------- New -O option for passing options to LINK386. - New -Zdll option to tell emxomfld that a DLL is being built - Pass /base:0x10000 to LINK386 unless a DLL is built or the -T option is specified - The -l option no longer prepends `lib' to the name of the library - The directories set by -L options are now inserted at the start of the LIB environment variable listomf ------- List HLL version 3 debugging information. Older versions of HLL debugging information are no longer supported - Now lists more OMF record types in human-readable form GCC --- Version 2.5.7 has been ported to emx. details See \emx\doc\NEWS.GCC for - Under OS/2, GCC now supports -pipe - GCCLOAD and GCCOPT environment variables added - New -Zlinker option to pass options to LINK386 - Pass -Zdll option to emxomfld GNU ld ------ Use new C++ demangler - The -l option no longer prepends `lib' to the name of the library GNU nm ------ Use new C++ demangler Libraries --------- os2emx.h: Rename CPSZ to PCSZ, CPCH to PCCH - Definition of HUGE and HUGE_VAL changed - The type of the fields of struct tms (sys/times.h) has been changed from time_t to clock_t - All the libraries have been renamed to remove the `lib' prefix - Each thread now has its own set of signal handlers. raise() raises a signal in the current thread, kill() can be used to send a signal to the main thread (thread 1) - access(): Directories on a CDROM are not writable - _msize() now returns 0 if the argument is NULL - _fnexplode(): No longer crashes when applied to an empty directory - open() etc.: Move to the end of the file when opening a file for appending. This is required for passing the handle to a child process - popen() and system(): The COMSPEC environment variable can now be overriden with the EMXSHELL environment variable - popen() and system(): Use -c instead of /c unless COMPSPEC (or EMXSHELL) points to cmd.exe, 4os2.exe, command.com or 4dos.com - printf(), scanf() etc. and strtod() have been rewritten. Several small bugs have been removed (and replaced by new ones :-) - rand() is now thread-safe when using the multi-threaded libraries - Various small bugs in strtol() and strtoul() fixed - Bug in memcmp() and strcmp() fixed (wrong sign) - _threadstore() and _threadid added - _osminor and _osmajor fixed for -Zsys - open() and fopen() etc. didn't update the time stamp of a file when opening an existing file of size 0 for writing - open() and fopen() etc. now remove the final Ctrl-Z when opening a file for appending in write-only mode. Previously, this was done only in read/write mode. Note that this requires opening the file in read/write mode, temporarily. - _execname() added (not yet implemented under DOS) - _envargs() added - Functions which support the `long double' format have been added - You can now build DLLs with -Zomf and -Zsys. startup code of the emx 0.8g C library There was a bug in the - The `load' sample program has been replaced with the `emxload' tool - Library functions for keeping OS/2 programs in memory added: _emxload_env() etc. - System call library (-Zsys): Decommit pages when shrinking the size of the heap with brk() or sbrk() - System call library (-Zsys): waitpid() waits for any child process if PID is -1 - wait(): Set errno to ECHILD (not ESRCH) if there are no child processes - Functions __ctordtorInit() and __ctordtorTerm() for calling static constructors and destructors, respectively, in dynamic link libraries have been added - Add _errno() function for creating libraries that can be used for single-threaded and multi-threaded programs - New library for reading module definition files: moddef (see _md_open() for details) Other changes ------------- The supplemental files for patching the GNU programs have been moved from \emx\gnu to \emx\gnu\patches - bsddev.doc is now available as OS/2 on-line book 0.8g (13-Jul-1993) ================== Important notes --------------- IMPORTANT: The -Zmt GCC option has been renamed -Zmtd. If GCC complains about an unknown -Zmt option, use -Zmtd instead (unless you want to use static linking). Most existing makefiles use -Zmt for dynamic linking - The emx runtime is now available in a separate package: emxrt.zip. user.doc has been renamed emxrt.doc and improved. See also emxrt.inf Highlights ---------- You can now statically link multi-threaded programs - emxomf now converts debugging information suitable for IBM's IPMD debugger - os2emx.h enhanced - New versions of GNU programs have been ported: GCC 2.4.5 (see \emx\doc\NEWS.GCC), GDB 4.9 (including DUEL and REXX) and texinfo 3.1 - Source code for emxomf, emxomfar and emxomfld is now available - Dynamic link library for the 32-bit wrappers for 16-bit OS/2 API functions - Hypertext documentation in OS/2 .inf format (on-line books) emx --- SIGUSR1 and SIGUSR2 added - umask() fixed emx for OS/2 ------------ waitpid() returned an incorrect termination status - termio keyboard buffer size increased (1024 characters now, was 256) - Decommit pages when shrinking the size of the heap with brk() or sbrk(). This saves memory (swap space) when using a malloc() package which can shrink the size of the heap - __spawnve() now does special argument quoting for CMD.EXE and 4OS2.EXE. Note that this may break existing programs such as MAKE. If you have trouble with an emx port of MAKE, get the latest version of that port -- the problem has probably been fixed in the meantime - P_PM and P_NOSESSION implemented for spawn*() - Core dumps caused by signals and _core() improved, EIP is now in the function which called __raise() or __core(). This simplifies post mortem debugging after abort() has been called as GDB's backtrace command will work properly - Thunks to both _pascal and _cdecl functions can be built emx for DOS ----------- Using emxl.exe no longer reduces the maximum length of the command line - Several emx options are now local to the process for which they have been given (by emxbind) - Options set by emxbind are now honored by emx programs started by emx programs - Nearly asynchronous handling of Ctrl-Break - Additional interrupts supported: VESA functions of INT 10H, mouse interface via INT 33H - Bug in emxl.exe fixed: now you no longer have to sort the PATH directories by length - Bug fixed: debuggers couldn't access the initial argv[] and envp[] arrays and strings - __spawnve() now does special argument quoting for COMMAND.COM and 4DOS.COM emxbind ------- Derive the module name from the output file name - Reduce the alignment of the DOS stub - The value of the STACKSIZE statement was rounded slightly incorrectly - The -h# and -k# options now accept octal and hexadecimal numbers emxcat ------ Collect INCL_ definitions at the start of the output file - Topological sort of #include statements - Move #include <sys/emx.h> before all other #include statements - New option: -D (define symbol) - Moved from emxlib.zip to emxdev.zip emximp ------ Bug fixed: emximp couldn't read .LIB files which use the 32-bit variant of the MODEND record emxomf ------ New option: -i (add default library request) - New option: -p (set page size for LIB files) - Convert debugging information for IBM's IPMD debugger listomf ------- This program is new, it list an .obj file GCC --- Version 2.4.5 has been ported to emx. details See \emx\doc\NEWS.GCC for - The -Zmt option has been renamed -Zmtd (dynamically linked multi-threaded program) - New option: -Zmts (statically linked multi-threaded program) - Treat *.cpp as C++ files - New option: -Zexe (simplify makefiles by adding .exe to output file name and creating an empty file without extension) - The -M option (create dependencies) now works with -Zomf (create .obj files) - New -Zstack option: set stack size (passed down to ld or emxomfld) - New -ZC++-comments option: enable C++-style // comments in C programs GDB --- Version 4.9 has been ported to emx - Redirection fixed (set args) - DUEL added - Anthony Green's REXX extension added GNU ld ------ New Zstack option: set stack size (passed down to emxbind) Libraries --------- Library reference moved to \emx\doc\libref.doc - Sample programs moved to \emx\samples - libmt.a and libmt.lib renamed libcdll.a and libcdll.lib, respectively - libsys.lib renamed libsysst.lib - static multi-threaded libraries added: libcmt.a and libsysmt.lib - Dynamic link library for 16-bit OS/2 API functions added: emxwrap.dll with import libraries libwrap.a and libwrap.lib - _clear87(), _control87(), _fpreset() and _status87() added - cuserid(), getpass(), _fnisrel(), _makepath() and pause() added - Argument quoting of system() and popen() fixed - strncpy() documentation fixed - _chdrive(): accept lower-case letters - Special streams added: _mfopen(), v_fopen() and wm_fopen() - fflush (NULL) fixed - realloc() problem fixed -- it now tries to move the block before expanding the heap (that's slower but takes less memory) - _tmalloc() and friends implemented. These functions can be used to allocate memory for use with 16-bit functions - stderr never buffered by default - Type of second argument of getcwd() changed from int to size_t - _chdir2() behaviour is now defined if the argument is a drive letter - Flags returned by _int86() fixed - access() now treats a trailing slash like stat() does - _emx_rev variable added - When a linefeed is written to a line-buffered stream, try to use one write() to flush the buffer to make Emacs (gud.el) happy 0.8f (03-Jan-1993) ================== Important notes --------------- IMPORTANT: You have to rewrite the initialization code of dynamic link libraries created with emx: main() has been replaced with _DLL_InitTerm() - IMPORTANT: mkdir() now has two arguments. Before linking, change and recompile all modules that use mkdir() Highlights ---------- New versions of GNU programs have been ported: GCC 2.3.3, GDB 4.7 - _DLL_InitTerm(), _CRT_init() and _CRT_term() for dynamic link libraries - (Awkward) support for calling 16-bit OS/2 API functions - Keyboard (Kbd), Mouse (Mou) and Video (Vio) subsystems can now be used under OS/2 - A simple graphics library has been added (320x200x256 mode only) - A text-mode video library has been added - Functions for reading and writing extended attributes have been added emx --- - New system call for __read_kbd(); some but not all _read_kbd() bugs fixed - New system calls: __sleep2(), __waitpid() - File name truncation (SET EMXOPT=-t) fixed emx for OS/2 ------------ emxio.dll: the functions didn't save the EBX register - fork() fixed: fork() didn't work before a call to malloc() - FIONREAD also works if ICANON is set for the handle - _outps8() fixed - _syserrno() now returns the last error code for the current thread - If the size of the stack object is 16 KB or smaller, emx.dll creates a new object for the stack and expands the stack as needed using a guard page and an exception handler. (emx.dll 0.8e and older always do this, independently of the size of the stack object.) If the size of the stack object is greater than 16 KB, the stack is not changed, that is, the stack object is used for the stack. Programs that use emx.dll and are linked with LINK386 and need more stack space than declared in the .EXE file and the stack size declared in the .EXE file is greater than 16 KB, don't work with emx 0.8f and later. The default stack size (defined by emxomf) is 8 KB. Therefore programs are unaffected unless they use more stack than declared by the STACKSIZE statement or the /STACK option of LINK386 or by the .STACK segment in an OBJ file and that stack size is 16 KB or smaller. No real programs should be affected. Note that the (obsolete) Limited Availability release of OS/2 allocates space in SWAPPER.DAT for all pages of the stack object. Therefore, you should use a stack size of 16 KB or smaller and the -mprobe option of GCC if compatibility to the Limited Availability release of OS/2 is essential. If your program uses DosSetPriority and the stack size is set to 16 KB or smaller, you have to rename DosSetPriority to DosTrueSetPriority in /emx/lib/os2/dos.imp, assemble /emx/lib/os2/code1.s, rebuild libos2.a and put code1.o into libos2.a. This is only required if you re-link your program, it isn't required for existing executables - An import library for emxio.dll is now available; _outp8() etc. are supported when linking with LINK386 or when using emxlibc.dll - longjmp() now works with user-installed exception handlers emx for DOS ----------- New emx option: -ac (data and stack executable) - New emx option: -C# (commit memory) - Bug fixed: -c didn't work - Access to ports 0 through 0xffff can be enabled by _portaccess(). Previous versions restricted access to ports 0 through 0x3ff - FIONREAD works for all types of handles - select() has been implemented - Additional debugger commands: VP and VX; page table dump changed emxbind ------- TERMGLOBAL and TERMINSTANCE module definition file statements now supported - Option for setting the heap size: -h# - Option for setting the OS/2 stack size: -k# - The STACKSIZE statement can be used for setting the OS/2 stack size - By default, a 16 MB stack object for OS/2 is now put into the .EXE file emxomf ------ Convert (I2) import records to (I3) import records - Convert line number information unless -s is used. enables limited debugging with IBM's IPMD debugger This feature - No longer requests emx.lib to be linked emxomfld -------- Call RC to handle .res file - New -Zstack option: set stack size - Bug fixed: LIB environment variable not correctly set - Use /debug option of LINK386 unless -s or -S are used touch ----- New -c option: don't create files GCC --- #pragma pack implemented for C++ - The -s option is passed to emxomf - The -mnoprobe option has been renamed -mno-probe - -mno-probe is now default. If you create threads with DosCreateThread and don't set bit 1 of the flags argument, you have to use -mprobe. -mprobe is also required if you want to trap stack overflow - GCC now passes libemx1 and libemx2 instead of libemx (and emx.lib) to the linker - As emxomfld now knows about .res files, you can use .res files on the GCC command line even when using -Zomf - After all the other libraries but before -lemx2, -los2 is passed to the linker. Therefore, you no longer have to use -los2. Using -los2 (in old makefiles, for instant) doesn't hurt GDB --- `info float' command fixed - Switch to debuggee session only on CALL instructions - Redirection supported by `set arg' GNU ld ------ The -R option is no longer automatically turned on for import libraries of type (I1) - `.o' is appended to the symbol indicating the start of the text segment of a module unless the symbol starts with `-l' or already ends with `.o'. This is required to make GDB work with GCC's MKTEMP_EACH_FILE `feature' GNU nm ------ New -d option: don't demangle C++ symbols Header files and libraries -------------------------- Header files adapted for -traditional and C++ - Value of HZ (defined in sys/param.h) fixed - Prototypes added to curses.h - New header files: conio.h, sys/utsname.h, sys/wait.h - S_ISCHR etc. defined in sys/stat.h - There are now two emx syscall with libemx1.a and libemx2.a, replaced with libemx1.lib and syscall interface to emx.dll, emx.dll libraries: libemx.a has been replaced libemx.lib and emx.lib have been libemx2.lib. libemx1 contains the libemx2 is the import library for - New functions: ffs(), uname(), waitpid(), _dt_*(), _ea*(), _getname(), _inps16(), _inps32(), _int86(), _memdif(), _outps8dac(), _outps16(), _outps32(), _sleep2(), _splitargs(), _wait*() - _read_kbd() now available with -Zsys - The sign of the number returned by _fncmp() is now significant - pclose() now uses waitpid() - popen() now parses the command line correctly - emxlibc.dll now supports 256 file handles and 256 streams - malloc() and friends in emxlibc.dll are thread-save now - tempnam() return value fixed; avoid infinite loop for invalid PREFIX - nls_init() fixed - frexp() fixed - popen() improved - open() and sopen(): errno fixed for O_CREAT - mkdir(): now sets errno to EEXIST if directory already exists - scanf(): bugs fixed - mktime(): the argument is interpreted as local time - wait(): use errno of system call - memcmp() return value fixed (sign was wrong) - strstr (s, "") should return s - _flush() writes a linefeed immediately in _IOLBF mode - index(), rindex(), strchr(), strcmp() and strrchr() coded in assembly language - Bug fixed: strtol ("0", whatever, 0) didn't work - printf() no longer prints "-#NAN". "#NAN" is printed instead - SOM added to libos2 Sample and test programs ------------------------ New sample programs: eatool, graph, wm_demo and wm_hello - align.c renamed pack.c 0.8e (13-Sep-1992) ================== Important notes --------------- IMPORTANT: Recompilation of all source files is required due to changes in the header files and the C library. All .o and .a files must be recreated from the source - If the linker complains about `_streams' undefined, you haven't recompiled all source files - IMPORTANT: the -s emxbind option has been renamed -i - When using GNU Emacs 18.58.3 for OS/2 2.0 with emx.dll 0.8e, you have to replace the string "/s /c" with the two strings "/s" "/c" in compile.el, shell.el and simple.el. Also replace "/q /s" with "/q" "/s" and byte-compile compile.el, shell.el and simple.el. dump-emacs.cmd Then, run - When recompiling GNU Emacs 18.58.3 for OS/2 2.0 using emx 0.8e, you should put the line (setq completion-ignore-case t) into the .emacs file as readdir() no longer turns all file names into lower case Highlights ---------- C++ - LINK386 can be used for linking - fork() - New versions of GNU programs have been ported: GCC 2.2.2, GDB 4.6 - C library in dynamic link library - Create `native' OS/2 programs that don't need emx.dll emx --- New system calls: __stat(), __fstat(), __utimes(), __filesys(), __chsize(), __ftime(), __getppid(), __nls_memupr(), __clock(), __fork(), __open(), __newthread(), __endthread() - Changed system calls: __ftruncate(), __umask(), __memaccess(), __open() - Removed system calls: __creat(); still supported for old programs emx for OS/2 ------------ REXX-callable entry point for getting the revision number - emxio.dll - MKS-ksh-style argument passing under OS/2 - System calls are now (almost) reentrant - New scan codes for C-SPACE, A-SPACE and C-INSERT - New system call: __brk() - Bug fixed: argument quoting on the command line - Bug fixed: scan code of Ctrl-Break (OS/2 full screen) - Bug fixed: __sbrk() didn't work currectly for small arguments emx for DOS ----------- _scrsize() fixed for DOS - Bug fixed: __spawnve() didn't close the file handle when calling a DOS program - If a memory manager provides both DPMI and VCPI, use VCPI instead of giving up - termio bug fixed (`New' extended scan codes) emxbind ------- The -s option has been renamed -i - Option for stripping the symbol table - Automatically seeks emxl.exe - Support for new method of importing (I2) - Support for creating dynamic link libraries emximp ------ Automatically call assembler - Automatically generate output file names - Additional conversions: .lib -> .imp, .imp -> .def, .lib -> .a GCC --- GCC 2.2.2 - Expansion of wildcards on the command line - The preprocessor macro `unix' is no longer defined - The preprocessor macro `__32BIT__ is defined - New -Zdll option for creating dynamic link libraries - New -Zomf option for creating .OBJ files GDB --- GDB 4.6 - Bug fixed: global variables can now be viewed - Forward slashes must be used instead of backward slashes in path names GAS --- wait instructions are no longer inserted automatically unless -w given GNU ld ------ New ld option: -R (automatically set when creating a .dll file or using a special class of import libraries) - Pass on module definition file name and resource file name to emxbind GNU ar ------ Expansion of wildcards on the command line - Extension of the temporary file shortened for FAT file systems Header files and C library -------------------------- - New include files: malloc.h, sys/hw.h, sys/kbdscan.h - float.h fixed - min() and max() removed from stdlib.h - HT_DEV_KBD (sys/ioctl.h) has been replaced with HT_DEV_CON; HT_DEV_VIO has been removed -- it was never returned - time_t changed to unsigned long (was long), timezone declared long (was time_t) - Support for long long - Functions renamed: itoa() -> _itoa(), ltoa() -> _ltoa(), ultoa() -> _ultoa(), rmtmp() -> _rmtmp() - _memaccess() and _portaccess() now documented. Note the changed argument list if you've already used _memaccess(): You have to change and recompile programs that use _memaccess() - spawn*() now quotes arguments if required - system() now obeys quoting when parsing the command - Timezones are implemented, without day light saving (summer time) - malloc() etc.: the memory blocks are now properly aligned - Math functions now do argument and result checking and set errno - stat() now returns time stamps for directories - stat() now sets the X bit for .exe, .com, .bat and .cmd files - stat() now sets the st_dev always to 0 - utime() and utimes() fixed - Bug fixed: buffer for stdout - Dummy libm.a - open(): use SH_DENYNO sharing mode - fseek(): improved to not always flush the buffer - New functions: fmod(), frexp(), hypot(), cbrt(), rint(), trunc(), swab(), _memswap(), _nls_strlwr(), _fnlwr(), getwd(), _getext(), _remext(), strtoul(), _atoll(), _splitpath(), strftime(), fork(), getppid(), ftw(), sopen(), _fsopen(), getw(), putw(), _filesys(), chsize(), v*scanf(), _beginthread(), _endthread() - Function versions of isalpha() etc. - Function versions of abs() and labs() - qsort() is now reentrant - readdir() also returns system files - readdir() and _wildcard() now use _fnlwr() instead of strlwr() - _wildcard() no longer omits directories - truncate() and ftruncate() can no longer increase the size of a file. See chsize() - Bug fixed: fread() and fwrite() should not return -1 on error - Memory and string functions improved - Bug fixed: umask() semantic was wrong (including documentation) - Bug fixed: strncat() should not pad the destination string - Bug fixed: times() return value - Bug fixed: fclose() didn't delete temporary files - setbuffer() now uses setvbuf() - _abspath() now preserves a trailing slash - All members of the exec*() family implemented - pipe() now sets both handles to text mode Sample and test programs ------------------------ New sample programs: calc - stdio renamed stdiotst - Bug fixed: `sieve' didn't work when compiled with -DBITS New emx tools ------------- touch (set time stamp of a file) - emxrev (display revision number of emx DLLs) - texi2dvi (typeset texinfo file) - updt (copy file if changed or if newer) - emxcat (concatenate source files) - emxomf (convert a.out to OMF) - emxomfld (front end for LINK386) - emxomfar (librarian for OMF libraries) New GNU programs ---------------- info (the GNU info browser) - makeinfo (convert texinfo to info) - texindex (prepare index for TeX) New BSD libraries ----------------- curses - libbsd: random() Other changes ------------- develop.doc split into emxdev.doc and gnudev.doc - More OS/2 API calls prepared - termcap.dat improved - Library sources spread over more directories - bind.cmd and bind.bat have been removed. Use emxbind instead - unzip is now required for unpacking, PKUNZIP doesn't work - emximp moved from emxlib.zip to emxdev.zip - gccsrc3.zip merged into gccsrc2.zip - upda no longer available because `ar' can process wildcards now 0.8d (03-May-1992) ================== - The default value of the -f# emx option is now 0. If a program compiled with GCC 1.4 experiences stack exceptions, you should use emxbind to add an appropriate -f# option to the .exe file - a core dump file is now written if a protection violation occurs under OS/2 unless the -c option is used - Core dumps on SIGKILL are not disabled by the -c option - Don't lose characters if SIGALRM interrupts termio read(). If ECHO is on, the characters will be echoed again. In ICANON mode, the keyboard buffer is still flushed - termio/SIGALRM problem fixed (OS/2) - __cgets() bug fixed (OS/2) - make.cmd and make.bat renamed omake.cmd and omake.bat - omake.cmd, omake.bat, makebin.cmd, makebin.bat, makebin1.cmd and makebin1.bat were missing by accident - Terminals added to termcap.dat: rmono, ansi-color-2, ansi-color-3 - GDB now uses _isterm() instead of isatty() to make it work properly via pipes (GNU Emacs!) - GDB reopens the CON device for the debuggee - GDB changed to use ; instead of : for sending the current line to GNU Emacs - GDB: the debuggee window stays open after the process ended, "set close" command added - GCC changed to use semicolon instead of colon as directory separator in environment variables. You now can use C_INCLUDE_PATH and LIBRARY_PATH to load GCC etc. from another drive. Example: set C_INCLUDE_PATH=c:/emx/include set LIBRARY_PATH=c:/emx/lib - ar: append "$!" instead of "_supersede" to temporary file name - #pragma pack() in os2.h fixed - const pointers in os2.h fixed - os2.h: second argument of window procedure function changed from USHORT to ULONG - dup2() now available -- does not work correctly under DOS - kill (pid, 0) implemented - kill() and raise() set errno - kill (pid, sig) for pid < -1 (process group) implemented for direct children of the calling process (OS/2 only) - select() implemented for pipes created by emx and for termio input (OS/2 only) - gettimeofday() implemented - tempnam() fixed - filelength(), tell() and eof() no longer reset the F_EOF bit (Ctrl-Z) - read() now converts CR/LF to LF instead of discarding CR in text mode. Ctrl-Z is ignored if it is the last character of a file - O_NDELAY and FIONREAD now work for pipes created by pipe() of emx, but not for pipes created by CMD.EXE, for instance - Additional spawn() modes (OS/2 only) - ioctl (FGETHTYPE) added - Initialization of file handles and streams by _startup() improved - signal (SIGKILL, ...) is invalid - SIGCLD implemented (OS/2 only) - wait() return value fixed (OS/2) - _abspath() function added to library - _syserrno() added - rand() fixed 0.8c (19-Mar-1992) ================== Important notes --------------- *** YOU SHOULD RECOMPILE ALL YOUR PROGRAMS *** because the header files and the library have changed. If you can't recompile a program (due to lacking sources, for instance), use emxbind -u \emx\bin\emxl myprog to update emx in the .exe file *** DO NOT RE-LINK A PROGRAM WITHOUT RECOMPILING ALL ITS MODULES *** As several definitions in stdio.h and fcntl.h have been changed, just linking with the new library without compiling with the new include files won't work. Really. We apologize for the inconvenience emx --- The -f# option will be removed for emx 0.8f, better recompile *now* programs which require -f# - New emx option -h# to set the number of file handles - New emx option -c to disable core dumps caused by signals - The -r emx option is not applied if the file name starts with /pipe/ - Signal numbers reassigned - System calls added: __ftruncate(), __fcntl(), __pipe() - Message for SIGABRT changed. Return code for default processing of signals under OS/2 changed to 3 - termio: ICANON and IDEFAULT moved from c_iflag to c_lflag - termio: IDELETE - _ulimit3() system call replaced with __ulimit() system call - emx.dll: __ptrace(8) improved, this improves the behaviour of GDB when the debugee terminates - emx.dll: __ptrace(9) no longer steps into emx_syscall of emx.dll - __dup() syscall implemented for OS/2 - __fsync() syscall implemented for OS/2 - __scrsize() syscall implemented (not yet implemented correctly for DOS) - __dup2(n,n) fixed for DOS: don't close the file - __spawnve(): maximum size of arguments increased to 4096, E2BIG is returned if the limit is exceeded - __spawnve(): if P_DEBUG is used, the child process will be started in a separate session unless the -E option is used - __ioctl2(): FIONREAD, TCFLSH, TCSETAF - __ptrace(): PTRACE_SESSION - The following signals now cause a core dump unless catched or ignored: SIGQUIT, SIGILL, SIGTRAP, SIGEMT, SIGFPE, SIGBUS, SIGSEGV and SIGSYS - emx under DOS now uses BIOS instead of DOS calls for termio emxbind ------- emxbind: -e and -u commands added (set application type, update emx) - emxbind: -f, -p and -w options added (application type) - emxbind: -r option added (add resources) - emxbind now sets the "no internal fixups" module flag GCC --- GCC 2.1 - GCC now requires a math coprocessor (80387) - GCC: temporary files are created in the current working directory if TMPDIR is not set. TMPDIR may end with a backslash - Stack probes implemented in GCC. -mprobe enables stack probes, -mnoprobe disables stack probes. By default, stack probes are enabled. Programs compiled with -mprobe can be used with the -f0 emx option - GCC fixed: -B was ignored; PATH was used for seeking cpp, cc1, as and ld. Older versions of emx didn't use .exe files, therefore .exe wasn't appended in gcc.c when seeking a program GAS --- gas 1.38.1 - gas: signal problem fixed - makebin: gas argument replaced with as GDB --- GDB 4.4 - GDB no longer adds the .exe default extension - The debuggee is now started in a separate session - "set switch" and "show switch" commands added - GDB now can debug Presentation Manager applications Header files and C library -------------------------- Type of count parameter for memcpy etc. and return value of strlen changed from int to size_t - size_t changed from "unsigned int" to "unsigned long" - bcmp, bcopy, bzero, memcmp, memcpy, memmove, memset, strcat, strcpy and strlen coded in assembly language - Number of streams increased from 20 to 40 - open() didn't return EMFILE if the operating system ran out of file handles - chmod() didn't return 0 on success - closedir() now returns an int - div() and ldiv() now perform a signed division - Bug in exp() fixed - Bug in utime() fixed - Return value of acos() now between 0 and pi (was: -pi/2 and pi/2) - putenv() return value fixed - abort() declared volatile - sscanf() whitespace bug fixed - printf ("%%") bug fixed - struct _dtd (sys/emx.h) changed to include hundredths of a second - float.h now available (it's somewhat inaccurate because printf() and strtod() are somewhat incaccurate) - unistd.h now available (well, some bits of it) - Signal numbers reassigned, SIGEMT declared - I/O flag bits reassigned (see stdio.h, sys/fcntl.h, sys/emx.h) - Link with /emx/lib/binmode.o for setting the default open mode to binary - Some helper functions moved from libc.a (crt0.s) to libgcc.a - __main() put into libgcc.a for GCC 2.x. Currently, this function does nothing as C++ is not yet supported - Obsolete functions removed from C library and include files: prtc(), prti(), prts(). Test programs changed to not use these functions - _exit(): The return code will be replaced with 255 if it is greater than 255 - exit() now uses _cleanup() - abort() now uses _cleanup() and "raise (SIGABRT)" - fcntl() now exists, F_GETFL and F_SETFL partially implemented (O_APPEND should work, O_NDELAY is implemented for termio). F_GETFD and F_SETFD implemented for OS/2 only - ioctl(): FIONREAD implemented for handle 0 if IDEFAULT and ICANON are not set - ioctl(): TCFLSH implemented for the keyboard - ioctl(): TCSETAF now flushes the keyboard buffer - termio: ICANON and IDEFAULT moved from c_iflag to c_lflag - termio: IDELETE in c_iflag - getcwd() return value fixed - sys/emx.h now included - _seek_hdr() and _fseek_hdr() now work relative to the current position of the file pointer - scanf(): %X implemented - MAXNAMLEN and MAXPATHLEN changed to 260 - P_tmpdir in stdio.h changed to ".". tempnam() and tmpfile() This affects tmpnam(), - _ulimit3() system call replaced with __ulimit() system call - bsearch() fixed: comparison was reversed - stdarg.h improved for types with sizeof(type) < 4. problem with float promoted to double There's still a - varargs.h improved(?) - The names of all the syscall functions now start with two underscores, all the syscalls are now interfaced by a library function - tempnam() fixed for NULL passed to DIR argument - tempnam() fixed for trailing backslash in DIR argument or TMP environment variable - tempnam() now returns an absolute path name - Check for emx version in _startup() - fclose() return value fixed - Global variable _osmode (which contains DOS_MODE or OS2_MODE) implemented - New library functions: spawnl(), spawnle(), spawnlp() and spawnlpe() - New library functions: pipe(), pclose() and popen(). for OS/2, only Implemented - New library funtions: _isterm(), _swchar(), _chdir2(), _fullpath(), _fngetdrive(), _getcwd1(), _getcwd2(), _getdrive(), _memcount(), _fsetmode(), _scrsize() - ftime() implemented, see sys/timeb.h. implemented Timezones are still not - dup() fixed: copy _files[] entry - _ftime() syscall renamed __filetime() - fopen() fixed: return value - eof() fixed: use tell(), not fseek() - access() fixed: directories accessible, use (mode & 2) instead of (mode == 2), fix errno values - printf ("%04d", -1) fixed, put zeros after sign OS/2 API -------- OS/2 API calls added: DosFreeModule, DosLoadModule, DosQueryProcAddr, DosSetFileInfo, DosSetPathInfo, DosQueryPathInfo, DosQueryCurrentDisk, DosQueryFSAttach, DosQueryDBCSEnv, DosSetProcessCp, DosQueryModuleName, DosQueryModuleHandle, DosQueryProcType, DosError, DosErrClass, DosDebug - OS/2 semaphore API calls added - OS/2 tasking API calls added - OS/2 named pipe API calls added - OS/2 queue API calls added - OS/2 exception API calls added - OS/2 session manager API calls added - Some Presentation Manager calls added Sample and test programs ------------------------ sieve.c fixed: 3rd argument of memset() was wrong - /emx/test/makefile updated - Obsolete test programs deleted Other changes ------------- Directory structure changed, all GNU programs are now under /emx/gnu - GCC documentation now included (TeX) - upda.exe now included. library This utility is required for building the C - New utility: updt.exe. Used for building GCC - emximp bug fixed: list of libraries wasn't cleared when starting a new output file - emximp: -p command line option 0.8b (18-Feb-1992) ================== - See emx.chg for changes to versions older than 0.8b --------------------------- END OF HISTORY.DOC -----------------------------