=============================== Read Me File for XLINK V4.XX =============================== Updated: 25/Jan/2000 [Grzm] Release of XLINK 4.51P Archived: $Revision: 1.104 $ ======== Contents ======== 1. Important Information 2. Manual Corrections and Updates -- see XMAN.TXT 3. Known Problems in Current Version 4. Program Corrections and Updates 5. Files supplied in this release. ********************************************************************** * NOTE: Manual Corrections and Updates are now described in XMAN.TXT * ********************************************************************** ======================== 1. Important Information ======================== 4.51D 1998-12-01 * The IAR Universal Binary Relocatable Object Format, UBROF, has been updated to version 8.0.0. This means that XLINK will now output UBROF 8 files when given UBROF 8 input. The UBROF format is used by IAR's C-SPY debugger and a number of other debuggers/emulators. The new version of the output format adds support for Embedded C++. This adds a new output format to XLINK: -Fubrof8 Output UBROF 8 even if no input was UBROF 8 As before, using -r or -Fdebug will produce output using the latest version of UBROF used in any of the input files. If you are using a debugger/emulator other than C-SPY that reads UBROF and a compiler generating UBROF 8 (check the documentation accompanying the compiler) and the output file cannot be loaded, the new format version could be the cause. In that case try using -Fubrof7/-Fubrof6/-Fubrof5 or contact the supplier of your debugger/emulator. Also be sure to check the compiler release notes for any pertinent information on this issue. As of this writing only IAR compilers capable of compiling C++ generate UBROF 8 output. 4.51C 1998-10-21 * XLINK can now generate ELF format output with DWARF format debug information. See XMAN.TXT for details. 4.51A 1998-10-08 * Segment placement has been improved. See XMAN.TXT for details. 4.50C 1998-05-14 * The IAR Universal Binary Relocatable Object Format, UBROF, has been updated to version 7.0.0. This means that XLINK will now output UBROF 7 files when given UBROF 7 input. The UBROF format is used by IAR's C-SPY debugger and a number of other debuggers/emulators. The new version of the output format exists mainly to expand the system for keeping track of IAR specific type and object attributes. This adds a new output format to XLINK: -Fubrof7 Output UBROF 7 even if no input was UBROF 7 As before, using -r or -Fdebug will produce output using the latest version of UBROF used in any of the input files. If you are using a debugger/emulator that reads UBROF and a compiler generating UBROF 7 (check the documentation accompanying the compiler) and the output file cannot be loaded, the new format version could be the cause. In that case try using -Fubrof6/-Fubrof5 or contact the supplier of your debugger/emulator. Also be sure to check the compiler release notes for any pertinent information on this issue. 4.49I 1997-12-22 * XLIB version 3.26S has been changed to no longer by default process command line parameters to XLIB batch files. When processing an XLIB batch file, XLIB used to consider a slash ('\') followed by one or more digits to be a batch file parameter, to be replaced with text from XLIB's command line. This is no longer the case unless the name of the batch file is preceded by the command line option '-p', like this: XLIB -p If '-P' is used instead of '-p', the character '@' is used instead of '\' in this processing. 4.49A 1997-08-18 * The IAR Universal Binary Relocatable Object Format, UBROF, has been updated to version 6.0.0. This means that XLINK will now output UBROF 6 files when given UBROF 6 input. The UBROF format is used by IAR's C-SPY debugger and a number of other debuggers/emulators. The new version of the output format can, in addition to a number of other smaller improvements, result in a very significant reduction in the size of the output file. In conjunction with this three new output formats have been added to XLINK: -Fubrof5 Output UBROF 5 even if any input was UBROF 6 -Fubrof6 Output UBROF 6 even if no input was UBROF 6 -Fubrof Output UBROF (a synonym for -Fdebug) If you are using a debugger/emulator that reads UBROF and a compiler generating UBROF 6 (check the documentation accompanying the compiler. No compiler released as of yet generates UBROF 6) and the output file cannot be loaded, the new format version could be the cause. In that case try using -Fubrof5 or contact the supplier of your debugger/emulator. Also be sure to check the compiler release notes for any pertinent information on this issue. There is one feature of UBROF 6 that, if used, prevents XLINK from being able to produce UBROF 5 output. This feature is source file references. To get around this problem, use embedded source (usually enabled by the compiler command line option "-re"). See the compiler documentation for more information. * Support for IEEE-695 is now at product status for two more debuggers. The recommended format variant modifier settings for these are: 6812 Noral debugger -ygvs 740 Mitsubishi debugger -ylmba In the process of adding this support, three more format variant modifiers were added. These are: -yv Handle variable life times -ys Output stack adjust records -ya Output module locals in BB10 block 4.48K * The exit status is now 2 when any errors occurred, and 0 otherwise. This can be modified by using a new command line option, "-ws". With "-ws" the exit status is 1 if there were no errors, but there were one or more warnings. Previous to version 4.48K XLINK worked as if "-ws" was always specified. If you have batch files or scripts dependent on the old behavior, use "-ws". If you have turned off warnings to get a more useful exit status, you can now turn them on again. Also note that individual warnings can be disabled with the use of the -w option. Disabled warnings do not affect the return status. 4.48J * Support for IEEE-695 is now at product status for 7700 (HP debugger), M16C (HP debugger or Mitsubishi PDB30 debugger) and T900 (Toshiba debugger). The available format variant modifiers for IEEE-695 are: -yg Output global types globally -yl Output global types in each module -yb Treat bit sections as byte sections -ym Adjust output for Mitsubishi PDB30 debugger -ye No block-local constants Several modifiers can be used at the same time, by specifying more than one character after the "-y". For example, -ygl makes XLINK output global types both globally and in each module. The format variant modifier -yb is recommended for all currently supported debuggers. This means that, for example, users who want output for the PDB30 debugger should use -ylbm. Recommended settings for some combinations of cpus and debuggers: M16C Mitsubishi PDB30 -ylbm M16C HP RTC debugger -ygb H8S HP RTC debugger -ygb H8300 HP RTC debugger -ygb H8300H HP RTC debugger -ygb 7700 HP RTC debugger -ygb 7700 Toshiba RTE900 m25 -ygbe T900 Toshiba RTE900 m25 -ygbe 68HC16 Microtech debugger -ylb? 4.48B * XLINK has been changed so that the need for the -t (use temporary file) option is greatly reduced. Its use should now be unnecessary under practically all circumstances. Using the -m (don't cache input files) option still results in a significant reduction in memory usage, and its use is now recommended on all platforms. Not using -m is unlikely to result in any great performance gains under most circumstances, and can actually degrade performance. * New experimental format variants for UBROF: -Y1 Use new compact representation of common typedefs and enums. -Y2 Use new compact representation of common macros. They can be combined by writing -Y3. No UBROF reader yet supports the new formats, but the information is represented in such a way that old UBROF readers should be able to read the format, only with some loss of information. Using these format variants results in much smaller output files for programs with many modules. * Release status for new format: -Fxcoff78k. See below for more info. 4.48A * Beginning with this release XLINK is a 32-bit application. This means that under DOS and all flavors of Windows only 386 and later processors are supported. * Beta support for a new output format: -Fxcoff78k. This is a NEC proprietary format and works for the NEC 78k series of processors. The xcoff78k format has the following variant options: -Y1 Limit symbols to 31 chars (otherwise 255 chars). -Y2 Strip directory info from file paths. -Y4 Include extra module information. This includes enum constants, typedefs and sfrs, and can cause the output file to become much larger, since this information is kept for each module. Combinations of these can be turned on by adding the numbers together, ie -Y7 turns on all three. 4.47G * Note that there exists two different ways of getting UBROF information in the object file. One is to use the -r flag that automatically will use C-SPY specific library routines (such as putchar, getchar, ...), the other is to use -Fdebug that will use generic library routines instead of the C-SPY specific ones. The -r option has higher priority than the -F option. * Note that to replace CSTARTUP in a library the easiest way is to do that in the linker command-file, like: -A cstartup -! Your new cstartup -! -C library -! Your old library, still containing original -! -! cstartup -! To replace another library routine use: your_new_routine library or together with cstartup: your_new_routine -A cstartup -C library * Note that a bit-segment is declared in the segment-option to lie at bit-addresses (not byte-addresses as the rest of them). * The different types on segments are: CODE Normal code DATA Normal data UNTYPED undefined memory (symbols, etc) BIT bit memory CONST normal const memory XDATA 8051 xdata IDATA 8051 idata ZPAGE 740 zpage (represented as data in UBROF) NPAGE 740 npage (represented as xdata in UBROF) The NEAR memory is normally a 16-bit addressable memory not necessary starting from address 0. The FAR memory is a 24- or a 32-bit addressable memory where the compiler only uses the low word (low byte,...) to calculate indexes into for instance an array. The HUGE memory is as the FAR memory except that the compiler uses all bits for index-calculations. The main difference with the NEAR, FAR, and HUGE memories from the ordinary CODE, DATA, and CONST memories are that the linker will not check references to NEAR, FAR, or HUGE segments. These are the NEAR, FAR, and HUGE memories that exists: NEAR data NEARCODE code NEARCONST constants NEARC as NEARCONST FAR data FARCODE code FARCONST constants FARC as FARCONST HUGE data HUGECODE code HUGECONST constants HUGEC as HUGECONST 4.47F * Error 38: "The word 'multiply' was changed to 'multiple'". Error 62: "The word 'multiply' was changed to 'multiple'". ================================= 2. Manual Corrections and Updates ================================= 4.49F 1997-10-20 * A new document, XMAN.TXT, is now part of the XLINK distribution. It describes Manual Corrections and Updates. ==================================== 3. Known Problems in Current Version ==================================== 4.51P 2000-01-25 * XLINK0136: Specifying filler ranges explicitly (using -h) does not work if any segment parts are placed using banked placement (-b). Use packed placement (-P) instead. * XLINK0135: The range error diagnostics (error 18 and warning 47) only specify the offset into the segment part. They should also specify which segment part the problem occurred in. * XLINK0134: XLINK does not produce acceptable output in the IEEE-695 format for assembler modules with source debug information. 4.51L 1999-09-07 * XLINK0119: When doing static overlay, XLINK fails to warn about functions called from indirect functions and from someplace else. This is dangerous, if, for instance, one of these is from an interrupt function and the other from main. 4.51K 1999-08-24 * XLINK0116: Under certain circumstances XLINK can fail to place empty segments. This will happen if the entire memory address range in which to place the empty segments has already been taken by previous segment placements, or by absolute code from assembler modules, but the address (not the byte) after the range is still free. 4.50A 1998-04-27 * XLINK0045: Static overlay system: A function which does not appear to be called (warning 39) still counts as a caller for warning 16 (function called from two function trees), resulting in two warnings instead of one. =================================== 4. Program Corrections and Updates =================================== 4.51P 2000-01-25 * XLINK0138: Since XLINK 4.51K, some unreferenced types have been included in output files using formats that supply type information. There is no known case of this causing any problems, but it does make output files larger than they need to be. In any case, it is now fixed. * XLINK0137: In the coff output format, line number info sections were not aligned to even four byte boundaries, which they must be. 4.51O 99-11-18 * XLIB0002: XLIB could crash when doing list-object-code on an absolute (linked) input file that was using UBROF version 5 or earlier. Fixed in XLIB 3.27I. * XLINK0131: When generating UBROF 8 output from assembler input files or from input files of an earlier UBROF version, XLINK generated incorrect output. This bug was introduced in XLINK 4.51L. * XLINK0130: When generating Motorola S-records (format motorola), XLINK generated incorrect output for addresses greater than 0xFFFFFF. * XLINK0129: Using the ELF output format variant modifier -yn (suppress debug info) could result in a crash. * Error message 104 (-P: failed to fit all segments into specified ranges) has been improved slightly. It now always reports the number of separately placable collections of segment parts. Earlier it sometimes reported the number of segment parts, irrespective of whether they could be placed independently. 4.51N 99-10-28 * XLINK0128: Bytes resulting from absolutely placed segment parts were not included in the sorted output used for some formats from version 4.51K of XLINK. * XLINK0127: The special hack for swapped byte order for the PIC target could result in spurious warning 52 (multiple definitions of byte in common segment) messages when filler bytes (-H) was used. * XLINK0126: The feature introduced in XLINK 4.51K, where some output formats used address order, resulted in incorrect output in these formats for common segments (typically interrupt vectors) with more than one range defined. * XLINK0125: When running under the WorkBench, XLINK crashed when trying to output the exact types involved in a type conflict warning (warning 6) and no list file was selected. This bug was introduced in XLINK 4.51M. * It is now possible to set the level of all non-fatal diagnostic messages. See XMAN.TXT for details. * Diagnostic messages for command line options given in an Extended Command Line (.xcl) file, and for syntactic problems in reading the file, now indicate the exact position in the file of the problem. This means that in the Embedded WorkBench it is now possible to double-click these diagnostics and end up at the correct place in the file. 4.51M 1999-10-06 * XLINK0124: When doing IEEE-695 output for the PDB debugger, XLINK generated an incorrect alignment record for segments with alignment 4 and over. * XLINK0123: If an extended command line (.xcl) file ended inside a '//'-comment or after a '*' inside a '/*'-comment, XLINK crashed. * XLINK0122: When an empty segment part with no public symbols, no references in or out and no extra space allocated contained the program start address, XLINK produced the wrong program start address. XLINK0108 and XLINK0112 are previous problems in the same series. * Added the command line option -h for explicitly specifying the ranges to be filled by -H. See XMAN.TXT for more information. * XLINK0121: The feature introduced in XLINK 4.51K, where some output formats used address order, also resulted in the disappearance of any calculated checksum (-J) from the output using these formats. * When printing a checksum value (-J) in the linker list file, now only the relevant portion (1, 2 or 4 bytes) of the checksum is printed, instead of always printing a 4 byte value. * Added support for the 6811 and SH processors to the ELF output format. * Improved type output in diagnostics and the linker list file for C++ classes. * The output of C++ symbol names in XLIB has been improved in steps, starting with version 3.27F (released together with XLINK 4.51K). 4.51L 1999-09-07 * In the entry list section of the linker list file, module local symbols are now marked 'LOCAL'. * XLINK0120: When trying to output the conflicting types in a type conflict warning (warning 6) for input files using UBROF version 6 or earlier, XLINK would get an internal error. The same thing could happen in XLIB when doing a 'list-object-code' on one of these files. 4.51K 1999-08-24 * Output using the intel-standard, intel-extended, motorola, millenium, ti7000, rca, tektronix, extended-tekhex, hp-code and mpds-code output formats (and any two-file output formats producing a file in one of these formats) is now done in address order. A new temporary command-line option -k exists in order to turn off this behavior. * XLINK can now do scatter loading (-Q). See XMAN.TXT for details. * The cross reference information in the list file is now at segment part level. This means, that for compilers that support this, cross reference will be for individual functions and variables. Prior to this, all cross reference information was at the module level. * XLINK0118: Many internal errors when running under the WorkBench would trigger a second internal error (unexpected exception) on the way out. * XLINK0117: Checksum calculation (-J) could sometimes cause an internal error (In function: bb_get_ptr - M15, Diagnostic: no data). * XLINK0115: Placing an unneeded segment in far memory with extra space (+NNNN) caused an internal error. * XLINK0114: When outputting DWARF debugging information the output was wrong if there was a struct/union field with a basic type that was not used anywhere else in the program. * XLINK0113: It is now an error to use a segment placement command with no address ranges (meaning that it should use the same address ranges as the previous segment placement command) when one of them uses bit addresses and the other uses byte addresses. For example, the following will now cause an error: -Z(DATA)SEG=1000 -Z(BIT)BITVARS= * XLINK0112: As a by-product of fixing XLINK0108 (not giving an error for an some undefined but needed segment) XLINK started giving an error for undefined segments that were truly not needed. This should now work properly. * Some diagnostic messages now provide a little more information. * XLINK now supports UBROF version 8.0.2, which adds the T_ATTR_NAME record type. * Support for the MS8 processor. * Minor improvements in type output in diagnostics. * The experimental feature -xo to generate a static overlay system map (call graph) listed functions even if they were excluded from the final output. * The Elf (ELF/DWARF) output format now supports the 68HC16 processor and a new format variant. See XMAN.TXT for more info. 4.51J 1999-05-31 * XLINK0111: When doing checksums (-J), the last checksummed range was sometimes omitted from the list of checksummed areas in the linker list file. * XLINK0110: Default file extensions for two-file output formats still did not work. Now the second file always got the default file extension (something like .a26) and the first file defaulted to the second file's extension. This bug was introduced when trying to fix XLINK0106. * XLINK0109: When using the output format xcoff78k with the format variant modifier -ye and an assembler file included SFR declarations, XLINK aborted with an internal error. * XLINK0108: No error was given if an empty segment was not present in any segment placement command. Normally this is OK, but when the address of such a segment is needed, this is wrong. * XLINK0107: Empty segments placed in previous segment placement commands did not cause later segment placements ranges to split. Example: -ZEMPTY=400-4FF -ZBAR=0-FFFF. This should place the empty segment EMPTY at address 400 and cause the range 0-FFFF to be split into 0-3FF and 400-FFFF. * Warning 33 (-r overrides -F) is no longer emitted when running under the Workbench. * Improved the checking for output files overwriting other input or output files. * XLINK now supports COFF output files compatible with the MPLAB debugger for the PIC processor. See XMAN.TXT for more information. 4.51I 1999-04-22 * XLINK0106: When using a two-file output format (like -Fdebug-motorola, which should produce one UBROF file for C-SPY, and one Motorola hex file) and specifying an output file name including the file extension (which is always the case when using the WorkBench), the second output file was given the same name as the first, and thus overwriting it. The problem was introduced in version 4.51G. * XLINK0105: Absolute code in assembler modules was checked for overlap against relocatable segments in all address spaces, not just in the code address space. * XLINK0104: Using packed segment placement (-P) with no address range to indicate the same range as the last placement command did not work if a different segment type than that of the primary segment placement command was used, and the second segment type indicated the same address space as the first. Segment types CODE and CONST are like this for many targets. * XLINK0103: Numbers in segment placement command line options are normally specified in hexadecimal, but numbers starting with a dot ('.') are in decimal. The latter feature didn't work. * When using the UBROF output format (-r, -Fdebug etc.) and linking with no modules which contained C basic type size information, XLINK output default sizes for all such basic types, which is unnecessary and potentially incorrect. * The XLINK DLL, which is used when running under the WorkBench, no longer looks for input files in the connected directory. This only affects files specified in the linker command file, since the WorkBench itself always uses an absolute path name for all files included in the project. The connected directory is not a well-defined entity under the WorkBench and looking for files there can only cause problems. * Support for the SM8500 and SM600 processors. 4.51H 1999-03-26 * XLINK0102: When there is errors during linking, no object file should be produced unless the command line option -B (forced dump) is given. This was not always the case. * XLINK0101: When address translation (-M) was active, erroneous warning messages (warning 53) could be generated while writing a linker list file. * XLINK0100: Address translation (-M) could cause a crash. * XLINK0099: When using packed segment placement (-P), XLINK sometimes generated erroneous segment conflict errors (error 124). 4.51G 1999-03-17 * New experimental feature: Arbitrary output files. -Oformat[,variant][=filename] Any number of -O command line options can be specified. Each will result in one output file using the format `format', possibly with the variant `variant' (as if specified in a -Y or -y command line option). If no filename is given, the output file will get the same name as some other output file, or the name given in a -o command line option, with the default extension for the format. If the filename starts with a '.', it is assumed to be an extension, and the file gets the same name as if no name was given, only with the specified extension. Example: -Odebug=foo -Omotorola=.s19 -Ointel-extended,1=abs.x This will result in one output file named foo.dbg, using the UBROF format, one named foo.s19, using the MOTOROLA format, and one named abs.x, using the INTEL-EXTENDED format as if -Y1 was also given. As before, if -r is specified, only one output file is generated, using the UBROF format and selecting special runtime library modules for C-SPY. * The filler bytes command line option (-H) can now take a filler string. See XMAN.TXT for details. * Address translation (-M), which was mentioned in XMAN.TXT for XLINK 4.51E, was not actually enabled in the release version. * A new modifier for the -Z segment placement command line option has been added. -Z@ will give the old segment placement behavior of placing segments without taking into account any other use of the address ranges given. This is basically only useful if you actually want to get segment overlap. Giving the command line option -@ will cause all -Z command line options to behave as if given as -Z@. The -@ feature is to be considered experimental and may disappear or be renamed in a future version. * XLINK0098: When using the SYSROF format, symbols were sometimes output incorrectly, and function debug information was incorrect for compilers using UBROF 7 or later. * XLINK0097: Block local statics were output with the wrong address in the output formats SYSROF, AOMF8051, AOMF8096, and the ASHLING variants. * XLINK0096: The address space information for sam8 was incorrect, resulting in the segment list in the linker list file being sorted in the wrong order. * XLINK0095: When using downwards segment placement into far memory ranges which overlap with other placement, the linker could place segments into the wrong part of the ranges. * XLINK0094: When writing the output format xcoff78k, the magic number identifying the selected processor was wrong if any of the options causing XLINK to create an internal synthetic module was used. In particular, using filler bytes (-H) caused this to happen. * XLINK0093: Segment placement could under rare circumstances cause an internal error. * XLINK0092: Segments given extra space using the +NNNN syntax (usually stack segments) were displayed without the extra space in the segment map in the linker list file if the segment had no other content. * XLINK0091: When using the output format IEEE-695, XLINK produced broken output if there was source in include files. * XLINK0090: When translating file references to UBROF 5 style embedded source, XLINK failed to find the source file if there was only one source file. 4.51F 1999-02-01 * XLINK0089: The warning about multiple output formats was emitted without taking into account any -w (disable warning) options. * XLINK0088: Placing common segments in far memory did not work. This bug has apparently always existed. * XLINK0087: Segment duplication (-K) could sometimes fail to duplicate some segments. This bug appeared first in XLINK 4.51A. * XLINK0086: When using internal buffering, which is needed for the output formats msp430_txt, xcoff78k, ieee-695, elf and simple, as well as when filler bytes or checksums are used, if two assembler modules had contiguous absolute parts, XLINK would write into (or over the end of) the wrong internal buffer, which could result in crashes or wrong output. * XLINK0085: Segment duplication (-K) did not work correctly for common segments. * XLINK0084: When segment placement was reworked in XLINK 4.51A, the special hack for far segment placement was broken. Variable initialization no longer worked if there was more than 64K of far data. * For targets using runtime model attributes, a section was added to the linker list file describing these. * When a segment part belonging to a segment placed with packed placement (-P) is listed in the module map in the linker list file, the original segment name is now also listed as well as the name of the new packed segment. Also, the invented names for packed segments are now longer and thus slightly more informative. * The segment list of the linker list file now includes a size column. * Added support for the DIP processor. 4.51E 1999-01-25 * The IEEE-695 output format is now supported for the 6811 processor as well. * XLINK0083: In the new improved segment placement introduced in 4.51A, one byte too much was reserved for each absolute range from an assembler module, which could cause some code bytes to go unused if relocatable segments were placed using a range that overlapped that used by the absolute parts. * XLINK0082: When there is source code in a header file, XLINK could sometimes drop source file change records in UBROF output, resulting in mixed up source line debug information. This involves segment parts being garbage collected, so can only occur with compilers/assemblers using UBROF 7 or later. * XLINK0080: XLINK sometimes tried to close an object file that was already closed. The only observed effect of this bug is under WorkBench 2.10 or earlier where it manifests as an 'internal error in the linker' under certain circumstances, one of which is the use of filler bytes (-H). XLINKs prior to version 4.51A only exhibit the bug if the command line option -m is given. * XLINK0079: If the first segment part in a module was located and root, XLINK crashed. * XLINK0078: After warning about incompatible segment parts for a segment (warning 3), XLINK could crash. The warning is now an error, and XLINK now assumes that all segment parts are of the same type as the first one seen if -B (Forced Dump) is used to proceed from the error. * XLINK0077: Filler bytes (-H) were under certain circumstances output for parts of open memory ranges, which could cause checksum calculation to produce the wrong answer. * XLINK0076: Some command line options were missing from the online command line help. * XLINK0075: When using some two-file output formats (for example -Fdebug-motorola, which produces one output file using the format -Fdebug and one using -Fmotorola), the second output file didn't get the correct file extension. 4.51D 1998-12-01 * Common segment contents are now checked for overlap with each other. This primarily means that a message will now result if more than one module defines the same interrupt vector. * Previously, when given UBROF 6 or later input using file references and directed to produce UBROF 5 output, where file references are not available, XLINK aborted the link job. It now attempts to embed source files in the output. It searches for source files in the same places it searches for object files (first the connected directory, and then any include paths). * Range checks are now disabled for undefined externals. * The type conflict warning (warning 6) now gives more information about in what way the types do not match. * XLINK0074: When linking with output from the PLM converter, XLINK erroneously emitted error 82. This problem started in XLINK version 4.49A. * XLINK0073: Warning 38, "There are indirect calls both from interrupts and from the main program", could be generated when not needed. This only affects targets using the static overlay system, ie 8051, 6502, 740. * XLINK0072: Bit segment placement was broken in XLINK 4.51A. * Using SFB/SFE on a segment that did not exist could cause a crash. * Output a maximum of 254 instead of 255 bytes at a time in UBROF output. This ensures that the number of bytes will not be odd for word addressed targets. 4.51C 1998-10-21 * Improved the sorting of segments in the Segment Map part of the list file so that empty segments are listed before segments with content on the same address. * ELF/DWARF support is now at release status. * Improved the handling of far segment placement commands in the new segment placement scheme. 4.51B 1998-10-14 * XLINK0071: XLINK 4.51A crashed under the Workbench when trying to output type conflict information to the Messages window. * XLINK now outputs type size information before the types in UBROF 7 or later. * Another fix to translating UBROF 7 debug info to UBROF 6 or earlier. 4.51A 1998-10-08 * Added support for the PIC and V850 processors. * XLINK now garbage collects segment parts. When used with compilers/assemblers that support UBROF 7 or later, this enables the removal of functions or variables that are not actually needed. See also XMAN.TXT for a discussion of this. * Improved translation of UBROF 7 or later debug info to UBROF 6 or earlier formats. * Added skip info for the t_key_value record type. * Preliminary support for the ELF/DWARF output format for the following targets: 6812, V850. * XLINK0070: When using XLINK under the WorkBench, if a "-x" option is given in the linker command file, but no "-l" or "-L' option is given, XLINK got an internal error. It now acts as if a "-L" option was given. * XLINK0069: Packed segment placement ("-P") could crash when failing to place any segment part into a certain range. * XLINK0068: For some input object files, XLINK emitted symbol definitions too late in the UBROF file, resulting in a corrupt file. * XLINK0067: XLINK complained about unknown target ids (error 112) when fed object files from old versions of the 8051, 6811, 78000 and 78300 compilers. 4.50E 1998-07-03 * XLINK0066: A problem in the matching of type attributes could sometimes result in extraneous type conflict warnings (warnings 6 & 35). Also, the diagnostic output for type conflicts could sometimes omit the problematic type attributes. * XLINK0065: Using the static overlay command line option -a (keep all function static overlay areas non-overlapping) resulted in an internal error. The static overlay system is used by the 740, 6502 and 8051 compilers. * XLINK0064: When using the checksum feature (-J), and the two's complement of the checksum was selected for output, the one's complement of the checksum was instead output. * XLINK0063: XLINK version 4.50D rejected most input files using revision 5 of the UBROF object format (UBROF 5), mistakenly claiming that they were corrupt. * XLINK0062: Some fields in the header information block of SYSROF output files were output twice for the H8S processor. * Some minor changes to the UBROF 7 support. * For the A90 processor, the CONST (and NEARCONST, FARCONST and HUGECONST) segment type is now considered to be in data space, not code space. * The situation reported in XLINK0047 (using +NNNN for segments with more than one segment part) could still cause problems under certain circumstances. 4.50D 1998-06-03 * Warning 14 (library module discarded) is no longer output. * Improved UBROF 7 support. * XLINK0061: XLINK now filters out statements with no code at the end of functions when using the IEEE-695 output format. 4.50C 1998-05-14 * XLINK0060: File position calculations were wrong when running under the Embedded Workbench, causing some output formats not to work. This problem was introduced in version 4.50A. * XLINK0059: Due to a really stupid mistake by the XLINK maintainer, XLINK started having problems with symbols where one is the prefix of the other in version 4.49J. This is believed to primarily affect debug information in the xcoff78k and ieee695 output formats but could have more far-reaching implications. * XLINK0058: Each segment part in a far segment was aligned according to the maximum alignment for the segment. This could result in misalignment when using far initializers for near data. * XLINK0057: The static overlay information for recursive functions was sometimes wrong. The static overlay system is used by the 740, 6502 and 8051 compilers. * When reporting that it is unable to open an object file, XLINK now reports the file name as originally given. * As part of the support for UBROF 7, XLINK now handles the "sort by decreasing alignment" segment attribute, which can result in less waste primarily when allocating space for variables and their initializers. 4.50B 1998-04-28 * XLINK0056: When creating synthetic module content for the static overlay system, XLINK could overwrite the end of some internal tables, causing Internal Errors or worse. * XLINK0055: XLINK generated an incorrect module attribute (cpa) for synthetic modules, which caused strange behavior in C-SPY for big-endian targets. 4.50A 1998-04-27 * XLINK now supports UBROF 7 input and output and converting between UBROF 7 and earlier versions of the UBROF format. This support is still in testing and does not have release status. * When specifying an open range (one giving a start address but not and end address) to a segment placement command line option (-Z/-b/-P) the end of the range is now set to 0xFFFFFFFE instead of 0xFFFFFFFF, since XLINK cannot make use of the byte at 0xFFFFFFFF. The attempt to use that byte could result in spurious error messages. * All hexadecimal numbers in diagnostic messages should now start with the prefix '0x'. Changed some numbers to be printed in decimal, where this was appropriate. * Warnings 28 (segment only partially initialized) and 29 (initialization of data segment) now report the module(s) where the (non)initialization takes place. * Error 68 (external static overlay function has no global definition) has been replaced with warning 46. The reasoning behind this is that there are cases where it is harmless not to have a global definition. This problem was masked by the fact that up to version 4.49C, XLINK often failed to report error 68. * XLINK0054: Bit addresses higher than 0x7FFFFFFF were printed incorrectly in the list file. * XLINK0053: Defining absolute static overlay functions in assembler caused an IE in XLINK. * XLINK0052: Assembly modules with source information could cause an IE when using the output format ieee-695. * XLINK0051: XLINK 4.49J mistakenly started stating in the list file that the output was UBROF 7, even when the output was actually UBROF 6. * XLINK0050: The debug information for block local static variables was wrong in two output formats. In ieee-695 the problem was introduced in version 4.49J. In xcoff78k the problem has been present since time immemorial. * XLINK0049: Added a terminating directory delimiter to the file path of FILEDEF records in AOMF80251 object files. * XLINK0048: When using an output format specifying two object files, any size limit was not reset between the files, effectively halving the limit. * XLINK0047: Using +NNNN to increase the memory for a segment that has more than one segment part did not work. The extra space was placed at the wrong place and counted twice, which could result in segment overlap errors and worse. * XLINK0046: When using an output format specifying two object files and the -H (fill) option, an internal error resulted. * XLINK0044: Any backslash character ('\') in the environment variable XLINK_ENVPAR caused XLINK to loop. 4.49J 1998-02-11 * XLINK now supports a new output format: aomf80251, with output according to the Intel "Object Module Format 251 Specification" revision 1.7. * In DOS, using '/' as a directory delimiter instead of '\' should no longer confuse XLINK. * XLINK0043: No C_ICALL segment was generated when using -a# to declare indirect calls. * XLINK0042: When linking no modules and using the output format xcoff78k, an internal error occurred. * XLINK0041: XLINK had no way of quoting filenames with unusual characters when reading from an xcl file. They can now be quoted the same way as in the DOS command shell (enclosing them in double quotes). * XLINK0040: In the msp430_txt format, each line of binary data must be exactly 16 bytes or be followed by a new address. * XLINK0039: In the segment map in the listing file, headers indicating module-local symbols weren't output properly. * XLINK0038: When bit segments overlapped segments with downwards allocation, the downwards allocation segments were placed in the wrong part of the split memory range. 4.49I 1997-12-22 * XLINK0037: One of the new features in UBROF 6 (T_GRP records) wasn't actually turned on, resulting in bigger output files. * XLINK0036: A problem in type matching could cause unneeded type conflict warnings. * XLINK0035: The linker generated segments C_ICALL, C_RECFN, and C_FNT, used by the 8051, 740 and 6502 targets, were not duplicated when using segment duplication (-K). * XLINK0034: In the output format IEEE-695 the source line information for return statements was incorrect. Introduced the '-yr' format variant flag. See XMAN.TXT for more information. * XLINK0033: Assembly modules with source information for absolute code caused an internal error when using the output format xcoff78k. * XLINK0032: XLINK calculated the size of the t_seg_info record type, which is new in UBROF 6, incorrectly. This rendered UBROF 6 files unreadable by DOS C-SPY, and any other UBROF 6 reader that does not support that record type directly. * XLINK0031: Empty bit segments could sometimes extend the range of occupied bit memory, causing incorrect segment overlap errors or erroneous segment placement. * The XLIB display-options command listed the UBROF record tags with the wrong values. Fixed in XLIB 3.26S. 4.49H 1997-11-14 * XLINK mistakenly considered use of -P (packed segment placement) to be equivalent to use of banking (-b). This made it impossible to use -P with output formats that do not support banking. Fixed. * XLINK0030: An Internal Error could result when using -n (no module-local symbols) with the static overlay system. * XLINK0029: In IEEE-695 output the last source file reference for a function could be to the code byte after the function. This source file reference is now suppressed. * XLINK0028: When segment placement failed, -B (force output) sometimes failed to produce a map file. * XLINK0027: In xcoff78k output, the path stripping format variant (-yp) didn't work. * -H (filler bytes) sometimes didn't fill all the holes in common segments. * The use of -b (banked segment placement) or -P (packed segment placement) for debug builds with one of the output formats IEEE-695 or xcoff78k could cause an internal error. * The fix in 4.49F concerning error 72 and segments with no content was insufficient. The error could still sometimes fail to appear for segments with content. 4.49G 1997-10-22 * There is now support for source level assembly debugging in the xcoff78k output format, with one known limitation. If there are several modules in one object file, source level assembly debugging only works for the first module in the file. 4.49F 1997-10-20 * XLINK0026: A problem in the type globalization routines could cause an exception when reading input object files. * The attempt to silence error 72 (Segment must be defined in a segment definition option) for segments with no content in 4.49B resulted in the error sometimes not being generated even for segments with content. * When doing static overlay optimization (optionally used by the 8051, 6502 and 740 compilers) XLINK sometimes erroneously considered the function 'main' to have no callers, and thus allocated no space for its arguments or locals. * XLINK0025: IEEE-695 output for the 740 processor was not enabled in the release version. * XLINK0024: An overly restrictive input consistency check sometimes caused an internal error in conjunction with the use of -n (no local symbols). * XLINK0023: Module-local (static) functions with debug information caused an internal error when -n (no local symbols) was used and the output format was ieee695. * XLINK0022: -P (pack segments) sometimes caused an internal error. * XLINK0021: Module-local (static) functions with debug information caused an internal error when -n (no local symbols) was used and the output format was xcoff78k. 4.49E 1997-10-06 * XLINK0020: The size of the linker-generated segment C_FNT was not calculated correctly, causing segment overlap checking and certain list file output to be wrong. This segment is used for the 8051, 6502, 740 and 65000 processors. * XLINK0019: XLINK sometimes emitted warning 29 (initialization of non-prom segments) erroneously for modules that had both absolute code and relocatable data. * XLINK0018: Support for IEEE-695 output for the 6812 processor was not enabled in the release version. 4.49D 1997-09-13 * 4.49C introduced a bug in the handling of multiple external references to the same symbol with different type information. 4.49C 1997-09-12 * Using seg+nnnn to allocate extra memory to a segment in far memory didn't work. This problem was introduced in 4.49A. * Empty segments at the end of already full memory ranges were reported as not fitting. This was also introduced in 4.49A. * Support for cr16. * For the static overlay system: Added a new experimental way to specify to XLINK what indirect calls to functions are possible. It is an addition to the "-a" command line option, and has the following syntax: -a#(caller1,caller2,...)=>(callee1,callee2,...) callerN and calleeN can be either the name of a function or module:function. If only one function is wanted on either side of the => the parenthesis can be omitted. The meaning is that the functions callerN can indirectly call the functions calleeN. If any -a# options are given, they are together assumed to specify the entire picture. That is, no other indirect calls can occur than those specified in any of the -a# options. Given this information, XLINK can make sure the static overlay system is safe in the presence of indirect calls. Using -a# can also result in significantly less memory usage for params and locals as more opportunities for sharing are being made visible to XLINK. The alternative of using switch statements and only direct calls, is still to be considered far safer, and will use no more static overlay memory. The use of -a# is very likely to be quite error-prone, and XLINK can perform very little checking to assure that the information entered in -a# is correct. Whereas the use of only direct calls makes the information available to XLINK automatically and reliably. * XLINK0017: Type matching was done for some symbols in modules that were not included in the final link. * -xh and -xo (see 4.49A) weren't actually turned on. * Extraneous trailing blanks were output in the msp430_txt output format. 4.49B 1997-08-19 * The handling of zero-sized segment parts could cause problems with the generation of filler bytes (-H). * Information about program entries was erroneously output on the console. * Error 72 (Segment must be defined in a segment definition option) is no longer generated for segments with no content. 4.49A 1997-08-18 * Corrected a problem with the handling of bit segment overlap of other segments on some cpus. * XLINK0012: A link job where no modules were actually used erroneously generated warning 25 (Old UBROF). * XLINK0013: The HP-SYMB output format was broken for the Z80, 8085 and TLCS-900 processors. It had been for years, evidently. * A number of minor changes to the format of the list file. * XLINK0014: IEEE-695 output for the M16C had unnecessarily limited register variable location information in certain cases, and warnings about this were generated. * XLINK0015: Users of the MSP430_txt format experienced long download times which could be avoided with a small change to the output. * XLINK0016: A memory allocation problem caused an internal error when doing type output in some warning messages. * New experimental options for the list file: -xh Generate output in HTML format -xo Generate a static overlay system map * Bit segments were not handled correctly on the M16C. * The multiple union/struct definitions for the same tag warning (35) was output even when global type check was turned off. * The SIMPLE output format has been changed slightly, so as to not output meaningless segment type synonyms. 4.48N 1997-05-26 * XLINK0011: There were major problems in type matching and type conflict output. Circular types were not matched correctly, resulting in extraneous type conflict warnings, detailed type information was printed for type conflict warnings even when the warnings themselves were turned off, and the extra type information was always on stdout, even when a list file was requested. This is fixed, and a new warning modifier flag (-wt) makes it possible to turn off the detailed type information and get just the warnings. See the Manual Update part of this document for more information. 4.48M 1997-05-22 * XLINK0010: Some format modifiers (-Y1/-Y2) were mistakenly disallowed in some formats (intel-standard, intel-extended, sysrof). Fixed. * Warning 33 ("-r" overrides format) was emitted when it shouldn't be. Fixed. It is now also not emitted until after the sign on message, if at all. * The "e" (entry list) option to -x used to override the "m" (module map) option. This is no longer the case. Specifying -xem now gives a list file with both an entry list and a module map. 4.48L 1997-04-25 * Corrected an error in one of the help texts. 4.48K 1997-04-25 * The type conflict (6) and multiple structure tag definition (35) warnings are now accompanied by a printout of the linker's internal representation of the types involved to make it easier to track down what caused the problem. * The presence of a segment not mentioned in any segment definition now causes error 72 instead of warning 8. The text of error 72 has been changed slightly to reflect this. The problem is of such a magnitude that any program built would almost certainly not work. * Fixed a bug in the handling of near/far/huge segments on targets with separate address spaces (currently a90 and sam8). * Version 4.48J sometimes erroneously emitted warning 35, warning about different structure definitions with the same structure tag for structures that had no structure tag. 4.48J 1997-04-11 * Added support for '/*' and '//' comments in .xcl-files. * Improved error checking for format variant option '-Y'. * Changed the format of the memory usage summary. * Fixed a number of problems with the output format aomf8096 and one with aomf80196. * A new experimental option '-j' has been added. It causes XLINK to ignore module names. Normally two modules with the same name are considered to be the same module. Use this option if you need to have more than one module with the same name. * XLINK now implements version 2 of the SIMPLE output format, which adds start address information. See the SIMPLE subdirectory for source code to a reader for the SIMPLE format. * When checking for type correctness, XLINK mistakenly considered an incomplete struct/union type to be different from the complete type. Fixed. * XLIB version 3.26O has two new commands: - "cd" to change the working directory - "pwd" to display the working directory 4.48I 1997-02-06 * The warning about object files for different cpus was sometimes emitted erroneously. * Changed some date output routines to use four digits for the year, to avoid possible confusion after the year 2000. * Block scope static variables had erroneous debug info in xcoff78k output format. * Support for IEEE-695 is now at beta status for 7700, M16C (HP debuggers) and T900 (Toshiba debugger). 4.48H 1997-01-14 * The msp430_txt format did not quite work. * Fixed a problem with non-promable code causing corrupt NEC XCOFF output. 4.48G 1996-12-17 * XLINK0008: -ch8300 used the wrong settings. * XLINK0009: The output format xcoff78k was seriously broken. 4.48F 1996-12-02 * The "-K" option is no longer supported. * The "-c" (cpu) option is no longer always required. When linking the output from modern compilers XLINK can now figure it out all by itself. * XLINK now reports the totals of CODE, DATA etc at the end of linking. * Support for the SIMPLE output format. The SIMPLE output format is a very simple binary output format. Source code for a SIMPLE reader is provided to make it easy to handle particular output requirements at a customer site. See the SIMPLE subdirectory. * Support for SAM8. * Support for 80251. * Preliminary support for the IEEE-695 output format for the following targets: 7700, 6816, T900, M16C, H8S. * A new format modifier flag for NEC XCOFF output: -Y8: Remove all line number information for code not generated in strict source line order. Note that this makes the line number information incorrect, but possibly usable with some debuggers. * XLINK now does more sanity checks on its input, to be able to warn about potentially dangerous things. Among these are: - C input files that have been compiled with incompatible settings. - Input files compiled/assembled for different processors. - Segment placement that renders the program non-promable. Note that individual warnings can be turned off with the -w option. * XLINK0006: A bug when stripping information to produce old UBROF (-Y#) could cause a slight degradation of the type information. The bug caused an assertion to trigger in the version of XLINK used in the Embedded Workbench. Continuing from the assertion resulted in the slight information degradation. Fixed. * XLINK0007: Attempting to produce aomf8051 output from XLINK using object files from the new version of the 8051 compiler caused XLINK to crash. Fixed. * Support for the msp430_txt output format used in Texas Instruments Starter Kits. * XLIB version 3.26L has the following improvements: - It is no longer necessary to use the DEFINE-CPU command. It is only used to enable default file extensions. Using the new EXTENSION command, or specifiying the full filename also work now. - A new command EXTENSION can be used to set the default extension for object files. - Starting with this release XLIB is a 32-bit application. This means that under DOS and all flavors of Windows only 386 and later processors are supported. - A new command line switch "-c" provides the possibility to invoke XLIB commands directly from the command line. Each command line arg after the "-c" switch will be used as one command. Example: >xlib -c "li-o foo.r42 foo.ud" "li-o bar.r42 bar.ud" will do the same thing as >xlib *li-o foo.r42 foo.ud *li-o bar.r42 bar.ud *quit 4.48E 1996-09-30 * Support for 6502. * XLINK0005: A bug in the treatment of long source lines could cause XLINK to crash. Fixed. * ICC78400 changed two pointer sizes. 4.48D 1996-09-11 * Fixed a number of minor errors in XCOFF output for 78k processors. * When testing for overlapping absolute segments, XLINK could bomb. Introduced in 4.48B. Fixed. * XLINK0004: The calculation of segment part alignment in banked areas was sometimes slightly off, which could result in spurious 'Segment does not fit in bank' errors. Fixed. 4.48C 1996-08-29 * For certain processors XLINK sometimes failed to report segment overlaps. Fixed. * The return value of XLINK for the case of no errors and one or more warnings was broken in 4.48B. Fixed. * Fixed a crashing bug in 4.48B concerning type matching of some circular types. 4.48B 1996-08-27 * XLINK will now run much faster for link jobs involving a large number of modules. * XLINK0003: -Y# (use old UBROF format) didn't quite filter out all the new information. In particular, some type information still made it through. This is now fixed. * XLINK0002: Absolute segment overlap sometimes gave no error. Fixed. * XLINK0001: -t did not work with the output of some compilers, resulting in an internal error with the message 'Not consecutive f-index numbers'. Fixed. * Release status on support for A90. 4.48A 1996-06-27 * Support for H8, formerly known as H8S. 4.47L 1996-05-29 * Support CPTR4-CPTR7 subtags. 78k4 compiler needs them. * Preliminary support for 68HC12. * Preliminary support for A90. 4.47K 1996-05-20 * Corrected byte order problem for M16C. * Preliminary support for H8S, except for HP output format. * Support for output from demo compilers and assemblers. 4.47J 1996-05-06 * AOMF80196 now produces correct basic-types for variables. 4.47I 1996-03-18 * A gpf was deleted due to reg_mask information. * 6816 is now correct, before it only allowed 16-bit code. * AOMF80196 now generates symbols in lowercase as well. * t_quest_var is correct now. * M16C, 78400 and MSP430 are introduced. 4.47H 1996-02-19 * UBROF output is updated due to a bug if a macro from the C compiler was larger than 512 chars. * AOMF80196 is updated, due to another checksum-bug. * Common segment are not allowed as a far segment. 4.47G 1995-12-13 * AOMF80196 is updated, due to a checksum-bug. 4.47F 1995-11-08 * If there was errors on missing externals, there could be a GPF on subsequent operations of the linker. * The -a option for 8051 type of chips could, in rare situations, give a problem. 4.47F 1995-10-18 beta * For the ICCH83 compiler using chip option -v1 you can select the size of address field to 4 bytes if you use the -Y2 option in xlink. The space size reamins 16. Use this if the debugger You trying to download SYSROF to are complaining. * Output path for UNIX-versions puts a '/'-slash at the end of a path in the -I option. * The segment-overlap-check, absolute against relocatable segments, boundaries are corrected. * SYSROF is changed to better follow the standard for version 1.0 DSY-block. Stack/parameter bit added. ER-block. Symbol type is now always 'not specified'. HD-block. Module name is now object-file-name. DLN-block. This block is now written after all DPS-block. If the input file isn't a C-file then number-of-lines =0. Renaming of TOOL NAME: ICCH8300 => C_ICCH8300 ICCH8300H => C_ICCH8300H AH8300 => A_AH8300 AH8300H => A_AH8300H 4.47E 1995-09-27 * 80196 chip (32-bit version) introduced with file-extension R32, A32, D32. * Output format aomf80196 introduced (will generate 24-bit 80196 OMF). 4.47D 1995-05-30 * Segment types ZPAGE and NPAGE introduced for the 740 chip. * Segment types NEARCONST, FARCONST, HUGECONST introduced. They are the same as NEARC, FARC, HUGEC. * Segment types NEARCODE, FARCODE, HUGECODE introduced. 4.47C 1995-02-16 * Mitsubishis 740 is now recognized. * double formats debug-motorola, debug-intel-std, and debug-intel-ext are introduced. * New info tags are introduced. * SYSROF no longer produces DFL info, and some other updates of it. 4.47B 1994-12-21 * Windows nts DOS box wasn't compatible with DOS, so we run into problems, now it is corrected. 4.47A 1994-12-14 * TLCS900 introduced. ================================== 5. Files supplied in this release. ================================== File Use ----------------------------------- xlink.exe The linker itself (xlink.dll if windows-version) xlib.exe The librarian itself xlink.txt This document xman.txt Manual corrections and updates simple\xdump.h Source code for a SIMPLE format reader simple\xdump.c simple\out.c ====================================== End of Read Me File for XLINK V4.XX ======================================