aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPhil Blundell <philb@gnu.org>2000-11-06 19:41:20 +0000
committerPhil Blundell <philb@gnu.org>2000-11-06 19:41:20 +0000
commitaea4709d3bb85f064b352c727a7de7db8e8bc39e (patch)
treeb13b6f83015229be7671f8e162b772f7d23676c5
parentdfef140a12e04362844301e9a4581414437d73d6 (diff)
downloadgdb-aea4709d3bb85f064b352c727a7de7db8e8bc39e.zip
gdb-aea4709d3bb85f064b352c727a7de7db8e8bc39e.tar.gz
gdb-aea4709d3bb85f064b352c727a7de7db8e8bc39e.tar.bz2
2000-11-05 Philip Blundell <philb@gnu.org>
* elf32-arm.h (elf32_arm_merge_private_bfd_data): Always permit BFDs containing no sections to be merged, regardless of their flags. 2000-11-04 Philip Blundell <philb@gnu.org> * elf32-arm.h (elf32_arm_relocate_section): Suppress error message if a relocation for an undefined symbol also results in an overflow.
-rw-r--r--bfd/ChangeLog11
-rw-r--r--bfd/elf32-arm.h31
2 files changed, 38 insertions, 4 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 9230b0d..9e1fb76 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,14 @@
+2000-11-05 Philip Blundell <philb@gnu.org>
+
+ * elf32-arm.h (elf32_arm_merge_private_bfd_data): Always permit
+ BFDs containing no sections to be merged, regardless of their flags.
+
+2000-11-04 Philip Blundell <philb@gnu.org>
+
+ * elf32-arm.h (elf32_arm_relocate_section): Suppress error message
+ if a relocation for an undefined symbol also results in an
+ overflow.
+
2000-10-31 Philip Blundell <philb@gnu.org>
* elf32-arm.h (elf32_arm_merge_private_bfd_data): Only handle
diff --git a/bfd/elf32-arm.h b/bfd/elf32-arm.h
index 72bbe78..2e8a657 100644
--- a/bfd/elf32-arm.h
+++ b/bfd/elf32-arm.h
@@ -1846,10 +1846,15 @@ elf32_arm_relocate_section (output_bfd, info, input_bfd, input_section,
switch (r)
{
case bfd_reloc_overflow:
- if (!((*info->callbacks->reloc_overflow)
- (info, name, howto->name, (bfd_vma) 0,
- input_bfd, input_section, rel->r_offset)))
- return false;
+ /* If the overflowing reloc was to an undefined symbol,
+ we have already printed one error message and there
+ is no point complaining again. */
+ if ((! h ||
+ h->root.type != bfd_link_hash_undefined)
+ && (!((*info->callbacks->reloc_overflow)
+ (info, name, howto->name, (bfd_vma) 0,
+ input_bfd, input_section, rel->r_offset))))
+ return false;
break;
case bfd_reloc_undefined:
@@ -1974,6 +1979,8 @@ elf32_arm_merge_private_bfd_data (ibfd, obfd)
flagword out_flags;
flagword in_flags;
boolean flags_compatible = true;
+ boolean null_input_bfd = true;
+ asection *sec;
if ( bfd_get_flavour (ibfd) != bfd_target_elf_flavour
|| bfd_get_flavour (obfd) != bfd_target_elf_flavour)
@@ -2029,6 +2036,22 @@ elf32_arm_merge_private_bfd_data (ibfd, obfd)
if (in_flags == out_flags)
return true;
+ /* Check to see if the input BFD actually contains any sections.
+ If not, its flags may not have been initialised either, but it cannot
+ actually cause any incompatibility. */
+ for (sec = ibfd->sections; sec != NULL; sec = sec->next)
+ {
+ /* Ignore synthetic glue sections. */
+ if (strcmp (sec->name, ".glue_7")
+ && strcmp (sec->name, ".glue_7t"))
+ {
+ null_input_bfd = false;
+ break;
+ }
+ }
+ if (null_input_bfd)
+ return true;
+
/* If any of the input BFDs is non-PIC, the output is also position
dependent. */
if (!(in_flags & EF_PIC))