also see the PostScript files in toolbox/documents/optimization of the intro and first three chapters of the Irix Programming Guide, as well as the Frequently Asked Questions DSO file located at toolbox/FAQs/SGIfaqs/DSO-faq.
compiler-DSOtricks: quick-reference/cheat sheet discussing: 1) DSO's 2) QuickStart & Conflicts 3) Lint 4) Improving Program Performance (IRIX System Programming Guide Ch3) 5) prof (IRIX System Programming Guide Ch3) 6) pixie (IRIX System Programming Guide Ch3) dso5.man.txt: IRIX 5.2 ascii version of the dso(5) man page contains, among a wealth of other stuff, the list of 30 FREQUENTLY ASKED QUESTIONS. DSOexamp: demonstrates the use of dynamic shared objects with dlopen(3X), dlsym(3X) and dlclose(3X). DSOsecurity: DSO Function Authentication. An example of how to protect DSO function calls from being intercepted or replaced. An application or licensing code developer can use DSOauth in their application such that they can protect their DSO function calls from being intercepted or replaced (eg. preventing substitution of the gettimeofday call in a license verification routine) without giving up any of the features of DSOs. forum93: showcase slides of Jay Gischer's DSO talk at the 1993 Developer's Forum + eight case studies in dynamic shared objects. UPDATED VERSION NOW INCLUDES INFORMATION ON 64-BIT ISSUES 11chap3.ps.Z: Chapter 3, "Dynamic Shared Objects", describes essential DSO topics including their definition, Using DSOs, Taking Advantage of QuickStart, Building DSOs, Runtime Linking, Dynamic Loading Under Program Control, and Versioning of DSOs. From the MIPSpro Compiling and Performance Tuning Guide ld.showcase: showcase slides presented in-house a few months back covering Build-time alternatives relating to ld, including using the "-update_registry" and "-no_unresolved" flags, Transitive Links, and Delayed Load. rld.overview: ascii version of showcase slides presented in-house a few months back providing an overview of Quickstart, Requickstart and tasks performed by RLD, the dynamic linker. slides.jay.sc: Designing DSO's for Maximum Performance DSO's ARE NOT LIBRARIES, THEY ARE LIKE SUPER .o's Linking against a shared object forces the runtime loading of that object. Runtime loading of shared objects is transitive. You get the entire DSO, not just the part of the DSO that you reference. Undefines in a shared object will be resolved by .o's and .a's specified later in the link line. Quickstart: Reducing the Cost of Startup ld resolves symbols when creating a shared object/application and if possible rld uses those addresses without any symbol table lookup. Main Reason for Quickstart Failure: Mismatch between DSO's used when creating a shared object/application and the DSO's available when executing the DSO or shared object. Understanding Quickstart Failures: ld will soon warn when a shared object/application is not marked quickstart. "elfdump -info" will give same information. Use debugging version of rld to determine if quickstart is working for a particular application: setenv _RLD_PATH /lib/rld.debug setenv _RLD_ARGS -quickstart_info Making Self-Contained DSO's completeness vs. performance: * Want to eliminate unresolved symbols * Use -no_unresolved flag * Add additional .o's and .a's to eliminate those symbols * Run into performance problems with adding certain .so's libgl.so because it is machine specific libtt.so in libvk.so since it is rarely used * Use -delay_load (available soon) in ld * Import functions not data * Make sure machine-specific libraries are last on the link line * Split .so's to limit exposure Symbol Conflicts The same symbol being defined in multiple objects, requires lookup in the symbol table of each loaded object. ld will soon warn about the existence of conflicts "elfdump -Dc" will give list of conflicts "elfdump -Dt" will give list of defined symbols Be careful linking against a library (.a) as it can lead to conflicts.
Documentation
Reference
Subdirectories