home *** CD-ROM | disk | FTP | other *** search
-
- ****************
- ** C Compiler **
- ****************
-
- #define L_U(s) L##s
- would not expand correctly if the argument s contains a
- backslash character.
- ===========================================================
-
- The 386 compiler was generating segment fixups for variables
- in the FLAT model when the /d2 option was specified.
- ===========================================================
-
- Based pointer bugs fixed.
- ===========================================================
-
- Under certain circumstances, the C compiler may cause a memory
- protection fault or exhibit strange behaviour if it runs low
- on memory.
- ===========================================================
-
- Specifying -mf after -zw would lead to
- "invalid register modified by pragma"
- messages.
- ===========================================================
-
- Compiler would hang if a function with a variable defined at an
- inner scope is inlined with the -oe option.
- ===========================================================
-
- Compiler would hang if a function with a variable defined with
- extern storage class is inlined with the -oe option.
-
- Compiler would page fault if a function is inlined in the second
- or third parts of a for statement.
-
- Real-mode compiler would report "Incomplete type" if an array was
- declared with a size that is a multiple of 64K.
- ===========================================================
-
- Allow multiple anonymous unions/structs within a struct/union.
- ===========================================================
-
- C/386 accessed "short" and "unsigned short" bit fields as if they
- were ints.
- ===========================================================
-
- Using symbol names in an in-line pragma sequence could
- cause the compiler to hang.
- ===========================================================
-
- Functions which have the __saveregs attribute now save
- and restore any segment registers that are used.
- ===========================================================
-
- L"..." were not handled correctly inside macros.
- ===========================================================
-
- The spawn and exec families of functions are now automatically
- recognized as being vararg functions, and are called
- accordingly.
- ===========================================================
-
- ********************
- ** Code Generator **
- ********************
-
- If the address of a parameter was used as an array, the
- address would be incorrectly calculated. The following
- would not work.
-
- foo( int x )
- {
- *((BYTE*)(&x)+1) = 1;
- }
-
- The problem did not occur if the parameter used was a
- pointer. The following would be ok.
-
- foo( int *x )
- {
- x[1] = 1;
- }
- ===========================================================
-
- If the switches -zc -zw -zu -ml were used, and a struct
- assignment or parameter was used, where the source of
- the move (or parameter) was a const item, the compiler
- would generate code that set DS to CS without saving and
- restoring DS. For example.
-
- typedef struct {
- int i,j,k,l,m;
- } ST;
- const ST x = { 1,2,3,4,5 };
-
- foo()
- {
- bar( x );
- }
- ===========================================================
-
- If an I2000 message (Not enough memory to fully optimize
- procedure) or an I2001 message (Not enough memory to maintain
- full peephole) was issued, and constant data was being
- placed in the code segment (-mf, -zc switches used) then
- there was the possibility of the data being placed in the
- middle of code sequences or switch statement jump tables.
- ===========================================================
-
- If a function takes it arguments in the 8087 register (fortran
- intrinsic functions, C functions with special pragma), and one the
- arguments contained a ?: operator, or a call to the fortran MIN,MAX
- functions, the compiler could issue "Internal compiler error 10" and/or
- go into an infinite loop.
-
- ===========================================================
-
- Using the /4,/4r,/4s switches could lead to an internal compiler
- error 40. /3r or /3s could be used as a workaround.
- ===========================================================
-
- When calling a functions returning a structs, the correct
- value was not always retrieved. This occurred if the
- return value was assigned elsewhere or returned from the
- calling function with no intervening control flow or
- redefinition of its fields. For example
-
- value = foo();
- printf( "%d\n", value.x ); // prints the wrong value
- return( value );
-
- value = foo();
- printf( "%d\n", value.x ); // prints the wrong value
- value2 = value;
-
- value = foo();
- if( value.x ) printf( "%d\n", value.x );// prints the right value
- return( value ); // due to control flow
-
- value = foo();
- value.y = 7;
- printf( "%d\n", value.x ); // prints the right value
- return( value ); // due to assignment
- ===========================================================
-
- The compiler sometimes assumed that the EAX register
- was not modified by functions like IF@DFMOD. Use the
- /d__NO_MATH_OPS as a workaround.
- ===========================================================
-
- Incorrect /d2 debugging information was being generated
- if /of+ (for the C compiler) was also specified. This
- showed up by the debugger's "show calls" command not
- working properly.
- ===========================================================
-
- The code generator might sometimes output references
- to a line number zero in the debugging information for
- line numbers.
- ===========================================================
-
- ***************
- ** C Library **
- ***************
-
- malloc would not allocate DOS low memory blocks close
- to 64k in size under DOS4GW. Relaxed to allow 1M maximum.
- ===========================================================
-
- __Init_Argv_ is undefined in Windows 386 3S libraries.
- ===========================================================
-
- In OS/2 2.x versions of fstat() and getftime(), mask off
- network attribute before checking if it's a disk file.
- ===========================================================
-
- In the 386 math libraries for the /fpc /3s model, the
- following math functions contained incorrect code.
-
- acos asin atan atan2 cos cosh exp fabs fmod log log10 pow
- sin sinh sqrt tanh
- ===========================================================
-
- Using WILDARGV in /ml /mc or /mh caused a program to
- crash during startup. The fix was made to INITRTNS.ASM.
- ===========================================================
-
- Flags are now removed from stack after int 25 and int 26
- (16-bit libraries).
- ===========================================================
-
- Check for -0.0 in sqrt. i.e. Now allow -0.0 as valid argument.
- ===========================================================
-
- Spawn functions did not work with Intel CodeBuilder.
- ===========================================================
-
- __CHP was modifying the condition codes on the 386.
- ===========================================================
-
- EBX was being destroyed by _bios_printer and _bios_serialcom in
- -3s libraries.
- ===========================================================
-
- ******************
- ** Disassembler **
- ******************
-
- Object files with an extremely large number of segments
- in them would hang the disassembler.
- ===========================================================
-
- *************
- ** DOS4/GW **
- *************
-
- The mouse button state is now supplied to a user-installed
- mouse callback function in BX.
-
- A DOS/16M kernel bug that caused the direction flag to be
- set during some calls to INT 21h/06 has been fixed.
-
-
- Several bug fixes and improvements since release 1.5:
-
- INT 10h functions that take or return values in segment
- registers are now supported.
-
- Page faults caused by the debugger, when VM is on, should no
- longer cause a crash out to DOS.
-
- One program may now spawn another under VM.
-
- Page faults caused by the DOS/16M kernel are now handled
- properly by VM.
-
- The mouse mickey count is now supplied to a user-installed
- mouse callback function in DI and SI.
-
- DOS/4GW programs will now run properly under EMM386.
-
- DOS function 06 no longer destroys the processor flags in
- a semi-random fashion.
-
- ==== Major functionality change ===
-
- The 80386 debug registers are now used to monitor for
- writes within 16 bytes of absolute address zero, providing
- basic null pointer protection. To enable this, set the DOS4G
- environment variable to include the string "nullp":
-
- SET DOS4G=nullp
-
- If the user accesses a location in the range 0p to 15p, a single
- step trap will be generated. If no debugger is present to get
- control, DOS4GW will crash with our standard register dump and
- the message: "Null pointer accessed at " ...
-
- This setting is not the default because there is a small performance
- penalty on 386s for using the debug registers. If a debugger is
- present, it will get control through the single step/debug interrupt
- (INT 01).
-
- Note: NULL POINTER PROTECTION NOT AVAILABLE UNDER WINDOWS.
-
- Several bug fixes and improvments since release 1.4:
-
- The register dump at crash time is now more helpful and includes
- the contents of CR0, 2, and 3.
-
- The interrupt enable flag is no longer trashed in Windows
- enhanced mode.
-
- More stack space was made available for DOS4G initialization,
- which eliminates some random crashes during program load.
-
- IRQ 5 handling is improved, allowing PM handlers to handle interrupts
- from both real and protected mode.
-
- The unsupported INT 31h function 0102h (DosMemResize) now sets
- the carry flag properly.
-
- INT 31h function 0600h (Lock Segments) now returns with carry
- clear outside VM.
-
- Various failures to load are now diagnosed.
-
- Spawning another DOS/4GW application no longer causes loss of
- memory.
-
- The file handle in AX is now widened on return from INT 21h
- function 3Ch.
-
- The version number and copyright date have been updated.
-
- INT 21h functions 6 and 29h now work correctly.
-
- A program's exit code is now returned correctly in a Windows
- enhanced mode DOS box.
-
- ===========================================================
-
-
- Interaction with Pharlap based programs and DOS4GW VMM improved.
-
- VMM speed significantly increased.
-
- The mouse button state is now supplied to a user-installed
- mouse callback function in BX.
-
- A DOS/16M kernel bug that caused the direction flag to be
- set during some calls to INT 21h/06 has been fixed.
-
- ===========================================================
-
- **********************
- ** Graphics Library **
- **********************
-
- The return value for _remapallpalette() was wrong.
- ===========================================================
-
- Chips and Technologies SuperVGA cards were not being
- identified properly. Also, modes _SVRES16COLOR and
- _XRES256COLOR were enabled for this mode.
- ===========================================================
-
- The number of text rows on the screen was not always being
- set properly, affecting _outtext().
- ===========================================================
-
- There was a problem with the _setwindow() function, some
- images were not being displayed properly.
- ===========================================================
-
- Multi-lingual character support added to _grtext() for
- codepages 437, 863 and 850.
- ===========================================================
-
- The _scrolltextwindow() function in SuperVGA modes was using
- the default plotting action instead of _GPSET.
- ===========================================================
-
- The number of text rows and columns was not always correct
- with some SuperVGA adapters.
- ===========================================================
-
- The _polygon() function was occassionally blowing the stack
- causing memory to be trashed.
- ===========================================================
-
- Mixing printf() output with graphics output in SuperVGA modes
- would sometimes cause objects to appear at the top of the
- screen instead of the bottom.
- ===========================================================
-
- Added a new routine _GetStackLow() instead of referencing the
- variable _STACKLOW directly. This routine can be replaced in
- multitasking environments where the value in _STACKLOW is not valid.
- ===========================================================
-
- ********************
- ** C Header Files **
- ********************
-
- STDIO.H was missing the prototype for 'fdopen'.
- ===========================================================
-
- All the header files that define 'NULL' were modified
- to check and see if the macro had already been defined.
- ===========================================================
-
- ***************
- ** Librarian **
- ***************
-
- The command ++symbol.dll.exportname didn't work.
- ===========================================================
-
- Librarian was over-estimating the number of pages req'd
- for the dictionary. Result was libraries larger than
- necessary (but still valid).
- ===========================================================
-
- ************
- ** Linker **
- ************
-
- The linker would GP fault when being fed CodeView style
- debugging information from the Zortech C++ compiler rather
- than ignoring it.
- ===========================================================
-
- When generating OS/2 LE or LX (flat) style executables,
- the linker would not place the contents of the OPTION
- DESCRIPTION string into the executable image.
- ===========================================================
-
- Linker would GP fault when the very first token started
- with a weird character (e.g. =).
- ===========================================================
-
- Overlay manager wasn't giving the debugger the correct
- information about segment locations.
- ===========================================================
-
- Relocation handling system in the 16-bit linker could
- not handle segments much larger than 16 megabytes when
- linking for os/2 flat model executables.
- ===========================================================
-
- Fill in 0x300 as the expected version number for
- windows. Windows will not automatically load static
- references to dlls if this is not set!
- ===========================================================
-
- The previous big change to the linker's relocation
- handling system caused it to GP fault in a few boundary
- cases.
- ===========================================================
-
- Overlapping ledatas in an object file could cause the
- linker to try and pad negative amounts of nulls.
- ===========================================================
-
- A few minor modifications to match extensions and bug
- fixes to the extended memory library.
- ===========================================================
-
- ************************
- ** Windows Supervisor **
- ************************
-
- stopped supervisor from allowing aliasing of NULL
- pointers.
- ===========================================================
-
- callback routines allocated from 32-bit DLL's were
- not getting a proper thunking layer set up.
- ===========================================================
-
- supervisor was calling SetBitmapBits instead of
- GetBitmapBits for its cover of GetBitmapBits
- ===========================================================
-
- supervisor was not maintaining a complete list of
- alias selectors, and if the 32-bit application's
- memory block resized and the base address of the
- block changed, some alias selectors could have
- invalid base addresses, causing a page fault.
-
- ************
- ** WVIDEO **
- ************
-
- Allow the OS/2 debugger to open up to 40 files (useful
- when lots of the DLL's being used have debugging information).
- ===========================================================
-
- When the global debugging information section exceeded
- 64K in size, there was a possiblity that the OS/2,
- Windows, and QNX versions of the debugger would access
- violate when attempting to read it in.
- ===========================================================
-
- If a program loaded a DLL and then hit a breakpoint then
- the Windows and OS/2 debuggers would not properly skip
- over the breakpoint when execution was resumed.
- ===========================================================
-
- The SHIFT-TAB key did not work properly in the Windows
- hosted debugger.
- ===========================================================
-
- Using print/window with structures could cause the
- debugger to corrupt memory.
- ===========================================================
-
- Watch points did not work correctly in the NLM debugger.
- ===========================================================
-
- Debugging a PharLap application that installed the floating
- point emulator did not properly disable the emulator when
- premeaturely terminating the application with the debugger.
- ===========================================================
-
- Automatically disable use of the debug registers in an
- OS/2 2.0 DOS box, since it doesn't allow us to modify
- them.
- ===========================================================
-
- Extremely large (in excess of 400 characters) command
- lines in debugger invoke files would act as if random
- characters were missing from the file.
- ===========================================================
-
- Some problems with the Novell remote link dropping
- packets were resolved.
- ===========================================================
-
- Garbage characters might appear at the end of some
- help topics.
- ===========================================================
-
- If not enough relocation values were entered for the
- NEW/SYMBOL command, and the debugger started prompting
- for new values, the symbolic information would not be
- correctly mapped.
- ===========================================================
-
- In the help window, double clicking on a word that started
- at the left edge of the window would not pick up the first
- letter when searching for the topic. E.g., if the word
- was "foobar", the topic searched for would be "oobar".
- ===========================================================
-
- You can now debug PharLap applications in an OS/2 DOS
- box.
- ===========================================================
-
- While debugging an overlaid application, the debugger
- may not have been able to examine the memory for a
- section if it was not already loaded when WVIDEO was
- entered.
- ===========================================================
-
- The memory address shown in the assembly window for a
-
- mov ax,[bp+di]
-
- instruction would not be correct if bp + di was greater
- than 64K.
- ===========================================================
-
- The Windows STD.DLL file was accidently compiled with
- some internal debugging support enabled. This could
- cause Windows to hang or the debugger to GP fault if
- the system did not have a monochrome display card attached.
- ===========================================================
-
- The debugger would get confused if the physically first line
- number information for a module was not also the numerically
- lowest line number for the file (#line directives could cause
- this not to be true).
- ===========================================================
-
- **********
- ** WOMP **
- **********
-
- Check for 64k debugging segments was applied to all segments.
- ===========================================================
-
- **************
- ** Profiler **
- **************
-
- Fixed problem with WPROF not detecting the presence of
- a mouse in all circumstances.
-
- Fixed problem with systems that do not have the "."
- directory as the first entry in a sub-directory.
- ===========================================================
-
- WSAMPOS2.EXE now can sample PM applications properly.
- ===========================================================
-