1*7c478bd9Sstevel@tonic-gate /* 2*7c478bd9Sstevel@tonic-gate * CDDL HEADER START 3*7c478bd9Sstevel@tonic-gate * 4*7c478bd9Sstevel@tonic-gate * The contents of this file are subject to the terms of the 5*7c478bd9Sstevel@tonic-gate * Common Development and Distribution License, Version 1.0 only 6*7c478bd9Sstevel@tonic-gate * (the "License"). You may not use this file except in compliance 7*7c478bd9Sstevel@tonic-gate * with the License. 8*7c478bd9Sstevel@tonic-gate * 9*7c478bd9Sstevel@tonic-gate * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 10*7c478bd9Sstevel@tonic-gate * or http://www.opensolaris.org/os/licensing. 11*7c478bd9Sstevel@tonic-gate * See the License for the specific language governing permissions 12*7c478bd9Sstevel@tonic-gate * and limitations under the License. 13*7c478bd9Sstevel@tonic-gate * 14*7c478bd9Sstevel@tonic-gate * When distributing Covered Code, include this CDDL HEADER in each 15*7c478bd9Sstevel@tonic-gate * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 16*7c478bd9Sstevel@tonic-gate * If applicable, add the following below this CDDL HEADER, with the 17*7c478bd9Sstevel@tonic-gate * fields enclosed by brackets "[]" replaced with your own identifying 18*7c478bd9Sstevel@tonic-gate * information: Portions Copyright [yyyy] [name of copyright owner] 19*7c478bd9Sstevel@tonic-gate * 20*7c478bd9Sstevel@tonic-gate * CDDL HEADER END 21*7c478bd9Sstevel@tonic-gate */ 22*7c478bd9Sstevel@tonic-gate /* 23*7c478bd9Sstevel@tonic-gate * Copyright (c) 1998 by Sun Microsystems, Inc. 24*7c478bd9Sstevel@tonic-gate */ 25*7c478bd9Sstevel@tonic-gate #ifndef _CACHE_DOT_H 26*7c478bd9Sstevel@tonic-gate #define _CACHE_DOT_H 27*7c478bd9Sstevel@tonic-gate 28*7c478bd9Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 29*7c478bd9Sstevel@tonic-gate 30*7c478bd9Sstevel@tonic-gate /* 31*7c478bd9Sstevel@tonic-gate * ld.so directory caching 32*7c478bd9Sstevel@tonic-gate */ 33*7c478bd9Sstevel@tonic-gate #include <sys/types.h> 34*7c478bd9Sstevel@tonic-gate 35*7c478bd9Sstevel@tonic-gate /* 36*7c478bd9Sstevel@tonic-gate * Shared object lookup performance in the run-time link editor is 37*7c478bd9Sstevel@tonic-gate * enhanced through the use of caches for directories that the editor 38*7c478bd9Sstevel@tonic-gate * searches. A given "cache" describes the contents of a single directory, 39*7c478bd9Sstevel@tonic-gate * and each cache entry contains the canonical name for a shared object 40*7c478bd9Sstevel@tonic-gate * as well as its absolute pathname. 41*7c478bd9Sstevel@tonic-gate * 42*7c478bd9Sstevel@tonic-gate * Within a cache, "pointers" are really relative addresses to some absolute 43*7c478bd9Sstevel@tonic-gate * address (often the base address of the containing database). 44*7c478bd9Sstevel@tonic-gate */ 45*7c478bd9Sstevel@tonic-gate 46*7c478bd9Sstevel@tonic-gate /* 47*7c478bd9Sstevel@tonic-gate * Relative pointer macros. 48*7c478bd9Sstevel@tonic-gate */ 49*7c478bd9Sstevel@tonic-gate #define RELPTR(base, absptr) ((long)(absptr) - (long)(base)) 50*7c478bd9Sstevel@tonic-gate #define AP(base) ((caddr_t)base) 51*7c478bd9Sstevel@tonic-gate 52*7c478bd9Sstevel@tonic-gate /* 53*7c478bd9Sstevel@tonic-gate * Definitions for cache structures. 54*7c478bd9Sstevel@tonic-gate */ 55*7c478bd9Sstevel@tonic-gate #define DB_HASH 11 /* number of hash buckets in caches */ 56*7c478bd9Sstevel@tonic-gate #define LD_CACHE_MAGIC 0x041155 /* cookie to identify data structure */ 57*7c478bd9Sstevel@tonic-gate #define LD_CACHE_VERSION 0 /* version number of cache structure */ 58*7c478bd9Sstevel@tonic-gate 59*7c478bd9Sstevel@tonic-gate struct dbe { /* element of a directory cache */ 60*7c478bd9Sstevel@tonic-gate long dbe_next; /* (rp) next element on this list */ 61*7c478bd9Sstevel@tonic-gate long dbe_lop; /* (rp) canonical name for object */ 62*7c478bd9Sstevel@tonic-gate long dbe_name; /* (rp) absolute name */ 63*7c478bd9Sstevel@tonic-gate }; 64*7c478bd9Sstevel@tonic-gate 65*7c478bd9Sstevel@tonic-gate struct db { /* directory cache database */ 66*7c478bd9Sstevel@tonic-gate long db_name; /* (rp) directory contained here */ 67*7c478bd9Sstevel@tonic-gate struct dbe db_hash[DB_HASH]; /* hash buckets */ 68*7c478bd9Sstevel@tonic-gate caddr_t db_chain; /* private to database mapping */ 69*7c478bd9Sstevel@tonic-gate }; 70*7c478bd9Sstevel@tonic-gate 71*7c478bd9Sstevel@tonic-gate struct dbf { /* cache file image */ 72*7c478bd9Sstevel@tonic-gate long dbf_magic; /* identifying cookie */ 73*7c478bd9Sstevel@tonic-gate long dbf_version; /* version no. of these dbs */ 74*7c478bd9Sstevel@tonic-gate long dbf_machtype; /* machine type */ 75*7c478bd9Sstevel@tonic-gate long dbf_db; /* directory cache dbs */ 76*7c478bd9Sstevel@tonic-gate }; 77*7c478bd9Sstevel@tonic-gate 78*7c478bd9Sstevel@tonic-gate /* 79*7c478bd9Sstevel@tonic-gate * Structures used to describe and access a database. 80*7c478bd9Sstevel@tonic-gate */ 81*7c478bd9Sstevel@tonic-gate struct dbd { /* data base descriptor */ 82*7c478bd9Sstevel@tonic-gate struct dbd *dbd_next; /* next one on this list */ 83*7c478bd9Sstevel@tonic-gate struct db *dbd_db; /* data base described by this */ 84*7c478bd9Sstevel@tonic-gate }; 85*7c478bd9Sstevel@tonic-gate 86*7c478bd9Sstevel@tonic-gate struct dd { /* directory descriptor */ 87*7c478bd9Sstevel@tonic-gate struct dd *dd_next; /* next one on this list */ 88*7c478bd9Sstevel@tonic-gate struct db *dd_db; /* data base described by this */ 89*7c478bd9Sstevel@tonic-gate }; 90*7c478bd9Sstevel@tonic-gate 91*7c478bd9Sstevel@tonic-gate /* 92*7c478bd9Sstevel@tonic-gate * Interfaces imported/exported by the lookup code. 93*7c478bd9Sstevel@tonic-gate */ 94*7c478bd9Sstevel@tonic-gate 95*7c478bd9Sstevel@tonic-gate char *ask_db(); /* ask db for highest minor number */ 96*7c478bd9Sstevel@tonic-gate struct db *lo_cache(); /* obtain cache for directory name */ 97*7c478bd9Sstevel@tonic-gate 98*7c478bd9Sstevel@tonic-gate #endif 99