Loading Multiple Files - same name, different directories

A recent customer observation reminded me of a subtlety of shared object dependency lookup, and a change that occurred between Solaris 8 and 9. The customer observed different dependencies being loaded on the two systems, although the applications file system hierarchy was the same on the two systems. On Solaris 8, the following was observed. $ ldd ./app libX.so.1 => /opt/ISV/weblib/libX.so.1 libY.so.1 => /opt/ISV/weblib/libY.so.1 libZ.so.1 => ...

Sunday, May 8, 2005 | Technologies | Read More

Glacier National Park

Here's my wife, Helen Gunn, on the trail to Grinnell Glacier last summer, out of Many Glacier, Glacier National Park, Montana. We liked it so much we're going back again. Usually the trail is dry, but there was a temporary waterfall on the way. The days before there were these wonderful, loud thunderstorms at night.Grinnell Glacier is melting away, due to global warming, but it's still huge. There's a giant part above a cliff and another below the cliff behind a glacier...

Wednesday, April 27, 2005 | Technologies | Read More

My Relocations Don't Fit - Position Independence

A couple of folks have come across the following relocation error when running their applications on AMD64: $ prog ld.so.1: prog: fatal: relocation error: R_AMD64_32: file \\ libfoo.so.1: symbol (unknown): value 0xfffffd7fff0cd457 does not fit The culprit, libfoo.so.1 has been built using position dependent code (often referred to as non-pic). Shared objects are typically built using position independent code, using compiler options such as -Kpic. This...

Tuesday, April 26, 2005 | Technologies | Read More

Loading Relocatable Objects at Runtime - Very Expensive

The runtime linker, ld.so.1(1), is capable of loading relocatable objects. This capability arrived somewhat by accident, and as a side effect of some other projects related to the link-editor, ld(1). But, it was thought that this capability could prove useful within a development environment. A user can preload relocatable objects, and this technique might provide a quick prototyping turnaround instead of having to first combine the relocatable objects into some huge shared...

Wednesday, February 2, 2005 | Technologies | Read More

Interface Creation - using the compilers

In a previous posting, I covered how the interface of a dynamic object could be established by defining the interface symbols within a mapfile, and feeding this file to the link-edit of the final object. Establishing an objects interface in this manner hides all non-interface symbols, making the object more robust and less vulnerable to symbol name space pollution. This symbol reduction also goes a long way to reducing the runtime relocation cost of the dynamic object. This map...

Sunday, January 2, 2005 | Technologies | Read More

Static Linking - where did it go?

With Solaris 10 you can no longer build a static executable. It's not that ld(1) doesn't allow static linking, or using archives, it's just that libc.a, the archive version of libc.so.1, is no longer provided. This library provides the interfaces between user land and the kernel, and without this library it is rather hard to create any form of application. We've been warning users against static linking for some time now, and linking against libc.a has been...

Monday, December 6, 2004 | Technologies | Read More