aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2000-11-07 05:49:30 +0000
committerAlan Modra <amodra@gmail.com>2000-11-07 05:49:30 +0000
commita67da8a791bba45e8b716c3ac7a8ed3cdecbb592 (patch)
treee708166a09d47b98f9662904b5dc1f2914989380
parentaea4709d3bb85f064b352c727a7de7db8e8bc39e (diff)
downloadgdb-a67da8a791bba45e8b716c3ac7a8ed3cdecbb592.zip
gdb-a67da8a791bba45e8b716c3ac7a8ed3cdecbb592.tar.gz
gdb-a67da8a791bba45e8b716c3ac7a8ed3cdecbb592.tar.bz2
H8 ld -r fix, and trunk 2000-04-03 patch.
-rw-r--r--bfd/ChangeLog8
-rw-r--r--bfd/coff-h8300.c15
2 files changed, 19 insertions, 4 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 9e1fb76..638ea67 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,11 @@
+2000-11-07 Alan Modra <alan@linuxcare.com.au>
+
+ * coff-h8300.c (special): Adjust reloc address.
+
+ From mainline 2000-04-03 Kazu Hirata <kazu@hxi.com>
+ * coff-h8300.c (h8300_reloc16_extra_cases): Add bsr:16 -> bsr:8 to
+ the R_PCRWORD_B case.
+
2000-11-05 Philip Blundell <philb@gnu.org>
* elf32-arm.h (elf32_arm_merge_private_bfd_data): Always permit
diff --git a/bfd/coff-h8300.c b/bfd/coff-h8300.c
index 3d54f20..c86c4b9 100644
--- a/bfd/coff-h8300.c
+++ b/bfd/coff-h8300.c
@@ -192,18 +192,18 @@ h8300_coff_link_hash_table_create (abfd)
return &ret->root.root;
}
-/* special handling for H8/300 relocs.
+/* Special handling for H8/300 relocs.
We only come here for pcrel stuff and return normally if not an -r link.
When doing -r, we can't do any arithmetic for the pcrel stuff, because
the code in reloc.c assumes that we can manipulate the targets of
the pcrel branches. This isn't so, since the H8/300 can do relaxing,
which means that the gap after the instruction may not be enough to
- contain the offset required for the branch, so we have to use the only
- the addend until the final link */
+ contain the offset required for the branch, so we have to use only
+ the addend until the final link. */
static bfd_reloc_status_type
special (abfd, reloc_entry, symbol, data, input_section, output_bfd,
- error_message)
+ error_message)
bfd *abfd ATTRIBUTE_UNUSED;
arelent *reloc_entry ATTRIBUTE_UNUSED;
asymbol *symbol ATTRIBUTE_UNUSED;
@@ -215,6 +215,8 @@ special (abfd, reloc_entry, symbol, data, input_section, output_bfd,
if (output_bfd == (bfd *) NULL)
return bfd_reloc_continue;
+ /* Adjust the reloc address to that in the output section. */
+ reloc_entry->address += input_section->output_offset;
return bfd_reloc_ok;
}
@@ -902,6 +904,11 @@ h8300_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
bfd_put_8 (abfd, tmp, data + dst_address - 2);
break;
+ case 0x5c:
+ /* bsr:16 -> bsr:8 */
+ bfd_put_8 (abfd, 0x55, data + dst_address - 2);
+ break;
+
default:
abort ();
}