* readelf.c (process_program_headers): When setting loadaddr, don't
assume segment size is 4k. Use p_align instead. (loadaddr): Change from int to long. (dynamic_addr, dynamic_info, version_info): Likewise. (process_dynamic_segment <syminsz>): Likewise. (process_dynamic_segment): Adjust print format string. (rela_addr, rela_size): Delete. (process_relocs): Formatting.
This commit is contained in:
parent
3d7442da97
commit
3e8bba361d
@ -1,3 +1,14 @@
|
||||
2002-12-07 Alan Modra <amodra@bigpond.net.au>
|
||||
|
||||
* readelf.c (process_program_headers): When setting loadaddr, don't
|
||||
assume segment size is 4k. Use p_align instead.
|
||||
(loadaddr): Change from int to long.
|
||||
(dynamic_addr, dynamic_info, version_info): Likewise.
|
||||
(process_dynamic_segment <syminsz>): Likewise.
|
||||
(process_dynamic_segment): Adjust print format string.
|
||||
(rela_addr, rela_size): Delete.
|
||||
(process_relocs): Formatting.
|
||||
|
||||
2002-12-05 Jim Wilson <wilson@redhat.com>
|
||||
|
||||
* configure.in (OBJDUMP_DEFS): Define SKIP_ZEROES as 16 for IA-64.
|
||||
|
@ -90,10 +90,8 @@
|
||||
#include "getopt.h"
|
||||
|
||||
char *program_name = "readelf";
|
||||
unsigned int dynamic_addr;
|
||||
unsigned long dynamic_addr;
|
||||
bfd_size_type dynamic_size;
|
||||
unsigned int rela_addr;
|
||||
unsigned int rela_size;
|
||||
char *dynamic_strings;
|
||||
char *string_table;
|
||||
unsigned long string_table_length;
|
||||
@ -103,9 +101,9 @@ Elf_Internal_Syminfo *dynamic_syminfo;
|
||||
unsigned long dynamic_syminfo_offset;
|
||||
unsigned int dynamic_syminfo_nent;
|
||||
char program_interpreter[64];
|
||||
int dynamic_info[DT_JMPREL + 1];
|
||||
int version_info[16];
|
||||
int loadaddr = 0;
|
||||
long dynamic_info[DT_JMPREL + 1];
|
||||
long version_info[16];
|
||||
long loadaddr = 0;
|
||||
Elf_Internal_Ehdr elf_header;
|
||||
Elf_Internal_Shdr *section_headers;
|
||||
Elf_Internal_Dyn *dynamic_segment;
|
||||
@ -160,222 +158,222 @@ typedef enum print_mode
|
||||
print_mode;
|
||||
|
||||
/* Forward declarations for dumb compilers. */
|
||||
static void print_vma
|
||||
static void print_vma
|
||||
PARAMS ((bfd_vma, print_mode));
|
||||
static void print_symbol
|
||||
static void print_symbol
|
||||
PARAMS ((int, const char *));
|
||||
static bfd_vma (*byte_get)
|
||||
static bfd_vma (*byte_get)
|
||||
PARAMS ((unsigned char *, int));
|
||||
static bfd_vma byte_get_little_endian
|
||||
static bfd_vma byte_get_little_endian
|
||||
PARAMS ((unsigned char *, int));
|
||||
static bfd_vma byte_get_big_endian
|
||||
static bfd_vma byte_get_big_endian
|
||||
PARAMS ((unsigned char *, int));
|
||||
static const char *get_mips_dynamic_type
|
||||
static const char *get_mips_dynamic_type
|
||||
PARAMS ((unsigned long));
|
||||
static const char *get_sparc64_dynamic_type
|
||||
static const char *get_sparc64_dynamic_type
|
||||
PARAMS ((unsigned long));
|
||||
static const char *get_ppc64_dynamic_type
|
||||
static const char *get_ppc64_dynamic_type
|
||||
PARAMS ((unsigned long));
|
||||
static const char *get_parisc_dynamic_type
|
||||
static const char *get_parisc_dynamic_type
|
||||
PARAMS ((unsigned long));
|
||||
static const char *get_dynamic_type
|
||||
static const char *get_dynamic_type
|
||||
PARAMS ((unsigned long));
|
||||
static int slurp_rela_relocs
|
||||
static int slurp_rela_relocs
|
||||
PARAMS ((FILE *, unsigned long, unsigned long, Elf_Internal_Rela **,
|
||||
unsigned long *));
|
||||
static int slurp_rel_relocs
|
||||
static int slurp_rel_relocs
|
||||
PARAMS ((FILE *, unsigned long, unsigned long, Elf_Internal_Rela **,
|
||||
unsigned long *));
|
||||
static int dump_relocations
|
||||
static int dump_relocations
|
||||
PARAMS ((FILE *, unsigned long, unsigned long, Elf_Internal_Sym *,
|
||||
unsigned long, char *, int));
|
||||
static char *get_file_type
|
||||
static char *get_file_type
|
||||
PARAMS ((unsigned));
|
||||
static char *get_machine_name
|
||||
static char *get_machine_name
|
||||
PARAMS ((unsigned));
|
||||
static void decode_ARM_machine_flags
|
||||
static void decode_ARM_machine_flags
|
||||
PARAMS ((unsigned, char[]));
|
||||
static char *get_machine_flags
|
||||
static char *get_machine_flags
|
||||
PARAMS ((unsigned, unsigned));
|
||||
static const char *get_mips_segment_type
|
||||
static const char *get_mips_segment_type
|
||||
PARAMS ((unsigned long));
|
||||
static const char *get_parisc_segment_type
|
||||
static const char *get_parisc_segment_type
|
||||
PARAMS ((unsigned long));
|
||||
static const char *get_ia64_segment_type
|
||||
static const char *get_ia64_segment_type
|
||||
PARAMS ((unsigned long));
|
||||
static const char *get_segment_type
|
||||
static const char *get_segment_type
|
||||
PARAMS ((unsigned long));
|
||||
static const char *get_mips_section_type_name
|
||||
static const char *get_mips_section_type_name
|
||||
PARAMS ((unsigned int));
|
||||
static const char *get_parisc_section_type_name
|
||||
PARAMS ((unsigned int));
|
||||
static const char *get_ia64_section_type_name
|
||||
static const char *get_ia64_section_type_name
|
||||
PARAMS ((unsigned int));
|
||||
static const char *get_section_type_name
|
||||
static const char *get_section_type_name
|
||||
PARAMS ((unsigned int));
|
||||
static const char *get_symbol_binding
|
||||
static const char *get_symbol_binding
|
||||
PARAMS ((unsigned int));
|
||||
static const char *get_symbol_type
|
||||
static const char *get_symbol_type
|
||||
PARAMS ((unsigned int));
|
||||
static const char *get_symbol_visibility
|
||||
static const char *get_symbol_visibility
|
||||
PARAMS ((unsigned int));
|
||||
static const char *get_symbol_index_type
|
||||
static const char *get_symbol_index_type
|
||||
PARAMS ((unsigned int));
|
||||
static const char *get_dynamic_flags
|
||||
static const char *get_dynamic_flags
|
||||
PARAMS ((bfd_vma));
|
||||
static void usage
|
||||
static void usage
|
||||
PARAMS ((void));
|
||||
static void parse_args
|
||||
static void parse_args
|
||||
PARAMS ((int, char **));
|
||||
static int process_file_header
|
||||
static int process_file_header
|
||||
PARAMS ((void));
|
||||
static int process_program_headers
|
||||
static int process_program_headers
|
||||
PARAMS ((FILE *));
|
||||
static int process_section_headers
|
||||
static int process_section_headers
|
||||
PARAMS ((FILE *));
|
||||
static int process_unwind
|
||||
static int process_unwind
|
||||
PARAMS ((FILE *));
|
||||
static void dynamic_segment_mips_val
|
||||
static void dynamic_segment_mips_val
|
||||
PARAMS ((Elf_Internal_Dyn *));
|
||||
static void dynamic_segment_parisc_val
|
||||
static void dynamic_segment_parisc_val
|
||||
PARAMS ((Elf_Internal_Dyn *));
|
||||
static int process_dynamic_segment
|
||||
static int process_dynamic_segment
|
||||
PARAMS ((FILE *));
|
||||
static int process_symbol_table
|
||||
static int process_symbol_table
|
||||
PARAMS ((FILE *));
|
||||
static int process_syminfo
|
||||
static int process_syminfo
|
||||
PARAMS ((FILE *));
|
||||
static int process_section_contents
|
||||
static int process_section_contents
|
||||
PARAMS ((FILE *));
|
||||
static void process_mips_fpe_exception
|
||||
static void process_mips_fpe_exception
|
||||
PARAMS ((int));
|
||||
static int process_mips_specific
|
||||
static int process_mips_specific
|
||||
PARAMS ((FILE *));
|
||||
static int process_file
|
||||
static int process_file
|
||||
PARAMS ((char *));
|
||||
static int process_relocs
|
||||
static int process_relocs
|
||||
PARAMS ((FILE *));
|
||||
static int process_version_sections
|
||||
static int process_version_sections
|
||||
PARAMS ((FILE *));
|
||||
static char *get_ver_flags
|
||||
static char *get_ver_flags
|
||||
PARAMS ((unsigned int));
|
||||
static int get_32bit_section_headers
|
||||
static int get_32bit_section_headers
|
||||
PARAMS ((FILE *, unsigned int));
|
||||
static int get_64bit_section_headers
|
||||
static int get_64bit_section_headers
|
||||
PARAMS ((FILE *, unsigned int));
|
||||
static int get_32bit_program_headers
|
||||
static int get_32bit_program_headers
|
||||
PARAMS ((FILE *, Elf_Internal_Phdr *));
|
||||
static int get_64bit_program_headers
|
||||
static int get_64bit_program_headers
|
||||
PARAMS ((FILE *, Elf_Internal_Phdr *));
|
||||
static int get_file_header
|
||||
static int get_file_header
|
||||
PARAMS ((FILE *));
|
||||
static Elf_Internal_Sym *get_32bit_elf_symbols
|
||||
static Elf_Internal_Sym *get_32bit_elf_symbols
|
||||
PARAMS ((FILE *, Elf_Internal_Shdr *));
|
||||
static Elf_Internal_Sym *get_64bit_elf_symbols
|
||||
static Elf_Internal_Sym *get_64bit_elf_symbols
|
||||
PARAMS ((FILE *, Elf_Internal_Shdr *));
|
||||
static const char *get_elf_section_flags
|
||||
static const char *get_elf_section_flags
|
||||
PARAMS ((bfd_vma));
|
||||
static int *get_dynamic_data
|
||||
static int *get_dynamic_data
|
||||
PARAMS ((FILE *, unsigned int));
|
||||
static int get_32bit_dynamic_segment
|
||||
static int get_32bit_dynamic_segment
|
||||
PARAMS ((FILE *));
|
||||
static int get_64bit_dynamic_segment
|
||||
static int get_64bit_dynamic_segment
|
||||
PARAMS ((FILE *));
|
||||
#ifdef SUPPORT_DISASSEMBLY
|
||||
static int disassemble_section
|
||||
static int disassemble_section
|
||||
PARAMS ((Elf_Internal_Shdr *, FILE *));
|
||||
#endif
|
||||
static int dump_section
|
||||
static int dump_section
|
||||
PARAMS ((Elf_Internal_Shdr *, FILE *));
|
||||
static int display_debug_section
|
||||
static int display_debug_section
|
||||
PARAMS ((Elf_Internal_Shdr *, FILE *));
|
||||
static int display_debug_info
|
||||
static int display_debug_info
|
||||
PARAMS ((Elf_Internal_Shdr *, unsigned char *, FILE *));
|
||||
static int display_debug_not_supported
|
||||
PARAMS ((Elf_Internal_Shdr *, unsigned char *, FILE *));
|
||||
static int prescan_debug_info
|
||||
static int prescan_debug_info
|
||||
PARAMS ((Elf_Internal_Shdr *, unsigned char *, FILE *));
|
||||
static int display_debug_lines
|
||||
static int display_debug_lines
|
||||
PARAMS ((Elf_Internal_Shdr *, unsigned char *, FILE *));
|
||||
static int display_debug_pubnames
|
||||
static int display_debug_pubnames
|
||||
PARAMS ((Elf_Internal_Shdr *, unsigned char *, FILE *));
|
||||
static int display_debug_abbrev
|
||||
static int display_debug_abbrev
|
||||
PARAMS ((Elf_Internal_Shdr *, unsigned char *, FILE *));
|
||||
static int display_debug_aranges
|
||||
static int display_debug_aranges
|
||||
PARAMS ((Elf_Internal_Shdr *, unsigned char *, FILE *));
|
||||
static int display_debug_frames
|
||||
static int display_debug_frames
|
||||
PARAMS ((Elf_Internal_Shdr *, unsigned char *, FILE *));
|
||||
static int display_debug_macinfo
|
||||
static int display_debug_macinfo
|
||||
PARAMS ((Elf_Internal_Shdr *, unsigned char *, FILE *));
|
||||
static int display_debug_str
|
||||
static int display_debug_str
|
||||
PARAMS ((Elf_Internal_Shdr *, unsigned char *, FILE *));
|
||||
static int display_debug_loc
|
||||
static int display_debug_loc
|
||||
PARAMS ((Elf_Internal_Shdr *, unsigned char *, FILE *));
|
||||
static unsigned char *process_abbrev_section
|
||||
static unsigned char *process_abbrev_section
|
||||
PARAMS ((unsigned char *, unsigned char *));
|
||||
static void load_debug_str
|
||||
static void load_debug_str
|
||||
PARAMS ((FILE *));
|
||||
static void free_debug_str
|
||||
static void free_debug_str
|
||||
PARAMS ((void));
|
||||
static const char *fetch_indirect_string
|
||||
static const char *fetch_indirect_string
|
||||
PARAMS ((unsigned long));
|
||||
static void load_debug_loc
|
||||
static void load_debug_loc
|
||||
PARAMS ((FILE *));
|
||||
static void free_debug_loc
|
||||
static void free_debug_loc
|
||||
PARAMS ((void));
|
||||
static unsigned long read_leb128
|
||||
static unsigned long read_leb128
|
||||
PARAMS ((unsigned char *, int *, int));
|
||||
static int process_extended_line_op
|
||||
static int process_extended_line_op
|
||||
PARAMS ((unsigned char *, int, int));
|
||||
static void reset_state_machine
|
||||
static void reset_state_machine
|
||||
PARAMS ((int));
|
||||
static char *get_TAG_name
|
||||
static char *get_TAG_name
|
||||
PARAMS ((unsigned long));
|
||||
static char *get_AT_name
|
||||
static char *get_AT_name
|
||||
PARAMS ((unsigned long));
|
||||
static char *get_FORM_name
|
||||
static char *get_FORM_name
|
||||
PARAMS ((unsigned long));
|
||||
static void free_abbrevs
|
||||
static void free_abbrevs
|
||||
PARAMS ((void));
|
||||
static void add_abbrev
|
||||
static void add_abbrev
|
||||
PARAMS ((unsigned long, unsigned long, int));
|
||||
static void add_abbrev_attr
|
||||
static void add_abbrev_attr
|
||||
PARAMS ((unsigned long, unsigned long));
|
||||
static unsigned char *read_and_display_attr
|
||||
static unsigned char *read_and_display_attr
|
||||
PARAMS ((unsigned long, unsigned long, unsigned char *, unsigned long,
|
||||
unsigned long));
|
||||
static unsigned char *read_and_display_attr_value
|
||||
PARAMS ((unsigned long, unsigned long, unsigned char *, unsigned long,
|
||||
unsigned long));
|
||||
static unsigned char *display_block
|
||||
static unsigned char *display_block
|
||||
PARAMS ((unsigned char *, unsigned long));
|
||||
static void decode_location_expression
|
||||
static void decode_location_expression
|
||||
PARAMS ((unsigned char *, unsigned int, unsigned long));
|
||||
static void request_dump
|
||||
static void request_dump
|
||||
PARAMS ((unsigned int, int));
|
||||
static const char *get_elf_class
|
||||
static const char *get_elf_class
|
||||
PARAMS ((unsigned int));
|
||||
static const char *get_data_encoding
|
||||
static const char *get_data_encoding
|
||||
PARAMS ((unsigned int));
|
||||
static const char *get_osabi_name
|
||||
static const char *get_osabi_name
|
||||
PARAMS ((unsigned int));
|
||||
static int guess_is_rela
|
||||
static int guess_is_rela
|
||||
PARAMS ((unsigned long));
|
||||
static const char *get_note_type
|
||||
static const char *get_note_type
|
||||
PARAMS ((unsigned int));
|
||||
static const char *get_netbsd_elfcore_note_type
|
||||
static const char *get_netbsd_elfcore_note_type
|
||||
PARAMS ((unsigned int));
|
||||
static int process_note
|
||||
static int process_note
|
||||
PARAMS ((Elf_Internal_Note *));
|
||||
static int process_corefile_note_segment
|
||||
static int process_corefile_note_segment
|
||||
PARAMS ((FILE *, bfd_vma, bfd_vma));
|
||||
static int process_corefile_note_segments
|
||||
PARAMS ((FILE *));
|
||||
static int process_corefile_contents
|
||||
static int process_corefile_contents
|
||||
PARAMS ((FILE *));
|
||||
static int process_arch_specific
|
||||
static int process_arch_specific
|
||||
PARAMS ((FILE *));
|
||||
static int process_gnu_liblist
|
||||
static int process_gnu_liblist
|
||||
PARAMS ((FILE *));
|
||||
|
||||
typedef int Elf32_Word;
|
||||
@ -3142,8 +3140,14 @@ process_program_headers (file)
|
||||
{
|
||||
case PT_LOAD:
|
||||
if (loadaddr == -1)
|
||||
loadaddr = (segment->p_vaddr & 0xfffff000)
|
||||
- (segment->p_offset & 0xfffff000);
|
||||
{
|
||||
unsigned long align_mask = -segment->p_align;
|
||||
|
||||
if (align_mask == 0)
|
||||
--align_mask;
|
||||
loadaddr = ((segment->p_vaddr & align_mask)
|
||||
- (segment->p_offset & align_mask));
|
||||
}
|
||||
break;
|
||||
|
||||
case PT_DYNAMIC:
|
||||
@ -3787,7 +3791,8 @@ process_relocs (file)
|
||||
rel_offset, rel_size);
|
||||
|
||||
dump_relocations (file, rel_offset - loadaddr, rel_size,
|
||||
dynamic_symbols, num_dynamic_syms, dynamic_strings, is_rela);
|
||||
dynamic_symbols, num_dynamic_syms, dynamic_strings,
|
||||
is_rela);
|
||||
}
|
||||
else
|
||||
printf (_("\nThere are no dynamic relocations in this file.\n"));
|
||||
@ -4653,7 +4658,7 @@ process_dynamic_segment (file)
|
||||
/* And find the syminfo section if available. */
|
||||
if (dynamic_syminfo == NULL)
|
||||
{
|
||||
unsigned int syminsz = 0;
|
||||
unsigned long syminsz = 0;
|
||||
|
||||
for (i = 0, entry = dynamic_segment;
|
||||
i < dynamic_size;
|
||||
@ -4703,7 +4708,7 @@ process_dynamic_segment (file)
|
||||
}
|
||||
|
||||
if (do_dynamic && dynamic_addr)
|
||||
printf (_("\nDynamic segment at offset 0x%x contains %ld entries:\n"),
|
||||
printf (_("\nDynamic segment at offset 0x%lx contains %ld entries:\n"),
|
||||
dynamic_addr, (long) dynamic_size);
|
||||
if (do_dynamic)
|
||||
printf (_(" Tag Type Name/Value\n"));
|
||||
|
Loading…
Reference in New Issue
Block a user