* sim/ucsim/cmd.src/cmdutil.cc, sim/ucsim/cmd.src/newcmd.cc:
[fw/sdcc] / ChangeLog
index 40c1ba3cc7fb91c40dd26fab5ab0909aee5181bc..afabacbc89f4e98d14371c51931338f0ff2183b7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,441 @@
+2005-11-02 Borut Razem <borut.razem AT siol.net>
+
+       * sim/ucsim/cmd.src/cmdutil.cc, sim/ucsim/cmd.src/newcmd.cc:
+         corrected typo - #include <winsock2.h>
+
+2005-11-02 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * src/asm.c (printILine): always close tmpFile, thanks Beau E. Cox,
+         (_asxxxx_mapping): added org directive for future enhancements
+
+2005-11-01 Borut Razem <borut.razem AT siol.net>
+
+       * sim/ucsim/app.cc, sim/ucsim/cmd.src/cmdutil.cc, sim/ucsim/cmd.src/newcmd.cc:
+         enabled sockets on WIN32
+       * sim/ucsim/cmd.src/newcmd.cc: fixed bug with uninitialized variables
+
+2005-10-31 Borut Razem <borut.razem AT siol.net>
+
+       * support/regression/generate-cases.py: escape backslashes in {testcase}:
+         WIN32 backslash path delimiters should be escaped when used in C strings
+       * support/regression/tests/bitfields.c: exclude failing assertions for
+         __CYGWIN32__ and __MINGW32__ hosts
+
+2005-10-30 Borut Razem <borut.razem AT siol.net>
+
+       * src/SDCCutil.c: corrected double comparison typo
+
+2005-10-27 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * device/lib/medium/Makefile: added for new memory model medium
+       * device/include/asm/mcs51/features.h: updated for medium/pdata
+       * device/include/mcs51/c8051f120.h: added sfr16/sfr32 definitions,
+         added Multiply & Accumulate sbit's and MAC0_PAGE define
+       * device/include/mcs51/c8051f300.h: added sfr16 definitions
+       * device/include/mcs51/c8051f310.h: added sfr16 definitions
+       * device/lib/_mullong.c: update for medium model
+       * device/lib/incl.mk: added medium model
+       * doc/sdccman.lyx: documented medium model
+       * src/SDCCast.c (isBitAndPow2): simplified using updated powof2
+       * src/SDCCicode.c (geniCodeMultiply, geniCodeDivision): use updated powof2
+       * src/SDCCmain.c (optionsTable, linkEdit): enabled medium model
+       * src/SDCCmem.c (allocIntoSeg): set iaccess for pdata symbols,
+         (allocParms): set SCLS and OCLS to pdata for medium model
+       * src/SDCCsymt.c (processFuncArgs): use default_local_map and set iaccess
+         for pdata,
+         (powof2): return <0 if not power of 2
+       * src/avr/gen.c (genBitWise): use updated powof2
+       * src/mcs51/gen.c (genMinusDec): use acc if necessary,
+         (shiftR2Left2Result): small optimization in setup, save acc when storing,
+         (shiftLLeftOrResult): use B if necessary
+       * src/mcs51/main.c (_mcs51_finaliseOptions, mcs51_port): added medium model
+       * src/mcs51/peeph.def: renamed 226 to 226.b, added 226.a
+       * src/pic/main.c (_pic14_do_link): made void parameter list explicit
+       * support/regression/Makefile.in: added test-mcs51-medium
+       * support/regression/ports/mcs51-medium/spec.mk: added to test medium model
+
+2005-10-28 Bernhard Held <bernhard AT bernhardheld.de>
+
+       * src/SDCCsymt.c (compStructSize): make bitfields without (un)signed
+       specifier unsigned
+       * device/lib/time.c (mktime): fixed bug 1334315
+
+2005-10-28 Raphael Neider <rneider AT web.de>
+
+       * device/include/pic/p16f_common.inc: added common declarations
+       * src/pic/ralloc.c (initStack): moved regs *r to block start for Alpha
+
+2005-10-27 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * src/mcs51/gen.c (getTempRegs): return 0 if not enough registers found,
+         (aopPutUsesAcc): added to predict accumulator use,
+         (assignResultValue): save acc if necessary,
+         (genMinusDec): store result if indirectly addressed,
+         (genDivOneByte):  save acc if necessary,
+         (movLeft2Result): bugfix if left already in acc,
+         (genAnd, genOr, genXor, shiftL2Left2Result, shiftR2Left2Result): pay more
+           attention to accumulator use (esp. pdata),
+         (genReceive): receive pdata correctly
+       * src/SDCCicode.c (isOperandInPagedSpace): added to detect pdata operands
+       * src/SDCCicode.h: added isOperandInPagedSpace prototype
+
+2005-10-27 Raphael Neider <rneider AT web.de>
+
+       * doc/sdccman.lyx: corrected version (should be 2.5.4 not 2.5.5)
+
+2005-10-27 Raphael Neider <rneider AT web.de>
+
+       * .version: changed version to 2.5.4
+       * doc/sdccman.lyx: changed version to 2.5.4, added some remarks to PIC14
+       * device/lib/pic/libsdcc/{_mulint.c,_mullong.c}: use unsigned literals,
+         (_divschar.c,divuchar.c,_mulchar.c,_modschar.c,_moduchar): NEW,
+           arithmetics support routines
+       * device/lib/pic/Makefile.rules: have assembler sources preprocessed
+       * device/lib/Makefile.in: also create installdir for pic
+
+       * src/SDCCopt.c (cnvToFcall): mark support routines `extern' for
+         pic14 port as well
+       * src/pic/device.c (dump_sfr): rewritten to delegate register
+         placement to the linker (use `extern sym' rather than sym EQU addr),
+         (validAddress): fixed to check last specified address
+       * src/pic/gen.c (aopForSym): added code to deal with array (useless?),
+         (popGetLit): truncate literal value to 8 bit,
+         (popGet): moved assert to more appropriate place
+         (popGetExternal): create pCode operand from and mark the according
+           symbol as being `extern'
+         (popGetAddr): added sanity check on immediate's offset, provide
+           GPOINTER tag on demand
+         (aopPut): fixed for immediates,
+         (mov2w_op): move operand's address or contents to WREG (depending on
+           operand type), safer variant of mov2w,
+         (movwf,call_libraryfunc): NEW, handy abbreviations,
+         (get_argument_pcop,get_return_val_pcop,pass_argument,
+         get_returnvalue): interface for accessing function parameters and
+           return values,
+         (assignResultValuei,genRet): use new parameter/return value interface
+         (pic14_getDataSize): back to old version handling generic pointers,
+         (pic14_toBoolean,genNot,genCpl,genCmpEq,genOrOp): heavily rewritten,
+           provided implementation and/or fixed old one,
+         (genMultOneByte,genDivOneByte,genModOneByte): implemented as library
+           calls, removed legacy 8051 reference code
+         (AccLsh,AccRsh): rewritten and fixed to deal with signed operands
+         (loadSignToC): NEW, move the operands sign bit to CARRY,
+         (genGenericShift): NEW, replaces genLeftShift, genRightShift and
+           genRightShiftSigned, accepts negative shift counts,
+         (setup_fsr): load FSR and adjust IRP (indirect memory access),
+         (emitPtrByteGet,emitPtrByteSet): rewritten, now works with
+           generic pointers, __data pointers and __code pointers,
+         (genUnpackBits,genPackBits): rewritten to work with generic pointers
+           and signed bitfields, limit bitfields to 8 bit,
+         (genDataPointerGet): fixed number of bytes read,
+         (genGenPointerGet,genConstPointerGet): fixed bitfield access,
+         (genPointerGet,genPointerSet): fixed handling of __code pointers,
+           pointers to constant data are no longer assumed to point to __code
+           space, removed invalid pointer types,
+         (bitpatternFromVal): retrieve the PICs representation of an integer
+           or float literal,
+         (genDataPointerSet): fixed assigning to po_immediate operands,
+         (genGenPointerSet): implemented as library call,
+         (genIfx): fixed incorrect condition,
+         (genAddrOf): limit generic pointers' addresses to 2 bytes,
+           provide GPOINTER tag according to destination's storage class,
+         (genCast): added code to handle casting to generic pointers, added
+           sign-/zero extension of the result
+         (aop_isLitLike,op_isLitLike): fixed handling of immediates
+       * src/pic/gen.h: added macros to access IRP bit in STATUS register
+       * src/pic/genarith.c (genAddLit): use min(result's,left's) size, sign
+         extend the result
+       * src/pic/glue.c (is_shared_address,is_shared): check whether a given
+         address/register resides in the shared banks
+         (emitSymbolToFile): improved to handle global and `pinned' symbols,
+           put all variables into separate sections (have the linker arrange
+           them)
+         (picglue): put init code and interrupt handlers in separate sections
+       * src/pic/main.c: added port specific options table, modified to PORT
+         structure to make GPOINTERs 3 byte, added pic14_options
+         (_pic14_do_link): private linking routine (update paths to libraries,
+           add libsdcc.lib by default)
+       * src/pic/main.h: declare pic14_options
+       * src/pic/pcode.c: fixed instructions i/o relations,
+         (RegCond): reverted to correct version,
+         (newpCodeOpLit): truncate literals to 8 bit,
+         (genericPrint): added debug output,
+         (getRegFromInstruction): fixed for various operand types, simplified
+         (BuildFlow): fixed broken handling of isntructions with labels
+         (LinkFlow): start at last instruction in flow (skip trailing comments),
+           pass the flow on to the next instruction after CALL
+         (pCodeReplace): NEW, replace a pCode and move meta data to the new one
+         (insertPCodeInstruction): fixed inserting after a skip instruction,
+         (DoBankSelect): fixed for labeled instructions
+         (OptimizepBlock): honor --nopeep switch
+         (AnalyzeFlow,ReuseReg): prevent crash on source files with no function
+       * src/pic/pcodepeep.c (pCodePeepMatchRule): prevent NULL pointer accesses
+       * src/pic/pcoderegs.c (regIsLocal): NEW, check visibility of a register
+         (pCodeOptime2pCodes): allow disabling this optimization via
+           --no-pcode-opt due seldomly occuring bugs, fixed some conditions
+           but is still buggy), started implementation of a dataflow based
+           pCode optimization (CSE + dead code elimination)
+         (pCodeRegMapLiveRangesInFlow): removed bogus inCond
+       * src/pic/ralloc.c (initStack): renamed stack registers to STK%d, the new
+         names are independant of the stack location and therefore portable across
+         devices
+
+2005-10-27 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * src/mcs51/ralloc.c (bitType): added to detect bit variables,
+         (selectSpil): fixed bug 1337835 by not spilling bit variables
+       * support/regression/tests/bug1337835.c: added test for this bug
+       * src/mcs51/peeph.def: restart after rule 3.c,
+         addded rules 263.x to optimize loading constants
+
+2005-10-26 Raphael Neider <rneider AT web.de>
+
+       * src/SDCCsymt.c (compStructSize): allow signed bitfields for PIC ports
+       * src/pic16/gen.c (genUnpackBits): support signed bitfields,
+         (genAssign): emit warning when casting literals to generic pointer
+           type, also applies when taking the address of a fixed variable,
+         (genCast): improved casting to generic pointers
+       * src/pic16/glue.c (pic16emitStaticSeg): fixed(?) handling of fixed
+         extern variables, added verbose error message
+       * device/include/pic16/{string.h,errno.h}: added #pragma library c
+
+2005-10-26 Bernhard Held <bernhard AT bernhardheld.de>
+
+       * src/mcs51/gen.c (genMinus): fixed bug 1270906: reverse subtraction,
+       carry must be complemented too
+       * src/mcs51/peeph.def: addded rule 262 to remove double cpl c, which
+       could be emitted by genMinus
+       * src/SDCCval.c (constVal): fixed bug 1305065
+
+2005-10-25 Bernhard Held <bernhard AT bernhardheld.de>
+
+       * src/SDCCast.c (addCast): added promotion for bit variables
+       (decorateType): emit W_COMPLEMENT before the problem vanishes behind
+       promotion casts + optimisation
+       (optimizeGetWord): fix warning 'i' might be used uninitialized
+       * src/mcs51/gen.c (genCpl): removed W_COMPLEMENT
+       * src/ds390/gen.c (genCpl): removed W_COMPLEMENT
+
+2005-10-24 Bernhard Held <bernhard AT bernhardheld.de>
+
+       * src/SDCCicode.c (ast2iCode): reverted to 1.224 because of regression:
+       all chars are promoted to int; promotion should be handled in SDCCast.c
+
+2005-10-15 Jesus Calvino-Fraga <jesusc AT ece.ubc.ca>
+
+       * device/lib/_strcmp.c: Fixed bug 1326457
+
+2005-10-11 Raphael Neider <rneider AT web.de>
+
+       * device/lib/pic16/libio/i2c.ignore: added 1320, fixes broken builds
+       * device/lib/pic16/libdev/pic18f1320.c: added 1320's device library
+
+2005-10-05 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * src/SDCC.y (AT): fixed bug with sfr32 addresses when built with GCC
+       * support/regression/tests/sfr16.c: added test for the sfr32 bug
+
+2005-10-04 Raphael Neider <rneider AT web.de>
+
+       * device/include/pic16/pic18fregs.h, src/pic16/devices.inc,
+         device/lib/pic16/pics.all: added pic18f1320
+       * src/pic16/pcode.c (mnem2key): fixed prototype's argument mismatch
+
+2005-09-30 Raphael Neider <rneider AT web.de>
+
+       * src/pic16/device.c (Pics16[]): moved device descriptions to devices.inc
+       * src/pic16/devices.inc: NEW, provides device descriptions
+       * src/pic16/gen.c (genInline): fixed handling of ';'-comments
+
+2005-09-26 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * src/SDCCicode.c (operandOperation): added GETABIT, GETBYTE, GETWORD and
+         GETHBIT
+
+2005-09-25 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * doc/sdccman.lyx: updated Highest Order Bit documentation,
+         documented Any Order Bit, Higher Order Byte and Higher Order Word
+       * src/SDCC.y: added tokens GETABIT, GETBYTE, GETWORD
+       * src/SDCCast.c (optimizeGetHbit): updated to also accept bool=expr&(1<<n),
+         (optimizeGetAbit): new, to get any bit, not only the high bit,
+         (optimizeGetByte): new, to get a byte from a (long) int: expr>>(8*n),
+         (optimizeGetWord): new, to get a word from a long int: expr>>(8*n),
+         (isConformingBody): also check GETABIT, GETBYTE, GETWORD,
+         (decorateType): '&': also try GETABIT, GETBYTE, GETWORD optimization,
+           RIGHT_OP: also try GETBYTE, GETWORD optimization,
+           GETABIT, GETBYTE, GETWORD: decorate them,
+         (isShiftRightLitVal, isBitAndPowOf2): new helper functions,
+         (ast_print): added GETABIT, GETBYTE, GETWORD
+       * src/SDCCcse.c (isSignedOp): added GETABIT, GETBYTE, GETWORD
+       * src/SDCCicode.c (codeTable): added GETABIT, GETBYTE, GETWORD,
+         (geniCodeBinary): new generic binary icode,
+         (ast2iCode): added GETABIT, GETBYTE, GETWORD
+       * src/port.h: updated comment for PORT.hasExtBitOp
+       * src/mcs51/gen.c (genGetAbit): new, to get any single bit,
+         (genGetByte): new, to get a single byte,
+         (genGetWord): new, to get a word from a long,
+         (gen51Code): added GETABIT, GETBYTE, GETWORD
+       * src/mcs51/main.c (hasExtBitOp): added GETABIT, GETBYTE, GETWORD
+
+2005-09-23 Raphael Neider <rneider AT web.de>
+
+       * configure.in, configure: have device/lib/pic configured
+       * device/lib/Makefile.in: added model-pic14
+       * device/lib/clean.mk: added pic/ to clean rule
+       * device/lib/pic: added rudimentary pic14 library providing support
+         functions for multiplication/division/generic pointer access
+       * src/SDCCopt.c (convilong): mark support functions as extern
+         for pic14 port as well
+       * src/pic/gen.c (genMult): added assertions,
+         (genpic14Code): emit warning on unhandled iCodes
+       * src/pic/main.c (_hasNativeMulFor): return true only for 8x8 bit
+       * src/pic/pcode.c (pCodeOpCopy),
+       * src/pic16/pcodepeep.c (pic16_pCodeOpCopy): fixed handling of various
+         pCodeOpReg-subtypes (PO_{STATUS,INTCON,PCL,PCLATH,PCLATU,BSR,
+         SFR_REGISTER}), made safe for future extensions
+       * src/pic16/pcode.c (pic16_safepCodeUnlink): allow for removal of
+         instructions even if preceeded by SKIP instructions (also remove
+         them); removed unused code
+       * src/pic16/pcode.h: added arg2 to pCodeOpLit to match pCodeOpLit2,
+         prevents leaving parts of the structure uninitialized after copying
+
+2005-09-22 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * src/mcs51/gen.c (genMinus): fix for undetected bug introduced 3 months
+         ago by me
+       * support/regression/tests/addsub.c: added test for the bug
+
+2005-09-21 Raphael Neider <rneider AT web.de>
+
+       * device/include/pic16/pic18f1220.h,
+         device/lib/pic16/libdev/pic18f1220.c: added ECCPAS sfr and bitfield
+       * device/lib/pic16/Makefile.rules: added missing opening paren
+       * src/pic16/gen.c (pic16_genNot,pic16_genCpl): removed as these
+         are provided in genutils.c,
+         (genUminusFloat,genUminus,genCmpEq): added asserts on different
+         operand/result sizes,
+         (genCmp): assert on NULL pointers first, then check deref'ed values
+       * src/pic16/genutils.c (pic16_genCpl): fixed for different operand/
+         result size
+
+2005-09-18 Raphael Neider <rneider AT web.de>
+
+       * src/pic16/gen.c (genFarPointerGet,genFarPointerSet): removed
+         as these are now unused,
+         (genPointerGet,genPointerSet): handle FPOINTERs like POINTERs
+       * src/pic16/pcode.c (pic16_symIsSpecial): assume REG_TMPs to be
+         local, avoids uninitialized pointer dereference on r->name
+       * src/pic16/ralloc.c (newReg): fixed indentation
+
+2005-09-13 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * src/SDCCval.c (constVal): fixed bug 730366
+       * support/Util/SDCCerr.c,
+       * support/Util/SDCCerr.h: added warning W_INVALID_INT_CONST
+
+2005-09-10 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * as/mcs51/lkmem.c (summary2): fixed report for absolute areas (bug 1210220)
+
+2005-09-09 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * src/mcs51/peeph.def (241.x): fixed bug when comparing generic pointers
+
+2005-09-08 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * as/hc08/lkaomf51.c (OutputName): made name unsigned char,
+         (hex2dec): made hex_digit unsigned char, removed ascii dependance
+       * as/mcs51/lkaomf51.c (OutputName): made name unsigned char,
+         (hex2dec): made hex_digit unsigned char, removed ascii dependance
+       * as/mcs51/lkarea.c (lnkarea2): sort absolute areas to the front
+       * packihx/packihx.c (hexDigit): made c unsigned char
+       * as/mcs51/lklibr.c (fndsym),
+       * link/z80/lkgb.c (gb),
+       * link/z80/lklibr.c (fndsym),
+       * link/z80/lkrloc.c (relr),
+       * sim/ucsim/libltdl/ltdl.c (load_deplibs, try_dlopen),
+       * src/SDCC.lex (checkCurrFile, process_pragma),
+       * src/SDCCglue.c (spacesToUnderscores),
+       * src/SDCCmain.c (setParseWithComma, processFile),
+       * src/asm.c (tvsprintf, printCLine),
+       * src/avr/gen.c (emitcode, aopPut),
+       * src/ds390/gen.c (emitcode),
+       * src/hc08/gen.c (emitcode, emitinline),
+       * src/mcs51/gen.c (emitcode, genInline),
+       * src/pic/pcodepeep.c (cvt_extract_destination, cvt_extract_status,
+         tokenizeLineNode),
+       * src/pic/ralloc.c (debugLog),
+       * src/pic16/pcodepeep.c (cvt_extract_destination, cvt_extract_status,
+         tokenizeLineNode),
+       * src/pic16/ralloc.c (debugLog),
+       * src/z80/main.c (_process_pragma):
+          made all ctype.h function calls safe
+       * src/SDCCopt.c: include math.h for fabs
+       * src/SDCCpeeph.c: added macros ISCHARDIGIT, ISCHARSPACE and ISCHARALNUM
+         and used them throughout the code to make ctype.h function calls safe
+       * src/ds390/main.c (asmLineNodeFromLineNode),
+       * src/mcs51/main.c (asmLineNodeFromLineNode): made p unsigned char*
+       * src/pic/gen.c (DEBUGpic14_emitcode, pic14_emitcode): made lbp
+          unsigned char*
+       * src/pic/pcode.c (mnem2key): made mnem unsigned char*,
+         (newpCodeAsmDir): made ctype.h function calls safe
+       * src/pic16/gen.c (pic16_emitpcomment, DEBUGpic16_emitcode,
+         pic16_emitcode):  made lbp unsigned char*
+       * src/pic16/pcode.c (mnem2key): made mnem unsigned char*,
+         (pic16_newpCodeAsmDir): made ctype.h function calls safe
+       * src/xa51/gen.c (emitcode),
+       * src/z80/gen.c (_emit2): made lbp unsigned char*
+       * support/Util/MySystem.c (split_command): made cmd_line and p unsigned
+          char*
+
+2005-09-05 Raphael Neider <rneider AT web.de>
+
+       * src/pic16/ralloc.c (pic16_allocDirReg): use device specific
+         access bank splitpoint
+
+2005-09-05 Raphael Neider <rneider AT web.de>
+
+       * device/lib/pic16/libc/Makefile: added (missing) string to SUBDIRS
+
+2005-09-03 Maarten Brock <sourceforge.brock AT dse.nl>
+
+       * .version: changed to version 2.5.3
+       * doc/sdccman.lyx: changed version to 2.5.3,
+         documented --codeseg and --constseg and pragma codeseg and constseg,
+         documented bit parameters (reentrant) and bit returning
+       * src/SDCCicode.c (geniCodeReceive): fixed (possible) bug generating
+          currFunc->recvSize, but is this ok for all ports?
+         (ast2iCode): result of ~ on unsigned char must be cast to int for
+          bool to work
+       * src/SDCCmem.c (allocGlobal, allocLocal): don't put bit returning
+         function pointers in bit space
+       * src/SDCCsymt.c (checkSClass): allow bit returning function pointers,
+         (processFuncArgs): call port.reg_parm() with reentrancy info
+       * src/port.h,
+       * src/avr/main.c,
+       * src/ds390/main.c,
+       * src/hc08/main.c,
+       * src/pic/main.c,
+       * src/pic16/main.c,
+       * src/xa51/main.c,
+       * src/z80/main.c: port.reg_parm prototype extended with
+         "bool reentrant" parameter
+       * src/mcs51/main.c (_mcs51_regparm): use parameter reentrant instead of
+         options.stackAuto for allocating bit register parameters
+       * src/mcs51/gen.c (genNot): optimized complementing direct bit,
+         (genSend): set BitBankUsed if it is,
+         (selectRegBank): factored out of genCall for use in genPcall,
+         (genCall): removed redundant dtype assignmen, use selectRegBank,
+         (genPcall): handle returning in Carry properly, save in F0 if needed,
+         (genReceive): handle bit register parameters
+       * src/mcs51/ralloc.c (updateRegUsage): update BitBankUsed along the way,
+         (mcs51_assignRegisters): enable bit registers for all reentrant
+          functions and don't set BitBankUsed unconditionally
+       * src/mcs51/peeph.def (177.d): fixed bug if %2==%3
+       * support/regression/tests/bitvars.c: enable tests for SDCC_STACK_AUTO
+       * support/regression/tests/funptrs.c: added tests for BOOL and for return
+
 2005-08-27 Borut Razem <borut.razem AT siol.net>
 
        * device/lib/Makefile.in: cp on sparc-solaris (SunOS) and on