diff options
author | Bob Wilson <bob.wilson@acm.org> | 2004-11-11 23:09:24 +0000 |
---|---|---|
committer | Bob Wilson <bob.wilson@acm.org> | 2004-11-11 23:09:24 +0000 |
commit | e411546021665172a7ca71496e2f4dcc18315f98 (patch) | |
tree | ed53e7231d3f454c632c7769cb3d7e8a012d407c | |
parent | a9516b1d5e3668b4e2956fd013b4eaf4fdaa368d (diff) | |
download | gdb-e411546021665172a7ca71496e2f4dcc18315f98.zip gdb-e411546021665172a7ca71496e2f4dcc18315f98.tar.gz gdb-e411546021665172a7ca71496e2f4dcc18315f98.tar.bz2 |
* elf32-xtensa.c (property_table_compare): Remove assertion about
entries with the same address and non-zero size.
(xtensa_read_table_entries): Report such entries as errors.
-rw-r--r-- | bfd/ChangeLog | 6 | ||||
-rw-r--r-- | bfd/elf32-xtensa.c | 27 |
2 files changed, 26 insertions, 7 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 783c831..ed41ba2 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,9 @@ +2004-11-11 Bob Wilson <bob.wilson@acm.org> + + * elf32-xtensa.c (property_table_compare): Remove assertion about + entries with the same address and non-zero size. + (xtensa_read_table_entries): Report such entries as errors. + 2004-11-11 Mark Mitchell <mark@codesourcery.com> * elf32-arm.c (elf32_arm_final_link_relocate): Correct logic for diff --git a/bfd/elf32-xtensa.c b/bfd/elf32-xtensa.c index 472ec34..f3eba9f 100644 --- a/bfd/elf32-xtensa.c +++ b/bfd/elf32-xtensa.c @@ -523,12 +523,6 @@ property_table_compare (const void *ap, const void *bp) if (a->address == b->address) { - /* The only circumstance where two entries may legitimately have the - same address is when one of them is a zero-size placeholder to - mark a place where fill can be inserted. The zero-size entry should - come first. */ - BFD_ASSERT ((a->size == 0 || b->size == 0)); - if (a->size != b->size) return (a->size - b->size); @@ -585,7 +579,7 @@ xtensa_read_table_entries (bfd *abfd, bfd_size_type table_size = 0; bfd_byte *table_data; property_table_entry *blocks; - int block_count; + int blk, block_count; bfd_size_type num_records; Elf_Internal_Rela *internal_relocs; bfd_vma section_addr; @@ -700,6 +694,25 @@ xtensa_read_table_entries (bfd *abfd, /* Now sort them into address order for easy reference. */ qsort (blocks, block_count, sizeof (property_table_entry), property_table_compare); + + /* Check that the table contents are valid. Problems may occur, + for example, if an unrelocated object file is stripped. */ + for (blk = 1; blk < block_count; blk++) + { + /* The only circumstance where two entries may legitimately + have the same address is when one of them is a zero-size + placeholder to mark a place where fill can be inserted. + The zero-size entry should come first. */ + if (blocks[blk - 1].address == blocks[blk].address && + blocks[blk - 1].size != 0) + { + (*_bfd_error_handler) (_("%B(%A): invalid property table"), + abfd, section); + bfd_set_error (bfd_error_bad_value); + free (blocks); + return -1; + } + } } *table_p = blocks; |