1 /* TODO:
2 1. check the ARM EABI version--this works for versions 1 and 2.
3 2. use a more-intelligent approach to finding the symbol table, symbol-string
4 table, and the .dynamic section.
5 3. fix the determination of the host and ELF-file endianness
6 4. write the help screen
7 */
8
9 #include <stdio.h>
10 #include <common.h>
11 #include <debug.h>
12 #include <libelf.h>
13 #include <elf.h>
14 #include <gelf.h>
15 #include <cmdline.h>
16 #include <string.h>
17 #include <errno.h>
18 #include <string.h>
19 #include <sys/types.h>
20 #include <sys/stat.h>
21 #include <fcntl.h>
22 #include <unistd.h>
23 #include <lsd.h>
24
25 /* Flag set by --verbose. This variable is global as it is accessed by the
26 macro INFO() in multiple compilation unites. */
27 int verbose_flag = 0;
28 /* Flag set by --quiet. This variable is global as it is accessed by the
29 macro PRINT() in multiple compilation unites. */
30 int quiet_flag = 0;
31
main(int argc,char ** argv)32 int main(int argc, char **argv)
33 {
34 char **lookup_dirs = NULL;
35 int num_lookup_dirs;
36 int print_info;
37 int list_needed_libs;
38
39 /* Do not issue INFO() statements before you call get_options() to set
40 the verbose flag as necessary.
41 */
42
43 int first = get_options(argc, argv,
44 &list_needed_libs,
45 &print_info,
46 &lookup_dirs,
47 &num_lookup_dirs,
48 &verbose_flag);
49
50 if (first == argc) {
51 print_help();
52 FAILIF(1, "You must specify at least one input ELF file!\n");
53 }
54
55 /* Check to see whether the ELF library is current. */
56 FAILIF (elf_version(EV_CURRENT) == EV_NONE, "libelf is out of date!\n");
57
58 /* List symbol dependencies... */
59 lsd(&argv[first], argc - first,
60 list_needed_libs, print_info,
61 lookup_dirs, num_lookup_dirs);
62
63 FREE(lookup_dirs);
64
65 return 0;
66 }
67
68