PROBLEM: (74693, 78218, 78470, 78471) (PATCH ID: OSF505-029) ******** There were two different problems addressed with this fix. Problem 1: (74693, 78470) When compiling with -call_shared -om with programs with very large numbers of external symbols, an error message such as this might occur out of the linker (ld): cc -o mgot.om -om -call_shared t*.o ld: Object file format error in: t7.o: relocate: extern lita entries cannot have non-zero offsets; 'sub7_0' has 0x825ae4) Problem 2: (78218, 78471) When compiling with -call_shared -om with programs with very large numbers of local symbols, an error message such as this might occur out of the linker (ld): ld: assertion failed at ../../../../../../src/usr/ccs/bin/ld/relocate.c line 2909 PROBLEM: (78237) (PATCH ID: OSF505-213) ******** This problem occurs if a program references the linker defined symbol _fpdata and the linker does not use this symbol. A case where this might be seen is the case of a program in which no exception handling is being used. An executable with this problem would not get any errors linking, but if you did the following command on the executable: nm -xv myprog.exe | grep fpdata you would get the following output: _fpdata | 0x00000000000000 | U | 0x00000000000000 Also, doing this: odump -jf myprog.exe | grep -i null you would see a line such as the following (with a different address): 0x120006f28 REFQUAD After the patch, you will not see the null using the odump command, and using the nm command you will get something like this: _fpdata | 0x00000000000000 | A | 0x00000000000008 If the linker makes use of the _fpdata symbol, then this problem does not arise. PROBLEM: (82808) (PATCH ID: OSF505-194) ******** This patch modifies the linker's symbol resolution to enable it to recognize when a reference to a symbol defined in a shared library is replaced by a symbol defined in an object file or archive. Previously, the linker failed to handle this replacement consistently when a symbol was defined by both a shared library and an object or archive that followed it on the linker command line. This would frequently lead to failed links reporting "multiply defined symbol" errors. This patch also modifies the linker to cause it to rescan shared libraries before reporting unresolved symbols. Symbols are sometimes added to the linker's list of unresolved symbols because the references to those symbols appear in object files or archives that are linked in after the shared libraries in which the symbols are defined. This final scan allows all symbol definitions to be recognized, and no symbols are misreported as being unresolved. In the following example, if the symbol "a" is defined in b.so and c.o and referenced in a.o, then without this patch, the linker behavior would be: cc a.o b.so c.o -rpath . ld: c.o: a: multiply defined With this patch, the linker will successfully perform the link using the definition of the symbol "a" from c.o. Using the following example for the second problem described, if the symbol "a" were defined in b.so and referenced from c.o, the linker would report an unresolved symbol error. ld -call_shared /usr/lib/cmplrs/cc/crt0.o a.o b.so -lc c.o ld: Unresolved: a With this patch, the linker will successfully perform the link. PROBLEM: (77290, 78669, 82501) (PATCH ID: OSF505-189) ******** PROBLEM: Using the -f switch with the linker (ld) produces link errors such as: ld: /usr/.../libc.a(file.o): write_outbuf: Not enuf room in bfr f_outbuf? nbytes(1264) > left(0) PROBLEM: Any switch that begins with -f and is not a legal switch to the linker gets interpreted to mean -f. For example '-funfun' is taken to mean -f.