| Sun WorkShop(TM) 6 Inremental Link Editor README |
Contents
Sun WorkShop 6 Release This document contains last minute information about Sun WorkShop 6 Incremental Link Editor, ild. It describes the software corrections addressed by this release and lists the known problems, limitations, and incompatibilities. You can invoke the incremental link editor by typing the ild command at a shell prompt. The Incremental Link Editor (ild) allows you to complete the development sequence (the edit, compile, link, and debug loop) efficiently and more quickly than by using a standard linker. To access the HTML version of this document, point your Netscape(TM) Communicator 4 or compatible Netscape version browser to: file:/opt/SUNWspro/docs/index.htmlNote - with the path to your Sun WorkShop installation directory. In a default If your Sun WorkShop software is not installed in the /opt directory, ask your system administrator for the equivalent path on your system. For more information about this product, see:
About Sun WorkShop 6 Incremental Link Editor Sun WorkShop 6 ild runs on SPARC(TM) processors running
Solaris(TM) SPARC Platform Edition versions 2.6, 7, and 8, and Intel(R)
x86 processors running Solaris Intel Platform Edition, versions 2.6, 7,
and 8.
New Features This release of Sun WorkShop 6 ild includes the following new features - see the ild(1) man page for details:
COMDAT allows symbols to be defined in multiple modules. The first module on a command line that defines a specific COMDAT symbol is selected as the defining module. A COMDAT symbol with the same name, encountered in a module later on the command line, will be ignored. On a relink, if the defining module of a COMDAT symbol has been changed and no longer defines the COMDAT symbol, and if no module on the command line previous to the defining module is modified to supply the COMDAT symbol, then a FULL LINK must be done. See the Solaris "Linker and Libraries Guide" for details about COMDAT. With Solaris 7, ld accepts a construct allowing for symbols to be partially initialized. In this manner, such elements as very large sparse matrixes can be initialized at runtime rather than allocating a large area in the a.out file for the symbol, when most of the values are 0. Using this facility, compilers, linkers, and the runtime linker (RTLD) are capable of specifying how large arrays are initialized, without actually initializing them in the a.out file. The action can result in significant savings in the size of the a.out file. Several notes should be made when considering this capability:
2) While there may be a savings in execution time for the compilers and the linkers, there is added cost during the startup of the a.out executable since RTLD must initialize the symbol. The benefits depend on the symbol and how populated it is with data. The following ild features were introduced in the previous release of Sun WorkShop and are listed here for reference: 0. Support for building:
Software Corrections Reported bugs fixed in this release: 4194951 "../src/ild-common.h", line 79: cannot find include file: "ild-regsym.h" 4196586 V9: regression: __exdbg_notify_of_throw provides null catch_description - .ex_shared and .exception_ranges corruption 4199709 ild: Fatal error -- signal 11. Exiting. ps_call_ild() overwrite of buffer newname by 1 byte (\0 forgotten). 4200410 full relink if change any input file containing a scratch register symbol -SPARC 4205569 ILD problem on V9 relink, file to big when plenty of room (related 4204595-jeanko bug) 4221151 ild: Fatal error -- Assertion failed: file "../src/ild-symtab.c" line 102[24] { COMDAT capability missing } 4230791 Partially Initialized Symbols AKA Partially Initialized Common Blocks 4255617 DT_SPARC_REGISTER has invalid value associated with it. - LD bug#4254171 4262328 (warning) ild: removing potentially corrupted file gamma_g / Fatal error 4263566 Occasionally ILD doesn't supply _START_ and _END_ : c++ 4265346 overwrites read-only file
Problems and Work Arounds This section discusses the following software bugs that could not be fixed in time for this release. (Check Hot News for Sun WorkShop 6 (http://www.sun.com/workshop/users/ws.html) for updated information): The following are ILD issues in this release: * C++ COMDAT:
* When ild is invoked to create shared objects, ild invokes ld to do the link. * Do not use ild to produce the final production code for shipment. ild makes the file larger because parts of the program have been spread out due to padding. Because of the padding and additional time required to link, it is recommended that you do not use the -xildon option for production code. * ild may not link small programs much faster, and the increase in size of the executable is greater than that for larger programs. * Third party tools that work on executables may have unexpected results on ild produced binaries. * Any program that modifies an executable, for example strip or mcs, might affect the ability of ild to perform an incremental link. When this happens, ild issues a message and performs an initial link. See the section on ild Relink Messages in the chapter on incremental linking in the Sun WorkShop 6 C User's Guide. * Normally, ILD is used when the developer compiles with the -g optimization level. At this optimization level, register symbols are not used. ILD currently supports an add-only policy for register symbol definitions. This policy means that if an object (*.o file) uses register symbols, then a modification of that file will cause ILD to do a full link, rather than an incremental link. Compiling with an optimization level other than -g can result in the use of register symbols. Therefore, care should be exercised to obtain the full benefits of ILD whLD when used with programs not compiled with -g. Other known software bugs:
2. The -m option produces a memory map, but it does not produce a listing of the nonfatal multiply-defined symbols on the standard output. 3. Once an object file is extracted from an archive file and linked into an incremental executable, that object file remains in the executable, even if all references to it are removed, until the next initial link. In the test case shown here, the first link has a reference to myfunc1 and myfunc2. Both one.o and two.o are correctly extracted from the archive. See code at the end of the bug description. % cc -c main1.c main2.c one.c two.c
In the second link, myfunc2 is no longer referenced but it still appears in the executable (as well as any other symbols defined in two.o). Then by removing the a.out, a new initial link is forced which the third link demonstrates as no longer containing myfunc2. % cp main1.o main.o
# myfunc2 no longer referenced
# Removing a.out fixes the problem. % rm a.out
# force a new initial link
The scenarios that can cause problems are: Some symbols defined by two.o are defined elsewhere in the program, and including two.o either gets the wrong definition or a multiply-defined symbol error. dbx and other tools that examine the a.out still detect that two.o is included. For example, if you run dbx on the output of the second link, you can request stop in myfunc2. This is not really a problem, but it can be confusing. It is possible to also have cascading errors. That is, two.o can contain the only reference in the program to symbols that appear in other object files of the archive, causing more object files to be extracted unnecessarily. These new archives can suffer from any of the problems listed above, as well. PROGRAM CODE: % cat main1.c
int main(void)
% cat main2.c
extern void myfunc1(void), myfunc2(void); int main(void)
% cat one.c
void myfunc1(void)
% cat two.c
void myfunc2(void)
Limitations and Incompatibilities There is no new information at this time.
Documentation Errata There is no new information at this time.
Shippable Libraries If your executable uses a Sun dynamic library listed in the file named below, your license includes the right to redistribute the library to your customer. <install-directory>/SUNWspro/READMEs/runtime.librariesYou may not redistribute or otherwise disclose the header files, source code, object modules, or static libraries of object modules in any form. The License to Use appears in the End User Object Code License, viewable
from the back of the plastic case containing the CDROM.
Copyright 2000 Sun Microsystems, Inc., 901 San Antonio Road, Palo Alto, CA 94303, U.S.A. All rights reserved. Sun, Sun Microsystems, the Sun logo, docs.sun.com, and Solaris are trademarks, registered trademarks, or service marks of Sun Microsystems, Inc. in the U.S. and other countries. |