OSDN Git Service

original
[gb-231r1-is01/Gingerbread_2.3.3_r1_IS01.git] / build / tools / lsd / main.c
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
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