| /* TODO: |
| 1. check the ARM EABI version--this works for versions 1 and 2. |
| 2. use a more-intelligent approach to finding the symbol table, symbol-string |
| table, and the .dynamic section. |
| 3. fix the determination of the host and ELF-file endianness |
| 4. write the help screen |
| */ |
| |
| #include <stdio.h> |
| #include <common.h> |
| #include <debug.h> |
| #include <libelf.h> |
| #include <elf.h> |
| #include <gelf.h> |
| #include <cmdline.h> |
| #include <string.h> |
| #include <errno.h> |
| #include <string.h> |
| #include <sys/types.h> |
| #include <sys/stat.h> |
| #include <fcntl.h> |
| #include <unistd.h> |
| #include <lsd.h> |
| |
| /* Flag set by --verbose. This variable is global as it is accessed by the |
| macro INFO() in multiple compilation unites. */ |
| int verbose_flag = 0; |
| /* Flag set by --quiet. This variable is global as it is accessed by the |
| macro PRINT() in multiple compilation unites. */ |
| int quiet_flag = 0; |
| |
| int main(int argc, char **argv) |
| { |
| char **lookup_dirs = NULL; |
| int num_lookup_dirs; |
| int print_info; |
| int list_needed_libs; |
| |
| /* Do not issue INFO() statements before you call get_options() to set |
| the verbose flag as necessary. |
| */ |
| |
| int first = get_options(argc, argv, |
| &list_needed_libs, |
| &print_info, |
| &lookup_dirs, |
| &num_lookup_dirs, |
| &verbose_flag); |
| |
| if (first == argc) { |
| print_help(); |
| FAILIF(1, "You must specify at least one input ELF file!\n"); |
| } |
| |
| /* Check to see whether the ELF library is current. */ |
| FAILIF (elf_version(EV_CURRENT) == EV_NONE, "libelf is out of date!\n"); |
| |
| /* List symbol dependencies... */ |
| lsd(&argv[first], argc - first, |
| list_needed_libs, print_info, |
| lookup_dirs, num_lookup_dirs); |
| |
| FREE(lookup_dirs); |
| |
| return 0; |
| } |
| |