PROBLEM: (82122, 82234) (PATCH ID: OSF510-005) ******** This patch fixes two problems which exist in the V5.1 dynamic loader. The first problem may cause the dlopen library call to incorrectly report an unresolved symbol. The incorrect reporting of the unresolved symbol will occur only when an executable calls dlopen and the following conditions are met: both the executable and the dlopened library were linked against two shared libraries that define the same symbol, and the symbol has been removed from both libraries on the platform where the executable is running. The second problem may cause the loader to load the wrong shared library when you have two libraries with the same name but different IVERSION identifiers. In this situation, the loader would always load the first library that it encounters - regardless of the IVERSION identifier. The problem is illustrated below in the output from a program called 'ttash'. The program 'ttash' is linked against /usr/local/lib/libtcl.so with an IVERSION of "_null". However, when loading 'ttash', the loader first encounters /usr/shlib/libtcl.so, which has an IVERSION of "tcl8.2". The problem in the V5.1 loader is that it incorrectly tried to load /usr/shlib/libtcl.so, as shown in the output below: % ./ttash 737643:./ttash: /sbin/loader: Error: libtcl.so: symbol "__exc_remove_gp_range" unresolved 737643:./ttash: /sbin/loader: Fatal Error: object libtcl.so from liblist in ./ttash has version "_null", which does not match the found object: /usr/shlib/libtcl.so (with version "tcl8.2") PROBLEM: (84054) (PATCH ID: OSF510-113) ******** This patch fixes a problem with the /sbin/loader. The loader could not find absolute value symbols that had a value of -1. Here is a simple reproducer that demonstrates the problem. % cat a.c b.s extern long lsc_x; main () { long i = (long)&lsc_x; printf (" i = 0x%lx\n", i); } .data .globl lsc_x lsc_x = 0xffffffffffffffff % cc a.c b.s -taso b.s: a.c: % a.out 1969459:a.out: /sbin/loader: Error: a.out: symbol "lsc_x" unresolved 1969459:a.out: /sbin/loader: Fatal Error: Load of "a.out" failed: Unresolved symbol name With this fix, the loader properly loads and executes this file. % a.out i = 0xffffffffffffffff PROBLEM: (83675, 83729) (PATCH ID: OSF510-105) ******** This patch fixes a problem in the /sbin/loader dynamic loader that can cause a crash. If an application calls dlopen(), it is possible for the loader to corrupt its internal data structures and crash. It also fixes a problem with the ldd command. Prior to this patch, all ldd output was going to stderr. With this patch, the ldd command prints the record of shared object pathnames to stdout, and the optional list of symbol resolution problems are printed to stderr. Since the ldd command is just a link to /sbin/loader, this patch contains only one file to be updated. PROBLEM: (85576, 85676) (PATCH ID: OSF510-205) ******** The /usr/ucb/spike post-link optimization tool will crash if the image it is optimizing contains duplicate linker-defined symbols. Under certain link conditions, the linker will generate duplicate linker-defined symbols, such as "_etext". If spike is used to optimize images with these duplicate symbols, it will crash with the following assertion failure: ? FATAL ERROR ? Assertion failed. ? ../../../../../../src/usr/ccs/bin/spike/rel.cxx, line 2388 NO STACKTRACE no executable specified Floating exception (core dumped) This patch fixes the spike assertion failure. The /sbin/loader problem this patch fixes is with the ldr_inq_region() call. Previously, no error would be returned when an invalid region number was passed as a parameter to the call. With this patch, the ldr_inq_region() call will properly report an error if it is passed an invalid region value. PROBLEM: (81716, 82289, 82094, 80719, 84368) (PATCH ID: OSF510-074) ******** This patch fixes several problems in the /sbin/loader and /usr/ucb/ldd. The first fix is with rpaths on shared libraries. Previously the loader would only recognize the rpaths that were defined in the main executable. The loader now additionally recognizes rpaths defined in the shared libraries. The previous rpath behavior can be obtained by setting the -use_main_rpath_only _RLD_ARGS loader environment variable. The second fix concerns loading libraries linked with the -taso flag. The loader will now correctly fail to load a library in -taso mode if any of the library's address space is mapped above the 31-bit taso address range. The third fix is for incorrectly specified _RLD_ARGS. The loader now detects incorrect _RLD_ARGS and issues an error. The last fix is for the handling of the RHF_BIND_NOW bit in the object file. The loader now performs immediate symbol binding when that bit is set. Previously, the loader would ignore the RHF_BIND_NOW bit.