home *** CD-ROM | disk | FTP | other *** search
-
- Copyright (c) 1992-1994 SAS Institute, Inc, Cary, NC
- All Rights Reserved
-
- This document describes bug fixes and enhancements made in the 6.51
- release of the SAS/C Development System for AmigaDOS. To install
- the 6.51 patch, you must have version 6.50 of the SAS/C Development
- system installed.
-
- If this update does not fix a problem that you have been having,
- please contact our Technical Support Division for help as soon as
- possible.
-
- All reproducible reported CXERRs, Enforcer hits, and cases of bad
- code are fixed with each release. If you get one of these, please
- contact technical support immediately. It will help if you have a
- compilable test case. See chapter 3 of the User's Guide, Volume I
- for information on how to contact technical support and what
- information to provide.
-
- In addition to the specific bugs listed, several code generation
- bugs were fixed in the optimizers and the code generator (sc2).
- Since the code generation bugs did not affect most people, and they
- are not easy to describe or reproduce, we will not describe them
- individually here. We suggest that you recompile all your code if
- it is behaving strangely. Please report all enforcer hits and
- CXERRs to technical support.
-
- Also note that not all executables and shared libraries have been
- modified. Those that have not been modified keep their old version
- number (6.50). This is normal. A list of modified files appears
- at the end of this document.
-
- ***************************** IMPORTANT ***************************
-
- 1. The layout of bitfields was inadvertently changed between 6.0 and
- 6.50, which meant that structures containing bitfields were
- incompatible between the two versions. Bitfields have been
- changed back to the 6.0 method, with the exception of bitfields
- of size :0. :0 bitfields exhibited a bug in 6.0-6.3 and added
- extra unusable bytes to the structure. 6.50 bitfields do not
- add these extra bytes.
-
- 1. The __stack external variable sets the minimum stack size for
- your program, as documented in the Library Reference Manual and
- elsewhere. However, if you use it, you must set __stack to an
- even multiple of 4 bytes or risk having your machine crash.
-
- 2. Many users have inquired about the Quick Reference Guide for
- 6.50. There is no new Quick Reference Guide in 6.50; the 6.0
- guide is shipped to all new 6.50 customers, and customers who
- are upgrading should continue to use their old Quick Reference
- Guide.
-
- 3. Many users have asked about disk 6 in the installation process.
- Disk 6 is used only if you do the floppy installation; hard disk
- users do not need this disk.
-
- 4. The compiler now defines a preprocessor symbol __AMIGADATE__.
- This preprocessor symbol resolves to a datestamp string in the
- format required for the AmigaDOS VERSION command. The format is
- "(dd.mm.yy)", where dd is the day (1-31), mm is the month (1-12),
- and yy is the year. __AMIGADATE__ is available from both C
- and C++.
-
- 5. The macros for some functions defined in the C header files, are
- now not defined if compiling C++. They conflicted with the names
- of some member items of C++ classes in <iostream.h> or
- <complex.h>. Problem functions are <string.h>/index(),
- <math.h>/min(), max(), <fcntl.h>/open(), read(), write(),
- close(), <stdlib.h>/abs(). Many of these have alternate names
- using preceding underscores that can be used instead.
-
- 6. The priority of the autoinit functions for utility.library and
- the various Commodore math libraries has been changed to 100
- (from 250). This allows the autoinitializer for the SPROF
- profiler code to use utility.library if it is compiled with
- UTILLIB.
-
- The following describe problems and bugs that have been addressed
- in the 6.51 release.
-
- =============================
- Library and Header Changes
- =============================
-
- COMMON global variables were not set to zero as expected in all
- cases.
-
- Source code to the file _iob.c, needed for stdio initialization,
- was not shipped as planned.
-
- The function scdir() did not work when called twice in a row.
-
- #including <unistd.h> from C++ gave an error because the C++ keyword
- "template" was used as a parameter name in a prototype.
-
- Various header files contained macro defines for abs, min, max, etc.
- that conflicted with class member names in C++. These macros are
- now no longer defined when compiling C++.
-
- C++ iostream library was not handling bytes with the value 0xff
- correctly.
-
- __autoopenfail was modified to catch an error situation, to simplify
- the code, and to have it set return codes correctly.
-
- ctime() was not calculating leap years correctly in all cases.
-
- __stdargs version of SetRexxVar() was not working. It always
- returned an error code of '9' (string too long).
-
- The __stack external variable did not work when programs linked with
- cback.o were run from WorkBench.
-
- UNIX-style error codes (errno codes) were cleaned up to be more
- accurate.
-
- The file <sys/commwben.h> generated warning 148 (incomplete struct
- tag) if compiled with the STRICT or WARN 148 options. #pragmas have
- been added to suppress this warning.
-
- Executable names longer than 7 characters trashed part of the
- __stdiov37 string and caused the console window that opens to handle
- stdio under workbench to close immediately, rather than waiting for
- the user to click the close gadget.
-
- __tzset() did not free allocated memory until the program exited.
- This caused problems for programs that run a long time and call
- __tzset() repeatedly.
-
- dfind/dnext incorrectly modified fib_FileName. The field was
- converted to all lower case.
-
- _main.c did not handle arguments containing a starting quote but no
- closing quote correctly.
-
- _main.c defined ESCAPE to be '\027' when it should have been '\033'.
-
- dfind()/dnext() did not work correctly on drives formatted with the
- directory-caching file system. This caused the "grep" utility to
- fail on these drives as well.
-
- _CXD33 routine called the Commodore unsigned divide routine rather
- than the SAS/C provided signed routine.
-
- repmem() did not work in programs compiled with PARM=R.
-
- UNIX compatible functions did not always return -1 on failure.
- While this is legal according to the UNIX documentation, which says
- any nonzero value is OK, many UNIX programs depend on -1
- specifically. Changed functions were unlink(), rename(), remove(),
- system(), setvbuf(), putenv().
-
- __fpinit() did not use an autoinitializer to initialize the math
- coprocessor, if present.
-
- __fpinit() did not check for the presence of a math coprocessor
- before issuing math coprocessor instructions.
-
- __stdargs signal handlers did not get parameters passed to them
- correctly.
-
- assert() macro now explicitly casts its argument to int.
-
- fgetc(), fcloseall(), fdopen(), fread(), and flushall() referred to
- stdio and therefore linked in the stdio autoinitializer when called.
-
- fseek() did not work if you did a seek to SEEK_END after reading or
- writing earlier in the file.
-
- scanf() did not always return the number of arguments parsed
- correctly.
-
- The builtin versions of strcmp() and memcmp() were doing signed
- comparisons instead of unsigned comparisons.
-
- The restriction on the number of arguments to the program has been
- removed.
-
- The formal parameter name, "template", in mkstemp() and mktemp() has
- been changed to "template_arg" because template is a C++ keyword.
-
- =====================
- CPR Debugger Changes
- =====================
-
- The "break <ln> trace" command did not work as documented if the
- breakpoint was encountered while single-stepping.
-
- CPR left a lock on the current directory upon exit when invoked from
- CLI.
-
- Enforcer hits were generated when using the 'View/Modules' menu item
- and some other commands in a file with no debugging information.
-
- CALL command sometimes did not work if >2 parameters were used.
-
- CPR crashed if OpenDevice was called from a program outside of CPR's
- control. (If you have been using the -nolib option to work around
- this problem, you can remove the option now.)
-
- CATCH command did not work on tasks created outside of CPR's
- control.
-
- Starting CPR from WorkBench and giving the program extra arguments
- could crash the machine upon exiting CPR.
-
- CPR's mixed mode window repeated some source lines in some programs.
-
- When displaying multidimensional array members of structures via a
- pointer and using array slices, CPR displayed the data incorrectly
- and generated Enforcer hits in some instances.
-
- CPR could not correctly disassemble the DIVSL.L opcode.
-
- Global variables from one module were not accessible in the watch
- window when in other modules under some circumstances.
-
- The range option on the watch command displayed one element too few.
-
- d (char)-1 (and some other casts) caused the message
- "***floating point exception" from CPR.
-
- ==============================
- Parsing and Diagnostic Changes
- ==============================
-
- The C++ translator produced files with a .o extension instead of a
- .p extension when PPONLY was used.
-
- The C++ translator failed to issue an error for using the 'new'
- operator on an abstract class type.
-
- Compiler warned about different prototypes whose only difference was
- the use of the "signed" keyword on int, short, or long variables.
-
- Even with the nomultipleincludes option turned on, SC would include
- a header twice if the second include is in a different case than the
- first.
-
- Compiler did not complain when you tried to pass a structure in a
- register to an __asm function.
-
- The compiler was suppressing all errors and warnings to the console
- if SCMSG was shut down during a compilation.
-
- SC driver did not accept '.cc' file extensions for C++ files.
-
- Internal error in C++ when you defined the preprocessor symbol
- __cplusplus on the command line.
-
- C++ translator defined the preprocessor symbol __SASC__ instead of
- __SASC to identify the compiler. The C compiler defines the latter.
-
- IGNORE, ERROR and WARN had no effect on C++.
-
- SC only allowed a maximum OPTDEPTH of 6. This has been changed to
- 255. Please use this option and OPTRECURDEPTH sparingly, since
- excessive recursive inlining can increase the size of your program
- dramatically.
-
- ====================================
- Code Generation/Optimization Changes
- ====================================
-
- The allocation rules for bitfields were different in 6.50 than in
- 6.3, rendering structures with bitfields written by programs
- compiled with 6.3 unreadable with 6.50, and vice-versa. The 6.51
- bitfields match the layout of 6.3, except as noted in "IMPORTANT"
- (see above), paragraph 1, for bitfields of size :0.
-
- Compiler called __asm function pointers in a function pointer array
- as __stdargs functions in some cases.
-
- Compiler generated bad code for a dense switch statement with large
- unsigned long numbers.
-
- Bug was fixed with the peephole optimizer that caused some void _STI
- routines to return a nonzero value and thereby terminate the
- program.
-
- DISASM option output had extra ',' between the EA and {offset:width}
- fields in 68020+ bitfield operations.
-
- GO did not respect 'volatile' status in certain rare cases.
-
- Structure copy did not clear all possibly aliased values in
- registers.
-
- Compiler generated a regargs version of a function in some rare
- cases.
-
- Compiler was trashing parameter if register A4 was used as a
- parameter register for an __asm function declared __saveds.
-
- Compiler was not allocating double and float register variables in
- math coprocessor mode.
-
- =================
- SE Editor Changes
- =================
-
- The CED macros were not installed completely.
-
- SE scrollbar behaved erratically.
-
- SE overwrote its own title bar after switching to a custom screen
- and back to WorkBench if a large font was chosen as the
- "Screen Text" font.
-
- SE locked up when the Zoom gadget was clicked, another file was
- loaded, then the scrollbar was moved to the bottom.
-
- SE crashed if you brought it up on the WorkBench screen, hit ENTER
- to put it on its own screen, then opened the configuration window,
- chose a new font, and clicked on the USE button.
-
- The '}' character used the tabstops instead of the autoindent stops
- when autoindent mode is on.
-
- =============================
- SCMSG Message Browser Changes
- =============================
-
- The text of some error messages did not appear when certain fonts
- were used on AGA machines.
-
- Hitting HELP on a C++ error message did not work.
-
- Double-clicking on messages generated by compiling from within the
- SE editor did not work.
-
- SCMSG failed to update the display after CTRL-D was used to delete a
- message other than the first one.
-
- =====================
- Other Utility Changes
- =====================
-
- LCTOSC locked up in infinite loop if given an invalid flag to the -L
- option.
-
- ASM could not handle source files with more than 32768 lines.
-
- ASM got Bcc offsets wrong if a DATA section occurred before the CODE
- section in a source file.
-
- ASM did not use BRIEF extension format where it could.
-
- ASM gave a syntax error for "dc.l %01".
-
- ASM required an extra ',' between the EA and {offset:width} fields
- in 68020+ bitfield operations. This is still accepted for
- compatibility with old code, but is no longer required.
-
- ASM generated illegal code for the CALLM opcode when register
- indirect with predecrement EA is used. This EA mode is illegal with
- the CALLM opcode, and should be flagged as such.
-
- ASM generated illegal code for a byte MOVE with address register
- indirect. This is an invalid mode, and is now flagged as an error.
-
- ASM generated incorrect code when indexed indirect with scaling mode
- is used.
-
- ASM didn't get the right bit pattern for the MOVE16 instruction.
-
- OMD output had extra ',' between the EA and {offset:width} fields in
- 68020+ bitfield operations.
-
- OMD could not correctly disassemble the DIVSL.L opcode.
-
- MKMK utility had problems with very long filenames.
-
- MKMK utility did not handle indentation correctly for long lines.
-
- SCSETUP failed if run from workbench.
-
- OML failed if the -t option is used and the temporary filename
- specified is on a different volume.
-
- OML always used the same filename for temporary files. It now uses
- different names to be more multitasking-friendly.
-
- New Manx-compatibility utilities crashed if given certain invalid
- parameters.
-
- SCOPTS had the default value for the LISTHEADERS option incorrect.
-
- SMAKE considered ~ to be a special escape character when included on
- a command line.
-
- SMAKE substituted trash for $< if you used it twice in one rule and
- there was no .c.o rule.
-
- ===============================
- Documentation/Help File Changes
- ===============================
-
- C++ error 1597 was not documented. It is now documented in the file
- sc:help/scmsg.guide.
-
- The Library Reference manual incorrectly showed the strstream
- constructor as having a default value of ios::out for the third
- formal parameter mode. Please cross out the "= ios::out" in the
- strstream constructor prototype described on page 684 of the Library
- Reference manual. This occurs in two places on page 684, once under
- the Synopsis section and once under the Constructors section. This
- has been corrected in the online sc_lib.guide file.
-
- The Library Reference manual descriptions of mkstemp() and mktemp()
- need to be changed on pages 349 and 351, respectively, to reflect
- the changes made in the header files. In both cases, the formal
- parameter, template should be be changed to template_arg. This has
- been corrected in the online sc_lib.guide file.
-
- ======================
- List of Modified Files
- ======================
-
- The following files were modified during the 6.51 patch installation
- process. If they have version numbers, the version should be 6.51.
-
- Drawer File(s)
- ------ -----
- sc:c asm
- sc:c ccotsc
- sc:c cpr
- sc:c cprx
- sc:c cprk
- sc:c lntoslink
- sc:c mcc
- sc:c mkmk
- sc:c mln
- sc:c omd
- sc:c oml
- sc:c sc
- sc:c sc5
- sc:c scopts
- sc:c scsetup
- sc:c se
- sc:c slink
- sc:c smake
- sc:cxxinclude iostream.h
- sc:extras/mkmk gensmake.c
- sc:extras/memlib mwcontrol.c
- sc:help sc.guide
- sc:help sc_lib.guide
- sc:help scmsg.guide
- sc:include assert.h
- sc:include fcntl.h
- sc:include string.h
- sc:include/sys commwben.h
- sc:lib cback.o
- sc:lib All library (.lib files)
- sc:libs sc1.library
- sc:libs sc2.library
- sc:libs scpeep.library
- sc:libs scgo.library
- sc:libs sccxx.library
- sc:source autoopenfail.c
- sc:source cback.a
- sc:source _fpinit.c
- sc:source _iob.c
- sc:source _main.c
-