diff options
author | Nick Clifton <nickc@redhat.com> | 2002-11-14 14:38:39 +0000 |
---|---|---|
committer | Nick Clifton <nickc@redhat.com> | 2002-11-14 14:38:39 +0000 |
commit | 2f62977e683fd566b7060848e0857e74f501def6 (patch) | |
tree | 21bdaf435fc49ef53bb7b133be5f0dc4675ee130 | |
parent | 51908eee4e7c08a3349047c7b554865c1d8efa10 (diff) | |
download | gdb-2f62977e683fd566b7060848e0857e74f501def6.zip gdb-2f62977e683fd566b7060848e0857e74f501def6.tar.gz gdb-2f62977e683fd566b7060848e0857e74f501def6.tar.bz2 |
Handle binaries with corrupt section or segment headers
-rw-r--r-- | binutils/ChangeLog | 8 | ||||
-rw-r--r-- | binutils/readelf.c | 17 |
2 files changed, 21 insertions, 4 deletions
diff --git a/binutils/ChangeLog b/binutils/ChangeLog index 6ceb184..bbf1d61 100644 --- a/binutils/ChangeLog +++ b/binutils/ChangeLog @@ -1,3 +1,11 @@ +2002-11-14 Nick Clifton <nickc@redhat.com> + + * readelf.c (process_program_headers): Add comment about return + value. Ensure that 0 is returned if the headers are not loaded. + (process_file): If process_section_headers failed to load the + headers disable any tests that rely upon them. Similarly for + process_program_headers. + 2002-11-12 Nick Clifton <nickc@redhat.com> * po/da.po: Updated Danish translation. diff --git a/binutils/readelf.c b/binutils/readelf.c index f381e23..cbeb059 100644 --- a/binutils/readelf.c +++ b/binutils/readelf.c @@ -2886,6 +2886,8 @@ get_64bit_program_headers (file, program_headers) return 1; } +/* Returns 1 if the program headers were loaded. */ + static int process_program_headers (file) FILE * file; @@ -2898,7 +2900,7 @@ process_program_headers (file) { if (do_segments) printf (_("\nThere are no program headers in this file.\n")); - return 1; + return 0; } if (do_segments && !do_header) @@ -10053,11 +10055,18 @@ process_file (file_name) return 1; } - process_section_headers (file); + if (! process_section_headers (file)) + { + /* Without loaded section headers we + cannot process lots of things. */ + do_unwind = do_version = do_dump = do_arch = 0; - process_program_headers (file); + if (! do_using_dynamic) + do_syms = do_reloc = 0; + } - process_dynamic_segment (file); + if (process_program_headers (file)) + process_dynamic_segment (file); process_relocs (file); |