1 FIND_ELF(1ONBLD) illumos Build Tools FIND_ELF(1ONBLD) 2 3 4 5 NAME 6 find_elf - Locate ELF shared objects and executables 7 8 SYNOPSIS 9 find_elf [-afrs] path 10 11 DESCRIPTION 12 The find_elf command descends a directory hierarchy and produces one 13 line of output on stdout for each ELF executable or shared object 14 found. 15 16 OPTIONS 17 The following options are supported: 18 19 -a Disable alias processing. Symbolic links are treated as independent 20 files, each such link results in a separate OBJECT output line, and 21 ALIAS lines are not issued. 22 23 -f Fast Mode. When reading directories, the file name and modes are 24 used to eliminate files from consideration and speed up the search: 25 Directories with names that start with a '.' character are skipped. 26 Executables must have the execute bit set, and shared objects must 27 end with a .so extension. Files that do not meet these requirements 28 are silently eliminated from consideration without further 29 analysis. 30 31 -r Report file names as relative paths, relative to the given file or 32 directory, instead of fully qualified. 33 34 -s Only report shared objects. 35 36 OUTPUT 37 find_elf produces a series of PREFIX, OBJECT, and ALIAS lines, which 38 collectively describe the ELF objects located. Whitespace is used 39 within each line to delimit the various fields of information provided. 40 41 If the -r option is used to specify that file names be reported as 42 relative paths, a PREFIX line is output to provide the base path from 43 which the relative names should be interpreted. There can only be one 44 PREFIX line, and it is output first, before any OBJECT or ALIAS lines. 45 46 PREFIX path 47 48 For each object found, an OBJECT line is produced to describe it: 49 50 OBJECT [32 | 64] [DYN | EXEC] [VERDEF | NOVERDEF] object-path 51 52 The first field provides the ELF class of the object, and will be 53 either 32 or 64. The second field provides the type of object, either 54 a shared object (DYN) or executable (EXEC). The third field will be 55 VERDEF if the object contains ELF version definitions, and NOVERDEF if 56 the object is not versioned. The final field gives the path to the 57 object. 58 59 Under Unix, a file can have multiple names. In the context of ELF 60 objects, this often happens for one of two reasons: 61 62 o Compilation symlinks, used to provide a non-versioned name 63 for a shared object. 64 65 o Symlinks such as '32' and '64' used to provide alternative 66 non-machine specific paths to objects. 67 68 When find_elf identifies an object via such an aliased name, it issues 69 an ALIAS line mapping it to the main name for the object: 70 71 ALIAS object-path alias-path 72 73 The -a option alters the handling of aliased names. When -a is 74 specified, each file results in a separate OBJECT line, as if they were 75 independent files rather than the same file with different names. 76 77 78 EXAMPLES 79 Assume the following hierarchy of files exist under /usr/lib/foo: 80 81 % /bin/ls -alRF /usr/lib/foo 82 /usr/lib/foo: 83 total 111 84 drwxr-xr-x 3 root root 7 Jul 16 17:35 ./ 85 drwxr-xr-x 34 root root 42 Jul 16 17:34 ../ 86 lrwxrwxrwx 1 root bin 1 Jul 16 17:34 32 -> ./ 87 lrwxrwxrwx 1 root bin 5 Jul 16 17:34 64 -> amd64/ 88 drwxr-xr-x 2 root bin 4 Jul 16 17:35 amd64/ 89 lrwxrwxrwx 1 root bin 11 Jul 16 17:35 libfoo.so -> libfoo.so.1* 90 -rwxr-xr-x 1 root bin 49132 Jul 16 17:35 libfoo.so.1* 91 92 /usr/lib/foo/amd64: 93 total 150 94 drwxr-xr-x 2 root root 4 Jul 16 17:35 ./ 95 drwxr-xr-x 3 root root 7 Jul 16 17:35 ../ 96 lrwxrwxrwx 1 root bin 11 Jul 16 17:35 libfoo.so -> libfoo.so.1* 97 -rwxr-xr-x 1 root bin 72536 Jul 16 17:35 libfoo.so.1* 98 99 This hierarchy contains compilation symlinks (libfoo.so) and path alias 100 symlinks (32, 64), as discussed in OUTPUT. 101 102 find_elf produces the following output for the above hierarchy: 103 104 % find_elf -r /usr/lib/foo 105 PREFIX /usr/lib/foo 106 OBJECT 64 DYN VERDEF amd64/libfoo.so.1 107 ALIAS amd64/libfoo.so.1 64/libfoo.so 108 ALIAS amd64/libfoo.so.1 64/libfoo.so.1 109 ALIAS amd64/libfoo.so.1 amd64/libfoo.so 110 OBJECT 32 DYN VERDEF libfoo.so.1 111 ALIAS libfoo.so.1 32/libfoo.so 112 ALIAS libfoo.so.1 32/libfoo.so.1 113 ALIAS libfoo.so.1 libfoo.so 114 115 Contrast this with the output when -a is used to treat each name as an 116 independent file: 117 118 % find_elf -ar /usr/lib/foo 119 PREFIX /usr/lib/foo 120 OBJECT 32 DYN VERDEF 32/libfoo.so 121 OBJECT 32 DYN VERDEF 32/libfoo.so.1 122 OBJECT 64 DYN VERDEF 64/libfoo.so 123 OBJECT 64 DYN VERDEF 64/libfoo.so.1 124 OBJECT 64 DYN VERDEF amd64/libfoo.so.1 125 OBJECT 64 DYN VERDEF amd64/libfoo.so 126 OBJECT 32 DYN VERDEF libfoo.so.1 127 OBJECT 32 DYN VERDEF libfoo.so 128 129 When find_elf is used to process an alias for which no target object is 130 given, there will be no output. For example, using /lib/libc.so, which 131 is a compilation symlink for /lib/libc.so.1: 132 133 % find_elf /lib/libc.so 134 135 In such situations, the -a option can be used to produce the desired 136 output: 137 138 % find_elf -a /lib/libc.so 139 OBJECT 32 DYN VERDEF /lib/libc.so 140 141 142 143 SEE ALSO 144 check_rtime(1ONBLD), interface_check(1ONBLD), interface_cmp(1ONBLD), 145 ld(1), ldd(1), elfdump(1), pvs(1). 146 147 148 149 150 March 25, 2010 FIND_ELF(1ONBLD)