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 /* 29*7c478bd9Sstevel@tonic-gate * ld.so directory caching 30*7c478bd9Sstevel@tonic-gate */ 31*7c478bd9Sstevel@tonic-gate #include <sys/types.h> 32*7c478bd9Sstevel@tonic-gate 33*7c478bd9Sstevel@tonic-gate /* 34*7c478bd9Sstevel@tonic-gate * Shared object lookup performance in the run-time link editor is 35*7c478bd9Sstevel@tonic-gate * enhanced through the use of caches for directories that the editor 36*7c478bd9Sstevel@tonic-gate * searches. A given "cache" describes the contents of a single directory, 37*7c478bd9Sstevel@tonic-gate * and each cache entry contains the canonical name for a shared object 38*7c478bd9Sstevel@tonic-gate * as well as its absolute pathname. 39*7c478bd9Sstevel@tonic-gate * 40*7c478bd9Sstevel@tonic-gate * Within a cache, "pointers" are really relative addresses to some absolute 41*7c478bd9Sstevel@tonic-gate * address (often the base address of the containing database). 42*7c478bd9Sstevel@tonic-gate */ 43*7c478bd9Sstevel@tonic-gate 44*7c478bd9Sstevel@tonic-gate /* 45*7c478bd9Sstevel@tonic-gate * Relative pointer macros. 46*7c478bd9Sstevel@tonic-gate */ 47*7c478bd9Sstevel@tonic-gate #define RELPTR(base, absptr) ((long)(absptr) - (long)(base)) 48*7c478bd9Sstevel@tonic-gate #define AP(base) ((caddr_t)base) 49*7c478bd9Sstevel@tonic-gate 50*7c478bd9Sstevel@tonic-gate /* 51*7c478bd9Sstevel@tonic-gate * Definitions for cache structures. 52*7c478bd9Sstevel@tonic-gate */ 53*7c478bd9Sstevel@tonic-gate #define DB_HASH 11 /* number of hash buckets in caches */ 54*7c478bd9Sstevel@tonic-gate #define LD_CACHE_MAGIC 0x041155 /* cookie to identify data structure */ 55*7c478bd9Sstevel@tonic-gate #define LD_CACHE_VERSION 0 /* version number of cache structure */ 56*7c478bd9Sstevel@tonic-gate 57*7c478bd9Sstevel@tonic-gate struct dbe { /* element of a directory cache */ 58*7c478bd9Sstevel@tonic-gate long dbe_next; /* (rp) next element on this list */ 59*7c478bd9Sstevel@tonic-gate long dbe_lop; /* (rp) canonical name for object */ 60*7c478bd9Sstevel@tonic-gate long dbe_name; /* (rp) absolute name */ 61*7c478bd9Sstevel@tonic-gate }; 62*7c478bd9Sstevel@tonic-gate 63*7c478bd9Sstevel@tonic-gate struct db { /* directory cache database */ 64*7c478bd9Sstevel@tonic-gate long db_name; /* (rp) directory contained here */ 65*7c478bd9Sstevel@tonic-gate struct dbe db_hash[DB_HASH]; /* hash buckets */ 66*7c478bd9Sstevel@tonic-gate caddr_t db_chain; /* private to database mapping */ 67*7c478bd9Sstevel@tonic-gate }; 68*7c478bd9Sstevel@tonic-gate 69*7c478bd9Sstevel@tonic-gate struct dbf { /* cache file image */ 70*7c478bd9Sstevel@tonic-gate long dbf_magic; /* identifying cookie */ 71*7c478bd9Sstevel@tonic-gate long dbf_version; /* version no. of these dbs */ 72*7c478bd9Sstevel@tonic-gate long dbf_machtype; /* machine type */ 73*7c478bd9Sstevel@tonic-gate long dbf_db; /* directory cache dbs */ 74*7c478bd9Sstevel@tonic-gate }; 75*7c478bd9Sstevel@tonic-gate 76*7c478bd9Sstevel@tonic-gate /* 77*7c478bd9Sstevel@tonic-gate * Structures used to describe and access a database. 78*7c478bd9Sstevel@tonic-gate */ 79*7c478bd9Sstevel@tonic-gate struct dbd { /* data base descriptor */ 80*7c478bd9Sstevel@tonic-gate struct dbd *dbd_next; /* next one on this list */ 81*7c478bd9Sstevel@tonic-gate struct db *dbd_db; /* data base described by this */ 82*7c478bd9Sstevel@tonic-gate }; 83*7c478bd9Sstevel@tonic-gate 84*7c478bd9Sstevel@tonic-gate struct dd { /* directory descriptor */ 85*7c478bd9Sstevel@tonic-gate struct dd *dd_next; /* next one on this list */ 86*7c478bd9Sstevel@tonic-gate struct db *dd_db; /* data base described by this */ 87*7c478bd9Sstevel@tonic-gate }; 88*7c478bd9Sstevel@tonic-gate 89*7c478bd9Sstevel@tonic-gate /* 90*7c478bd9Sstevel@tonic-gate * Interfaces imported/exported by the lookup code. 91*7c478bd9Sstevel@tonic-gate */ 92*7c478bd9Sstevel@tonic-gate 93*7c478bd9Sstevel@tonic-gate char *ask_db(); /* ask db for highest minor number */ 94*7c478bd9Sstevel@tonic-gate struct db *lo_cache(); /* obtain cache for directory name */ 95*7c478bd9Sstevel@tonic-gate 96*7c478bd9Sstevel@tonic-gate #endif 97