Home | History | Annotate | Download | only in lsd
      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 
     68