home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Professional / OS2PRO194.ISO / os2 / patches / watcom / c386 / readme.a < prev    next >
Encoding:
Text File  |  1992-05-27  |  21.2 KB  |  569 lines

  1.  
  2.           ****************
  3.           ** C Compiler **
  4.           ****************
  5.  
  6.     #define L_U(s) L##s
  7.     would not expand correctly if the argument s contains a
  8.     backslash character.
  9. ===========================================================
  10.  
  11.     The 386 compiler was generating segment fixups for variables
  12.     in the FLAT model when the /d2 option was specified.
  13. ===========================================================
  14.  
  15.     Based pointer bugs fixed.
  16. ===========================================================
  17.  
  18.     Under certain circumstances, the C compiler may cause a memory
  19.     protection fault or exhibit strange behaviour if it runs low
  20.     on memory.
  21. ===========================================================
  22.  
  23.     Specifying -mf after -zw would lead to 
  24.         "invalid register modified by pragma"
  25.     messages.
  26. ===========================================================
  27.  
  28.     Compiler would hang if a function with a variable defined at an
  29.     inner scope is inlined with the -oe option.
  30. ===========================================================
  31.  
  32.     Compiler would hang if a function with a variable defined with
  33.     extern storage class is inlined with the -oe option.
  34.  
  35.     Compiler would page fault if a function is inlined in the second
  36.     or third parts of a for statement.
  37.  
  38.     Real-mode compiler would report "Incomplete type" if an array was
  39.     declared with a size that is a multiple of 64K.
  40. ===========================================================
  41.  
  42.     Allow multiple anonymous unions/structs within a struct/union.
  43. ===========================================================
  44.  
  45.     C/386 accessed "short" and "unsigned short" bit fields as if they
  46.     were ints.
  47. ===========================================================
  48.  
  49.     Using symbol names in an in-line pragma sequence could
  50.     cause the compiler to hang.
  51. ===========================================================
  52.  
  53.     Functions which have the __saveregs attribute now save
  54.     and restore any segment registers that are used.
  55. ===========================================================
  56.  
  57.     L"..." were not handled correctly inside macros.
  58. ===========================================================
  59.  
  60.     The spawn and exec families of functions are now automatically
  61.     recognized as being vararg functions, and are called
  62.     accordingly.
  63. ===========================================================
  64.  
  65.           ********************
  66.           ** Code Generator **
  67.           ********************
  68.  
  69.     If the address of a parameter was used as an array, the
  70.     address would be incorrectly calculated.  The following
  71.     would not work.
  72.     
  73.     foo( int x )
  74.     {
  75.         *((BYTE*)(&x)+1) = 1;
  76.     }
  77.     
  78.     The problem did not occur if the parameter used was a
  79.     pointer.  The following would be ok.
  80.     
  81.     foo( int *x )
  82.     {
  83.         x[1] = 1;
  84.     }
  85. ===========================================================
  86.  
  87.     If the switches -zc -zw -zu -ml were used, and a struct
  88.     assignment or parameter was used, where the source of
  89.     the move (or parameter) was a const item, the compiler
  90.     would generate code that set DS to CS without saving and
  91.     restoring DS.  For example.
  92.     
  93.     typedef struct {
  94.         int i,j,k,l,m;
  95.     } ST;
  96.     const ST x = { 1,2,3,4,5 };
  97.     
  98.     foo()
  99.     {
  100.         bar( x );
  101.     }
  102. ===========================================================
  103.  
  104.     If an I2000 message (Not enough memory to fully optimize
  105.     procedure) or an I2001 message (Not enough memory to maintain 
  106.     full peephole) was issued, and constant data was being
  107.     placed in the code segment (-mf, -zc switches used) then
  108.     there was the possibility of the data being placed in the
  109.     middle of code sequences or switch statement jump tables.
  110. ===========================================================
  111.  
  112.     If a function takes it arguments in the 8087 register (fortran
  113.     intrinsic functions, C functions with special pragma), and one the
  114.     arguments contained a ?: operator, or a call to the fortran MIN,MAX
  115.     functions, the compiler could issue "Internal compiler error 10" and/or
  116.     go into an infinite loop.
  117.  
  118. ===========================================================
  119.  
  120.     Using the /4,/4r,/4s switches could lead to an internal compiler
  121.     error 40. /3r or /3s could be used as a workaround.
  122. ===========================================================
  123.  
  124.     When calling a functions returning a structs, the correct
  125.     value was not always retrieved. This occurred if the
  126.     return value was assigned elsewhere or returned from the
  127.     calling function with no intervening control flow or
  128.     redefinition of its fields. For example
  129.  
  130.     value = foo();
  131.     printf( "%d\n", value.x );        // prints the wrong value
  132.     return( value );
  133.  
  134.     value = foo();
  135.     printf( "%d\n", value.x );        // prints the wrong value
  136.     value2 = value;
  137.  
  138.     value = foo();
  139.     if( value.x ) printf( "%d\n", value.x );// prints the right value
  140.     return( value );                // due to control flow
  141.  
  142.     value = foo();
  143.     value.y = 7;
  144.     printf( "%d\n", value.x );        // prints the right value
  145.     return( value );            // due to assignment
  146. ===========================================================
  147.  
  148.     The compiler sometimes assumed that the EAX register
  149.     was not modified by functions like IF@DFMOD. Use the
  150.     /d__NO_MATH_OPS as a workaround.
  151. ===========================================================
  152.  
  153.     Incorrect /d2 debugging information was being generated
  154.     if /of+ (for the C compiler) was also specified. This
  155.     showed up by the debugger's "show calls" command not
  156.     working properly.
  157. ===========================================================
  158.  
  159.     The code generator might sometimes output references
  160.     to a line number zero in the debugging information for
  161.     line numbers.
  162. ===========================================================
  163.  
  164.           ***************
  165.           ** C Library **
  166.           ***************
  167.  
  168.     malloc would not allocate DOS low memory blocks close
  169.     to 64k in size under DOS4GW.  Relaxed to allow 1M maximum.
  170. ===========================================================
  171.  
  172.     __Init_Argv_ is undefined in Windows 386 3S libraries. 
  173. ===========================================================
  174.  
  175.     In OS/2 2.x versions of fstat() and getftime(), mask off
  176.     network attribute before checking if it's a disk file.
  177. ===========================================================
  178.  
  179.     In the 386 math libraries for the /fpc /3s model, the
  180.     following math functions contained incorrect code.
  181.     
  182.     acos asin atan atan2 cos cosh exp fabs fmod log log10 pow
  183.     sin sinh sqrt tanh
  184. ===========================================================
  185.  
  186.     Using WILDARGV in /ml /mc or /mh caused a program to 
  187.     crash during startup. The fix was made to INITRTNS.ASM.
  188. ===========================================================
  189.  
  190.     Flags are now removed from stack after int 25 and int 26
  191.     (16-bit libraries).
  192. ===========================================================
  193.  
  194.     Check for -0.0 in sqrt. i.e. Now allow -0.0 as valid argument.
  195. ===========================================================
  196.  
  197.     Spawn functions did not work with Intel CodeBuilder.
  198. ===========================================================
  199.  
  200.     __CHP was modifying the condition codes on the 386.
  201. ===========================================================
  202.  
  203.     EBX was being destroyed by _bios_printer and _bios_serialcom in
  204.     -3s libraries.
  205. ===========================================================
  206.  
  207.           ******************
  208.           ** Disassembler **
  209.           ******************
  210.  
  211.     Object files with an extremely large number of segments
  212.     in them would hang the disassembler.
  213. ===========================================================
  214.  
  215.           *************
  216.           ** DOS4/GW **
  217.           *************
  218.  
  219.         The mouse button state is now supplied to a user-installed
  220.         mouse callback function in BX.
  221.  
  222.         A DOS/16M kernel bug that caused the direction flag to be
  223.         set during some calls to INT 21h/06 has been fixed.
  224.  
  225.  
  226. Several bug fixes and improvements since release 1.5:
  227.  
  228.         INT 10h functions that take or return values in segment
  229.         registers are now supported.
  230.  
  231.         Page faults caused by the debugger, when VM is on, should no
  232.         longer cause a crash out to DOS.
  233.  
  234.         One program may now spawn another under VM.
  235.  
  236.         Page faults caused by the DOS/16M kernel are now handled
  237.         properly by VM.
  238.  
  239.         The mouse mickey count is now supplied to a user-installed
  240.         mouse callback function in DI and SI.
  241.  
  242.         DOS/4GW programs will now run properly under EMM386.
  243.  
  244.         DOS function 06 no longer destroys the processor flags in
  245.         a semi-random fashion.
  246.  
  247.         ==== Major functionality change ===
  248.  
  249.         The 80386 debug registers are now used to monitor for
  250.         writes within 16 bytes of absolute address zero, providing
  251.         basic null pointer protection. To enable this, set the DOS4G
  252.         environment variable to include the string "nullp":
  253.  
  254.                 SET DOS4G=nullp
  255.  
  256.         If the user accesses a location in the range 0p to 15p, a single
  257.         step trap will be generated. If no debugger is present to get
  258.         control, DOS4GW will crash with our standard register dump and
  259.         the message: "Null pointer accessed at " ...
  260.  
  261.         This setting is not the default because there is a small performance
  262.         penalty on 386s for using the debug registers. If a debugger is
  263.         present, it will get control through the single step/debug interrupt
  264.         (INT 01).
  265.  
  266.         Note: NULL POINTER PROTECTION NOT AVAILABLE UNDER WINDOWS.
  267.  
  268. Several bug fixes and improvments since release 1.4:
  269.  
  270.         The register dump at crash time is now more helpful and includes
  271.         the contents of CR0, 2, and 3.
  272.  
  273.         The interrupt enable flag is no longer trashed in Windows
  274.         enhanced mode.
  275.  
  276.         More stack space was made available for DOS4G initialization,
  277.         which eliminates some random crashes during program load.
  278.  
  279.         IRQ 5 handling is improved, allowing PM handlers to handle interrupts
  280.         from both real and protected mode.
  281.  
  282.         The unsupported INT 31h function 0102h (DosMemResize) now sets
  283.         the carry flag properly.
  284.  
  285.         INT 31h function 0600h (Lock Segments) now returns with carry
  286.         clear outside VM.
  287.  
  288.         Various failures to load are now diagnosed.
  289.  
  290.         Spawning another DOS/4GW application no longer causes loss of
  291.         memory.
  292.  
  293.         The file handle in AX is now widened on return from INT 21h
  294.         function 3Ch.
  295.  
  296.         The version number and copyright date have been updated.
  297.  
  298.         INT 21h functions 6 and 29h now work correctly.
  299.  
  300.         A program's exit code is now returned correctly in a Windows
  301.         enhanced mode DOS box.
  302.  
  303. ===========================================================
  304.  
  305.  
  306.     Interaction with Pharlap based programs and DOS4GW VMM improved.
  307.  
  308.     VMM speed significantly increased.
  309.  
  310.     The mouse button state is now supplied to a user-installed
  311.     mouse callback function in BX.
  312.  
  313.     A DOS/16M kernel bug that caused the direction flag to be
  314.     set during some calls to INT 21h/06 has been fixed.
  315.  
  316. ===========================================================
  317.  
  318.           **********************
  319.           ** Graphics Library **
  320.           **********************
  321.  
  322.     The return value for _remapallpalette() was wrong.
  323. ===========================================================
  324.  
  325.     Chips and Technologies SuperVGA cards were not being
  326.     identified properly.  Also, modes _SVRES16COLOR and
  327.     _XRES256COLOR were enabled for this mode.
  328. ===========================================================
  329.  
  330.     The number of text rows on the screen was not always being
  331.     set properly, affecting _outtext().
  332. ===========================================================
  333.  
  334.     There was a problem with the _setwindow() function, some
  335.     images were not being displayed properly.
  336. ===========================================================
  337.  
  338.     Multi-lingual character support added to _grtext() for 
  339.     codepages 437, 863 and 850.
  340. ===========================================================
  341.  
  342.     The _scrolltextwindow() function in SuperVGA modes was using
  343.     the default plotting action instead of _GPSET.
  344. ===========================================================
  345.  
  346.     The number of text rows and columns was not always correct
  347.     with some SuperVGA adapters.
  348. ===========================================================
  349.  
  350.     The _polygon() function was occassionally blowing the stack
  351.     causing memory to be trashed.
  352. ===========================================================
  353.  
  354.     Mixing printf() output with graphics output in SuperVGA modes
  355.     would sometimes cause objects to appear at the top of the
  356.     screen instead of the bottom.
  357. ===========================================================
  358.  
  359.     Added a new routine _GetStackLow() instead of referencing the
  360.     variable _STACKLOW directly. This routine can be replaced in
  361.     multitasking environments where the value in _STACKLOW is not valid.
  362. ===========================================================
  363.  
  364.           ********************
  365.           ** C Header Files **
  366.           ********************
  367.  
  368.     STDIO.H was missing the prototype for 'fdopen'.
  369. ===========================================================
  370.  
  371.     All the header files that define 'NULL' were modified
  372.     to check and see if the macro had already been defined.
  373. ===========================================================
  374.  
  375.           ***************
  376.           ** Librarian **
  377.           ***************
  378.  
  379.     The command ++symbol.dll.exportname didn't work.
  380. ===========================================================
  381.  
  382.     Librarian was over-estimating the number of pages req'd
  383.     for the dictionary.  Result was libraries larger than
  384.     necessary (but still valid).
  385. ===========================================================
  386.  
  387.           ************
  388.           ** Linker **
  389.           ************
  390.  
  391.     The linker would GP fault when being fed CodeView style
  392.     debugging information from the Zortech C++ compiler rather
  393.     than ignoring it.
  394. ===========================================================
  395.  
  396.     When generating OS/2 LE or LX (flat) style executables,
  397.     the linker would not place the contents of the OPTION
  398.     DESCRIPTION string into the executable image. 
  399. ===========================================================
  400.  
  401.     Linker would GP fault when the very first token started
  402.     with a weird character (e.g. =).
  403. ===========================================================
  404.  
  405.     Overlay manager wasn't giving the debugger the correct
  406.     information about segment locations.
  407. ===========================================================
  408.  
  409.     Relocation handling system in the 16-bit linker could
  410.     not handle segments much larger than 16 megabytes when
  411.     linking for os/2 flat model executables. 
  412. ===========================================================
  413.  
  414.     Fill in 0x300 as the expected version number for
  415.     windows. Windows will not automatically load static
  416.     references to dlls if this is not set!
  417. ===========================================================
  418.  
  419.     The previous big change to the linker's relocation
  420.     handling system caused it to GP fault in a few boundary
  421.     cases.
  422. ===========================================================
  423.  
  424.     Overlapping ledatas in an object file could cause the
  425.     linker to try and pad negative amounts of nulls.
  426. ===========================================================
  427.  
  428.     A few minor modifications to match extensions and bug
  429.     fixes to the extended memory library.
  430. ===========================================================
  431.  
  432.           ************************
  433.           ** Windows Supervisor **
  434.           ************************
  435.  
  436.     stopped supervisor from allowing aliasing of NULL 
  437.     pointers.
  438. ===========================================================
  439.  
  440.     callback routines allocated from 32-bit DLL's were
  441.     not getting a proper thunking layer set up.
  442. ===========================================================
  443.  
  444.     supervisor was calling SetBitmapBits instead of
  445.     GetBitmapBits for its cover of GetBitmapBits
  446. ===========================================================
  447.  
  448.     supervisor was not maintaining a complete list of
  449.     alias selectors, and if the 32-bit application's
  450.     memory block resized and the base address of the
  451.     block changed, some alias selectors could have
  452.     invalid base addresses, causing a page fault.
  453.  
  454.           ************
  455.           ** WVIDEO **
  456.           ************
  457.  
  458.     Allow the OS/2 debugger to open up to 40 files (useful 
  459.     when lots of the DLL's being used have debugging information).
  460. ===========================================================
  461.  
  462.     When the global debugging information section exceeded
  463.     64K in size, there was a possiblity that the OS/2, 
  464.     Windows, and QNX versions of the debugger would access
  465.     violate when attempting to read it in.
  466. ===========================================================
  467.  
  468.     If a program loaded a DLL and then hit a breakpoint then 
  469.     the Windows and OS/2 debuggers would not properly skip
  470.     over the breakpoint when execution was resumed.
  471. ===========================================================
  472.  
  473.     The SHIFT-TAB key did not work properly in the Windows
  474.     hosted debugger.
  475. ===========================================================
  476.  
  477.     Using print/window with structures could cause the
  478.     debugger to corrupt memory.
  479. ===========================================================
  480.  
  481.     Watch points did not work correctly in the NLM debugger.
  482. ===========================================================
  483.  
  484.     Debugging a PharLap application that installed the floating
  485.     point emulator did not properly disable the emulator when
  486.     premeaturely terminating the application with the debugger.
  487. ===========================================================
  488.  
  489.     Automatically disable use of the debug registers in an
  490.     OS/2 2.0 DOS box, since it doesn't allow us to modify
  491.     them.
  492. ===========================================================
  493.  
  494.     Extremely large (in excess of 400 characters) command
  495.     lines in debugger invoke files would act as if random
  496.     characters were missing from the file.
  497. ===========================================================
  498.  
  499.     Some problems with the Novell remote link dropping
  500.     packets were resolved.
  501. ===========================================================
  502.  
  503.     Garbage characters might appear at the end of some
  504.     help topics.
  505. ===========================================================
  506.  
  507.     If not enough relocation values were entered for the
  508.     NEW/SYMBOL command, and the debugger started prompting
  509.     for new values, the symbolic information would not be
  510.     correctly mapped.
  511. ===========================================================
  512.  
  513.     In the help window, double clicking on a word that started
  514.     at the left edge of the window would not pick up the first
  515.     letter when searching for the topic. E.g., if the word
  516.     was "foobar", the topic searched for would be "oobar".
  517. ===========================================================
  518.  
  519.     You can now debug PharLap applications in an OS/2 DOS
  520.     box.
  521. ===========================================================
  522.  
  523.     While debugging an overlaid application, the debugger
  524.     may not have been able to examine the memory for a
  525.     section if it was not already loaded when WVIDEO was
  526.     entered.
  527. ===========================================================
  528.  
  529.     The memory address shown in the assembly window for a
  530.  
  531.         mov     ax,[bp+di]
  532.  
  533.     instruction would not be correct if bp + di was greater
  534.     than 64K.
  535. ===========================================================
  536.  
  537.     The Windows STD.DLL file was accidently compiled with
  538.     some internal debugging support enabled. This could
  539.     cause Windows to hang or the debugger to GP fault if
  540.     the system did not have a monochrome display card attached.
  541. ===========================================================
  542.  
  543.     The debugger would get confused if the physically first line
  544.     number information for a module was not also the numerically
  545.     lowest line number for the file (#line directives could cause
  546.     this not to be true).
  547. ===========================================================
  548.  
  549.           **********
  550.           ** WOMP **
  551.           **********
  552.  
  553.     Check for 64k debugging segments was applied to all segments.
  554. ===========================================================
  555.  
  556.           **************
  557.           ** Profiler **
  558.           **************
  559.  
  560.     Fixed problem with WPROF not detecting the presence of
  561.     a mouse in all circumstances.
  562.  
  563.     Fixed problem with systems that do not have the "."
  564.     directory as the first entry in a sub-directory.
  565. ===========================================================
  566.  
  567.     WSAMPOS2.EXE now can sample PM applications properly.
  568. ===========================================================
  569.