Situation: Current glibc have a mechanism called hwcaps. It is not documented and I was never able to correctly use it anyway. Parts of this mechanism are used to have TLS libraries. There are several problems with that: - Several hacks to use that for tls. - Not working. Proposal: * The capabilities are referenced by name. There are several sources available to select the used ones, others may be added later: - /etc/ld.so.capabilities - environment variable: LD_CAPABILITIES The grammer for it is CAPABILITY-STRING := ( CLEAR | DEFAULT | CHANGE ) { SEP CHANGE }; CLEAR := "clear"; DEFAULT := "default"; CHANGE := ( PLUS | MINUS ) CAPABILITY; PLUS := "+"; MINUS := "-"; CAPABILITY := character { character }; SEP := " " { " " }; "clear" resets to an empty set. "default" resets to a sane default. "-tls" removes tls from the set of used capabilities. * ld.so should only use informations from the cache file to find libs for additional capabilities, this behaviour may be disabled for special capabilities like tls, this removes the io overhead for additional capabilities. This implies that a missing cache file will disable any but that special capabilities, but I don't see that as a problem. Examples Available capabilities: - a (marked as essential), priority: 3 - b (marked as default), priority: 2 - c, priority: 1 * Scenario 1: - No cache file - /etc/ld.so.capabilities is not existant Libraries order: - a/liba.so - liba.so * Scenario 2: - No cache file - /etc/ld.so.capabilities: "-a" or "clear" Libraries order: - liba.so * Scenario 3: - Cache file is available - /etc/ld.so.capabilities is not existant Libraries order: - a/b/liba.so - a/liba.so - b/liba.so - liba.so * Scenario 4: - Cache file is available - /etc/ld.so.capabilities: "+c" or LD_CAPABILITIES: "+c" Libraries order: - a/b/c/liba.so - a/b/liba.so - a/liba.so - b/c/liba.so - b/liba.so - c/liba.so - liba.so * Scenario 5: - Cache file is available - /etc/ld.so.capabilities: "clear" or LD_CAPABILITIES: "clear" Libraries order: - liba.so * Scenario 6: - Cache file is available - /etc/ld.so.capabilities: "+c" - LD_CAPABILITIES: "default" Libraries order: - a/b/liba.so - a/liba.so - b/liba.so - liba.so Bastian -- Either one of us, by himself, is expendable. Both of us are not. -- Kirk, "The Devil in the Dark", stardate 3196.1
Attachment:
signature.asc
Description: Digital signature